5

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

方程: 在此处输入图像描述

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

4

1 回答 1

4

这远不是一个完整的答案,而是根据 OP 的要求发布在这里。

我在评论中描述的方法是所谓的射击方法,它允许将边界值问题转换为初始值问题。为方便起见,我将把你的函数重命名thetay. 要以数值方式求解您的方程,您首先将其转换为一阶系统,使用两个辅助函数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 = 1000y

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

所以现在我们需要知道的是ay = 0我们t = 1000穷人的无穷大

a = scipy.optimize.root(y_at_inf, [1])
于 2013-01-22T05:39:01.160 回答