Текст подпрограммы и версий iah5r_p.zip , iah5e_p.zip |
Тексты тестовых примеров tiah5r_p.zip , tiah5e_p.zip |
Вычисление коэффициентов разложения производной от заданной функции в ряд по многочленам Чебышева.
Пусть на отрезке [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 )