Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Turbo Pascal. Численные методы (http://www.tehnari.ru/f43/t96332/)

Cbvrf86 14.05.2014 22:13

Turbo Pascal. Численные методы
 
Вложений: 1
Добрый день (утро, вечер, ночь) уважаемые форумчане. Помогите пожалуйста сделать задание по Информатике. Буду очень благодарен за помощь.

Задание во вложении

Vladimir_S 15.05.2014 10:22

Та-ак... Май, стало быть, к концу, забрезжила сессия, студенты просыпаются после весенней спячки...
Ну вот что, господа лоботрясы - хватит! Всем курсом решили на мне поездить? Не пойдёт! Стало быть, так:
Алгоритм решения задачи методом Рунге-Кутты (да-да, именно Кутты, а не Кутта, ибо фамилия математика - Кутта, а не Кутт, так можете и передать своим преподам) имеется здесь и здесь, методы численного решения уравнений, включая половинное деление, - здесь. Вперед и с песней!

Cbvrf86 15.05.2014 10:57

ну что же вы так со мной строго, я без дела не сижу и параллельно и сам что то пытаюсь придумать. Просто по готовому и понимается предмет лучше.

Vladimir_S 15.05.2014 11:17

Цитата:

Сообщение от Cbvrf86 (Сообщение 1032143)
ну что же вы так со мной строго

Ну так а что же мне остаётся, если почти идентичные задачи в последние дни посыпались, как из рога изобилия? И никто не хочет взять готовый шаблон (ссылки выше) и, приложив минимальные усилия, адаптировать готовые решения к своей задаче. Нет, каждому распиши от и до, чтобы осталось тупо бездумно скатать и сдать.
Знаете, в общем-то мы здесь стараемся именно помогать в затруднительных случаях, а не выполнять учебные задания за лентяев, которые весь семестр профилонили а в последний момент спохватились.
А потому, повторяю: ссылки на решения аналогичных задач даны, попытайтесь составить программу под свою задачу, а уж если что-то не будет получаться - мы к Вашим услугам. А просто "вы напишите - я скатаю" - не пойдёт. Извините.

Cbvrf86 18.05.2014 20:39

Вложений: 1
Уважаемый Владимир, в представленных примерах, (не могу дать ссылку т.к у меня менее 20 сообщений) у пользователя Tanechka вы дали решение по методу Эйлера, хотя в задании сказано по методу Рунге-КуттЫ 2го порядка с коррекцией в средней точке, они различаются. Пример в приложении. Пригодилась ссылка для метода половинного деления, а вот с Куттой проблемы

Vladimir_S 18.05.2014 20:54

Цитата:

Сообщение от Cbvrf86 (Сообщение 1032982)
Уважаемый Владимир, в представленных примерах, (не могу дать ссылку т.к у меня менее 20 сообщений) у пользователя Tanechka вы дали решение по методу Эйлера, хотя в задании сказано по методу Рунге-КуттЫ 2го порядка с коррекцией в средней точке, они различаются.

Уважаемый Cbvrf86, ну что же - давайте разбираться. Прежде всего, откроем вот эту ссылку и внимательно просмотрим статью. Так вот, вначале там действительно описывается метод Эйлера, но дальше есть раздел "Модифицированный метод Эйлера с пересчетом", иначе называемый методом Рунге-Кутты второго порядка. Именно по этому алгоритму и решались задачи Танечки и других.

Cbvrf86 18.05.2014 20:59

с вами то я спорить не буду, а вот насчет препода, я незнаю что он скажет если начнет в коде копаться, решение то может и верное, но формулы то различаются. с тем что вы мне показали, и что я во вложении показал. Сижу пока думаю как заменить.

Cbvrf86 18.05.2014 21:13

хорошо вы меня убедили =) хотя я не вижу чем эти формулы идентичны

Vladimir_S 18.05.2014 21:16

Цитата:

Сообщение от Cbvrf86 (Сообщение 1032995)
хорошо вы меня убедили =) хотя я не вижу чем эти формулы идентичны

Так. Вас-то убедил, а сам сейчас рассмотрел - нет, есть-таки различие :D. И где они такое выкопали? Ладно, сейчас нарисую "по-ихнему". Мудрецы, блин...

Vladimir_S 18.05.2014 21:45

Вот так:
Код:

Const
 Eps=0.0001;
 h=0.1;
 N=10;

Var
 I:Array[0..N] of Real;
 j:integer;
 t,Z,k:Real;

Function G(p:real):Real;
begin
 G:=p*p*p*p*p-p*p*p-3.0;
end;

Function EQRoot:real;
var
 a,b,c:real;
begin
 a:=1.0;
 b:=2.0;
 Repeat
  c:=(a+b)/2;
  if G(a)*G(c)<0 then b:=c else a:=c;
 Until b-a<Eps;
 EQRoot:=c;
end;

Function F(x,y,q:real):real;
begin
 F:=1-Sin(q*x+y)+y/(x+2);
end;

Begin
 k:=EQRoot;
 Writeln('k= ',k:0:5);
 I[0]:=1;
 t:=0;
 writeln('t= ',t:3:1,'  I= ',I[0]:6:3);
 for j:=1 to N do
  begin
  t:=t+h;
  Z:=I[j-1]+h/2*F(t-h,I[j-1],k);
  I[j]:=I[j-1]+h*F(t-h/2,Z,k);
  writeln('t= ',t:3:1,'  I= ',I[j]:6:3);
  end;
 Readln
End.



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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.