|
Текст подпрограммы и версий zp39r_c.zip zp39d_c.zip |
Тексты тестовых примеров tzp39r_c.zip tzp39d_c.zip |
Деление двух полиномов с вещественными коэффициентами.
zp39r_c вычисляет М первых коэффициентов полинома
C(X) = XK*( C(1) + C(2)*X + ... + C(M)*X(M - 1) + ... ) ,
такого, что С (Х) = А (Х) / В (Х), где А (Х) и В (Х) - заданные полиномы степени NР и L соответственно.
A(X) = A(1) + A(2)*X + A(3)*X2 + ... + A(NP + 1)*XNP ,
B(X) = B(1) + B(2)*X + B(3)*X2 + ... + B(L + 1)*XL ,
у которых коэффициенты А ( I ), I = 1, 2, 3, ..., NР + 1 и В ( I ), I = 1, 2, 3, ..., L + 1 являются вещественными. Здесь К = R - S, где R и S представляют собой число первых коэффициентов полиномов А (Х) и В (Х), равных 0.
int zp39r_c (integer *np, real *a, integer *l, real *b,
integer *m, real *c, integer *k)
Параметры
| np - | заданная степень полинома A (x) (тип: целый); |
| a - | вещественный вектор длины np + 1, содержащий коэффициенты заданного полинома A (x) в порядке возрастания степеней; |
| l - | заданная степень полинома B (x) (тип: целый); |
| b - | вещественный вектор длины l + 1, содержащий коэффициенты заданного полинома B (x) в порядке возрастания степеней; |
| m - | заданное число искомых коэффициентов полинома C (x) (тип: целый); |
| c - | вещественный вектор длины m, содержащий вычисленные коэффициенты полинома C (x) в порядке возрастания степеней; |
| k - | целая переменная, значение которой в результате работы подпрограммы полагается равным R - S. |
Версии
| zp39d_c - | деление двух полиномов с вещественными коэффициентами с повышенной точностью. При этом векторы a, b и c должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Initialized data */
static float a[3] = { 0.f,1.f,2.f };
static float b[5] = { 0.f,0.f,1.f,2.f,3.f };
/* Local variables */
extern int zp39r_c(int *, float *, int *, float *, int *, float *, int *);
static float c__[6];
static int k, l, m, np, i__;
np = 2;
l = 4;
m = 6;
zp39r_c(&np, a, &l, b, &m, c__, &k);
printf("\n %5i %5i %5i %5i \n", np, m, l, k);
printf("\n %15.7e %15.7e %15.7e \n", a[0], a[1], a[2]);
for (i__ = 1; i__ <= 5; ++i__) {
printf("\n %15.7e \n", b[i__ - 1]);
}
for (i__ = 1; i__ <= 6; ++i__) {
printf("\n %15.7e \n", c__[i__ - 1]);
}
return 0;
} /* main */
Результаты:
c__(1) = 1. , c__(2) = 0. , c__(3) = - 3. , c__(4) = 6. ,
c__(5) = - 3., c__(6) = - 12. ,
k = - 1