|
Текст подпрограммы и версий qsjac_p.zip |
Тексты тестовых примеров tqsjac_p.zip |
Вычисление узлов и весов квадратурной формулы Гаусса - Якоби.
Подпрограмма QSJАС вычисляет узлы xi и веса Wi квадратурной формулы Гаусса - Якоби
b
∫ (1 - x)α (1 + x)β f(x) dx ≈
a
N
≈ ∑ Wi f(xi ) по методу Ньютона .
i =1
procedure QSJAC(var X :Array of Real; var W :Array of Real;
ALF :Real; BTA :Real; N :Integer;
A :Array of Real; B :Array of Real; C :Array of Real);
Параметры
| X - | вещественный одномерный массив размерности 512 вычисленных узлов формулы Гаусса - Якоби; |
| W - | вещественный одномерный массив размерности 512 вычисленных весов формулы Гаусса - Якоби; |
| ALF - BTA | заданные параметры α и β , соответственно, в весовой функции (1 - x)α (1 + x) β (тип: вещественный); |
| N - | заданное число узлов (и весов) интегрирования в формуле Гаусса - Якоби (2 ≤ N ≤ 512, тип: целый); |
| A, B, С - | вещественные одномерные массивы размерности 512, заданных коэффициентов рекуррентного соотношения для полиномов Якоби. |
Версии: нет
Вызываемые подпрограммы
| QSJAC1 - | служебная подпрограмма. |
| QSJAC2 - | вещественная подпрограмма - функция, вычисляющая значение логарифма от гамма - функции ln ( Г (Х) ). |
Замечания по использованию
|
Подпрограмма QSJAC вычисляет узлы и веса квадратурной формулы Гаусса - Якоби N
∑ Wi f(xi )
i =1
с абсолютной погрешностью 10 - 10 и для значений 2 ≤ N ≤ 512 . Перед обращением к подпрограмме QSJAC должны быть вычислены коэффициенты Anα , β, Bnα , β, Cnα , β рекуррентного соотношения для полиномов Якоби Jnα , β (x) = ( Anα , β x + Bnα , β ) Jn -1α , β (x) - Cnα , β Jn -2α , β (x)
по формулам:
( α + β + 2n ) ( α + β + 2n - 1 )
Anα , β = ------------------------------------------- ,
2n ( α + β + n )
( α + β ) ( α - β ) ( α + β + 2n - 1 )
Bnα , β = ------------------------------------------------ ,
2n ( α + β + n ) ( α + β + 2n - 2 )
( α + β + 2n ) ( α + 2n - 1 ) ( β + 2n - 1 )
Cnα , β = ------------------------------------------------------ .
n ( α + β + n ) ( α + β + 2n - 2 )
|
Unit TQSJAC_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, QSJAC_p;
function TQSJAC: String;
implementation
function TQSJAC: String;
var
NN,N,K :Integer;
ALF,BTA,SAB,DBA,P,FN,FN1,Q1,Q2,Q3,Q4,Q5 :Real;
X :Array [0..511] of Real;
W :Array [0..511] of Real;
A :Array [0..511] of Real;
B :Array [0..511] of Real;
C :Array [0..511] of Real;
label
_1,_2;
begin
Result := ''; { результат функции }
ALF := 1.0;
ВТА := 1.0;
NN := 8;
SАВ := ALF+BTA;
DВА := ALF-BTA;
P := SAB*DBA;
A[0] := 0.0;
B[0] := 0.0;
C[0] := 0.0;
for N:=2 to 512 do
begin
FN := N;
FN1 := N-1;
Q1 := 2.0*FN+SAB;
Q2 := Q1-1.0;
Q3 := SAB+FN;
Q4 := FN*Q3;
Q5 := Q4*(Q1-2.0);
A[N-1] := Q1*Q2/(2.0*Q4);
B[N-1] := P*Q2/(2.0*Q5);
C[N-1] := Q1*(ALF+FN1)*(BTA+FN1)/Q5;
_1:
end;
QSJAC(X,W,ALF,BTA,NN,A,B,C);
for K:=1 to NN do
begin
_2:
Result := Result + Format('%20.16f %20.16f ',
[X[K-1],W[K-1]]) + #$0D#$0A;
end;
UtRes('TQSJAC',Result); { вывод результатов в файл TQSJAC.res }
exit;
end;
end.
Результаты:
x1 = 0.9195339081 , w1 = 0.0205900956 ,
x2 = 0.7387738651 , w2 = 0.1021477023 ,
x3 = 0.4779249498 , w3 = 0.2253365549 ,
x4 = 0.1652789576 , w4 = 0.3185923136 ,
x5 = - 0.1652789576 , w5 = 0.3185923136 ,
x6 = - 0.4779249498 , w6 = 0.2253365549 ,
x7 = - 0.7387738651 , w7 = 0.1021477023 ,
x8 = - 0.9195339081 , w8 = 0.0205900956 .