IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> метод итераций по образцу с форума, выдает ошибку
Ven
сообщение 9.10.2011 22:17
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский

Репутация: -  1  +


нужно решить уравнение методом простых итераций. Задачу нашла на форуме в FAQ


сделала по образцу, в итоге ошибка 205: Floating Point Overlow


program ITERAT;
uses crt;

const max_iter=100; {maksimal'noe chislo iteraciy}

var

i: integer;
x,x0,eps,M: real;

function F(x:real):real; {funkciya}

begin

F:= x*x + x + 0.09;
end;

begin {osnovnaya programma}
clrscr;
write('Vvedite priblijennoe znachenie x='); readln(x);
write('Vvedite tochnost vichisleniy eps='); readln(eps);

i:=0;
repeat
x0:=x;
x:=x0+F(x0);
inc(i);
writeln('---Iteraciya ' , i:3,' x=',x);
writeln('F(x)=' , F(x),' tochnost=' , abs(x-x0));
until (abs(x-x0)<=eps) or (i>max_iter);

if (abs(x-x0)<=eps) then writeln ('Otvet: X=' , x)
else writeln('OTVET NE NAYDEN!!! za ',max_iter:0,' shagov iteraciya ne soshlas');

end.





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

Добавлено через 15 мин.
кстати,когда выдает ошибку - возращает меня на строку
Цитата
F:= x*x + x + 0.09;


Сообщение отредактировано: Ven - 9.10.2011 22:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Ven
сообщение 10.10.2011 8:47
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Женский

Репутация: -  1  +


но и решения оно не выдает тоже(... Может подскажете, как эту программу правильно написать? или ссылку на рабочую, похожую..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.10.2011 9:49
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Ven @ 10.10.2011 9:47) *
но и решения оно не выдает тоже(...

Ven, дело в том, что область сходимости тут действительно очень узкая. Задай x=-0.5 - и получишь ответ, левую точку (-0.9). Метод итераций очень капризный - с одной стороны. А с другой - имеет много свобод. Вот смотри..

Ты имеешь уравнение

F(x) = 0

По нему ты конструируешь

F(x) + x = x

- и пользушься им. Но можно же исходное уравнение домножить на любой множитель:

a*F(x) = 0

И тогда ты получишь:

a*F(x) + x = x

Коэффициент a можно подобрать так, чтобы расхирить зону сходимости. Для этого можно его специально подобрать (по формулам), но можно для начала и просто попробовать разные значения. Например, если положить a=-1, то получим

-F(x) + x = x

Если ты внесешь это изменение в программу и снова задашь начальное значение x=-0.5, то ты теперь получишь уже правый корень (-0.1). Потом попробуй задать a=0.1, и зона сходимости расширится довольно неплохо. Можно будет начинать, скажем, с -10 или с +5. Попробуй )). А потом попробуй a=-0.1. Попробуй и одну сотую.. Ты увидишь, что чем меньше (по модулю) этот коэффициент - тем лучше )). Но при его уменьшении сходимость хоть и стабилизируется, но и замедляется. Рекомендую увеличить максимальное число итераций по крайней мере до 1000.
Давай, дерзай. И показывай результаты )).

P.S.
Помню, когда-то я этим занимался, так я там встроил в код автоматический подбор коэффициента по характеру функции.. ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Ven   метод итераций по образцу с форума   9.10.2011 22:17
IUnknown   Значит, задаешь начальное приближение неверно. Пот...   9.10.2011 23:30
Ven   но и решения оно не выдает тоже(... Может подскаж...   10.10.2011 8:47
Lapp   но и решения оно не выдает тоже(... Ven, дело в т...   10.10.2011 9:49
IUnknown   но и решения оно не выдает тоже(... Правда? Vved...   10.10.2011 10:01
Lapp   Правда? ... То есть, -0.9 это уже не решение? Упс...   10.10.2011 10:23
Ven   Правда? Vvedite priblijennoe znachenie x=-1 Vved...   10.10.2011 13:25
Гость   Нажми Alt-F5 И еще совет: убери ужасный clrscr, то...   10.10.2011 13:28
Ven   Нажми Alt-F5 И еще совет: убери ужасный clrscr, т...   10.10.2011 13:34
Гость   Спасибо.А без Alt-F5 можно как нибудь вывести сраз...   10.10.2011 13:40
Ven   и еще. мне дали вот такую программу, но я в ней ос...   10.10.2011 13:42
Lapp   ты что-то такое имеешь в виду? l:= Round(-ln(eps...   10.10.2011 13:54
Ven   Огромное спасибо! :wub: Вы мне очень помогли)...   10.10.2011 14:10
Гость   Это снова я))) В общем программу я так и не сдала....   15.01.2012 20:04
Krjuger   Выложи полный код со всеми исправлениями,чтобы мы ...   15.01.2012 21:05
Гость   program ITERAT; uses crt; const max_iter=100; {m...   15.01.2012 21:20
Krjuger   Покажите примеры для которых у вас получаются разн...   15.01.2012 21:45
Гость   смысл в том что первые числа должны совпадать, вот...   16.01.2012 20:54
Ven   у меня такой последовательности не получается......   16.01.2012 20:58
IUnknown   Ven, я не понимаю, в чем проблема? Ты задаешь точн...   16.01.2012 21:12
Ven   я конечно понимаю что мне еще далеко до осознания ...   16.01.2012 21:17
Krjuger   Блин,уже все разъяснили,долго писал,удалите мой по...   16.01.2012 23:17
Ven   Еще подскажите пож-та. Тут вообще 2 корня:-0,9 и -...   17.01.2012 13:33
IUnknown   Можно: x0:=x; x:=x0-F(x0); // <--- внимательно...   17.01.2012 14:38
Ven   приближении = -1. а если нужно чтобы программа с...   17.01.2012 17:50
Krjuger   Ну как вариант ввести такую переменную,как a=1/f...   17.01.2012 19:34


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 2:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"