|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.05.2011, 00:18 | #1 |
Регистрация: 05.05.2011
Сообщений: 7
|
Системы ДУ
Доброе время суток! Нужно написать программу для решения систем ДУ, используя все прелести ООП. Есть исходник для одного ДУ, решается 3-мя методами: Методом Эйлера, модифицированным методом Эйлера и Рунге-Кутта (по моему, 4-го порядка). Вот текст программы:
program Project1; {$APPTYPE CONSOLE} {$N+} const eps = 1E-5; x0 = 0; y0 = 0; type TFunc = function(x, y: extended): extended; function func(x, y: extended): extended; far; begin func := sqr(x) + sqr(y); end; function Euler(f: TFunc; x0_, x_end, y0_: extended; n: word): extended; { где x0_ и y0_ - начальное условие x_end - точка, в которой необходимо вычислить результат n - количество шагов для вычисления результата } var i: word; { счетчик цикла } x, h: extended; { текущая точка и длина шага } res: extended; { переменная для накопления конечного результата функции } begin h := (x_end - x0_) / n; { Находим длину шага } res := y0_; { устанавливаем начальные значения } x := x0_; for i := 1 to n do begin { вычисляем результат по методу Эйлера } res := res + h * f(x, res); x := x + h; { переходим к следующей точке } end; Euler := res; { присваиваем конечный результат функции } end; function Euler2(f: TFunc; x0_, x_end, y0_: extended; n: word): extended; { где x0_ и y0_ - начальное условие x_end - точка, в которой необходимо вычислить результат n - количество шагов для вычисления результата } var i: word; { счетчик цикла } x, h: extended; { текущая точка и длина шага } res: extended; { переменная для накопления конечного результата функции } begin h := (x_end - x0_) / n; { Находим длину шага } res := y0_; { устанавливаем начальные значения } x := x0_; for i := 1 to n do begin { вычисляем результат по исправленному методу Эйлера } res := res + h * (f(x, res) + f(x + h, res + h * f(x, res))) / 2; x := x + h; { переходим к следующей точке } end; Euler2 := res; { присваиваем конечный результат функции } end; function RungeKutt(f: TFunc; x0_, x_end, y0_: extended; n: word): extended; { где x0_ и y0_ - начальное условие x_end - точка, в которой необходимо вычислить результат n - количество шагов для вычисления результата } var i: word; { счетчик цикла } x, h: extended; { текущая точка и длина шага } res: extended; { переменная для накопления конечного результата функции } k1, k2, k3, k4: extended; { вспомогательные переменные вычисления результата } begin h := (x_end - x0_) / n; { Находим длину шага } res := y0_; { устанавливаем начальные значения } x := x0_; for i := 1 to n do begin { вычисляем результат по методу Рунге-Кутта 4го порядка } k1 := f(x, res); k2 := f(x + h / 2, res + h * k1 / 2); k3 := f(x + h / 2, res + h * k2 / 2); k4 := f(x + h, res + h * k3); res := res + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6; x := x + h; { переходим к следующей точке } end; RungeKutt := res; { присваиваем конечный результат функции } end; begin writeln('4islennoe resenie div uravnenia:'); writeln(#10, ' k'' =y^2+x^2 k(0)=0; x_end=', 1); writeln(#10, 'method Eilera:'); writeln('n=5 000, result: ', Euler(func, x0, 1, y0, 5000):5:5); writeln('n=10 000, result: ', Euler(func, x0, 1, y0, 10000):5:5); writeln('n=25 000, result: ', Euler(func, x0, 1, y0, 25000):5:5); writeln(#10, 'method Eilera2:'); writeln('n=50, result: ', Euler2(func, x0, 1, y0, 50):5:5); writeln('n=100, result: ', Euler2(func, x0, 1, y0, 100):5:5); writeln('n=250, result: ', Euler2(func, x0, 1, y0, 250):5:5); writeln(#10, 'method Ronge kytta:'); writeln('n=50, result: ', RungeKutt(func, x0, 1, y0, 50):5:5); writeln('n=100, result: ', RungeKutt(func, x0, 1, y0, 100):5:5); writeln('n=200, result: ', RungeKutt(func, x0, 1, y0, 200):5:5); write(#10, 'Press Enter to continue.'); readln; end. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Операционные системы!!!!!!!! | lera93 | Помощь студентам | 12 | 20.12.2010 11:41 |
Нелинейные системы | Diplomnik | Помощь студентам | 2 | 13.12.2010 18:05 |
Системы счисления.10->5-7. | Corpinccom | Помощь студентам | 0 | 22.09.2010 12:54 |
Операционные системы | slipokorn | Помощь студентам | 0 | 26.05.2010 05:05 |
Системы | Artem_sky | Операционные системы общие вопросы | 1 | 12.11.2009 19:17 |