Текст подпрограммы и версий qs80r_p.zip qs80e_p.zip |
Тексты тестовых примеров tqs80r_p.zip tqs80e_p.zip |
Вычисление узлов и весов Гаусса - Лежандра.
QS80R вычисляет по методу Ньютона корни X1,X2, ..., Хn полинома Лежандра
Ln(x) = 1/(2nn) dn(x2-1)n / dxn
и соответствующие им весовые множители C1, C2, ... ,Cn для квадратурной формулы Гаусса
1 ∫ f(x) dx ≈ ( c1f(x1) + c2f(x2) + ... + cnf(xn) ) . -1
Для n допускаются значения 2 ≤ n ≤ 128.
Я.М.Жилейкин, А.Г.Симакин. Набор стандартных программ приближенного вычисления многократных интегралов с помощью метода Гаусса. Сб. "Численный анализ на ФОРТРАНе", вып. 19, Изд-во МГУ, 1977.
function QS80R(NN :Integer; var X :Array of Real; var A :Array of Real): String;
Параметры
N - | заданное число узлов и весов Гаусса - Лежандра (тип: целый); |
X - | вещественный вектоp длины entier ( (N + 1)/2 ), содержащий вычисленные значения узлов; |
C - | вещественный вектоp длины entier ( (N + 1)/2 ), содержащий вычисленные значения весов. |
Версии
QS80E - | вычисление с расширенной (Extended) точностью узлов и весов Гаусса - Лежандра. |
Вызываемые подпрограммы: нет
Замечания по использованию
Tак как корни полиномов Лежандра L (X) симметричны относительно нуля, а веса, соответствующие симметричным корням, равны, то в вектоp Х засылаются только неотрицательные корни в порядке их убывания, а в вектоp C - соответствующие им веса. В подпрограмме QS80E параметры X, C имеют тип Extended. |
Unit TQS80R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, QS80R_p; function TQS80R: String; implementation function TQS80R: String; var N,_i :Integer; X :Array [0..2] of Real; С :Array [0..2] of Real; begin Result := ''; { результат функции } N := 5; QS80R(N,X,C); Result := Result + #$0D#$0A; for _i:=0 to 2 do begin Result := Result + Format('%16.7f ',[X[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; Result := Result + #$0D#$0A; for _i:=0 to 2 do begin Result := Result + Format('%16.7f ',[C[_i]]); if ( ((_i+1) mod 1)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TQS80R',Result); { вывод результатов в файл TQS80R.res } exit; end; end. Результаты: X (1) = 0.9061798459 X (2) = 0.5384693101 X (3) = 0.0000000000 C (1) = 0.2369268850 C (2) = 0.4786286705 C (3) = 0.5888888888