我真的不知道从哪里开始这个问题,因为我没有太多经验,但需要使用计算机解决项目的这一部分.
我有一个二阶ODE,它是:
m = 1220
k = 35600
g = 17.5
a = 450000
Run Code Online (Sandbox Code Playgroud)
和b在1000和10000之间,增量为500.
x(0)= 0
x'(0)= 5
m*x''(t) + b*x'(t) + k*x(t)+a*(x(t))^3 = -m*g
Run Code Online (Sandbox Code Playgroud)
我需要找到最小的b,这样解决方案永远不会是积极的.我知道图形应该是什么样的,但我只是不知道如何使用odeint来获得微分方程的解.这是我到目前为止的代码:
from numpy import *
from matplotlib.pylab import *
from scipy.integrate import odeint
m = 1220.0
k = 35600.0
g = 17.5
a = 450000.0
x0= [0.0,5.0]
b = 1000
tmax = 10
dt = 0.01
def fun(x, t):
return (b*x[1]-k*x[0]-a*(x[0]**3)-m*g)*(1.0/m)
t_rk = arange(0,tmax,dt)
sol = odeint(fun, x0, t_rk)
plot(t_rk,sol)
show()
Run Code Online (Sandbox Code Playgroud)
哪个并没有真正产生任何东西.
有什么想法吗?谢谢