04.05.2011, 12:07 | #1 (permalink) |
Новичок
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Решить дифференциальное уравнение в Паскале
найти решение дифференциального уравнения в интервале от [1,2] с точностью e=0.001. y'=1+x+y y=1, я так понимаю это шаг |
04.05.2011, 12:07 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Возможно, ваша ваша проблема уже имеет решение на нашем форуме Помогите решить задачу в Паскале Помогите решить задачу на Паскале Помогите решить задачу в паскале Не могу решить задачу на паскале Решить уравнение линейной алгебры Помогите решить в Паскале |
04.05.2011, 13:05 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
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. |
|
04.05.2011, 13:25 | #3 (permalink) |
Новичок
Регистрация: 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. |
04.05.2011, 13:37 | #5 (permalink) |
Новичок
Регистрация: 14.03.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
тут конкретно не указано, но вроде y(1)=1 а шаг навернео h=0.1
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
04.05.2011, 15:04 | #7 (permalink) |
Специалист
Регистрация: 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. |
08.01.2013, 20:28 | #9 (permalink) |
Новичок
Регистрация: 07.01.2013
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
помогите пожалуйста с примером..
найти решение ДУ методом неопределйнных коэффициентов на паскале. y"+y'-6y=36x |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|