Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 20:01   #1
ogion
Новичок
Джуниор
 
Регистрация: 15.05.2010
Сообщений: 3
По умолчанию Решение дифф.уравнений 2го порядка явным и неявным методами Эйлера

Задача скорее математическая чем програмистская

Имеется дифференциальное уравнение:
Y''(t)+5*Y'(t)+10*Y(t)=17

Имеются так же 2 точки Y'(0)=10, Y(0)=5
Так как Y(1)=Y(0)+h*Y'(0) то Y(1) легко находится. Но как найти Y'(1)? Ведь без него не получится двигаться дальше по сетке.

Я сделал так
Y(t)=Y0[i]
Y'(t)=Y1[i]
Y''(t)=Y2[i] :

Код:
void main(){
        double h=0.1;
        double Y0[1000];
        double Y1[1000];
        double Y2[1000];
        int i=0;
        Y0[0]=5;
        Y1[0]=10;
        for (i=0; i<=997; i++){
                Y0[i+1]=Y0[i]+h*Y1[i];
                Y2[i]=17-10*Y0[i]-5*Y1[i];
                Y1[i+1]=Y1[i]+h*Y2[i];
                if (i%10==0) {printf("\n f(%d)=%f ", i,Y0[i]);}
        }
        getchar();
}
Через несколько шагов получилось что Y(t)=1.7=const что противоречит условию задачи. Я сам думаю что по какой то причине нельзя выражать Y''(t) через 17-5*Y'(t)-10*Y(t)

Но тогда других идей у меня нет (
К неявному методу даже нет смысла приступать. Мануалы читаю уже третий день, толку пока что мало. Буду очень благодарен за обьяснение и еще больше за работающий код для простейшей консольной програмки.
ogion вне форума Ответить с цитированием
Старый 15.05.2010, 22:25   #2
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Эмм... а что вы хотите получить функцию???? Скока я понимаю метод эйлера вам даст только значения функции, а не саму функцию...
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 15.05.2010, 22:50   #3
Serebro
FORTRAN programmer
Форумчанин
 
Регистрация: 08.12.2009
Сообщений: 153
По умолчанию

Переписываем уравнение в виде системы из двух уравнений первого порядка и далее применяем обычный метод Эйлера.

Цитата:
Так как Y(1)=Y(0)+h*Y'(0) то Y(1) легко находится. Но как найти Y'(1)?
Совершенно ненужное и к тому же неверно.

Последний раз редактировалось Serebro; 15.05.2010 в 22:53.
Serebro вне форума Ответить с цитированием
Старый 16.05.2010, 15:36   #4
ogion
Новичок
Джуниор
 
Регистрация: 15.05.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от SNUPY Посмотреть сообщение
Эмм... а что вы хотите получить функцию???? Скока я понимаю метод эйлера вам даст только значения функции, а не саму функцию...
Достаточно значений, саму функцию потом полиномом аппроксимирую.

Цитата:
Сообщение от Serebro Посмотреть сообщение
Переписываем уравнение в виде системы из двух уравнений первого порядка
Сорри, не понял этот момент (
ogion вне форума Ответить с цитированием
Старый 16.05.2010, 18:36   #5
ogion
Новичок
Джуниор
 
Регистрация: 15.05.2010
Сообщений: 3
По умолчанию

Мне казалось что я и так разбил...

И что неверно в формуле Эйлера $Y(1)=Y(0)+h*Y'(0)$ ?
ogion вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
Разница между явным и неявным вызовом процедур .Phoenix Общие вопросы Delphi 1 23.09.2009 00:43
метод Рунге-Кутта для систем дыф.уравнений 1 порядка Natok Помощь студентам 4 31.05.2009 02:37
Решение системы диф уранений методом Эйлера Richi Microsoft Office Excel 5 13.05.2008 11:36