Текст подпрограммы и версий qsj2r_p.zip |
Тексты тестовых примеров tqsj2r_p.zip |
Вычисление определенного интеграла по формуле Гаусса - Якоби с гарантированной точностью.
Подпрограмма QSJ2R вычисляет определенный интеграл B ∫ ( 1 - x )α ( 1 + x ) β f (x) dx A
с заданной абсолютной погрешностью по квадратурной формуле Гаусса - Якоби.
procedure QSJ2R(var RINT :Real; var A :Real; var B :Real; var ALF :Real; var BTA :Real; F :Func_F1; var N :Integer; EPS :Real; var IERR :Integer);
Параметры
RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
A, B - | заданные нижний и верхний пределы интегрирования, соответственно (тип: вещественный); |
ALF,BTA - | заданные параметры α и β соответственно, в весовом множителе (1 - x)α (1 + x) β (тип: вещественный); |
F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
N - | целая переменная, задающая число узлов интегрирования (2 ≤ N ≤ 512); |
EPS - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR=0 - | когда заданная точность EPS достигнута, N при этом полагается равным числу узлов интегрирования, при котором достигнута заданная точность и вычислено значение интеграла; |
IERR=1 - | когда заданная точность не может быть достигнута при максимально возможном числе узлов интегрирования (N ≤ 512). |
Версии: нет
Вызываемые подпрограммы
QSJAC - | подпрограмма, вычисляющая узлы и веса квадратурной формулы Гаусса - Якоби. |
UTQSJ2 - | подпрограмма выдачи диагностических сообщений. |
Замечания по использованию
Перед началом работы подпрограммы число узлов интегрирования N должно быть задано как целое из интервала 2 ≤ N ≤ 256. | |
Если интеграл не может быть вычислен с заданной абсолютной
погрешностью EPS, выдается диагностическое сообщение: Подпрограмма QSJ2R: заданная точность не может быть достигнута. |
Unit TQSJ2R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQSJ2R_p, QSJ2R_p; function TQSJ2R: String; implementation function TQSJ2R: String; var N,IERR :Integer; ALF,BTA,A,B,EPS,RINT :Real; X :Array [0..511] of Real; W :Array [0..511] of Real; begin Result := ''; { результат функции } ALF := 1.0; ВТА := ALF; A := -1.0; B := 1.0; EPS := 1.E-5; N := 2; QSJ2R(RINT,A,B,ALF,BTA,FQSJ2R,N,EPS,IERR); Result := Result + Format('%20.16f %20.16f %20.16f %20.16f %20.16f %20.16f %5d %5d ', [A,B,ALF,BTA,EPS,RINT,N,IERR]) + #$0D#$0A; UtRes('TQSJ2R',Result); { вывод результатов в файл TQSJ2R.res } exit; end; end. Unit FQSJ2R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function FQSJ2R(X :Real): Real; implementation function FQSJ2R(X :Real): Real; begin { Result - прототип имени функции FQSJ2R на FORTRANe } Result := IntPower(X,15); exit; end; end. Результаты: RINT = 0.0000000000 N = 8 IERR = 0