我有一个有时在某一点上不可微分的函数。当我现在使用样条曲线(degrafa 中的 Bezierspline)进行插值时,此时的插值不能按预期工作(此时我的函数有扭结)。现在,当用样条插值时,它会围绕该点绘制某种循环。我认为发生这种情况是因为样条曲线需要函数的导数,这在这一点上不是唯一的。
是对的吗?在这种情况下,你会建议我怎么做?
提前致谢
塞巴斯蒂安
我有一个有时在某一点上不可微分的函数。当我现在使用样条曲线(degrafa 中的 Bezierspline)进行插值时,此时的插值不能按预期工作(此时我的函数有扭结)。现在,当用样条插值时,它会围绕该点绘制某种循环。我认为发生这种情况是因为样条曲线需要函数的导数,这在这一点上不是唯一的。
是对的吗?在这种情况下,你会建议我怎么做?
提前致谢
塞巴斯蒂安
听起来不错。自从我查看样条曲线已经有一段时间了,但我很确定如果函数不连续,那么你的样条曲线在相同点也应该是不连续的。尽管我已经看到在这样的点上给出近似曲线的插值......如果没有其他人提出更好的答案,我会检查我的教科书。
但是循环是一个很好的尝试。感谢您的功能。
您无法计算“扭结”的梯度(正如您雄辩地所说的那样)。如果您真的需要在这样的点 (x) 处的梯度,我只需在 (xd) 和 (x+d) 处平均梯度,其中 d 是一个足够小的增量。它在数学上与您可能得到的任何其他单一答案一样有效。
例如,函数:
f(x) = |x|
将产生:
\ | /
\ | /
\ | /
\|/
----+----
原点 (0,0) 没有梯度。但是,在 -0.0001(梯度 = -1)和 +0.0001(梯度 = +1)处平均梯度会得到零梯度(平线)。
对于在 (xd) 和 (x+d) 处产生非对称梯度的其他方程,这应该给出一个不错的答案。
由于它在 MIT 下获得许可,我会做的是修改源代码以允许 Bezierspline 使用该 +/- delta 方法来计算非连续点处的梯度。如果您认为这是一个值得添加的内容,甚至可以将源代码更改推回给开发人员。