сплайн для недифференцируемой функции? - PullRequest
1 голос
/ 16 июня 2009

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

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

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

Себастьян

Ответы [ 2 ]

1 голос
/ 16 июня 2009

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

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

f(x) = |x|

даст:

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

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

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

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

1 голос
/ 16 июня 2009

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

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

...