我只是想对ODE进行数字积分。
以下解决方法将所需的ODE嵌入包装器中,该包装器将把变量的微分元素传递到odeint
函数中。
import numpy as np
import math
from scipy.integrate import odeint
import matplotlib.pyplot as plt
def f(s,t):
l = 1
h = s[0]
dhdt = 2*((l*math.sin(h)-1)-math.power((l*math.sin(h)-1,1.5))/ (t*l*math.cos(h))
return dhdt
t = np.linspace(0,20)
s0=[0]
s = odeint(f,s0,t)
plt.plot(t,s[:,0],'r--', linewidth=2.0)
plt.show()
口译员抱怨如下:
C:\Users\Matinking>python C:\Users\...\tt.py
File "C:\Users\...\tt.py", line 10
return dhdt
^
SyntaxError: invalid syntax
缩进规则看起来没有违反,那么我在这里做错什么了?
答案 0 :(得分:1)
当您在看起来不错的行上收到SyntaxError
时,应检查它之前的行。如果您看一下,可以看到您缺少括号。
math.power
也不是一个函数。如果要提高指数,则应使用pow
或**
运算符。我不确定这是否是您正在执行的操作,但是如果是这样,代码应如下所示:
def f(s,t):
l = 1
h = s[0]
dhdt = 2*((l*math.sin(h)-1)-pow(l*math.sin(h)-1,1.5)/ (t*l*math.cos(h)))
return dhdt