scipy.interpolate.bisplev给出的B样条偏导数的含义是什么?

时间:2012-05-09 14:24:04

标签: numpy scipy interpolation scientific-computing

我有一个从cloudpoint生成的网格,可以描述为z = f(x,y),所以我使用scipy.interpolate.bisplrepbisplev,结果很好。

bisplev可与参数dx=n和/或dy=n一起使用,以便结果是评估点处的n阶的导数。我打算用它来计算平均值和高斯曲率(在Matlab中称为surfature),这应该涉及获得幸存者的二阶偏导数

一次使用一个偏导数的结果,比如dx很好,清楚地将渐变表示为“阴影”效果,如此图像中的人类背面所示(代码优先):< / p>

    self.spline = inter.bisplrep(self.pointlist[:,1],
                                 self.pointlist[:,0],
                                 self.pointlist[:,2], s=smoothing_factor)
    self.mesh_shadow = inter.bisplev(yy.flat, xx.flat, self.spline, dy=1)

enter image description here

到目前为止,这么好。问题是:当我同时要求两个偏导数时,我无法理解(并且找不到任何解释)结果的含义是什么,因为没有任何明显的数字或视觉意义。例如,如果我使用dx AND dy

self.mesh_shadow = inter.bisplev(yy.flat, xx.flat, self.spline, dx=1, dy=1)

我明白了: enter image description here

所以,我想知道:

  1. 如果有bislplev(..., dx=1, dy=1)给出的曲面的一阶偏导数的同时结果的数学/几何意义是什么?
  2. 是否有办法从bislplev(..., dx=1, dy=1)获得最大斜率(任意方向)?
  3. 首先,两个偏导数是否应该被一起调用?我知道我可以使用(..., dx=1, dy=2),这个函数似乎产生了“有效”的结果,但这有什么意义吗?
  4. 每次返回的值都是单个浮点值(Z或其衍生相关值之一)的(Y,X)形数组。

    任何帮助?

    感谢您阅读

1 个答案:

答案 0 :(得分:1)

  1. dx = n,dy = m得到的偏导数是数学对象(或者更确切地说,是它的数值近似值)

    (d / dx)^ n(d / dy)^ m f(x,y)

  2. 您无法仅从dx = 2,dy = 0和dx = 0,dy = 2计算高斯曲率---您通常还需要交叉导数dx = 1,dy = 1。

  3. 部分导数(d / dx)^ n(d / dy)^ m f(x,y)在数学上是明确定义的。对于样条线,如果订单过高,则应该开始获得零或不连续。