Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 04.05.2011, 12:07   #1 (permalink)
Fotohotnik
Новичок
 
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Решить дифференциальное уравнение в Паскале

Помогите пожалуйста с задачей:
найти решение дифференциального уравнения в интервале от [1,2] с точностью e=0.001.
y'=1+x+y
y=1, я так понимаю это шаг
Fotohotnik вне форума   Ответить с цитированием

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

Возможно, ваша ваша проблема уже имеет решение на нашем форуме

Помогите решить задачу в Паскале
Помогите решить задачу на Паскале
Помогите решить задачу в паскале
Не могу решить задачу на паскале
Решить уравнение линейной алгебры
Помогите решить в Паскале

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

Цитата:
Сообщение от Fotohotnik Посмотреть сообщение
Помогите пожалуйста с задачей:
найти решение дифференциального уравнения в интервале от [1,2] с точностью e=0.001.
y'=1+x+y
y=1, я так понимаю это шаг
Извините - ничего не понял! Уравнение вполне себе легко решается аналитически, и выглядит это так:

1. Записываем в виде y' - y = 1 + x.
2. Решаем однородное уравнение y' - y = 0. Его решением, очевидно, является C*exp(x).
3. Частное решение ищем методом вариации постоянной, т.е. в виде C(x)*exp(x). Подставляя в исходное уравнение и интегрируя, находим C(x)=C1-exp(-x)*(x+2).
4. Таким образом, окончательно y=C1*exp(x)-x-2.

И при чем тут Паскаль, программирование, точность и всё такое прочее? Кроме того, полагаю, что Ваше предположение о том, что у=1 имеет какое-то отношение к таинственному "шагу", есть полный абсурд. Скорее всего, у=1 - это значение искомой функции при некотором значении аргумента х (например, при х=0), которое Вы пропустили, и которое требуется для определения константы С1.
Vladimir_S вне форума   Ответить с цитированием
Старый 04.05.2011, 13:25   #3 (permalink)
Fotohotnik
Новичок
 
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вы не правы. нам задали в паскале сделать методом рунге-кутта. должно получится наподобие этого (сделано методом эйлера-коши):
program lab6;
uses wincrt;
const e=0.001;
var x,x0,xn,y,y0,y1,h,r:real;
k:integer;
label 1;
function f(x,y:real):real;
begin
f:=1+x*y*y;
end;
begin
x0:=0;
y0:=1;
xn:=0.5;
h:=0.1;
x:=x0;
r:=h/2;
y:=y0;
k:=0;
writeln('решение:x ,y');
repeat
k:=0;
1:y1:=y+r*f(x,y);
y:=y1+r*f(x,y);
x:=x+h;
repeat
y0:=y;
k:=k+1;
y:=y1+r*f(x,y0);
if k>4 then
begin
x:=x-h;
h:=h/2;
r:=h/2;
k:=0;
goto 1;
end;
until abs(y-y0)<e;
writeln(' ' ,x:5:3,' , ',y:5:3);
if xn>x then k:=0;
until xn<x;
end.
Fotohotnik вне форума   Ответить с цитированием
Старый 04.05.2011, 13:30   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Fotohotnik Посмотреть сообщение
Вы не правы. нам задали в паскале сделать методом рунге-кутта.
Ну так так и надо писать сразу!
И еще - в таком случае тем более необходима "точка привязки", т.е при х равном тому-то у равен сему-то. Просто у=1 при неизвестно каком х не пойдет!
Vladimir_S вне форума   Ответить с цитированием
Старый 04.05.2011, 13:37   #5 (permalink)
Fotohotnik
Новичок
 
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

тут конкретно не указано, но вроде y(1)=1 а шаг навернео h=0.1
Fotohotnik вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 04.05.2011, 13:46   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Fotohotnik Посмотреть сообщение
тут конкретно не указано, но вроде y(1)=1 а шаг навернео h=0.1
Ага! Ну вот это уже дело другое. Сделаю несколько позже.
Vladimir_S вне форума   Ответить с цитированием
Старый 04.05.2011, 15:04   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, пожалуйста. Выводится X, Y, сосчитанный методом Рунге-Кутта и, для сравнения, результат вышеприведенного аналитического решения уравнения:
Код:
VAR
 Xbef,Ybef,Xaft,Yaft,H,K1,K2,K3,K4:Real;
 i,N:Word;

Function F(Xf,Yf:Real):Real;
begin
 F:=1.0+Xf+Yf;
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:=4.0*Exp(X_acc-1)-(X_acc+2);
end;

BEGIN
 H:=0.1;
 N:=Round(1/H);
 Xbef:=1;
 Ybef:=1;
 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.
Отмечу, что переменные К1, К2, К3 и К4 введены исключительно потому, что если в вычисление Yaft засунуть в явном виде 4 функции (fK1, fK2...), то мой транслятор почему-то плеваться изволит. Пришлось так.
Vladimir_S вне форума   Ответить с цитированием
Старый 04.05.2011, 18:08   #8 (permalink)
Fotohotnik
Новичок
 
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо огромное, очень выручили!
Fotohotnik вне форума   Ответить с цитированием
Старый 08.01.2013, 20:28   #9 (permalink)
sapfeere
Новичок
 
Регистрация: 07.01.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

помогите пожалуйста с примером..
найти решение ДУ методом неопределйнных коэффициентов на паскале.
y"+y'-6y=36x
sapfeere вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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