【发布时间】: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() 给我的是:
其中 f(x, y) 是样条曲线逼近的函数,A 是点 p1=(x0, y0) p2=(x1, y1) 之间的矩形面积。所以,dxdy是微分面积,A是面积,求积分是体积。
我正在寻找的是:
其中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