Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрое постронеие сглаживающей точки поверхности, по 2D массиву значений 
:(
    Опции темы
_Y_
Дата 17.11.2014, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Имеется довольно большой 2-мерным массив действительных чисел, представляющий собой некую поверхность. 

Разброс величин относительно этой поверхности определяется не только статистическим шумом, но и массой других факторов.

Нужно найти массив такого же размера, но описывающий более-менее гладкую поверхность. Степень гладкости довольно высокая: от плоскости до наличия максимум одного горба или ямы. Но, все-таки, степень сглаживания хотелось бы задавать какими-нибудь параметрами, какими - не важно.

В принципе, задача решаема и решена (последовательная аппроксимация рядов и колонок полиномом). Проблема в том, что использованный алгоритм жрет немеряно времени.

Подскажите, пожалуйста, какой алгоритм делал бы работу с оглядкой на сроки исполнения.

Спасибо!


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 18.11.2014, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(_Y_ @  17.11.2014,  23:39 Найти цитируемый пост)
Степень гладкости довольно высокая: от плоскости до наличия максимум одного горба или ямы. Но, все-таки, степень сглаживания хотелось бы задавать какими-нибудь параметрами, какими - не важно.

Для плоскости всё элементарно и быстро считается по МНК - все необходимые суммы произведений считаются за 1 проход, и система из 4 линейных уравнений решается чисельно.
Далее - задаётся параметр допустимого отклонения и начинается отбрасывание наиболее сильно отклоняющихся от плоскости точек, сама плоскость при этом пересчитывается. При этом наиболее отклоняющаяся точка считается за 1 проход, после нахождения суммы просто корректируются и система пересчитывается.
Когда максимальное отклонение перестанет превышать заданный параметр, отброшенные точки (вернее, их отклонение от окончательной плоскости) аппроксимируются на некую куполообразную поверхность (с нулевыми асимптотами по всем направлениям - нечто типа вероятностной кривой в сечении через максимум) - если повертеть карандашом, вряд ли аналитическое решение получится сложнее МНК, то же накопление сумм, только не произведений. Итогом будет сумма уравнений плоскости и купола.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 18.11.2014, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(Akina @  18.11.2014,  09:46 Найти цитируемый пост)
Когда максимальное отклонение перестанет превышать заданный параметр, отброшенные точки (вернее, их отклонение от окончательной плоскости) аппроксимируются на некую куполообразную поверхность (с нулевыми асимптотами по всем направлениям - нечто типа вероятностной кривой в сечении через максимум) 

Спасибо, но хотелось бы подробностей: как это считать?



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 18.11.2014, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Да как обычно - по МНК. Задаёшь аналитическое выражение для желаемого уравнения поверхности, в коем у тебя будет некое количество констант. Суммируешь отклонения расчётных точек от вычисленных для этого желаемого уравнения по всему массиву. Производная этой суммы по любой из констант при оптимальных значениях констант равна нулю. Преобразовываешь аналитически уравнения производных, получаешь систему уравнений, где количество уравнений равно количеству констант. Если функция уравнения поверхности не очень сложна, как правило удаётся получить аналитически систему линейных уравнений относительно этих констант, где коэффициенты являются сложными суммами экспериментальных значений. И решение системы даёт оптимальные значения констант.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 18.11.2014, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Hу тогда остается спросить про подходящее уравнение smile 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 18.11.2014, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Массив у тебя, я полагаю, не генератор случайных чисел производит? Если так, то под ним лежит какой-то процесс, со своей логикой и физикой, с ненким математическим описанием. Вот его и используй в качестве основы для построения аппроксимирующего уравнения.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
_Y_
Дата 18.11.2014, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



По логике вещей, мне надо минимизировать такую функцию:

Код

s = s + ( z[i] - L / ( (X-x[i])^2 + (Y-y[i])^2 + Z^2 ) )^2


Попытался решить пролему аналитически, только усложнил, к сожалению. Так что буду благодарен за идеи как с ней побороться.

PS: Извиняюсь, что привел формулу в таком псевдокодовом виде. http://ipicture.ru почему-то не хочет загружать картинку с красиво набранным уравнением.


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Akina
Дата 19.11.2014, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(_Y_ @  19.11.2014,  00:51 Найти цитируемый пост)
не хочет загружать картинку с красиво набранным уравнением

А локальный JPG загрузить в сообщение - не?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Pavia
Дата 19.11.2014, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



_Y_, 
Рассмотрим одномерный случай.
Существует несколько подходов:
- Аппроксимация полиномом.
- Аппроксимация сплайном.
- Фильтрация вч
- Фильтр Кальмана
- Оптимизация ломанной

Двухмерный аналогичен. Решается выполнением отдельно по Х и Y.
1) Аппроксимация требует. 81*N умножений и столько же сложений. И решения матричного уравнения.
Скорость регулируется степенью p. 81=p^2 но более p=6 не советую.
2) Тоже самое, но точность аппроксимации выше так как нет проблем со степенью. А скорость и гладкость регулируется разбиением на число полиномов(участков). 
3) Фильтрация зависит от множества факторов. Но от 10-100 умножений на точку. В зависимости от степени. 
4) Не в курсах как там.
5) Оптимизация ломанной этот тот же МНК  что в 1 и 2, только линейный. 
p*N умножений.  Гладкость определяется коэффициентом допустимого отклонения. 






Это сообщение отредактировал(а) Pavia - 19.11.2014, 21:24
PM MAIL   Вверх
_Y_
Дата 19.11.2014, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Pavia, 
Цитата(Pavia @  19.11.2014,  21:22 Найти цитируемый пост)
- Аппроксимация полиномом.
............
Двухмерный аналогичен. Решается выполнением отдельно по Х и Y.

Именно так и делаю. Полиномом 4-й степени занимает 1,9 секунды на моем нотбуке, полиноммом 3-й 1,5 секунды (но результат уже не очень хороший). Можно, в принципе, подключить комп помощнее, но надо ускорить не в два раза, а в десять, наверное.

Цитата(Akina @  19.11.2014,  08:51 Найти цитируемый пост)
А локальный JPG загрузить в сообщение - не? 

А про это я забыл smile 
Вот она:


Это сообщение отредактировал(а) _Y_ - 19.11.2014, 21:45

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  Untitl.one.gif 2,84 Kb


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
Pavia
Дата 19.11.2014, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



_Y_, 
А размерность данных какая и какая сложность алгоритма? Просто я думаю где-то ошибка, из-за этого скорость маленькая. 
А вот качество да. Там хромает, поэтому я и предложил сплайн, тем более он может быть 3 порядка.

PM MAIL   Вверх
_Y_
Дата 20.11.2014, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Алгоритм, собственно, предельно простой.
  • Имеем 2-мерный массив значений. Все значения наличествуют, ни одного не пропущено.
  • Проходим по рядам исходного массива, аппроксимируя полиномом каждый ряд как одномерный массив. Для аппроксимации используем библиотечную функцию.
  • Полученый сглаженный по рядам массив пропускаем через ту же процедуру еще раз, но теперь сглаживая по колонкам.
  • Вот и все - получилась поверхность, которая всех устраивает.
Собственно, сам я это не придумал: нашел в сети несколько готовых процедур. Эта дала ожидаемый результат. Единственно, что я в ней поменял, разрешил параллелизацию обработки рядов/колонок. иначе процедура работала еще раза в два медленнее.



--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.