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