|
Текст подпрограммы и версий ii23r_c.zip , ii23d_c.zip |
Тексты тестовых примеров tii23r_c.zip , tii23d_c.zip |
Рациональная интерполяция таблично - заданной функции с помощью непрерывных дробей.
Пусть заданы m точек x1 < x2 < x3 < ... < xm , в которых известны значения функции y = f (x) : y1, y2, y3,..., ym. Подпрограмма ii23r_c по заданным ( xi, yi ), i = 1, 2,..., m, строит интерполирующую непрерывную дробь
a1 + ( x - x1 ) / ( a2 + ( x - x2 ) / ( a3 + ... + ( x - xm-1 ) / am ) ... )
Кроме того, подпрограмма ii23r_c приводит вычисленную непрерывную дробь к рациональной функции
( b0 + b1 x + ... + bn xn ) / ( c0 + c1 x + ... + cn xn ) ,
где n ≤ m ÷ 2 . Здесь ÷ - означает целое деление.
int ii23r_c (integer *m, real *x, real *y, real *a, real *b,
real *c, real *p, real *q)
Параметры
| m - | заданное число точек xi , i = 1, 2,..., m (тип: целый); |
| x - | вещественный вектор длины m, содержащий заданные точки xi , i = 1, 2,..., m; |
| y - | вещественный вектор длины m, содержащий значения заданной функции в точках xi , i = 1, 2,..., m; |
| a - | вещественный вектор длины m, содержащий вычисленные значения коэффициентов интерполирующей непрерывной дроби; |
| b, c - | вещественные векторы длины m ÷ 2 + 1, содержащие коэффициенты полиномов соответственно в числителе и знаменателе интерполирующей рациональной функции; |
| p, q - | вещественные векторы длины m ÷ 2 + 1, используемые в подпрограмме в качестве рабочих. |
Версии
| ii23d_c - | рациональная интерполяция таблично - заданной функции с помощью непрерывных дробей в режиме удвоенной точности; при этом параметры x, y, a, b, c, p и q должны иметь тип double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void)
{
/* Local variables */
extern int ii23r_c(int *, float *, float *, float *, float *,
float *, float *, float *);
static float a[5], b[3], c__[3];
static int m;
static float p[3], q[3], x[5], y[5];
x[0] = 50.f;
x[1] = 65.f;
x[2] = 60.f;
x[3] = 95.f;
x[4] = 75.f;
y[0] = -40.f;
y[1] = 25.f;
y[2] = 10.f;
y[3] = 30.f;
y[4] = -20.f;
m = 5;
ii23r_c(&m, x, y, a, b, c__, p, q);
printf("\n %15.7e%15.7e%15.7e%15.7e%15.7e \n",
a[0], a[1], a[2], a[3], a[4]);
printf("\n %15.7e %15.7e %15.7e \n", b[0], b[1], b[2]);
printf("\n %15.7e %15.7e %15.7e \n", c__[0], c__[1], c__[2]);
return 0;
} /* main */
Результаты:
a = ( -40, 0.2307692, 162.5, -0.3901895, -68.50479 );
b = ( 236142.4, -7220.216, 53.99522 );
c__ = ( 2825.957, -111.5789, 1 )