由meshgrid值定义的曲面下的线积分-Python

由meshgrid值定义的曲面下的线积分-Python,python,numpy,scipy,integration,calculus,Python,Numpy,Scipy,Integration,Calculus,我需要计算由网格上的值定义的曲面下两点(x1,y1)和(x2,y2)之间的线积分 我不确定在使用python的过程中使用什么样的最佳工具/方法 由于我没有表示曲面的函数,因此我假设我需要使用以下方法之一,而是在间距均匀的网格上的点处使用值 trapz -- Use trapezoidal rule to compute integral from samples. cumtrapz -- Use trapezoidal rule to cumulative

我需要计算由网格上的值定义的曲面下两点(x1,y1)和(x2,y2)之间的线积分

我不确定在使用python的过程中使用什么样的最佳工具/方法

由于我没有表示曲面的函数,因此我假设我需要使用以下方法之一,而是在间距均匀的网格上的点处使用值

   trapz         -- Use trapezoidal rule to compute integral from samples.
   cumtrapz      -- Use trapezoidal rule to cumulatively compute integral.
   simps         -- Use Simpson's rule to compute integral from samples.
   romb          -- Use Romberg Integration to compute integral from
                    (2**k + 1) evenly-spaced samples.
任何帮助或指导都将不胜感激

编辑:


如果你有曲面点(我们甚至可以放宽规则网格的要求)和曲线点,那么
numpy
scipy
软件包提供的基本分析应该可以做到这一点

首先,让我们为您的问题创建一个试用数据集

import numpy as np
from scipy import interpolate
主要是3D曲面:

def f(x, y):
    return x**2 + x*y + y*2 + 1

xl = np.linspace(-1.5, 1.5, 101)
X, Y = np.meshgrid(xl, xl)
Z = f(X, Y)
xyt = np.stack([xt, yt]).T
St = S(xyt)
和二维曲线:

t = np.linspace(0, 1, 1001)
xt = t**2*np.cos(2*np.pi*t**2)
yt = t**3*np.sin(2*np.pi*t**3)
Sd = np.cumsum(np.sqrt(np.sum(np.diff(xyt, axis=0)**2, axis=1)))
完整设置:

然后我们创建一个:

要从三维曲面上的二维曲线插值点,请执行以下操作:

def f(x, y):
    return x**2 + x*y + y*2 + 1

xl = np.linspace(-1.5, 1.5, 101)
X, Y = np.meshgrid(xl, xl)
Z = f(X, Y)
xyt = np.stack([xt, yt]).T
St = S(xyt)
我们还计算二维曲线的曲线坐标:

t = np.linspace(0, 1, 1001)
xt = t**2*np.cos(2*np.pi*t**2)
yt = t**3*np.sin(2*np.pi*t**3)
Sd = np.cumsum(np.sqrt(np.sum(np.diff(xyt, axis=0)**2, axis=1)))
使用“基于累积”,要求解的积分如下所示:

fig, axe = plt.subplots()
axe.plot(Sd, St[:-1])
axe.fill_between(Sd, St[:-1], alpha=0.5)
axe.grid()

最后,我们使用以下最简单的方法进行集成:


谢谢你帮了我很多忙!我试图用曲线坐标重建你在底部生成的线积分图。我做错了什么?fig=plt.figure()ax=plt.axs()ax.fill_在(Sd,St)ax之间。set_xlabel('x')ax.set_ylabel('Z')plt.show()这非常有用。如果你感兴趣,我仍在努力克服这里解释的问题@Morgan,很好的问题,现在我明白你为什么需要解这个小问题了。@jilandercy可以修改上面的函数来计算投影平行六面体上的积分吗?@jlandercy是的,我想我没有意识到你在这里使用的是函数,而不是实际数据。我已经设法使用griddata、RectBavariateSpline和积分函数解决了我的问题:)