Текст подпрограммы и версий pa09r_c.zip pa09d_c.zip |
Тексты тестовых примеров tpa09r_c.zip tpa09d_c.zip |
Вычисление корней N - й степени из комплексного числа.
Подпрограмма pa09r_c вычисляет корни N - й степени (N ≥ 2) из комплексного числа y = XR + i XI по формуле
(Y)1/N = (R)1/N (cos Ak + i sin Ak) , где R = (XR2 + XI2)1/2 , Ak = θ / N + 2πk / N, k = 0, 1, ..., N-1 , θ = arctn(XI / XR)
Для экономии машинного времени, которая имеет место для N ≥ 3, значения cosAk и sinAk вычисляются при помощи рекуррентного процесса, основанного на формулах сложения углов:
cos(α + β) = cosα cosβ - sinα sinβ sin(α + β) = sinα cosβ + cosα sinβ
int pa09r_c(real *xr, real *xi, integer *n, real *yr, real *yi)
Параметры
xr, xi - | действительная и мнимая части заданного комплексного числа (тип: вещественный); |
n - | заданная степень корня (тип: целый); |
yr, yi - | вещественные одномерные массивы длины n, содержащие на выходе вещественные и мнимые части вычисленных корней соответственно, т.е. вещественная часть j - го корня содержится в yr (j), а его мнимая часть - в yi (j), j = 1, 2, ..., n . |
Версии
pa09d_c - | вычисление корней N - й степени из комплексного числа в режиме удвоенной точности; при этом параметры xr, xi, yr и yi должны иметь тип double. |
Вызываемые подпрограммы
pa02r_c - | вычисление модуля комплексного числа; используется в подпрограмме pa09r_c. |
pa02d_c - | вычисление модуля комплексного числа в режиме удвоенной точности; используется в подпрограмме pa09d_c. |
Замечания по использованию: нет
int main(void) { /* Local variables */ extern int pa09r_c(float *, float *, int *, float *, float *); static float xi, yi[3], xr, yr[3]; xr = 1.f; xi = 0.f; pa09r_c(&xr, &xi, &c__3, yr, yi); printf("\n %16.7e %16.7e %16.7e \n", yr[0], yr[1], yr[2]); printf("\n %16.7e %16.7e %16.7e \n", yi[0], yi[1], yi[2]); return 0; } /* main */ Результаты: yr = ( 1.0, -0.5, -0.5 ) xi = ( 0.0, 0.866025, -0.866026 )