Текст подпрограммы и версий zp17r_c.zip zp17d_c.zip |
Тексты тестовых примеров tzp17r_c.zip tzp17d_c.zip |
Вычисление корней уравнения четвертой степени с вещественными коэффициентами.
Подпрограмма zp17r_c вычисляет корни уравнения четвертой степени
A(1)*X4 + A(2)*X3 + A(3)*X2 + A(4)*X + A(5) = 0.0 ,
в котором коэффициенты А ( I ), I = 1, 2, 3, 4, 5 являются вещественными.
int zp17r_c (real *a, integer *nreal, real *root, integer *ierr)
Параметры
a - | вещественный вектор длины 5, содержащий коэффициенты исходного уравнения; |
nreal - | целая переменная, значение которой в результате работы подпрограммы полагается равным числу вещественных корней уравнения; |
root - | вещественный вектор длины 4, содержащий вычисленные корни; |
ierr - | целая переменная, значение которой в результате работы подпрограммы полагается равным 65, если коэффициент A (1) при старшей степени равен 0. |
Версии
zp17d_c - | вычисление корней уравнения четвертой степени с вещественными коэффициентами с повышенной точностью. При этом векторы a и root должны иметь тип double. |
Вызываемые подпрограммы
zp16r_c - | вычисление корней уравнения третьей степени с вещественными коэффициентами. Используется в подпрограмме zp17r_c. |
utzp10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы zp17r_c. |
zp16d_c - | вычисление корней уравнения третьей степени с вещественными коэффициентами с повышенной точностью. Используется в подпрограмме zp17d_c. |
utzp11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы zp17d_c. |
Замечания по использованию
Если nreal = 0, то вычисленные корни имеют вид root (1) ± root (2) i и root (3) ± root (4) i, при этом root (2) > 0. и root (4) > 0. Если nreal = 2, то root (1) ≤ root (2), а вторая пара корней имеет вид root (3) ± root (4) i, при этом root (4) > 0. Если nreal = 4, то root (1) ≤ root (2) ≤ root (3) ≤ root (4). |
int main(void) { /* Initialized data */ static float a[5] = { 1.f,-10.f,35.f,-50.f,24.f }; /* Local variables */ static int ierr; static float root[4]; extern int zp17r_c(float *, int *, float *, int *); static int nreal, i__; zp17r_c(a, &nreal, root, &ierr); for (i__ = 1; i__ <= 5; ++i__) { printf("\n %16.7e \n", a[i__ - 1]); } printf("\n %5i \n", nreal); printf("\n %16.7e %16.7e %16.7e %16.7e \n", root[0], root[1], root[2], root[3]); printf("\n %5i \n", ierr); return 0; } /* main */ Результаты: root(1) = 1. , root(2) = 2. , root(3) = 3. , root(4) = 4. , nreal = 4 , ierr = 0