Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решение систем диффуров. Метод Эйлера 
:(
    Опции темы
PriestOfLuna
  Дата 4.12.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



Делаю на 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));
    }

Может я не догоняю чего-то глобального....
PM MAIL   Вверх
Фантом
Дата 4.12.2010, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Напишите систему, которую Вы решаете. Правда, и без этого можно сказать, что первая строчка в makeStep выглядит несколько неестественно.
PM   Вверх
PriestOfLuna
Дата 5.12.2010, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



x'=3x
y'=2x+y
PM MAIL   Вверх
Фантом
Дата 5.12.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



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

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

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

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


PM   Вверх
PriestOfLuna
Дата 5.12.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



Да, эту ошибку я исправил, но изменилось не так уж много =\ 
Значения дает все так же не те. 
PM MAIL   Вверх
Фантом
Дата 5.12.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Ну что значит "не те"? Точность метода Эйлера, особенно на таких задачах, мягко говоря, невысока. В Маткаде "зашит" метод Рунге-Кутты 4-го порядка, он должен быть точнее, так что их результаты сравнивать несколько некорректно. Попробуйте сильно уменьшить шаг (где-нибудь до 10^{-8} - 10^{-9}) и посмотрите, что получится.
PM   Вверх
PriestOfLuna
Дата 6.12.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 27.6.2010

Репутация: нет
Всего: нет



Да, уменьшение шага решило проблему smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0728 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.