Текст подпрограммы и версий ( Фортран )
ia80r.zip
Тексты тестовых примеров ( Фортран )
tia80r.zip
Текст подпрограммы и версий ( Си )
ia80r_c.zip
Тексты тестовых примеров ( Си )
tia80r_c.zip
Текст подпрограммы и версий ( Паскаль )
ia80r_p.zip
Тексты тестовых примеров ( Паскаль )
tia80r_p.zip

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

Назначение

Рациональная Чебышевская аппроксимация вещественной функции на конечном интервале.

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

IA80R вычисляет лучшую в смысле Чебышева рациональную аппроксимацию с некоторым весом вещественной непрерывной на отрезке  [a, b] функции  F (X) :

 R*[PHI(X)]  =  ( P1 + P2* PHI(X) + ... + PN+1* PHI(X)N ) /
                       / ( Q1 + Q2* PHI(X) + ... + QM+1* PHI(X)M ) , 

причем  R* [ PHI (X)] обладает тем свойством, что на ней достигается минимум

     max  | R[PHI(X)] - F(X) |  /  | G(X) | .
    [A, B] 

Минимизация проводится на классе рациональных функций  R [ РНI (Х)], имеющих степенью числителя  N, а степенью знаменателя  M.

W.J.Cody, W.Fraser, J.F.Hart, Rational Chebyshev Approximation Using Linear Equations, Numerishe Mathematik, 12 (4), 1968.

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

    SUBROUTINE  IA80R (F, PHI, G, A, B, EPS, N, M, P, Q, RAB, IERR) 

Параметры

F - имя вещественной подпрограммы - функции вычисления функции  F (X);
PHI - имя вещественной подпрограммы - функции вычисления функции  PHI (X);
G - имя вещественной подпрограммы - функции вычисления функции  G (X);
A, B - заданные нижняя и верхняя границы отрезка, на котоpом производится аппроксимация (тип: вещественный);
EPS - заданная точность вычисления аппроксимации (тип: вещественный);
N, M - заданные степень числителя и знаменателя (тип: целый);
P - вещественный вектоp длины  N + 1, в который помещаются коэффициенты числителя;
Q - вещественный вектоp длины  M + 1, в который помещаются коэффициенты знаменателя;
RAB - вещественный вектоp длины  (N + M + 8) * (N + M + 2) , используемый в подпрограмме как рабочий; в  RAB (1) помещается вычисленное значение наилучшего приближения;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
IERR=65 - когда заданная точность не может быть достигнута;
IERR=66 - когда алгоритм не сходится; возможно, что знаменатель имеет корень на заданном отрезке;
IERR=67 - когда сходимость не может быть достигнута в пределах 20 итераций;
IERR=68 - когда алгоритм не сходится из - за сингулярности матрицы системы уравнений для определения  P и  Q;
IERR=69 - когда получена хорошая аппроксимация, но не обязательно наилучшая в смысле Чебышева.

Версии: нет

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

UTIA10 - подпрограмма выдачи диагностических сообщений при работе подпрограммы IA80R.

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

 

Если  IERR = 65, то числитель и знаменатель имеют общие множители. B этом случае значения  N и  M следует уменьшить на 1.

Bо всех других случаях, когда  IERR ≠ 0, следует попытаться или уменьшить степени числителя и знаменателя, или изменить пределы отрезка, или уменьшить точность вычислений.

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

Пусть требуется аппроксимировать функцию  √ x  на  [0.5, 2.]  следующим образом:

    x / 4.  +  ( P1 + P2* x ) / ( Q1 + Q2* x ) .

       DIMENSION  P(2), Q(2), RAB(40)
       EXTERNAL  F, PHI, G
       A = 0.5
       B = 2.
       EPS = 0.01
       N = 1
       M = 1
       CALL  IA80R (F, PHI, G, A, B, EPS, N, M, P, Q, RAB, IERR)
        .
        .
        .
       END

       FUNCTION  F (X)
       F = SQRT(X) - X / 4.0
       RETURN
       END

       FUNCTION  PHI (X)
       PHI = X
       RETURN
       END

       FUNCTION  G (X)
       G = SQRT(X)
       RETURN
       END

Результаты:

       RAB (1)  =  -0.000319 ;    IERR  =  0 ;

       P (1)  =  0.232604 ,    P (2)  =  1.32410 ;

       Q (1)  =  1. ,    Q (2)  =  1.074789