Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Решение систем диффуров. Метод Эйлера


Автор: PriestOfLuna 4.12.2010, 23:24
Делаю на Java программу, решающую заданную систему дифференциальных уравнений первого порядка методами Элейра и Рунге-Кутты. Застопорился уже на том, что метод Эйлера работает совсем уж неадекватно. Сильно расходится с решением в маткаде и вообще при разном шаге дает разные результаты.

 
Код

 x=1;
 y=2;
 x0=x;
 y0=y;

.............................

 public void makeStep(double t,double h)
    {
        x=x0+h*3*x0;
        y=y0+h*(2*x+y0);
        x0=x;
        y0=y;
        System.out.println(String.valueOf(t)+' '+String.valueOf(x)+' '+String.valueOf(y));
    }

Может я не догоняю чего-то глобального....

Автор: Фантом 4.12.2010, 23:55
Напишите систему, которую Вы решаете. Правда, и без этого можно сказать, что первая строчка в makeStep выглядит несколько неестественно.

Автор: PriestOfLuna 5.12.2010, 08:14
x'=3x
y'=2x+y

Автор: Фантом 5.12.2010, 13:10
Нет, тогда  с первой строчкой как раз все в порядке. А вот во второй ошибка: вместо
Код

        y=y0+h*(2*x+y0);

должно быть
Код

        y=y0+h*(2*x0+y0);


Автор: PriestOfLuna 5.12.2010, 16:21
Да, эту ошибку я исправил, но изменилось не так уж много =\ 
Значения дает все так же не те. 

Автор: Фантом 5.12.2010, 17:52
Ну что значит "не те"? Точность метода Эйлера, особенно на таких задачах, мягко говоря, невысока. В Маткаде "зашит" метод Рунге-Кутты 4-го порядка, он должен быть точнее, так что их результаты сравнивать несколько некорректно. Попробуйте сильно уменьшить шаг (где-нибудь до 10^{-8} - 10^{-9}) и посмотрите, что получится.

Автор: PriestOfLuna 6.12.2010, 20:51
Да, уменьшение шага решило проблему smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)