|
Текст подпрограммы и версий zp55r_c.zip zp55d_c.zip |
Тексты тестовых примеров tzp55r_c.zip tzp55d_c.zip |
Вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами.
Пусть заданы два полинома с вещественными коэффициентами A (X) и B (X) степени NP и MP соответственно
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(MP + 1)*XMP
Подпрограмма zp55r_c вычисляет неполное частное Q (X) и остаток R (X) при делении полинома A (X) на B (X), т.е. такие полиномы Q (X) и R (X), что
A(X) = Q(X) B(X) + R(X)
Если MP > NP, то Q (X) ≡ 0 и R (X) ≡ A (X). Если MP ≤ NP, то полином Q (X) имеет степень NP - MP, а R (X) является полиномом степени не выше MP - 1. При этом элемент массива R (MP + 1) полагается равным нулю.
int zp55r_c (integer *np, real *a, integer *mp, real *b,
real *q, real *r)
Параметры
| np - | заданная степень полинома A (x) (тип: целый); |
| a - | вещественный вектор длины np + 1, содержащий коэффициенты полинома A (x) в порядке возрастания степеней; |
| mp - | заданная степень полинома B (x) (тип: целый); |
| b - | вещественный вектор длины mp + 1, содержащий коэффициенты полинома B (x) в порядке возрастания степеней; |
| q - | вещественный вектор длины np + 1, содержащий в первых np - mp + 1 элементах вычисленные коэффициенты неполного частного Q (x) в порядке возрастания степеней; |
| r - | вещественный вектор длины np + 1, содержащий в первых mp элементах вычисленные коэффициенты остатка R (x) в порядке возрастания степеней; элемент R (mp + 1) полагается равным нулю. |
Версии
| zp55d_c - | вычисление неполного частного и остатка при делении двух полиномов с вещественными коэффициентами в режиме удвоенной точности; при этом параметры a, b, q и r должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Initialized data */
static float a[7] = { -10.f,30.f,-50.f,40.f,-20.f,8.f,8.f };
static float b1[5] = { -8.f,6.f,-4.f,3.f,2.f };
/* Local variables */
extern int zp55r_c(int *, float *, int *, float *, float *, float *);
static float q[7], r__[7];
static int mp, np, i__;
np = 6;
mp = 4;
zp55r_c(&np, a, &mp, b1, q, r__);
for (i__ = 1; i__ <= 7; ++i__) {
printf("\n %12.3e \n", q[i__ - 1]);
}
for (i__ = 1; i__ <= 7; ++i__) {
printf("\n %12.3e \n", r__[i__ - 1]);
}
return 0;
} /* main */
Результаты:
q = ( 1.,- 2.,4. )
r__ = ( - 2., 8., - 2., 5. )
r__(5) = r(mp + 1) = 0.0