我试图用Python来解这个积分方程:
其中z的范围从0到1。
quad函数只提供特定时间间隔的数值解,但不提供整个时间间隔的数值解。
def f(z,Om,Ol): return 1./p.sqrt((1+z)**2 * (1+Om*z) - z*(2+z)*Ol)
quad(lambda r:f(r,Om,Ol),0,1)
(0.77142706642781111, 8.5645609096719596e-15)
但是我不知道如何在这个区间得到一个完整的向量,就像你用scipy.odeint解微分方程时得到的那样。
另一方面,sympy.integrate不能做到这一点。我的堆栈溢出另外,我不知道如何用一个列表来替换这些符号,即:
sy.integrate(x**2,x).subs(x,1)
1/3
sy.integrate(x**2,x).subs(x,[1,2])
TypeError: unhashable type: 'list'
所以问题是:有人知道如何用python求解积分方程吗?
最佳答案
我知道你想解一个微分方程,在不同的位置。如果是这样的话,那么scipy的Ordinary Differential Equation (ODE) routines就是解决问题的方法。特别是,您可能需要checkdF/dz1 = f(z1, Om, Ol)
,因为它可以给您指定位置的积分值。