gpt4 book ai didi

python - python 中具有无限初始条件的 ODE

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:48 25 4
gpt4 key购买 nike

我有一个二阶微分方程,我想用 python 求解它。问题是对于其中一个变量,我在 0 中没有初始条件,只有无穷大的值。可以告诉我应该为 scipy.integrate.odeint 提供哪些参数吗?能解决吗?

等式: enter image description here

需要根据时间找到 Theta。它的一阶导数在 t=0 处等于零。 theta 在 t=0 时未知,但在足够长的时间内它会变为零。其余的一切都是众所周知的。作为一个近似的 I 可以设置为零,从而删除二阶导数,这应该会使问题更容易。

最佳答案

这远不是一个完整的答案,但应 OP 的要求张贴在这里。

我在评论中描述的方法是所谓的 shooting method ,这允许将边界值问题转换为初始值问题。为方便起见,我将把函数 theta 重命名为 y。要在数值上求解方程,首先要使用两个辅助函数 z1 = yz2 = y' 将其变成一阶系统,因此您的当前方程

I y'' + g y' + k y = f(y, t)

将被重写为系统

z1' = z2
z2' = f(z1, t) - g z2 - k z1

你的边界条件是

z1(inf) = 0
z2(0) = 0

因此,首先我们设置函数来计算新向量函数的导数:

def deriv(z, t) :
return np.array([z[1],
f(z[0], t) - g * z[1] - k * z[0]])

如果我们有一个条件 z1[0] = a,我们可以在 t = 0t = 1000 之间解决这个问题,并且获取上次 y 的值,如

def y_at_inf(a) :
return scipy.integrate.odeint(deriv, np.array([a, 0]),
np.linspace(0, 1000, 10000))[0][-1, 0]

所以现在我们需要知道的是 a 的值是多少使得 y = 0t = 1000,我们穷人的无穷大,与

a = scipy.optimize.root(y_at_inf, [1])

关于python - python 中具有无限初始条件的 ODE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14426470/

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