gaiver123 Опубликовано 8 февраля, 2011 Жалоба Поделиться Опубликовано 8 февраля, 2011 Нужно запрограммировать метод Адамса-Штёрмера. Я вроде начал, но застрял на основной формулеВобщем там y[n+1]=...+h*h/240*(f[n+1]+...)Вот зздесь я понять не могу как найти эту функцию f[n+1], которая зависит от х и у, по-моему даже от y[n+1].В итоге получается одно уравнение и 2 неизвестных. Ссылка на комментарий
martinges Опубликовано 9 февраля, 2011 Жалоба Поделиться Опубликовано 9 февраля, 2011 http://reslib.com/book/Chislennie_metodi_v_tehnike/115неплохая литература насколько я понимаю.... там задействована рекурентная формула...и функция f[n+1] зависит от x, y[n+1] и y'[n+1]? я не дочитал сам метод буков много просто предполагаю что это так Ссылка на комментарий
gaiver123 Опубликовано 9 февраля, 2011 Автор Жалоба Поделиться Опубликовано 9 февраля, 2011 ну это-то я понял просто как найти эту самую f и y[n+1] емсли мне именно его и над найти Ссылка на комментарий
martinges Опубликовано 9 февраля, 2011 Жалоба Поделиться Опубликовано 9 февраля, 2011 Если честно надо читать Но когда я был студентом то задача Коши решалась достаточно просто) краевые условия ведь у тебя есть.Судя по алгоритму тут будет рекурсивная функция, причем находя каждый раз новую Yn ты поидее получаешь новый Fn. А старт вычислений дают краевые условия --> то есть F0 ты получить должен вроде бы... P.S. Вполне возможно что не прав Ужасть я забыл численные методы(посыпаю голову пеплом ) Ссылка на комментарий
gaiver123 Опубликовано 10 февраля, 2011 Автор Жалоба Поделиться Опубликовано 10 февраля, 2011 Ну да краевое условие самому в проге нужно задавать y[0], отсюда f[0], просто с этой рекурсивной функцией у меня нелады, так что если можешь, то объясни поподробней про неё.Вот моя функция y'=cos(x+y)+0,5(x-y) и как с ней проделывать эти операции не пойму Ссылка на комментарий
gaiver123 Опубликовано 1 марта, 2011 Автор Жалоба Поделиться Опубликовано 1 марта, 2011 народ помогите, я вроде еле как программу составил, а она некоторые значения не выводит.program Kursovaya;uses crt;varyo,y,yt,x: array [0..100] of real;func1,func,o,pogr,e,yss,q,p,r,h:real;n,a,b,i:integer; function fc(x,y:real):real; var l:real; begin yss:=cos(x+y)+0.5*(x+y); l:=yss; fc:=l; end;beginclrscr; writeln('vvedite znachenie koncov otrezka'); writeln('a='); read(a); writeln('b='); read(; writeln('vvedite y[0]'); writeln('y[0]='); read(y[0]); writeln('vvedite kol-vo shagov'); writeln('n='); read(n); begin h:=(b-a)/n; x[0]:=a; x[n]:=b; for i:=1 to n-1 do x:=x[0]+i*h; end; begin yo[0]:=y[0]-h*fc(x[0],y[0]); yo[1]:=y[0]+h*fc(x[1],y[0]); for i:=2 to 5 do yo:=y[0]+2*h*fc(x,y[0]); end; begin for i:=0 to 5 do y:=yo; end; begin for i:=5 to n-1 do func:=67*fc(x,y)-8*fc(x[i-1],y[i-1])+122*fc(x[i-2],y[i-2]-8*fc(x[i-3],y[i-3])+67*fc(x[i-4],y[i-4])); y[i+1]:=y+y[i-4]-y[i-5]+sqr(h)/48*(func); begin yt[0]:=y[0]-h*fc(x[0],y[0]); yt[1]:=y[0]+h*fc(x[1],y[0]); for i:=2 to 3 do yt:=y[0]+2*h*fc(x,y[0]); end; begin for i:=0 to 3 do y:=yt; end; for i:=3 to n-1 do func:=(fc(x[i-3],y[i-3])+fc(x[i-2],y[i-2])+fc(x[i-1],y[i-1])+fc(x,y)); func1:=17*(func)+232*fc(x,y)+222*fc(x[i-1],y[i-1])+232*fc(x[i-2],y[i-2])+17*fc(x[i-3],y[i-3]); yt[i+1]:=y+y[i-2]-y[i-3]+sqr(h)/240*(func1); end; begin for i:=0 to n do o:=abs(y)-abs(yt); o:=abs(o); writeln('pogreshnost ravna ',o:5:2); for i:=-1 to n-1 do writeln(x[i+1]:5:2,' y[',i+1,']=',y[i+1]:5:2,' yt[',i+1,']=',yt[i+1]:5:2,' ',o:5:2); end;end.посмотрите плз,только не надо структуру менять, только тот фрагмент где не выводит, может я где-то накосячил Ссылка на комментарий
martinges Опубликовано 4 марта, 2011 Жалоба Поделиться Опубликовано 4 марта, 2011 for i:=5 to n-1 dofunc:=67*fc(x,y)-8*fc(x[i-1],y[i-1])+122*fc(x[i-2],y[i-2]-8*fc(x[i-3],y[i-3])+67*fc(x[i-4],y[i-4]));y[i+1]:=y+y[i-4]-y[i-5]+sqr(h)/48*(func); //выполняется только один раз для y[n]могу ошибаться но лучше такfor i:=5 to n-1 dobeginfunc:=67*fc(x,y)-8*fc(x[i-1],y[i-1])+122*fc(x[i-2],y[i-2]-8*fc(x[i-3],y[i-3])+67*fc(x[i-4],y[i-4]));y[i+1]:=y+y[i-4]-y[i-5]+sqr(h)/48*(func); //выполняется для каждого i в пределах ОДЗend;--------------------------------for i:=3 to n-1 dofunc:=(fc(x[i-3],y[i-3])+fc(x[i-2],y[i-2])+fc(x[i-1],y[i-1])+fc(x,y));func1:=17*(func)+232*fc(x,y)+222*fc(x[i-1],y[i-1])+232*fc(x[i-2],y[i-2])+17*fc(x[i-3],y[i-3]);yt[i+1]:=y+y[i-2]-y[i-3]+sqr(h)/240*(func1);//выполняется только один раз для yt[n]поменял наfor i:=3 to n-1 dobeginfunc:=(fc(x[i-3],y[i-3])+fc(x[i-2],y[i-2])+fc(x[i-1],y[i-1])+fc(x,y));func1:=17*(func)+232*fc(x,y)+222*fc(x[i-1],y[i-1])+232*fc(x[i-2],y[i-2])+17*fc(x[i-3],y[i-3]);yt[i+1]:=y+y[i-2]-y[i-3]+sqr(h)/240*(func1);//выполняется для каждого i в пределах ОДЗend;P.S. Первые 5 значений y и yt совпадают... остальные нет это верные итерации? Ссылка на комментарий
gaiver123 Опубликовано 4 марта, 2011 Автор Жалоба Поделиться Опубликовано 4 марта, 2011 ну ароде да, книгу почитал первые значения находятся по этим формулам.Спасибо, всё работает. Ссылка на комментарий
gaiver123 Опубликовано 18 марта, 2011 Автор Жалоба Поделиться Опубликовано 18 марта, 2011 всё больше не требуется, сдал курсач народ снова Неlр!!!Унёс эту прогу преподу,она сказала что нужно взять уравнение второго порядка попроще с готовым точным решением и изменить прогу с заменой на новое уравнение. Кстати, я забыл что там должно быть 2 нач. условия(1-для у0,а 2 для у'0).Как изменить эту прогу с учётом всех выше перечисленных изменений?Неправильно сформулировал. Вернее куда там совать второе условие, где оно там используется? Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти