Python 定义要在odeint中使用的谐振子函数

Python 定义要在odeint中使用的谐振子函数,python,numpy,scipy,Python,Numpy,Scipy,我正在编写一个ode来解决谐振子的问题,我的函数harmonic在odeint命令中有这个问题 import matplotlib.pyplot as plt import numpy as np from scipy.integrate import odeint k=4.0 m=1.0 B=0 def harmonic((x, y), t): return [y, -k * x / m + B / m * y] 给出错误消息: File "<ipython-input

我正在编写一个ode来解决谐振子的问题,我的函数harmonic在odeint命令中有这个问题

import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint

k=4.0
m=1.0
B=0

def harmonic((x, y), t):
    return [y, -k * x / m + B / m * y]
给出错误消息:

  File "<ipython-input-60-2d6b156227be>", line 1
    def harmonic((x, y), t):
                 ^
SyntaxError: invalid syntax
文件“”,第1行
定义谐波((x,y),t):
^
SyntaxError:无效语法
有人能帮我吗? 谢谢大家!

(x,y)
表示元组。如果只想使用x,y作为单个变量,只需使用
x,y
。您的函数将如下所示:

def harmonic(x, y, t):
    return [y, -k * x / m + B / m * y]
将x、y和t的假设值传递给调和函数,将返回由函数的
return
语句中的代码计算的列表:

harmonic(2,3,5)
#Output:
[3, -8.0]

请看以下示例:

import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import odeint

k = 4.0
m = 1.0
B = 0

def harmonic(var, t=None):
    x, y = var[0], var[1] # var is assumed to be an array, usually numpy array
    return [y, -k * x / m + B / m * y]

result = odeint(harmonic, (0.2, 0), np.linspace(0, 1, 100))
plt.plot(result[:,0], result[:,1], 'r-')
plt.show()

在x,y周围不需要括号。删除它们,它就可以工作了。你能演示一下在你的代码中如何调用
odeint
?或者,定义y w.r.t x变化的微分方程和
y=0时的初始圆锥曲线!我已经解决了这个问题problem@amanb谢谢我已经解决了我的问题。但是这对
odeint
不起作用
x
y
必须放入长度为2的单个数组中。这需要额外的信息,如y0以及y如何随x变化。医生:是的,没错。正如@David Vivas所说,“…我在odeint命令中使用的函数harmonic有这个问题”(但是调用
odeint
的代码没有显示)。