通过 scipy 文档试图解决一首颂歌的示例代码中的错误是什么?
What is the error in this sample code via scipy docs that attempts to solve an ode?
我正在尝试学习如何在 python 中求解 ODE,scipy 似乎是一个很好的起点。我已经习惯使用 odeint
,现在正在尝试学习如何使用 ode
。我尝试了 运行 scipy docs 中的示例代码,但它返回了一个错误。我复制了下面的错误代码。
代码
from scipy.integrate import ode
y0, t0 = [1.0j, 2.0], 0
def f(t, y, arg1):
return [1j*arg1*y[0] + y[1], -arg1*y[1]**2]
def jac(t, y, arg1):
return [[1j*arg1, 1], [0, -arg1*2*y[1]]]
r = ode(f, jac).set_integrator('zvode', method='bdf', with_jacobian=True)
r.set_initial_value(y0, t0).set_f_params(2.0).set_jac_params(2.0)
t1 = 10
dt = 1
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
print("%g %g" % (r.t, r.y))
错误信息
print("%g %g" % (r.t, r.y))
TypeError: only length-1 arrays can be converted to Python scalars
r.y
是一个长度为 2 的数组。还有复数。两者都与一个浮点数的格式化指令不兼容。
但是隐式转换为字符串有效,
print "%g %s" % (r.t, r.y)
我正在尝试学习如何在 python 中求解 ODE,scipy 似乎是一个很好的起点。我已经习惯使用 odeint
,现在正在尝试学习如何使用 ode
。我尝试了 运行 scipy docs 中的示例代码,但它返回了一个错误。我复制了下面的错误代码。
代码
from scipy.integrate import ode
y0, t0 = [1.0j, 2.0], 0
def f(t, y, arg1):
return [1j*arg1*y[0] + y[1], -arg1*y[1]**2]
def jac(t, y, arg1):
return [[1j*arg1, 1], [0, -arg1*2*y[1]]]
r = ode(f, jac).set_integrator('zvode', method='bdf', with_jacobian=True)
r.set_initial_value(y0, t0).set_f_params(2.0).set_jac_params(2.0)
t1 = 10
dt = 1
while r.successful() and r.t < t1:
r.integrate(r.t+dt)
print("%g %g" % (r.t, r.y))
错误信息
print("%g %g" % (r.t, r.y))
TypeError: only length-1 arrays can be converted to Python scalars
r.y
是一个长度为 2 的数组。还有复数。两者都与一个浮点数的格式化指令不兼容。
但是隐式转换为字符串有效,
print "%g %s" % (r.t, r.y)