Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Итерационный цикл

Автор: 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)));
где в этой формуле участвует х?Его нету.
Твоя задача по рекурентной формуле найти приближенное значение у,получив это значение найти точное значение подставив в первую формулу.У тебя в документе есть пример,что в нем непонятного?Единственное,там последовательность представлена в виде ряда,а у тебя немного другое представление и все.