• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Методом Рунге-Кутта найти решение дифференциальных уравнений

  • Автор темы Автор темы nasty111
  • Дата начала Дата начала

nasty111

Ученик
Регистрация
2 Фев 2013
Сообщения
2
Реакции
0
Баллы
0
Методом Рунге-Кутта найти решение дифференциальных уравнений

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

Извините, нужно написать на Pascal.
 
Извините, нужно написать на 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.
Во втором столбце появляется результат расчета методом Рунге-Кутты, в третьем (для сравнения) - по точной формуле.
 
Назад
Сверху