Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/q_htm_p/qs13r_p.htm
Дата изменения: Thu Nov 5 15:38:06 2015 Дата индексирования: Sun Apr 10 01:05:05 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий qs13r_p.zip |
Тексты тестовых примеров tqs13r_p.zip |
Вычисление определенного интеграла по квадратурным формулам Гаусса с разбиением основного отрезка интегрирования на частичные.
QS13R вычисляет интеграл B ∫ f (x) dx A с заданной абсолютной погрешностью E по формулам Гаусса.
Отрезок интегрирования [A, B] разбивается на K равных частичных отрезков, на каждом из которых применяется квадратурная формула Гаусса с N узлами. Полученные значения интеграла по всем частичным отрезкам суммируются.
Заданная точность достигается:1. | За счет последовательного увеличения числа узлов квадратурной формулы при фиксированном K. |
2. | За счет удвоения числа частичных отрезков разбиения при фиксированном N. |
Счет заканчивается, если модуль разности приближенных значений интеграла, полученных при двух последовательных расчетах, не привосходит заданной величины E. За приближенное значение интеграла принимается результат последнего расчета.
Л.Г.Васильева. Набор стандартных программ численного интегрирования с фиксированным распределением узлов. Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974.
procedure QS13R(var RINT :Real; A :Real; B :Real; F :Func_F1; E :Real; var K :Integer; var N :Integer; L :Integer; var IERR :Integer);
Параметры
RINT - | вещественная переменная, содержащая вычисленное значение интеграла; |
A, B - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
F - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
E - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
K - | целая переменная, задающая начальное число частичных отрезков разбиения (K ≤ 524288); |
N - | целая переменная, задающая начальное число узлов интегрирования; может принимать только следующие значения: 2, 4, 6, 8, 10, 12, 16, 24, 32, 48, 64, 96; |
L - | задает режим работы подпрограммы (тип: целый); при этом, если: |
L = 0 - | то заданная точность достигается за счет увеличения N при фиксированном K; |
L = 1 - | то заданная точность достигается за счет увеличения K при фиксированном N; |
IERR - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
IERR = 65 - | когда заданная точность не может быть достигнута. |
Версии: нет
Вызываемые подпрограммы
UTQS11 - | подпрограмма выдачи диагностических сообщений при работе подпрограммы QS13R. |
Замечания по использованию
При выходе из подпрограммы значение K полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла. |
Unit TQS13R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FQS13R_p, QS13R_p; function TQS13R: String; implementation function TQS13R: String; var K,N,L,IERR :Integer; A,B,E,RINT :Real; begin Result := ''; { результат функции } A := 1.0; B := IntPower(2.718281828459,3); E := 0.0001; K := 1; N := 2; L := 0; QS13R(RINT,A,B,FQS13R,E,K,N,L,IERR); Result := Result + Format('%s',[' RINT=']); RЕSUlt := Result + Format('%20.16f ',[RINT]); Result := Result + Format('%s',[' N=']); RЕSUlt := Result + Format('%10d ',[N]); RЕSUlt := Result + Format('%s',[' K=']); Result := Result + Format('%10d ',[K]) + #$0D#$0A; Result := Result + Format('%s',[' IERR=']); Result := Result + Format('%5d ',[IERR]) + #$0D#$0A; UtRes('TQS13R',Result); { вывод результатов в файл TQS13R.res } exit; end; end. Unit FQS13R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; function FQS13R(X :Real): Real; implementation function FQS13R(X :Real): Real; begin { Result - прототип имени функции FQS12R на FORTRANe } Result := 1.0/(X*Sqrt(1.0+Ln(X))); exit; end; end. Результаты: RINT = 1.9999999999 N = 32 K = 1 IERR = 0