【问题标题】:Calculate Line Integral over Bivariate Spline计算二元样条上的线积分
【发布时间】:2022-01-04 19:15:49
【问题描述】:

我可以用scipy.interpolate.RectBivariateSpline 很容易地构造一些二维数据的样条曲线并查询面积 积分。但是没有一个函数可以轻松/快速地计算此类样条上的线积分。

from scipy.interpolate import RectBivariateSpline
import numpy as np

# example data
X, Y = np.meshgrid(np.arange(0, 100), np.arange(0, 100))
Z = np.sin(X / 10) + np.cos(Y / 10)

# construct the spline
rbs = RectBivariateSpline(X[0, :], Y[:, 0], Z)

# get integral
area_integral = rbs.integral(0, 10, 30, 50)

print(area_integral)

>>>40.9287528271697

我正在寻找类似rbs.line_integral(0,10, 30,50) 的东西,它将给我从 [0,30] -> [10,50] 的 line 积分;不是这两个点形成的矩形的面积。

fitpack中有这样的功能吗?我可以看到,在后台,scipy 拨打了dfitpack.dblint() 的电话,但我不确定从那里去哪里。

我还应该添加:我不想在一条线上制作一系列点,使用例如查询这些点rbs.ev(x, y),然后对结果求和。这很慢,可能会引入数值积分错误。

编辑

RectBivariateSpline.integral() 给我的是:

\int_A f(x, y) dxdy

其中 f(x, y) 是样条曲线逼近的函数,A 是点 p1=(x0, y0) p2=(x1, y1) 之间的矩形面积。所以,dxdy是微分面积,A是面积,求积分是体积。

我正在寻找的是:

\int_C f(x, y) ds

其中f(x,y)是样条逼近的函数,C是p1=(x0,y0)和p2=(x1,y1)之间的直线。所以ds是微分长度,S是长度,求积分是面积。

【问题讨论】:

  • 请给出你要计算的积分的准确表达式(如果你不能,解释你为什么要计算它)。
  • @YvesDaoust 我在编辑中添加了这些表达式。我正在尝试通过空间 (x,y) 的直线路径计算 f(x,y) 给出的成本。
  • 感谢您的信息,但这还不够。你的 ds 等于 √dx²+dy² 还是 √dx²+dy²+dz² ?

标签: python scipy interpolation


【解决方案1】:

二元样条曲面是分段多项式。例如,在双三次表达式的情况下,通过代入参数方程X = X0 + t.δXY = Y0 + t.δY,您可以在t 中获得一个六次多项式。通过跟踪线段并将其与网格相交,在每个网格单元中找到参数X0Y0δXδY 以及积分范围。那么如果 scipy 能够给你交叉的二元多项式的系数,你可以在t 中获得多项式的系数。

如果ds 的表达式是√dx²+dy²,则等于√δX²+δY².dt,并且反导数是基本的。因此,枚举交叉单元格中的多项式并计算所有所需的系数“就足够了”。

如果表达式是√dx²+dy²+dz²,您会被卡住,因为链式法则dz = (δX.P(t) + δY.Q(t)) dt,其中PQ 是多项式,而积分没有闭式表达式。


注意。由于多项式展开的复杂性,在合理的步长下,直接 Simpson 积分评估可以更快、更准确,这并非不可想象。

【讨论】:

    猜你喜欢
    • 2018-05-24
    • 2015-03-21
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多