gpt4 book ai didi

python - 如何让 Python 求解这个二阶非线性 ODE?

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:56 29 4
gpt4 key购买 nike

我目前正在研究一些拉格朗日力学,大部分情况下进展顺利,但我决定尝试计算机练习,但我不知道如何让 Python 求解这类方程式。

我要求解的二阶非线性 ODE 是:

enter image description here

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 的新手,而且总体上不擅长编码,所以有人可以帮助我吗?

最佳答案

您需要将您的二阶方程转换为具有 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 作为它们中的第一个。

关于python - 如何让 Python 求解这个二阶非线性 ODE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57348546/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com