![]() |
|
|
![]()
|
|
| Максим |
|
|||
|
Unregistered |
Есть распределение некого поля, измеренного на поверхности Земли. Нужно определить его источник. Для этого рассчитывают эффект от теоретического тела, анализируют расхождения, вносят изменения в параметры тела и снова рассчитывают. Все бы хорошо, но у этого тела много параметров: глубина залегания (Н), мощность (М), проекция центра на профиль (Ц) и угол наклона (У). Для решения задачи нужно минимизировать расхождения между измеренным и расчетным полем. Зависимость Ф(Н,М,Ц,У) – нелинейная. Я предполагаю, что существуют стандартные способы решения таких задач, но не знаю с чего начать. Подскажите алгоритм или область, в которой нужно искать решение. Максим. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
1. Мера расхождения - как ее определять? Можно минимизировать среднеквадратическую ошибку, а можно сумму модулей отклонений.
2. Записываем SUM(Фрасчетное - Физмеренное)^2 => min или SUM|Фрасчетное - Физмеренное| => min Оптимизируем с ограничениями на глубину залегания, мощность, проекцию центра на профиль и угол наклона. Придется использовать методы нелинейного программирования. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Спасибо.
С мерой расхождения я разобрался. Возможны оба варианта. А вот на счет оптимизации ... Попробовал сделать четыре вложенных цикла, что бы выбрать наиболее оптимальные параметры - считает слишком долго... А какие именно методы нелинейного программирования нужно использовать? |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Это зависит от вида Ф(Н,М,Ц,У). А по большому счету в общем виде задачу решать накладно. Попробуй свести к задаче безусловной оптимизации.
Может быть, получится применить алгоритм Нелдера-Мида. А может выйдет что-то с методом последовательного квадратичного программирования. |
|||
|
||||
| Abrek |
|
|||
|
Unregistered |
А что Matlab использовать нельзя? Там эту задачку махом можно заделать (fminsearch).
Если нет, то самым простым может оказаться метод Ньютона с проверкой на седловые точки. Алгоритм метода Ньютона найдешь без труда. |
|||
|
||||
| podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
fminsearch в Матлабе - штука, конечно, хорошая и задачу нелинейного программирования в общем виде может решать, но не без изъянов.
Во-первых, придется повозиться, если целевая функция испещрена локальными экстремумами. В этом случае мне, например, помогало как можно хуже взять начальное приближение. Во-вторых, настоящие проблемы начинаются, если внедрять это дело в собственную прогу. Компилировать матлабовский код, содержащий вызов fminsearch, в DLL бесполезно. Единственный способ заставить работать - вызвать Матлаб из своей проги как ActiveX сервер. Но это решение =>(__|__)=> и выглядит по-колхозному, ибо Матлаб - вещь тяжелая и долго грузится. А если все равно, на чем делать расчеты, Матлаб - самое то. Даже с простеньким пользовательским интерфейсом можно сделать. |
|||
|
||||
| Максим |
|
|||
|
Unregistered |
Спасибо всем!
Обдумаю поступившие предложения. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |