Python中的Ode求解器

时间:2019-11-16 04:47:01

标签: python scipy ode

我正在尝试使用scipy odeint解决ODE(dx ^ 2 / dt ^ 2 = -4(x ^ 2 + y ^ 2)^(3/2)),但是我无法使其正常工作。这是我的代码:

import numpy as np
from scipy.integrate import odeint

def system(x,t,y):
    x1 = x[0]
    x2 = x[1]
    y1 = y

    dx1_dt = x2
    dx2_dt = -4*(x1**2+y1**2)**(3/2)
    dx_dt = [dx1_dt,dx2_dt]

    return dx_dt


x_0 = [2,3]
y_0 = [8,6]

t = np.linspace(0,1,30)
x_solved = odeint(system,x_0,t,args=(y_0[0]))

我收到此错误:

odepack.error: Extra arguments must be in a tuple

但是我将额外的参数作为元组传递:args=(y_0[0])。我究竟做错了什么?谢谢!

1 个答案:

答案 0 :(得分:3)

具有单个元素的元组应采用以下格式: (y_0[0],)。注意逗号。

(x)的值为x
(x,)的结果为一个元素的元组

( )通常出于语法和更好的可读性原因而使用。
is_true = (x and y) or (a or k)

由于( )已用于创建元组,因此区分单个元素元组和表达式的方法是comma