在 Python 中用可变系数求解微分方程(我只知道数值上的系数)

计算科学 Python 微分方程
2021-11-30 03:09:22

我正在尝试实现一个例程来解决 Python 中的微分方程。基本上,我有兴趣求解的方程是以下形式:

ddx2(xy(x))=2x((U(x)a)y(x)+2by(x)3)

其中是一个未知常数,是一个已知常数,是一个依赖于的函数,但我只知道数字(我的意思是,我没有明确的形式 )。abU(x)xU(x)x

我需要找到满足我的初始和边界条件)。ay(0)=y0y(x)=0a<1

为此,我正在考虑使用射击法(准确地说是割线法),用 RK4 多次求解上述方程(使用scipy.integrate.ode)。

我的问题是我不知道如何在我的方程中引入的数值,因为 ode 只要求初始条件下的值。U(x)

有没有办法用scipy.integrate.ode或用另一个求解器来求解我的方程?

1个回答

首先,您需要在一组一阶微分方程中重写您的非线性微分方程,因为该solve_ivp例程解决了其中可以是一个向量。所以定义你可以把你的原始方程写成这是所需的形式。u(x)=f(x,u), u(0)=u0u(x)u1(x)=y(x)u2(x)=y(x)

u1(x)=u2(x)u2(x)=2(U(x)a)u1(x)+4b(u1(x))32xu2(x)

您需要设置初始条件您在原始问题陈述中未指定的后者。但是看第二个等式,它需要为零,否则最后一项会被零除。u1(0)=y0u2(0)=y(0)

接下来,您需要一个将作为 x 的函数的例程。你说你没有分析形式,只有数字数据。因此,您需要编写一个插值可用数值数据(或您认为合适的另一种近似值)的例程。U(x)x

然后,您可以使用不同的参数值启动一系列计算,a以查看的解何时趋于零。并将它们包装在割线求解器(或任何其他求解器)中以找到.xa