|
Текст подпрограммы и версий iah4r_p.zip , iah4e_p.zip |
Тексты тестовых примеров tiah4r_p.zip , tiah4e_p.zip |
Вычисление коэффициентов разложения интеграла от заданной функции в ряд по многочленам Чебышева.
Пусть на отрезке [A, B] задана функция f (x). Тогда подпрограмма IAH4R вычисляет коэффициенты 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 затем вычисляются коэффициенты CINTj разложения интеграла от функции f (x) в ряд по многочленам Чебышева:
N
F(x) = ∫ f (t) dt ≈ [ ∑ CINTj Tj-1 (y) ] - CINT1 / 2
j=1
по формулам
CINTj = [ (cj-1 - cj+1) / (2(j-1)) ] * (B-A)/2 , j = 2, 3,..., N-1
CINTN = cN-1 / (2(N-1)) * (B-A)/2
Постоянной интегрирования соответствует коэффициент CINT1 , значение которого выбирается в подпрограмме таким образом, чтобы значение F (A) было равно нулю.
Н.С.Бахвалов. Численные методы. Изд - во "Наука", 1973.
procedure IAH4R(A :Real; B :Real; var C :Array of Real;
N :Integer; FUNC :Func_F1;
var CINT :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 - значение аргумента (тип: вещественный); |
| CINT - | вещественный вектор длины N, содержащий вычисленные значения коэффициентов разложения интеграла от f (x) в ряд по многочленам Чебышева; |
| RF - | вещественный вектор длины N, используемый в подпрограмме в качестве рабочего. |
Версии
| IAH4E - | вычисление коэффициентов разложения интеграла от заданной функции в ряд по многочленам Чебышева в режиме расширенной (Extended) точности; при этом параметры A, B, C, CINT и RF должны иметь тип Extended, и функция FUNC должна иметь тип Extended. |
Вызываемые подпрограммы
|
IAH1R - IAH1E | вычисление коэффициентов ряда по многочленам Чебышева, аппроксимирующего заданную функцию, в режиме одинарной и расширенной (Extended) точности; используются в подпрограммах IAH4R и IAH4E соответственно. |
Замечания по использованию: нет
Unit tiah4r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, FIAH4R_p, IAH4R_p;
function tiah4r: String;
implementation
function tiah4r: String;
var
N,_i :Integer;
A,B :Real;
C :Array [0..9] of Real;
CINT :Array [0..9] of Real;
RF :Array [0..9] of Real;
begin
Result := ''; { результат функции }
N := 10;
A := 0.0;
B := 1.0;
IAH4R(A,B,C,N,FIAH4R,CINT,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 ',[CINT[_i]]);
if ( ((_i+1) mod 3)=0 )
then Result := Result + #$0D#$0A;
end;
Result := Result + #$0D#$0A;
UtRes('tiah4r',Result); { вывод результатов в файл tiah4r.res }
exit;
end;
end.
Unit fiah4r_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc;
function fiah4r(X :Real): Real;
implementation
function fiah4r(X :Real): Real;
begin
{ Result - прототип имени функции FUNC на FORTRANe }
Result := Cos(X);
exit;
end;
end.
Результаты:
CINT = ( 0.899853, 0.425221, -0.293447E-01,
-0.449977E-02, 0.154123E-03,
0.141370E-04, -0.321255E-06, -0.218021E-07,
0.540888E-09, 0.172063E-08 )