Текст подпрограммы и версий
iah5r_p.zip , iah5e_p.zip
Тексты тестовых примеров
tiah5r_p.zip , tiah5e_p.zip

Подпрограмма:  IAH5R (модуль IAH5R_p)

Назначение

Вычисление коэффициентов разложения производной от заданной функции в ряд по многочленам Чебышева.

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

Пусть на отрезке [A, B] задана функция  f (x). Тогда подпрограмма IAH5R вычисляет коэффициенты  cj (j = 1, 2, ..., N) по формуле

                N
cj = 2/N  ∑  f ( (B-A)/2  cos (π (k-1/2) / N) + (B+A)/2 )  cos (π (j-1) (k-1/2) / N)
               k=1 

в разложении функции  f (x) в ряд по многочленам Чебышева:

                              N
              f(x)  ≈  [  ∑   cj Tj-1(y) ]  -  c1 / 2 ,
                             j=1
 где    y  ≡  ( x - (B + A) / 2 ) / ( (B - A) / 2 ) . 

По вычисленным коэффициентам  cj затем вычисляются коэффициенты CDERj разложения производной от функции  f (x) в ряд по многочленам Чебышева на основе формул:

       CDER(N)  =  0
                                
       CDER(N-1)  =  2 (N-1) cN * 2 / (B-A)
                                         
       CDER j-1  =  ( CDER j+1 + 2 (j-1) cj ) *  2 / (B-A)  ,    j = N-1, N-2, ... , 2 

Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.

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

procedure IAH5R(A :Real; B :Real; var C :Array of Real;
                N :Integer; FUNC :Func_F1;
                var CDER :Array of Real; var RF :Array of Real);

Параметры

A, B - нижняя и верхняя границы отрезка, на котором задана функция  f (x) (тип: вещественный);
C - вещественный вектор длины N, содержащий вычисленные значения коэффициентов разложения функции  f (x) в ряд по многочленам Чебышева;
N - заданное количество членов ряда (тип: целый);
FUNC - имя вещественной подпрограммы-функции, вычисляющей значения функции  f (x) в любой точке отрезка [A, B]; ее первый оператор должен иметь вид:
FUNC (X :Real): Real;
где X - значение аргумента (тип: вещественный);
CDER - вещественный вектор длины N, содержащий вычисленные значения коэффициентов разложения производной от функции  f (x) в ряд по многочленам Чебышева;
RF - вещественный вектор длины N, используемый в подпрограмме в качестве рабочего.

Версии

IAH5E - вычисление коэффициентов разложения производной от заданной функции в ряд по многочленам Чебышева в режиме расширенной (Extended) точности; при этом параметры A, B, C, CDER и RF должны иметь тип Extended, и функция FUNC тоже должна иметь тип Extended.

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

       IAH1R -
       IAH1E  
вычисление коэффициентов ряда по многочленам Чебышева, аппроксимирующего заданную функцию, в режиме одинарной и расширенной (Extended) точности; используются в подпрограммах IAH5R и IAH5E соответственно.

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

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

Unit tiah5r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FIAH5R_p, IAH5R_p;

function tiah5r: String;

implementation

function tiah5r: String;
var
N,_i :Integer;
A,B :Real;
C :Array [0..9] of Real;
CDER :Array [0..9] of Real;
RF :Array [0..9] of Real;
begin
for _i:=0 to 9 do  //начальное обнуление массивов
 begin
  C[_i] := 0.0;
  CDER[_i] := 0.0;
 end;
Result := '';  { результат функции }
N := 10;
A := 0.0;
B := 1.0;
IAH5R(A,B,C,N,FIAH5R,CDER,RF);
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%20.16f ',[C[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 9 do
 begin
  Result := Result + Format('%20.16f ',[CDER[_i]]);
  if ( ((_i+1) mod 3)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('tiah5r',Result);  { вывод результатов в файл tiah5r.res }
exit;
end;

end.

Unit fiah5r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;

function fiah5r(X :Real): Real;

implementation

function fiah5r(X :Real): Real;
begin
{ Result - прототип имени функции FUNC на FORTRANe }
Result := Sin(X);
exit;
end;

end.


Результаты:

       CDER  =  ( 0.164717E+01, -0.232300,         -0.537147E-01,
                          0.245783E-02,   0.282683E-03, -0.798864E-05,
                        -0.101397E-06,    0.0,                    0.490963E-06,  0.0 )