Текст подпрограммы и версий qsfpr_p.zip qsfpe_p.zip |
Тексты тестовых примеров tqsfpr_p.zip tqsfpe_p.zip |
Вычисление интегралов вида
B I = ∫ [ cos(tx) RE F(x) - sin(tx) IM F(x) ] dx , A
где RE F (x) и IM F (x) - действительная и мнимая части комплексной функции F(x) действительного переменного x, на основе квадратурной формулы Филона.
Подпрограмма QSFPR вычисляет интеграл I с заданной абсолютной или относительной точностью на основе квадратурной формулы Филона [1], в которой плотность подынтегральной функции F (x) вычисляется в девяти равноотстоящих точках каждого подинтервала.
При делении подинтервала узлы и значения функции F (x) запоминаются для последующего использования [2].
1. | Справочник по специальным функциям. Под ред. М.А.Абрамовица и И.Стиган. - M.: Hаука, 1979, 832 с. |
2. | Форсайт Дж., Малькольм M., Моулер K. Машинные методы математических вычислений. - M.: Мир, 1980, 280 с. |
procedure QSFPR(FUN :Func_F1; A :Real; B :Real; ABSERR :Real; RELERR :Real; T :Real; var RESULT_ :Real; var ERREST :Real; var NOFUN :Integer; var FLAG :Real);
Параметры
FUN - | имя комплексной подпрограммы - функции, вычисляющей плотность F (x) подынтегральной функции; |
A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
ABSERR - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
RELERR - | заданная относительная погрешность вычисления интеграла (тип: вещественный); |
T - | заданное значение параметра t (тип: вещественный); |
RESULT_ - | приближение к интегралу, удовлетворяющее менее жесткой из двух границ погрешности (тип: вещественный); |
ERREST - | оценка погрешности вычисленного значения интеграла (тип: вещественный); |
NOFUN - | число вычисленных значений плотности подынтегральной функции F (x), потребовавшихся для получения результата (тип: целый); |
FLAG - |
индикатор надежности: если FLAG = 0, то RESULT_, вероятно, удовлетворяет заданной погрешности, если FLAG = XXX.YYY, то XXX - число интегралов, на которых не удалось достигнуть заданной точности, а 0.YYY = (B - X0)/(B - A) - граница отрезка [A, X0], на котоpом был израсходован лимит обращений к подпрограмме, вычисляющей функцию FUN. |
Версии
QSFPE - | вычисление этих же интегралов в режиме расширенной (Extended) точности. |
Вызываемые подпрограммы: нет
Замечания по использованию
Для подпрограммы QSFPE параметры A, B, T, ER, EA, RINT, FLAG, ERREST, а также параметр X, из подпрограммы FUN имеют тип Extended. |
π π ( ∫ sin10x F(x) dx = ∫ sin10x sin x/2 dx ) 0 0Unit TQSFPR_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQSFPR_p, QSFPR_p; function TQSFPR: String; implementation function TQSFPR: String; var NOFUN :Integer; PI,ER,EA,A,T,B,RINT,ERREST,FLAG :Real; begin Result := ''; { результат функции } PI := 3.1415926; ER := 1.E-5; ЕА := 0.0; A := 0.0; T := 10.0; B := PI; QSFPR(FQSFPR,A,B,EA,ER,T,RINT,ERREST,NOFUN,FLAG); Result := Result + Format(' %20.16f %20.16f %20.16f %20.16f %5d ', [RINT,FLAG,ERREST,B,NOFUN]) + #$0D#$0A; UtRes('TQSFPR',Result); { вывод результатов в файл TQSFPR.res } exit; end; end. Unit fqsfpr_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function fqsfpr(X :Real): Complex; implementation function fqsfpr(X :Real): Complex; var ZI :Complex; begin { Result - прототип имени функции FUN на FORTRANe } ZI := Cmplx(0.0,1.0); Result := MulC(SubC(Cmplx(0.0,0.0),ZI),Cmplx(Sin(X/2.0),0.0)); exit; end; end. Результаты: RINT = -1.0025063 * 10-1 NOFUN = 417 FLAG = 0 ERREST = 2.3 * 10-10