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