![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Всем программистам привет! Respect! В общем столкнулся с решением уравнения методом простой итерации: решить уравнение Х=Фи(Х). Очередное приближение корня находится по формуле Хn = Фи(Хn-1); начальное приближение Хо задается произвольно. Метод сходится если Фи штрих(Х) по модулю менее 1. Стал рыскать в инете нашел кучу инфы(про методы Якоби, Кунге), но конкретно как бы и ничего. Разбираться с производными некогда(уже этого почти не помню), может кто нибудь делал ранее подобное, то выложите код или подскажите схему реализации. Реализую сам, т к это элементарно, главное понять логику. Подскажите как быть то?
|
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: 3 Всего: 3 |
В данном случае достаточно написать
Тогда ответом будет x. А производные даны для того, чтоб решающий знал, что если в какой-то точке производная больше единицы, то такой метод не подходит. Это сообщение отредактировал(а) anonym - 11.8.2007, 17:37 |
|||
|
||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
Хо используют в методе Ньютона. В общем допустим у меня есть некое уравнение:
Y(X) = x * x - 2x + 1 и его необходимо решить методом простых итераций. Т е по правилам математики необходимо решить уравнение х*х - 2х +1 =0, а так придется предположить, что допустим х = 2(любое, желательно максимально близкое). Т е если я правильно понимаю, то это и есть Хо(2). Метод простых итераций решения уравнения f(x) = 0 состоит в замене исходного уравнения эквивалентным ему уравнением x = Фи (x) и построении итерационной последовательности по формуле: Хi+1 = Фи(Хi), i = 0,1,2,3,4.. может Фи штрих это есть разность Хi+1 - Xi? и она должна быть менее 1. Вот начинаю: сначала проверяю Хо =2: 2 = 2*2-2*2+1 -не верно, значит необходимо изменить анализируемый корень в меньшую сторону. Приращние задаю допустим 0.1 2 итерация: 1.9 = 1.9*1.9-2*1.9+1 - не верно .. и таким образом добираюсь до 1 и в ерзультате получаю один из корней(через 10 итераций)? или как то не так? Подскажите как быть то? Добавлено через 1 минуту и 31 секунду и что еще интересно, у меня нет самой анализируемой функции, т е ее необходимо чтоли придумать самому или сделать возможность вводить само выражение функции с клавы. Тоже не очень понятно? |
|||
|
||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
в общем написал прогу, обрабатывающую не все корни, но считающую правильно и жестко привязанную к конкретной реализации:
но все равно осталось куча нерешенных задач. Если пользователь введет значение предполагаемого корня, например -100, то будет сообщение уменьшить значение, когда необходимо увеличивать, все из за корня квадратного Присоединённый файл ( Кол-во скачиваний: 5 )
3600.JPG 27,69 Kb |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
FasterHarder, у меня сложилось впечатление, что ты заново изобретаешь велосипед. Посети algolist.manual.ru.
|
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: 3 Всего: 3 |
Твой пример
Это сообщение отредактировал(а) anonym - 12.8.2007, 15:47 |
|||
|
||||
| FasterHarder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.8.2007 Репутация: нет Всего: нет |
где увидел икс в квадрате? я использую икс в кубе. в общем не понял тебя.
|
|||
|
||||
| anonym |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 27.11.2006 Репутация: 3 Всего: 3 |
Да я просто твою цитату привёл
Добавлено через 1 минуту и 41 секунду
Да, кстати фи штрих - это и есть не что иное, как производная функции фи. Добавлено через 8 минут и 12 секунд Можно подставить x0 = 0.5 Тогда f'(x0) = (2*x0 + 0) / 2 = x0 = 0.5 Тогда x1 = f(x0) = (x0^2 + 1) / 2 = 0.625 x2 = (x1^2 + 1) / 2 = 0.695 x3 = (x2^2 + 1) / 2 = 0.74 и т.д. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |