Глава 1. Численные методы алгебры §1. Элементарная алгебра

В главе представлены ал­горитмы элементарной ал­геб­ры, кото­рые обыч­­но не включаются в биб­ли­о­­­те­ки ма­темати­ческого о­бес­печения ЭВМ, хотя до­­­­вольно час­то ока­зы­ва­ют­­­ся необходимыми при ре­ше­нии со­от­ветс­т­ву­­ю­щих задач.

1.1. Комплексная арифметика. Извлечение корней n -й степени из комплексного числа

При извлечении корней n-й степени из ком­плек­с­­но­­­го чис­ла z = x + iy = rei j (i2 = -1), гдеx = Re z- дей­ст­ви­тель­ная часть;y = Imz - мнимая часть;y= |z| = - мо­дуль;j = arg z -глав­ное зна­­­чение ар­гу­мен­та комплексного числа, ис­поль­­­зу­ется фор­му­ла Му­ав­ра:

При этом алгоритм пред­по­ла­га­ет вычислениеn кор­ней уравненияzn = x + iy.Область при­ме­не­ния его оче­вид­­на - это задачи, связанные с ком­п­лек­сной арифмети­кой.

Формальные параметры процедуры.Входные:x, y(типreal) - действительная и мни­мая части ком­плек­с­но­го числа;n(типinteger) - по­ка­­затель сте­пени.Вы­ход­ные: од­но­мер­ные массивыRe[1:n],Im[1:n], в ко­то­рых запо­ми­на­­ют­ся соответственно действительные и мни­мые час­ти комплексных корней.

Алгоритм реализован в следующей про­це­ду­ре:

Procedure Croot (x,y: real; N: integer;

var re, im : mas1);

const pi = 3.14159265;

var a, m, r, t : real; i : integer;

Begin m:=1/n;

r := EXP((m/2) *ln (x*x+y*y));

if x=0 then t := sign(y)*pi/2;

if x>0 then t := arctan(y/x) else

t := arctan(y/x)+pi;

t := m*t; a:=2*pi*m;

for i:=1 to n do

begin

re[i]:=s*cos(t);

im[i]:=s*sin(t);

t:=t+a;

end;

End { *** Croot *** };

Точность вычислений по данной подпрограмме оп­ре­­­де­ля­ется точностью пред­став­ле­ния дейст­ви­тель­ных чи­­сел в ис­пользуемой ЭВМ и точ­нос­тью вы­чис­ле­ния фун­­кций sin и cos в со­от­вет­ству­ющ­их биб­ли­о­те­ках под­про­­грамм.

Подпрограмма тестировалась на примерах из­вле­­че­­ния кор­ней 3-й и 5-й степени из комплекс­ных чи­­­сел z1= 8 +i6 иz2= - 8 +i6 (выбор чисел оп­ре­­­де­лялся тре­бо­ва­ни­ем срав­ни­мости результа­тов с вы­­чис­лениями по ана­ло­­гичной про­це­дуре, опи­сан­ной Аге­евым и др. (1976) ). Ре­зультаты рас­че­­­тов пред­ставлены в табл. 1.1.

Дан­ные результаты совпадают с ре­зуль­та­та­ми ра­­бот Аге­ева и руч­но­го счета с точ­нос­тью 10 - 6.

Замечание. В работе Нестора [Nestor, 1961] в целях эко­но­­мии ма­шинного времени приn > 3 предлагает­ся вмес­то об­ра­­щения к стандартным функциям sin и cos в цикле ис­поль­­зовать рекуррентные фор­му­лы (1.1):

(1.1)

что, однако, требует некоторых дополнительных за­трат памяти ЭВМ [Агеев и др., 1976]. По оцен­кам специалистов [Nestor, 1961] такая процедура ока­зы­ва­ет­ся весь­ма эф­фек­тивной в задачах, связанных с раз­ло­же­нием в ряд Фурье, как это было предложено в работе [Goerzel, 1961].

Таблица 1.1

формула расчета

xn = 8 + i 6

xn = — 8 + i 6

n = 3

x = 2.1050612 + i 0.4585914

x = — 1.4496824 + i 1.5937408

x = — 0.6553788 — i 2.0523322

x = 1.4496824 + i 1.5937408

x = — 2.1050612 + i 0.4585914

x = 0.6553788 — i 2.0523322

n = 5

x = 1.5717854 + i 0.2034135

x = 0.2922507 + i 1.5577150

x = — 1.3911645 + i 0.7593073

x = — 1.1520377 — i 1.0884372

x = 0.6791661 — i 1.4319985

x = 1.3911646 + i 0.7593073

x = — 0.2922507 + i 1.5577150

x = — 1.5717854 + i 0.2034135

x = — 0.6791661 — i 1.4319985

x = 1.1520377 — i 1.0884372

Од­­на­ко наши расчеты, вы­пол­ненные на ком­пь­ю­те­ре РC/AT-286 с частотой 12 МГц, показали, что сколь­ко-ни­будь зна­чи­тель­но­го выигрыша во времени ис­поль­зование ре­кур­рен­т­ныхсо­от­но­шений (1.1) пра­к­­тически не дает.

Соседние файлы в папке GLAVA1_1