我目前正在研究拉格朗日力学,大部分情况下都进展顺利,但是我决定尝试一下计算机练习,但是我不知道如何使Python解决这类方程式。
我要解决的二阶非线性ODE是:
y的初始值为y0 = 0。
解决一个正常的一阶方程很容易,因为您只需创建一个函数使其等于某个值,然后使用odeint。没问题。但是现在我有了一个二阶方程,而且我不知道如何告诉odeint或函数我要查找的内容是两次微分。
我尝试使用各种数量的积分和微分功能(符号功能和其他功能),诸如此类:
y'微分= RHS
y'=关于t的RHS集成
依此类推,但似乎没有任何效果。要么它告诉我无法调用我的函数,要么某些内容不具有属性,或者存在一些无效的限制等等。
这是我现在拥有的代码(准系统),在这里我没有尝试过任何技巧来使其正常工作,并且如果它是一阶命令,它只是返回函数的结果:
#Setting up the derivative
def model(y,t):
M = g = R = 1
m = 0.7
k = g/(R*(M+m))
return k*(m-M*np.sin(y))
#Initial condition
y0 = 0
#Time interval
t = np.linspace(0,20,1000)
#solve ODE
y = odeint(model,y0,t)
预期结果应该是摇摆不定的,但是当然这不是正确的,因为它是错误的。我公认对Python来说还很陌生,而且总体上对代码的掌握也很差,所以有人可以在这里帮助我吗?
答案 0 :(得分:2)
您需要将二阶方程转换为具有2个分量的一阶系统
def model(u,t):
y, v = u
M = g = R = 1
m = 0.7
k = g/(R*(M+m))
return [ v, k*(m-M*np.sin(y)) ]
然后,您的解决方案每个时间索引还将包含两个组成部分,因此您必须首先提取y
。