![]() |
|
|
![]()
|
|
| Albinos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 11.10.2003 Репутация: нет Всего: 3 |
Задача состоит в численном поиске нулей функции.
О функции известно только то, что она непрерывна и достаточно гладка. Вид и поведение функциив окрестности нуля неизвестно. Пока делаю следующее - прохожу функцию с большим шагом и для интервала поиска нахожу окрестности нуля. Дальше для каждого найденного интервала применяю метод деления отрезка пополам (ньютоновские методы циклят или вылетают за пределы окрестности Плюс анализ пиков на нули - из-за большого шага приходится заниматься и этим. Может есть более достойный алгоритм? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ничего достойного для столь широкого класса функций, думаю, найти не удастся
ну представь себе функцию (x-sqrt(2))^2 (любая производная существует и непрерывна так как компьютер оперирует только рациональными числами, то при проходе с любым шагом функция даст положительное значение, а значит, промежуток с нулем найден не будет чтобы можно было разработать нормальный алгоритм, придется значительно сузить класс функций... -------------------- qqq |
|||
|
||||
| Albinos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 11.10.2003 Репутация: нет Всего: 3 |
Да ну нет. Я же не ставлю перед собой задачу найти ТОЧНОЕ решение.
Как раз для указанного примера и занимаюсь отдельной обработкой пиков\впадин. Да и про функции тоже не так уж мало известно. Немного расскажу о задаче. Программа расчитывает углы между планетами на заданный момент времени для заданной точки на Земле. Это прямой расчет. Он запрограммирован и работает нормально (быстро и достаточно точно). А обратная задача заключается в поиске всех моментов времени, для которых угол между двумя заданными планетами принимает указанную величину. Для данной точки на Земле. Реально углы изменяются не резко (строил графики и смотрел). Аналитически задачу решить наверно можно, но в алгоритме прямого расчета уравнения движения планет аппроксимируются рядами, которые к тому же учитывают какие-то возмущения (я не силен в астрофизике). Поэтому копаться с этими уравнениями мне кажется бессмысленно. Так вот, сначала прохожу весь интервал поиска с большим шагом - скажем, 1 день (максимальный интервал - 100 лет, 36500 итераций максимум). А затем методом деления отрезка пополам уточняю время, скажем, до минуты. А угол рассчитывается с точностью, скажем, до секунды. Так вопрос остается - а можно ли как-то оптимизировать алгоритм? И вообще как численно находятся все нули функции (в смысле - если их на интервале несколько)? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
если эти ряды полиномиальные, можно воспользоваться следующим алгоритмом: 1. находим корни производной, добавляем к их множеству очень большое положительное число и очень большое отрицательное 2. между ними ищем нули функции а задача (1) решается таким же образом в конце концов приходим к поиску нулей полинома первой степени (это, если ряды конечные, но, так как ними аппроксимируют, то их тоже можно усечь) -------------------- qqq |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
кстати, приведи приблизительный вид функций, посмотрим, подумаем...
-------------------- qqq |
|||
|
||||
| Albinos |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 11.10.2003 Репутация: нет Всего: 3 |
Собрался было написать и назадавать вопросов, но вроде все понял по ходу.
Действительно, алгоритм сработает для полиномов. Но возникает вопрос - а не слишком ли все сложно? Расчет производной на каждом шаге - достаточно сложная операция. Хотя, с другой стороны, точно найдем все корни. Но неважно. В моей задаче - тригонометрические ряды. Откуда они берутся и какой имеют вид - сейчас точно не скажу (книжки нет под рукой Gamma(alpha1, alpha2, dec1, dec2) = arccos(cos(alpha1 - alpha2) * cos(dec1) * cos(dec2) + sin(dec1) * sin (dec2)), где alpha1, alpha2 - так называемые "склонения" планет - dec1, dec2 - "прямые восхождения". (Это если рассматривать сферическую систему координат, то положение планет определяется этми двумя углами и расстоянием до планеты.) В общем виде можно считать, что эти углы независимы для двух разных планет соответственно, а сами представляют собой функцию от времени. А по обратному алгоритму, если задан угол Gamma0, то я ищу нули функции F(T) = Gamma0 - Gamma(T) описанным выше способом. |
|||
|
||||
| val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Смотри литературу по Численным методам, главы, посвященные численному решению уравнений.
К примеру, книга Демидовича "Численные методы". -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
| Zzz |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 21.2.2003 Где: Мурманск Репутация: нет Всего: 5 |
Насколько я помню, смотреть нужно раздел "Алгоритмы оптимизации". Там рассматриваются алгоритмы поиска экстремумов и нулей функции...
-------------------- Бесполезной громоздкой надстройкой является Windows от Майкрософт. Она занимает 1Мб памяти диска и рассчитана на использование устройства типа мышь. "ЭВМ в инженерной практике" М. 1989г. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
А как на счет метода касательных и/или хорд? Или не в тему? У меня находил достаточно быстро. Могу кинуть код. Вспомнил: эта прога ищет для полинома 3-ей степени. ее нужно переделать под конкретную функцию.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| df_3 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 256 Регистрация: 19.5.2003 Репутация: нет Всего: 1 |
Можно делить не методом дихтомии а методом золотого сечения, сходимость растет быстрее вроде.
-------------------- ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ! |
|||
|
||||
| ida |
|
|||
![]() замужем ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2277 Регистрация: 14.5.2002 Где: Санкт-Петербург Репутация: нет Всего: 58 |
Пардон за оффтопик.... смахивает на разработку астрологической проги (вариант - астрономической). Я права?
|
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |