Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 02.02.2013, 21:21   #1 (permalink)
nasty111
Новичок
 
Регистрация: 02.02.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Методом Рунге-Кутта найти решение дифференциальных уравнений

Уважаемые форумчане ! Буду очень благодарен за помощь.
Собственно, уравнения:
Методом Рунге-Кутта найти решение дифференциального уравнения
у'=y-x
которое удовлетворяет начальному условию
у(0)=1.5
Это уравнение имеет общий интеграл
у=се^x+x+1
Частное решение, которое удовлетворяет начальному условию:
у=0.5*е^х+х+1
Заранее огромное человеческое спасибо !
nasty111 вне форума   Ответить с цитированием

Старый 02.02.2013, 21:21
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Похожие темы уже создавались другими участниками форума, вот их список

Решение кубического уравнения методом хорд, Python
Решить систему уравнений методом Ньютона, Pascal
Паскаль. Найти корни уравнения методом хорд

Старый 02.02.2013, 21:35   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Правильно! Так держать: ни под каким видом и никому не выдавайте тайну языка программирования, на котором должно быть выполнено задание. Ни-ни.
Vladimir_S вне форума   Ответить с цитированием
Старый 03.02.2013, 14:19   #3 (permalink)
nasty111
Новичок
 
Регистрация: 02.02.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию .

Извините, нужно написать на Pascal.
nasty111 вне форума   Ответить с цитированием
Старый 03.02.2013, 16:03   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от nasty111 Посмотреть сообщение
Извините, нужно написать на Pascal.
Тогда получите. Между прочим, в задании не хватает еще кое-чего, а именно промежутка, в котором следует рассчитать значения функции. Указание такого промежутка в методе Рунге-Кутты является обязательным. А раз он не указан, то я волевым усилием ставлю интервал [0..1].
Код:
VAR
 Xbef,Ybef,Xaft,Yaft,H,K1,K2,K3,K4:Real;
 i,N:Word;

Function F(Xf,Yf:Real):Real;
begin
 F:=Yf-Xf;
end;

Function fK1(Xk,Yk:Real):Real;
begin
 fK1:=F(Xk,Yk);
end;

Function fK2(Xk,Yk,Hk:Real):Real;
begin
 fK2:=F(Xk+Hk/2,Yk+Hk/2*fK1(Xk,Yk));
end;

Function fK3(Xk,Yk,Hk:Real):Real;
begin
 fK3:=F(Xk+Hk/2,Yk+Hk/2*fK2(Xk,Yk,Hk));
end;

Function fK4(Xk,Yk,Hk:Real):Real;
begin
 fK4:=F(Xk+Hk,Yk+Hk*fK3(Xk,Yk,Hk));
end;

Function Y_acc(X_acc:Real):Real;
begin
 Y_acc:=0.5*Exp(X_acc)+X_acc+1;
end;

BEGIN
 H:=0.1;
 N:=Round(1/H);
 Xbef:=0;
 Ybef:=1.5;
 WriteLn(' X           Y             Y_accur');
 Writeln(Xbef:4:2,Ybef:15:5, Y_acc(Xbef):15:5);
 For i:=1 to N do
  begin
   Xaft:=Xbef+H;
   K1:=fK1(Xbef,Ybef);
   K2:=fK2(Xbef,Ybef,H);
   K3:=fK3(Xbef,Ybef,H);
   K4:=fK4(Xbef,Ybef,H);
   Yaft:=Ybef+H/6*(K1+2.0*K2+2.0*K3+K4);
   Writeln(Xaft:4:2,Yaft:15:5, Y_acc(Xaft):15:5);
   Xbef:=Xaft;
   Ybef:=Yaft;
  end;
 ReadLn;
END.
Во втором столбце появляется результат расчета методом Рунге-Кутты, в третьем (для сравнения) - по точной формуле.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
pascal, рунге-кутта


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:05.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.