Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[Delphi] Решение ДУ методом Рунге-Кутта

51K
16 августа 2009 года
Unlit
2 / / 16.08.2009
Препод дал задачу: разработать и реализовать на персональном компьютере процедуру решения дифференциального уравнения y'(x)=F(x, y(x)) с начальным условием y(x0)=y0, в котором используется метод Рунге-Кутта.

Формула Рунге-Кутта: y1=y0+1/6*(k1+2K3+k4); (просмотрел все учебники, кот. у меня есть - такой формулы не нашел, похоже на метод Рунге-К. 4-го порядка, если в скобках добавить еще один коэфф. 2k2).

Способ оценки локальной погрешности: правило Рунге.
Алгоритм выбора шага: Алгоритм максимального шага.
В задаче не должно быть массивов.

Вопрос: Как оценить погрешность по правилу Рунге?

Код:
const
  eps = 0.00001;
  x0  = 3;
  y0  = 3;
  type
      TFunc = function(x,y: extended): extended;

function func(x,y: extended): extended; far;
begin
  func := y*cos(x) - 2*sin(2*x);
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;
2.1K
16 августа 2009 года
wAngel
129 / / 23.11.2004
Если упрощенно, то по правилу Рунге нужно сравнивать по норме разность двух решений. Т.е. решаете задачу с числом шагов n, затем решаете задачу с шагом 2n. Считаем разность норм. Строите график разности норм в зависимости от числа шагов. Последовательность должна сходиться к нулю.
Если не разберетесь, могу поискать у себя исходники.
51K
17 августа 2009 года
Unlit
2 / / 16.08.2009
Вроде бы, что-то похожее на правду, у меня получилось, если посчитать значение функции с шагом n и 2n, но это только в одной точке. А как посчитать в каждой точке промежутка, не используя массивов?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог