| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Быстрое постронеие сглаживающей точки поверхности |
| Автор: _Y_ 17.11.2014, 22:39 |
| Имеется довольно большой 2-мерным массив действительных чисел, представляющий собой некую поверхность. Разброс величин относительно этой поверхности определяется не только статистическим шумом, но и массой других факторов. Нужно найти массив такого же размера, но описывающий более-менее гладкую поверхность. Степень гладкости довольно высокая: от плоскости до наличия максимум одного горба или ямы. Но, все-таки, степень сглаживания хотелось бы задавать какими-нибудь параметрами, какими - не важно. В принципе, задача решаема и решена (последовательная аппроксимация рядов и колонок полиномом). Проблема в том, что использованный алгоритм жрет немеряно времени. Подскажите, пожалуйста, какой алгоритм делал бы работу с оглядкой на сроки исполнения. Спасибо! |
| Автор: _Y_ 18.11.2014, 10:38 | ||
Спасибо, но хотелось бы подробностей: как это считать? |
| Автор: Akina 18.11.2014, 11:19 |
| Да как обычно - по МНК. Задаёшь аналитическое выражение для желаемого уравнения поверхности, в коем у тебя будет некое количество констант. Суммируешь отклонения расчётных точек от вычисленных для этого желаемого уравнения по всему массиву. Производная этой суммы по любой из констант при оптимальных значениях констант равна нулю. Преобразовываешь аналитически уравнения производных, получаешь систему уравнений, где количество уравнений равно количеству констант. Если функция уравнения поверхности не очень сложна, как правило удаётся получить аналитически систему линейных уравнений относительно этих констант, где коэффициенты являются сложными суммами экспериментальных значений. И решение системы даёт оптимальные значения констант. |
| Автор: _Y_ 18.11.2014, 20:34 |
| Hу тогда остается спросить про подходящее уравнение |
| Автор: Akina 18.11.2014, 21:04 |
| Массив у тебя, я полагаю, не генератор случайных чисел производит? Если так, то под ним лежит какой-то процесс, со своей логикой и физикой, с ненким математическим описанием. Вот его и используй в качестве основы для построения аппроксимирующего уравнения. |
| Автор: _Y_ 18.11.2014, 23:51 | ||
По логике вещей, мне надо минимизировать такую функцию:
Попытался решить пролему аналитически, только усложнил, к сожалению. Так что буду благодарен за идеи как с ней побороться. PS: Извиняюсь, что привел формулу в таком псевдокодовом виде. http://ipicture.ru почему-то не хочет загружать картинку с красиво набранным уравнением. |
| Автор: Akina 19.11.2014, 08:51 |
А локальный JPG загрузить в сообщение - не? |
| Автор: Pavia 19.11.2014, 21:22 |
| _Y_, Рассмотрим одномерный случай. Существует несколько подходов: - Аппроксимация полиномом. - Аппроксимация сплайном. - Фильтрация вч - Фильтр Кальмана - Оптимизация ломанной Двухмерный аналогичен. Решается выполнением отдельно по Х и Y. 1) Аппроксимация требует. 81*N умножений и столько же сложений. И решения матричного уравнения. Скорость регулируется степенью p. 81=p^2 но более p=6 не советую. 2) Тоже самое, но точность аппроксимации выше так как нет проблем со степенью. А скорость и гладкость регулируется разбиением на число полиномов(участков). 3) Фильтрация зависит от множества факторов. Но от 10-100 умножений на точку. В зависимости от степени. 4) Не в курсах как там. 5) Оптимизация ломанной этот тот же МНК что в 1 и 2, только линейный. p*N умножений. Гладкость определяется коэффициентом допустимого отклонения. |
| Автор: _Y_ 19.11.2014, 21:41 | ||
Pavia,
Именно так и делаю. Полиномом 4-й степени занимает 1,9 секунды на моем нотбуке, полиноммом 3-й 1,5 секунды (но результат уже не очень хороший). Можно, в принципе, подключить комп помощнее, но надо ускорить не в два раза, а в десять, наверное. А про это я забыл Вот она: |
| Автор: Pavia 19.11.2014, 22:32 |
| _Y_, А размерность данных какая и какая сложность алгоритма? Просто я думаю где-то ошибка, из-за этого скорость маленькая. А вот качество да. Там хромает, поэтому я и предложил сплайн, тем более он может быть 3 порядка. |
| Автор: _Y_ 20.11.2014, 12:02 |
Алгоритм, собственно, предельно простой.
|