首页 > 解决方案 > 有没有办法整合并获得一个数组或一个函数,而不是曲线下的所有区域?

问题描述

我想整合以下等式:

d^2[Ψ(z)] / dz^2 = A * ρ(z)

其中 Ψ(未知)和 ρ(已知)是一维数组,A 是常数。

我已经进行了泰勒展开,即

d^2[Ψ(z_0)] / dz^2 = [Ψ(z0+Δz) - 2Ψ(z0) + Ψ(z0-Δz)] / [Δz^2]

并通过构建矩阵成功解决。

现在,我想知道是否有 Python(最好)或 Matlab 函数可以解决这个函数,而无需进行泰勒展开。

我试过 numpy.trapz 和 scipy.integrate.quad,但似乎这些函数只返回曲线下的面积,即一个数字,我有兴趣得到一个数组或一个函数(求解 Ψ)。

标签: pythonintegration

解决方案


您要做的是求解微分方程。因为它是二阶微分方程,您应该修改您的函数以使其成为一阶 ODE 系统。所以你必须创建一个这样的函数:

假设 ρ=rho

def f(z, y):
   return np.array([y[1], A*rho(z)])

其中 y 是一个向量,它在第一个位置包含 Ψ,在第二个位置包含它的导数。然后,f 返回一个包含 Ψ 的一阶和二阶导数的向量。

完成后,您可以使用scipy.integrate.solve_ivp来解决问题:

scipy.integrate.solve_ivp(f, [z_start, z_final], y0, method='RK45', z_eval)

其中 y0 是 Ψ 的初始条件(Ψ 的值及其在 z_start 处的导数)。z_eval 是您要存储解决方案的点。解决方案将是一个包含 Ψ 值及其导数的数组。


推荐阅读