我想使用'scipy.integrate.odeint'積分二階微分方程。我的等候如下使用scipy二階ODE積分
m*x[i]''+x[i]'= K/N*sum(j=0 to N)of sin(x[j]-x[i])
我已經轉換爲兩個一階ODE,如下所示。在下面的代碼中,yinit是初始值x(0)和x'(0)的數組。我的問題是什麼應該是x(0)和x'(0)的值?
x'[i]=y[i]
y'[i]=(-y[i]+K/N*sum(j=0 to N)of sin(x[j]-x[i]))/m
from numpy import *
from scipy.integrate import odeint
N = 50
def f(theta, t):
global N
x, y = theta
m = 0.95
K = 1.0
fx = zeros(N, float)
for i in range(N):
s = 0.0
for j in range(i+1,N):
s = s + sin(x[j] - x[i])
fx[i] = (-y[i] + (K*s)/N)/m
return array([y, fx])
t = linspace(0, 10, 100, endpoint=False)
均勻發熱隨機數
theta = random.uniform(-180, 180, N)
集成功能f
使用odeint
yinit = array([x(0), x'(0)])
y = odeint(f, yinit, t)[:,0]
print (y)
我猜你的意思是'yinit = array([x(0),x'(0)]',因爲這些都是初始值,初始值是使方程組唯一解的唯一邊界條件。 – Nabla
是的,你是正確的初始值是x(0)和x'(0)。我已經糾正了他們的問題。如果我把m = 0,然後在一階ODE中,我從Uniform distribution ,將是x(0)。而在2階ODE的情況下,我知道x(0)= theta,但我怎麼能找到x'(0)? – ADK