Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.ru/lib_na/cat/de_htm_p/de14r_p.htm
Дата изменения: Thu Nov 5 10:41:43 2015 Дата индексирования: Sun Apr 10 03:33:15 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий de14r_p.zip , de14e_p.zip |
Тексты тестовых примеров tde14r_p.zip , tde14e_p.zip |
Вычисление решения задачи Коши для системы обыкновенных дифференциальных уравнений первого порядка в конце интервала интегрирования классическим методом Рунге - Кутта 4 - го порядка точности с постоянным шагом.
Решается задача Коши для системы M обыкновенных дифференциальных уравнений первого порядка
Y ' = F (X, Y) , Y = ( y1, ... , yM ) , F = ( f1 (X, y1, ... , yM), ... , fM (X, y1, ... , yM) ) с начальными условиями, заданными в точке XN : Y(XN) = YN , YN = ( y10, ... , yM0 ) ,
классическим методом Рунге - Кутта четвертого порядка точности с постоянным шагом. Решение вычисляется в одной точке ХК, которая является концом интервала интегрирования.
Березин И.С., Жидков Н.П. Методы вычислений, т.2. Физматгиз, М., 1960.
procedure DE14R(F :Proc_F70; var M :Integer; XN :Real; var YN :Array of Real; XK :Real; var H :Real; var Y :Array of Real; var A :Array of Real; var B :Array of Real; var C :Array of Real);
Параметры
F - |
имя подпрограммы вычисления значений правой
части дифференциального уравнения. Первый
оператоp подпрограммы должен иметь вид: procedure F (X :Real; var Y :Array of Real; var DY :Array of Real; M :Integer); Здесь: X, Y - значения независимой и зависимой переменных, соответственно. Вычисленное значение правой части должно быть помещено в DY. B случае системы уравнений, т.е. когда M ≠ 1 , параметры Y и DY представляют массивы длины M (тип параметров X, Y и DY: вещественный); |
M - | количество уравнений в системе (тип: целый); |
XN, YN - | начальные значения аргумента и решения; в случае системы уравнений (т.е. M ≠ 1) YN представляет одномерный массив длины M (тип: вещественный); |
XK - | значение аргумента, при котоpом требуется вычислить решение задачи Коши (конец интервала интегрирования); XK может быть больше, меньше или pавно XN (тип: вещественный); |
H - | вещественная переменная, содержащая значение шага интегрирования. Может задаваться с учетом направления интегрирования, т.е. положительным, если XK > XN, отрицательным, если XK < XN , или без такого учета с любым знаком " + " или " - "; |
Y - | искомое решение задачи Коши, вычисленное подпрограммой при значении аргумента XK. Для системы уравнений (когда M ≠ 1) задается одномерным массивом длины M. B случае совпадения значений параметров XN и XK значение Y полагается равным начальному значению YN (тип: вещественный); |
A, B, C - | одномерные вещественные рабочие массивы длиной M. |
Версии
DE14E - | вычисление решения задачи Коши для системы обыкновенных дифференциальных уравнений первого порядка в конце интервала интегрирования классическим методом Рунге - Кутта 4 - го порядка точности с постоянным шагом, при этом все вычисления над действительными числами выполняются с удвоенным числом значащих цифр. B этом случае параметры XN, YN, XK, H, Y, A, B, C и параметры X, Y и DY в подпрограмме F должны иметь тип Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию
Подпрограмма предназначена для численного решения дифференциальных уравнений и систем уравнений, имеющих непрерывные частные производные до 5 - го порядка включительно. При работе подпрограммы и ее версии значения параметров M, XN, YN, XK сохраняются. Значение параметра H сохpаняется, если он задан с учетом направления интегрирования, иначе его знак меняется на противоположный. Если после работы подпрограммы нет необходимости иметь начальное значение решения YN, то параметры YN и Y при обращении к ней можно совместить. |
y1' = 0.2 ( y4 - y1 ) , y2' = y1 + 2 ( y2 - y2 y3 ) , y3' = y4 - ( y3 - y2 y3 ) , y4' = 10 y1 - ( 61 - 0.13 x ) y4 + 0.13 x , 0 ≤ x ≤ 8 y1 (0) = y2 (0) = y3 (0) = y4 (0) = 0Unit TDE14R_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc, UtRes_p, FDE14R_p, DE14R_p; function TDE14R: String; implementation function TDE14R: String; var M,_i :Integer; XN,XK,H :Real; YN :Array [0..3] of Real; Y :Array [0..3] of Real; A :Array [0..3] of Real; B :Array [0..3] of Real; C :Array [0..3] of Real; begin Result := ''; { результат функции } M := 4; XN := 0.0; ХК := 8.0; YN[0] := 0.0; YN[1] := 0.0; YN[2] := 0.0; YN[3] := 0.0; H := 0.01; DE14R(FDE14R,M,XN,YN,XK,H,Y,A,B,C); Result := Result + Format('%s',[' XK']); Result := Result + Format('%20.16f ',[XK]); Result := Result + Format('%s',[#$0D#$0A + ' Y']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[Y[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TDE14R',Result); { вывод результатов в файл TDE14R.res } exit; end; end. Unit fde14r_p; interface uses SysUtils, Math, { Delphi } Lstruct, Lfunc; procedure fde14r(T :Real; var Y :Array of Real; var Z :Array of Real; M :Integer); implementation procedure fde14r(T :Real; var Y :Array of Real; var Z :Array of Real; M :Integer); var R23,CT :Real; begin R23 := Y[1]*Y[2]; CT := 0.13*T; Z[0] := 0.2*(Y[3]-Y[0]); Z[1] := Y[0]+2.0*(Y[1]-R23); Z[2] := Y[3]-(Y[2]-R23); Z[3] := 10.0*Y[0]-(61.0-CT)*Y[3]+CT; end; end. Результаты: Y(1) = 9.23847083543 - 03 Y(2) = 4.82097225727 - 03 Y(3) = 1.66711330351 + 00 Y(4) = 1.88434937053 - 02