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