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