|
Текст подпрограммы и версий 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 )