- •Глава 1. Численные методы алгебры §1. Элементарная алгебра
- •1.1. Комплексная арифметика. Извлечение корней n -й степени из комплексного числа
- •1.2. Комбинаторика. Бином ньютона и родственные формулы
- •1.3. Вычисление символа якоби
- •1.4. Разложение многочлена на множители
- •1.5. Вычисление корней полиномов с целыми коэффициентами в форме простых дробей
Глава 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) практически не дает.