сплайн для недифференцируемой функции?

У меня есть функция, которая иногда не дифференцируема в точке. Когда я сейчас использую сплайн (Bezierspline в деграфе) для интерполяции, интерполяция в этот момент не работает так, как ожидалось (в этом месте у моей функции есть излом). Теперь при интерполяции сплайном он рисует какую-то петлю вокруг этой точки. Я думаю, это происходит потому, что сплайну нужны производные функций, которые на данный момент не уникальны.

Это правильно? Что бы вы посоветовали мне сделать в этом случае?

заранее спасибо

Себастьян


person Sebastian Müller    schedule 16.06.2009    source источник


Ответы (2)


Вы не можете рассчитать градиент «излома» (как вы так красноречиво выразились). Если вам действительно нужен градиент в такой точке (x), я бы просто усреднил градиент в (x-d) и (x+d), где d — достаточно маленькая дельта. Он так же математически верен, как и любой другой ответ, который вы, вероятно, получите.

Например, функция:

f(x) = |x|

будет производить:

\   |   /
 \  |  /
  \ | /
   \|/
----+----

где нет градиента в начале координат (0,0). Однако усреднение градиентов при -0,0001 (градиент = -1) и +0,0001 (градиент = +1) даст вам нулевой градиент (прямая линия).

Это должно дать полуприличный ответ для других уравнений, которые также создают несимметричные градиенты в точках (x-d) и (x+d).

Что бы я сделал, поскольку он лицензирован MIT, так это модифицировал исходный код, чтобы позволить сплайну Безье использовать этот метод +/- дельта для расчета градиентов в прерывистых точках. Может быть, даже отодвинуть исходные изменения разработчикам, если вы считаете, что это стоящее дополнение.

person paxdiablo    schedule 16.06.2009
comment
да извините за это я не знал хорошего слова для этого. Это было бы возможно, но сначала я должен найти эти точки {x}. Возможно, мне следует переключиться на линейную интерполяцию, так как мои функции довольно плавные. - person Sebastian Müller; 16.06.2009

Это звучит правильно. Прошло некоторое время с тех пор, как я смотрел на сплайны, но я почти уверен, что если функция не является непрерывной, ваш сплайн также должен быть прерывистым в тех же точках. Хотя я видел интерполяции, которые дают приблизительную кривую в такой точке... Я проверю свои учебники, если никто другой не предложит лучшего ответа.

Но петля - довольно хорошая попытка. слава вашей функции.

person Cogsy    schedule 16.06.2009