Текст подпрограммы и версий ( Фортран )
ii20r.zip
Тексты тестовых примеров ( Фортран )
tii20r.zip
Текст подпрограммы и версий ( Си )
ii20r_c.zip
Тексты тестовых примеров ( Си )
tii20r_c.zip
Текст подпрограммы и версий ( Паскаль )
ii20r_p.zip
Тексты тестовых примеров ( Паскаль )
tii20r_p.zip

Подпрограмма:  II20R

Назначение

Дробно - рациональная интерполяция функции, заданной на конечном интервале.

Математическое описание

Пусть на интервале  [u, v] задана функция  f (x). Вычисляется дробно - рациональная функция вида

                  p+1                                     q+1
   R (x) = (   ∑   A k * Tk - 1 ( z ) )  /  (   ∑   B k * Tk - 1 ( z ) )  ≡
                  k = 1                                    k = 1
                    p+1                          q+1
           ≡   (   ∑   C k x k - 1 )  /  (   ∑   D k x k - 1 ) ,
                   k = 1                          k = 1 

где  z = ( 2x - u - v ) / ( v - u ) для  x  [u , v],  Tk ( z ) - полином Чебышева 1 - го рода степени  k,  B1 = D1 = 1,  p, q - заданные натуральные числа, удовлетворяющая условиям интерполяции:

           R ( x j ) = f ( x j ) 

в узлах  x j = 0.5 * ( u + v - ( v - u ) cos y j ), где  y j = ( j - 0.5 ) * π / ( p + q + 1 ),  j = 1, 2, ..., p + q + 1.

Для найденного  R (x) в узлах сетки  x k = 0.5 * ( u + v + ( v - u ) cos f k ),   f k = ( k - 1 ) * π / ( p + q + 1 ),  k = 1, 2, ..., p + q + 2, вычисляются характеристики точности интерполяции

          E1 = max k | Δ f k | ,           E2 = max k | Δ k / f k | ,
     EPS1 = E1 / min k | Δ k |  ,   EPS2 = E2 / min k | Δ k |  ,
 где
   f k = f ( x k ) ,    Δ k = f ( x k ) - R ( x k ) . 

Curtis A., Osborne M.R. The construction of minimax rational approximations to functions, Computer J., 1966, v.9, N 3, 286 - 293.

Использование

    SUBROUTINE  I I20R ( IP, IQ, U, V, FUNCT, A, B, AL, BE, RAB,
                                           RAB1, RAB2, RAB3, RAB4, IERR) 

Параметры

IP, IQ - заданные степени числителя  p и знаменателя  q,  IP ≥ 0,  IQ ≥ 0 (тип: целый);
U, V - заданные нижняя и верхняя границы интервала интерполяции (тип: вещественный);
FUNCT - имя вещественной подпрограммы - функции вычисления значений  f (x);
A - вещественный вектоp длины  IP + 1 значений  a k = A[K];
B - вещественный вектоp длины  IQ + 1 значений  b k = B[K];
AL - вещественный вектоp длины  IP + 1 значений  c k = AL[K];
BE - вещественный вектоp длины  IQ + 1 значений  d k = BE[K];
RAB - вещественный вектоp длины  IQ, используемый в подпрограмме как рабочий;
RAB1 - вещественный двумерный массив размера  3 * (2 ( IP + IQ + 1) + 1), используемый в подпрограмме как pабочий;
RAB2 - вещественный двумерный массив размера  6 * ( IP + IQ + 2), используемый как рабочий; после окончания работы подпрограммы в нем запоминаются хаpактеристики интерполяции  E1 = RAB2 (1, 1),  E2 = RAB2 (2, 1),  EPS1 = RAB2 (3, 1),  EPS2 = RAB2 (4, 1);
RAB3 - вещественный вектоp длины  IP + 1, используемый в подпрограмме как рабочий;
RAB4 - вещественный двумерный массив размера  IQ * IQ, используемый в подпрограмме как pабочий;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=65 - когда вычисленный знаменатель искомого приближения имеет корень в интервале  [u, v];
IERR=66 - когда матрица для определения коэффициентов приближения вырождена.

Версии: нет

Вызываемые подпрограммы

UTI I10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы I I20R.

Замечания по использованию: нет

Пример использования

       DIMENSION  A(3), B(3), AL(3), BE(3)
       DIMENSION  RAB(2), RAB1(3, 11), RAB2(6, 6), RAB3(3), RAB4(2, 2)
       EXTERNAL  FUNCT
       IP = 2
       IQ = 2
       U = - 1.
       V = 1.
       CALL  II20R (IP, IQ, U, V, FUNCT, A, B, AL, BE, RAB, RAB1, RAB2,
      *                       RAB3, RAB4, IERR)
       .
       .
       .
       FUNCTION  FUNCT (X)
       FUNCT = EXP(X)
       RETURN
       END

Результаты:

       A   =  (1.,   .480197,   .0392021) ;
       B   =  (1.,  -.480197,   .0392021) ;

       AL  =  (1.,   .499789,   .0816032) ;
       BE  =  (1.,  -.499789,   .0816032) ;

       IERR  =  0

       RAB2 (1, 1)  =   .00024 ;     RAB2 (2, 1)  =   .000089 ;
       RAB2 (3, 1)  =  7.3884 ;      RAB2 (4, 1)  =  1.05524