我正在使用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的真实的值,代码运行良好。但是,我需要在复杂域中执行此集成。在考虑复杂域时,如何解决集成无法推进的问题?
1条答案
按热度按时间ctehm74n1#
如果你所关心的只是让它工作,那么问题是你已经初始化了求解器,但你要求它在
x=0
处再次计算。要解决这个问题,请循环遍历x_values[1:]
。字符串
输出量:
型