Comments 12
Вопрос, наверное скорее философский. По сути вы полиномами аппроксимируете некоторую функцию, которая известна по-точечно. При этом значения ее производных неизвесты совсем. Насколько важно при интерполяции "точно попадать" в значения самой функции? Ведь значительно проще с вычислительной точки зрения постоить "наилучшую" в каком-то смысле аппроксимацию, которая в заданные значения функции попадать будет "почти", но например будет настолько гладкой (С2, как минимум), насколько хочется.
Если говорить о промышленности, то, на мой взгляд, нет необходимости точного попадания. Достаточно соблюсти некоторую точность тех. процесса.
В этом алгоритме самая важная часть - монотонность. По сути, нужно аппроксимировать не произвольным полиномом, а одним из монотонных.
Все алгоритмы именно монотонной инерполяции, которые я нашел, используют полиномы Эрмита, просто работают с разными степенями и по-разному назначают производные.
Алгоритм, который я разобрал, работает практически за линию. Один проход - назначение производных, второй - корректировка до монотонности.
Действительно, можно было бы попробовать решать задачу минимизации ошибки, меняя производные в точках. Но тут нужно определять производные функции ошибки, для метода Ньютона - ещё и вторые производные.
Если опорных точек будет много, то и размерность пространства оптимизации будет очень большой.
Оба довода не исключают направления, о котором Вы говорите, но, судя по всему, его разработка пока что ученым либо неинтересна, либо на нее нет времени.(либо слишком просто, либо слишком сложно)
Это не основной мой профиль, я - прикладник. Поэтому, как там в реальности - не знаю)
Как раз вопрос к Вам как прикладнику. Откуда берутся данные, которые нужно интерполировать?
Если технология не подразумевает контроля с обратной связью, то можно определить вручную опорные промежуточные точки между стартовым положением рабочего инструмента и целевым. В общем случае может быть произвольное число целевых положений. Если между ними слишком длинные переходы, то можно с помощью планировщиков пути (например A*) составить промежуточные опорные точки.
Когда есть путь по точкам, остаётся только спланировать траекторию, т.е. из точек в пространстве сформировать склейку полиномов для каждого промежутка.
Я тут раздумывал на своей темой, и придумался следующий алгоритм, возможно полезный Вам. Во всяком случае, интересно было бы Ваше мнение.
Пойдем с конца к началу. В качестве неизвестных величин фигурируют значения второй производной функции в узлах. Между узлами вторая производная интерполируется линейно, соответственно, на всем отрезке является кусочно-линейной непрерывной функцией. Первая производная функции при этом будет кусочно- "параболической". Значение первой производной в начале отрезка неизвестно, и задается постоянной интегрирования, которая будет еще одной неизвестной величиной. Двигаясь по отрезку слева направо, формируем первую производную функции, причем новых неизвестных констант интегрирования не возникает, поскольку есть требование непрерывности первой производной в узлах. Наконец, "восстанавливаем" саму функцию полиномами 3-й степени, интегрируя аппроксимированную первую производную и "попадая" в узлы. Это условие формирует систему уравнений для нахождения неизвестных величин. Возможно, наличие одной неизвестной константы интегрирования определит какую-нибудь задачу оптимизации.
Идея интересная, мы как бы сокращаем количество неизвестных за счёт попадания производных или значений. Но мне кажется, что будут проблемы с монотонностью.
Я попробовал придумать адекватное обоснование этому, но пока что не вышло. Поэтому излагаю только предположение.
Честно говоря, я не понимаю смысл термина "монотонность" в данном контексте. Типа "достаточная" гладкость?
Под монотонностью здесь я подразумеваю то, что значение пути на каждом этапе гарантированно не выйдет за граничные значения этого этапа.
Я уже придумал алгоритм, похожий на правду. У меня намечается серия статей на тему дифференцирования дискретных функций. Первую завтра подам на модерацию, а Ваша тема (в моем понимании, конечно) попадает в продолжение как пример альтернативного алгоритма. Вроде получается один неопределенный параметр, которым можно регулировать гладкость или монотонность. потребуется неделя-другая на проверку, с учетом летнего расписания. Будет интересно продолжить обсуждение.
Конечно!
Скажите пожалуйста,а что за магические числа у вас в функциях? Какие-то 3, 2, 6. Спасибо
Монотонная кубическая интерполяция