|
Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/zp_htm_c/zp12c_c.htm
Дата изменения: Wed Mar 18 16:37:14 2015 Дата индексирования: Sun Apr 10 01:52:47 2016 Кодировка: Windows-1251 |
|
Текст подпрограммы и версий zp12c_c.zip |
Тексты тестовых примеров tzp12c_c.zip |
Вычисление корней полинома с комплексными коэффициентами методом наискорейшего спуска.
zp12c_c вычисляет NР комплексных корней полинома
A(1) + A(2)*X + ... + A(NP)*X(NP - 1) + A(NP + 1)*X(NP) ,
с комплексными коэффициентами А ( I ), I = 1, 2, ..., NР + 1.
Реализуется модифицированный метод наискорейшего спуска.
Воеводин В.В., Павленко О.А. Модифицированный метод наискорейшего спуска для определения всех корней полинома, в Сб. "Численный анализ на Фортране", вып.27, изд - во МГУ, 1980.
int zp12c_c (integer *np, complex *a, complex *d, complex *root,
integer *ierr)
Параметры
| np - | заданная степень полинома (тип: целый); |
| a - | комплексный вектор длины np + 1, содержащий коэффициенты исходного полинома в порядке возрастания степеней; |
| d - | комплексный вектор длины np + 1, используемый в подпрограмме как рабочий; |
| root - | комплексный вектор длины np + 1, на выходе содержащий в первых np компонентах вычисленные корни; |
| ierr - | целая переменная, служащая для сообщений об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
| ierr= 1 - | когда один или несколько коэффициентов при старших степенях равны (0., 0.). Соответствующее число корней в конце вектора root полагаются равными (3.4e38, 0.); |
| ierr=68 - | когда заданная степень полинома меньше 1. |
Версии: нет
Вызываемые подпрограммы
| gsu2r_c - | счетчик псевдослучайных чисел. |
| utzp12_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы zp12c_c. |
Замечания по использованию
| Используются служебные подпрограммы: zp12c1_c, zp12c2_c, zp12c3_c, zp12c4_c, zp12c5_c. |
int main(void)
{
/* System generated locals */
int i__1;
/* Local variables */
extern int zp12c_c(int *, complex *, complex *, complex *, int *);
static int ierr;
static complex root[4], a[4], d__[4];
static int i__, np;
a[0].r = 10.f, a[0].i = 0.f;
a[1].r = -8.f, a[1].i = 12.f;
a[2].r = -3.f, a[2].i = -6.f;
a[3].r = 1.f, a[3].i = 0.f;
np = 3;
zp12c_c(&np, a, d__, root, &ierr);
printf("\n %5i \n", ierr);
i__1 = np;
for (i__ = 1; i__ <= i__1; ++i__) {
printf("\n %18.11e %18.11e \n", root[i__ - 1].r, root[i__ - 1].i);
}
return 0;
} /* main */
Результаты:
ierr = 0
root(1) = (1., 2.)
root(2) = (1., 1.)
root(3) = (1., 3.)