Решение дифф.уравнений 2го порядка явным и неявным методами Эйлера
Добавлено: 15 май 2010, 20:25
Задача скорее математическая чем програмистская
Имеется дифференциальное уравнение:
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
Y'(t)=Y1
Y''(t)=Y2 :
Через несколько шагов получилось что Y(t)=1.7=const что противоречит условию задачи. Я сам думаю что по какой то причине нельзя выражать Y''(t) через 17-5*Y'(t)-10*Y(t)
Но тогда других идей у меня нет (
К неявному методу даже нет смысла приступать. Мануалы читаю уже третий день, толку пока что мало. Буду очень благодарен за обьяснение и еще больше за работающий код для простейшей консольной програмки.
Имеется дифференциальное уравнение:
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
Y'(t)=Y1
Y''(t)=Y2 :
Код: Выделить всё
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();
}
Но тогда других идей у меня нет (
К неявному методу даже нет смысла приступать. Мануалы читаю уже третий день, толку пока что мало. Буду очень благодарен за обьяснение и еще больше за работающий код для простейшей консольной програмки.