Форум «Всё о Паскале» _ Задачи _ Итерационный цикл
Автор: Zvada 25.03.2011 3:53
Условия задачи таковы основная формула Y=exp((-1/3)*ln(x)) формула вычисления "текущего" значения Y(t)=Y(p)*(4+3*(x^3)*(sqrt(Yp)) счётчик итераций k=0,1,2... Y(0)=6 x=277234 E=0,000001 Условие завершение цикла |Yt-Yp|<E по завершению цикла высчитать Y по первой формуле
Program Post; uses crt; procedure pagelist; begin if wherey > 23 then begin writeln('dlia prodolzenia nazmite ENTER'); readln; clrscr; end; end; var k:integer; x:single; E,yt,yp,y:single; begin E:=0.0000001; k:=0; x:=277234; yt:=6; repeat; if k>55 then writeln('nevozmogno dostignut predela tochnosti') else begin yp:=yt; if(yt>0) then begin yt:=yp*(4+3*exp(3*ln(yp))); writeln('k=',k,' Yt=',yt:10:5,' Yp=',yp:10:5); end; pagelist; k:=k+1; end; until abs(yt-yp)<E; y:=exp((-1/3)*ln(x)); writeln('kol-vo interacii',k,' y=',y:10:5); end.
выдаёт floating point overflow хотя деления на 0 я не вижу! что делать?
Автор: Lapp 25.03.2011 5:13
Цитата(Zvada @ 24.03.2011 23:53)
Условия задачи таковы основная формула Y=exp((-1/3)*ln(x)) формула вычисления "текущего" значения Y(t)=Y(p)*(4+3*(x^3)*(sqrt(Yp)) счётчик итераций k=0,1,2... Y(0)=6 x=277234 E=0,000001 Условие завершение цикла |Yt-Yp|<E по завершению цикла высчитать Y по первой формуле
Program Post; uses crt; procedure pagelist; begin if wherey > 23 then begin writeln('dlia prodolzenia nazmite ENTER'); readln; clrscr; end; end; var k:integer; x:single; E,yt,yp,y:single; begin E:=0.0000001; k:=0; x:=277234; yt:=6; repeat; if k>55 then writeln('nevozmogno dostignut predela tochnosti') else begin yp:=yt; if(yt>0) then begin yt:=yp*(4+3*exp(3*ln(yp))); writeln('k=',k,' Yt=',yt:10:5,' Yp=',yp:10:5); end; pagelist; k:=k+1; end; until abs(yt-yp)<E; y:=exp((-1/3)*ln(x)); writeln('kol-vo interacii',k,' y=',y:10:5); end.
выдаёт floating point overflow хотя деления на 0 я не вижу! что делать?
С твоего позволения, я перепишу твою первую формулу попроще:
Y = x-1/3
Вторую перепиши, пожалуйста, сам. Заодно поставь в ней недостающую скобку (я не уверен, где она должна быть).
Деления на ноль у тебя действительно нет. Но есть банальное переполнение. В варианте с single оно происходит при k=2, если использовать double - то при k=4.
Я не совсем понимаю, что за формула у тебя в программе. Она очень мало похожа на то, что ты написал выше.
Автор: Zvada 29.03.2011 2:28
цитирую задание:
Вычислить значение (У) по рекуррентной формуле. Вычисление прекратить по достижении точности (dd). Вывод организовать поэкранно с указанием номера итерации (n), текущего приближения (y) и точности.
Задание(вычислить значение функции) y = x1/3
Реккурентная формула Y(текущее - т)=Y(предыдущее - п)*(4+3*x3*sqrt(y(п)) k=0,1,2,3...
Вычисления прекратить при dd=|y(т)-y(п)|<E
Исходные данные для контрольного просчёта y(0)=6 E=0.000001 x=277234
Автор: Lapp 29.03.2011 6:55
Цитата(Zvada @ 28.03.2011 22:28)
цитирую задание Вычислить значение (У) по рекуррентной формуле. Вычисление прекратить по достижении точности (dd). Вывод организовать поэкранно с указанием номера итерации (n), текущего приближения (y) и точности.
Спасибо, конечно, но почему ты не ответил на мои слова?
Цитата
Задание(вычислить значение функции) y = x1/3
А почему в первом посте у тебя тут затесался знак минус?
Цитата
Реккурентная формула Y(текущее - т)=Y(предыдущее - п)*(4+3*x3*sqrt(y(п)) k=0,1,2,3...
И все равно у тебя баланс скобок не соблюден.. Напиши формулу правильно, тогда продолжим разговор. Не подумай, что я придираюсь. Смотри: 1. Просто, если к этому виду формулы добавить скобочку в конец, это НЕ БУДЕТ верная формула для вычисления кубического корня. Приведи правильную. 2. То, что у тебя в проге написано неправильно ДАЖЕ ДЛЯ ЭТОЙ неправильной формулы. Посмотри внимательно. Я же писал об этом в предыдущем посте..
Автор: Zvada 31.03.2011 0:41
Вот ссылка на задание и полное описание к моей лабе! мой вариант под номером 8. ____.doc ( 301 килобайт )
Кол-во скачиваний: 615
Автор: Krjuger 31.03.2011 2:54
Цитата
yt:=yp*(4+3*exp(3*ln(yp)));
где в этой формуле участвует х?Его нету. Твоя задача по рекурентной формуле найти приближенное значение у,получив это значение найти точное значение подставив в первую формулу.У тебя в документе есть пример,что в нем непонятного?Единственное,там последовательность представлена в виде ряда,а у тебя немного другое представление и все.