Текст подпрограммы и версий 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 .