Решение системы дифференциальных уравнений, задача Коши - Turbo Pascal
Формулировка задачи:
Решение системы дифференциальных уравнений. На отрезке [0,3] решить задачу Коши для системы
, сжальтесь! Я в этом ни бум-бум!
Решение задачи: «Решение системы дифференциальных уравнений, задача Коши»
textual
Листинг программы
program Roonge_Koott; const Y1 = 0.0; Y2 = 0.2; a = 0.0; b = 3.0; shag = 0.1; type IntType = integer; RealType = real; Vec = array[1..2] of RealType; procedure Proizvod(x: RealType; Var Y, F: Vec); begin F[1] := Y[2]; F[2] := -0.04 * Exp(-x); end; procedure Roonge_Koott(N: IntType; x, h: RealType; Var Y: Vec); var i, j: IntType; H1, H2, Q: RealType; Y0, Y1, F: Vec; begin H1 := 0.0; H2 := h / 2.0; for i := 1 to N do begin Y[i] := Y[i]; Y1[i] := Y[i]; end; for j := 1 to 4 do begin Proizvod(x + H1, Y, F); if j = 3 then H1 := h else H1 := H2; for i := 1 to N do begin Q := H1 * F[i]; Y[i] := Y0[i] + Q; if j = 2 then Q := 2 * Q; Y1[i] := Y1[i] + Q / 3.0; end; end; for i := 1 to N do Y[i] := Y1[i]; end; var x, h: RealType; Y: Vec; // Out: Text; begin // Assign(Out, 'otvet.txt'); // ReWrite(Out); Writeln(' *X* *Y1* *Y2*'); Y[1] := Y1; Y[2] := Y2; x := a; h := shag; while (x <= b) and (h > 0.0) do begin Writeln(' ', x: 7: 1, ' ', Y[1]: 7: 4, ' ', Y[2]: 7: 4, ' '); Roonge_Koott(2, x, h, Y); x := x + h; end; //Close(Out); end.
Объяснение кода листинга программы
- В начале программы объявляются константы и типы данных.
- Затем объявляются переменные: N (целое число), x (число с плавающей запятой), h (число с плавающей запятой), Y (вектор из N элементов типа RealType), Y0 (вектор из N элементов типа RealType), Y1 (вектор из N элементов типа RealType), F (вектор из 4 элементов типа RealType).
- Далее объявлены два процедурных блока:
- внутри первого блока объявлены две переменные: i и j (оба целые числа), а также переменные H1, H2 и Q (все три - числа с плавающей запятой). Этот блок используется для итерации по массиву Y и выполнения вычислений.
- внутри второго блока объявлены переменные x, h, Y и Y1 (все четыре - числа с плавающей запятой). Этот блок используется для итерации по диапазону от a до b и выполнения вычислений.
- Затем выполняется итерация по массиву Y и выводится результат на экран.
- После этого выполняется итерация по диапазону от a до b, выполняются вычисления и обновление значений в массиве Y.
- В конце программы выводится сообщение на экран и закрывается поток вывода.