Иллюстрирующая программа для QUANC8
Будем интегрировать sin(k * x) / x
Введите, пожалуйста, пределы интегрирования:
Нижний, a:= 0
Верхний, b:= 2
K Result Errest flag Nofun
1 1.6054129768 1.8207674968E-12 0.00 33
11 1.6160837385 1.2829307175E-08 0.00 65
21 1.5808268837 1.0873235672E-08 0.00 129
31 1.5601310942 3.5187105248E-07 0.00 145
41 1.5591719919 1.2986614938E-07 0.00 225
51 1.5697048862 1.2898262675E-07 0.00 257
61 1.5778664925 3.4919497963E-07 0.00 289
71 1.5765217847 4.5026639761E-07 0.00 369
81 1.5695583003 2.3464019062E-07 0.00 449
91 1.5654319504 3.8398458905E-08 0.00 513
101 1.9919846201 8.7645142437E-08 0.00 273
Любое обыкновенное дифференциальное уравнение порядка , которое можно записать так, что его левая часть есть производная наивысшего порядка, а в правой части эта производная не встречается, может быть записано и в виде системы из уравнений первого порядка путем введения новой переменной.
Таким образом общая постановка задачи Коши может быть дана как
,
, где
– вектор неизвестных функций, а начальные условия в точке .
Численное решение задачи Коши выполняют с использованием процедуры RKF45.
Рrocedure rkf45( F: рointer;
neqn: integer;
var Y: floatvector;
var t, tout: float;
var relerr, abserr: float;
var iflag: integer;
var work: rvecn;
var iwork: ivec5 );
RKF45 предназначена, главным образом, для решения нежестких и слабо жестких дифференциальных уравнений, когда вычисление производных не слишком дорогостоящее. RKF45 не следует использовать если пользователю требуется высокая точность.
Подпрограмма RKF45 интегрирует систему из nеqn обыкновенных дифференциальных уравнений первого порядка следующего вида:
, где заданы в t.
Обычно подпрограмму применяют для интегрирования от t до tout, однако ее можно использовать и как одношаговый интегратор, чтобы продолжить решение на один шаг в направлении tout. На выходе параметрам, фигурирующим в списке вызова, присваиваются значения, необходимые для продолжения интегрирования. Пользователю нужно лишь еще раз обратиться к RKF45 (и, возможно, определить новое значение для tout).
В действительности RKF45 – это программа интерфейса, которая вызывает подпрограмму RKFS, осуществляющую процесс решения. RKFS в свою очередь вызывает подпрограмму FEHL, которая вычисляет приближенное решение на один шаг. Отметим, что FEHL не представлена в секции интерфейса модуля FMM, а присутствует лишь в его секции реализации.
Входная информация
FUN
― указатель на внешнюю процедуру, реализующую вычисление производных в точке t. Эта процедура должна удовлетворять двум следующим требованиям:
1. Иметь описание:
рrocedure f( t: float;
var Y, YР: floatvector );
и по значениям t и вектора Y вычислять значения производных , .
2. Функция FUN должна быть протранслирована с дальним типом вызова (с использованием директивы {$F+});
Nеqn
― число интегрируемых уравнений;
Y(*)
― решение в точке t;
t
― независимая переменная;
tout
― точка выхода, в которой нужно определить значение решения;
relerr
― граница относительной погрешности для теста локальной ошибки;
аbserr
― граница абсолютной погрешности для теста локальной ошибки. На каждом шаге программа требует выполнения условия
для каждой компоненты векторов локальной ошибки и решения;
Iflag
― указатель режима интегрирования;
Work(*)
― массив типа RVECN (см. ГЛАВА 1. Описание типов и констант модуля FMM), содержащий информацию, внутреннюю для RKF45, которая необходима при последующих вызовах. Его размерность должна быть не меньше ;
Iwork(*)
― целый массив типа IVEC5 (см. ГЛАВА 1. Описание типов и констант модуля FMM), содержащий информацию, внутреннюю для RKF45, которая необходима при последующих вызовах. Его размерность должна быть не меньше 5.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.