定义要在odeint中使用的谐波振荡器函数

时间:2019-04-08 02:22:13

标签: python numpy scipy

我正在尝试编写一个ode以解决谐波振荡器问题,而我的函数谐波在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

有人可以帮助我吗? 谢谢!

2 个答案:

答案 0 :(得分:2)

看下面的例子:

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()

enter image description here

答案 1 :(得分:1)

(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]