为什么scipy.integrated.ode的集成没有进展?

sc4hvdpw  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(86)

我正在使用scipy.integrate.ode在复数域中集成函数func。我组装了以下代码结构:

import numpy as np
from scipy.integrate import ode

def func(x, u, k):
    #f, g = u
    dfdx = k*x**2
    dgdx = -x
    
    rhs_FD = [0]*2
    rhs_FD[0] = dfdx
    rhs_FD[1] = dgdx

    return np.array(rhs_FD)

solver = ode(func)
solver.set_integrator('zvode',method='bdf')

k = 1+1j
solver.set_f_params(k)

x0 = 0.0
u0 = [0.0, 1.0]
solver.set_initial_value(u0, x0)

x_values = np.linspace(x0, 1.0, 3)

u_values = []

for x in x_values:
    u = solver.integrate(x)
    u_values.append(u)

字符串
然而,我注意到solver.set_integrator('zvode ',method='bdf')描述的方法选择不允许集成前进。输出保持与初始条件相同:

[[0.+0.j 1.+0.j]
 [0.+0.j 1.+0.j]
 [0.+0.j 1.+0.j]]


我注意到,通过将积分器替换为solver.set_integrator('dopri5 ')并考虑k的真实的值,代码运行良好。但是,我需要在复杂域中执行此集成。在考虑复杂域时,如何解决集成无法推进的问题?

ctehm74n

ctehm74n1#

如果你所关心的只是让它工作,那么问题是你已经初始化了求解器,但你要求它在x=0处再次计算。要解决这个问题,请循环遍历x_values[1:]

for x in x_values[1:]:
    u = solver.integrate(x)
    u_values.append(u)
    
print(u_values)

字符串
输出量:

[array([0.04166667+0.04166667j, 0.87499999+0.j        ]), array([0.33333333+0.33333333j, 0.5       +0.j        ])]

相关问题