![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Ven |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
нужно решить уравнение методом простых итераций. Задачу нашла на форуме в FAQ
сделала по образцу, в итоге ошибка 205: Floating Point Overlow
Про метод итераций читала, в принципе поняла, но если кто сможет рассказать доходчиво- буду очень благодарна. Добавлено через 15 мин. кстати,когда выдает ошибку - возращает меня на строку Цитата F:= x*x + x + 0.09; Сообщение отредактировано: Ven - 9.10.2011 22:21 |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата сделала по образцу, в итоге ошибка 205: Floating Point Overlow Значит, задаешь начальное приближение неверно. Потом X постоянно увеличивается, и на каком-то этапе становится настолько большим, что попытка возвести его в квадрат приводит к FPO... Попробовал. В качестве начального приближения ввел -1, программа не вылетела... |
Ven |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
но и решения оно не выдает тоже(... Может подскажете, как эту программу правильно написать? или ссылку на рабочую, похожую..
|
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
но и решения оно не выдает тоже(... 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. Помню, когда-то я этим занимался, так я там встроил в код автоматический подбор коэффициента по характеру функции.. )) -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
IUnknown |
![]()
Сообщение
#5
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
но и решения оно не выдает тоже(... Правда?Vvedite priblijennoe znachenie x=-1 То есть, -0.9 это уже не решение? |
Lapp |
![]()
Сообщение
#6
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Правда? ... То есть, -0.9 это уже не решение? Упс! Володь, извини.. всегда надо самому проверять.. Я подумал - по количеству итераций вылетает. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Ven |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
Правда? Vvedite priblijennoe znachenie x=-1 То есть, -0.9 это уже не решение? когда я набираю -1 и 0,01 меня просто выкидывает в саму программу..сейчас еще раз проверю всё Сообщение отредактировано: Ven - 10.10.2011 13:31 |
Гость |
![]()
Сообщение
#8
|
Гость ![]() |
Нажми Alt-F5
И еще совет: убери ужасный clrscr, тогда ты будешь видеть результаты предыдущего прогона тоже - а это полезно. |
Ven |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
|
Гость |
![]()
Сообщение
#10
|
Гость ![]() |
Спасибо.А без Alt-F5 можно как нибудь вывести сразу? Оно и выводится СРАЗУ. Просто ты не успеваешь заметить, потому что программа заканчивает работу очень быстро, и ты снова оказываешься в редакторе. Если хочешь задержать программу, чтоб сразу не заканчивалась, поставь readln; перед последним end. Тогда тебе надо будет нажать enter, чтоб снова попасть в редактор. |
Ven |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
и еще. мне дали вот такую программу, но я в ней особо не смогла разобраться. задание то же.
Она в ответ выводит нормальное число.. В моей программе как нибудь можно это сделать? Пы.Сы. Извиняюсь конечно за такие вопросы,просто я не особо опытная в написании программ) пытаюсь разобраться)
нормальное- в смысле "-0,6" и т.п. Сообщение отредактировано: Ven - 10.10.2011 13:44 |
Lapp |
![]()
Сообщение
#12
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
ты что-то такое имеешь в виду?
l:= Round(-ln(eps)/ln(10)); Только не забудь описать l, как целую переменную. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Ven |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
именно это) Спасибо большое!
а можешь разъяснить x:l+3:l -вот это? или может как мне в поисковике набрать,почитать,по какому принципу это делается? Хочется не просто написать, а понять) |
Lapp |
![]()
Сообщение
#14
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
а можешь разъяснить x:l+3:l -вот это? Нет пробем ). Это форматированный вывод вещественного числа. write(x:a:b); Первое число, a - длина поля вывода, второе, b - количество знаков после точки. Обычно в таких случаях пишут константы (как у тебя i:3 написано), но можно и выражения с переменными. Я посчитал через точность, сколько знаков после точки, а на все поле вывода еще три набросил - вот и все )). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Ven |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Женский Репутация: ![]() ![]() ![]() |
Огромное спасибо!
![]() Вы мне очень помогли)) |
Гость |
![]()
Сообщение
#16
|
Гость ![]() |
Это снова я))) В общем программу я так и не сдала... Собственно, в чем вопрос: При различных значениях eps значения должны совпадать, разница только в кол-ве цифр после запятой... а у меня с разной точностью разные цифры... Кто-нибудь может подсказать в чем ошибка? (программа в первом посте)
|
Krjuger |
![]()
Сообщение
#17
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Выложи полный код со всеми исправлениями,чтобы мы могли взглянуть.
|
Гость |
![]()
Сообщение
#18
|
Гость ![]() |
program ITERAT; |
Krjuger |
![]()
Сообщение
#19
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Покажите примеры для которых у вас получаются разные значения....А то я проблемы не вижу.Если не считать проблемой попытки взять положительное число и получить переполнение.
Сообщение отредактировано: Krjuger - 15.01.2012 21:46 |
Гость |
![]()
Сообщение
#20
|
Гость ![]() |
смысл в том что первые числа должны совпадать, вот например при 0,01 ответ 0,56487..... при 0,001 ответ 0,5669089..... и т.д. (это значения из программы которую сдавали ранее ему,для другой ф-ции, но самой проги у меня нет,чтоб посмотреть)
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:26 |