使用 Maple 数值求解二阶 ODE

问题描述 投票:0回答:1

我正在尝试使用 Maple 程序求解以下 ODE:

这个 ODE 可以很容易地在区间 [0,1/2] 上解析求解,解由下式给出

现在,使用 Maple,我得到了

restart;
ODE := diff(y(x),x$2)*x*abs(ln(x))-2*diff(y(x), x)=0:
initialPosition := y(0) = 0;
initialVelocity := D(y)(1/2) = 1;
solution := dsolve({ODE, initialPosition, initialVelocity})

这给了我与之前找到的相同的解决方案。然而,当我尝试以数值方式找到解决方案时:

solution_num := dsolve({ODE, initialPosition, initialVelocity}, numeric)
,程序显示如下错误

据我了解,Maple 将 ODE 与初始条件 0(y(0) = 0)一起离散化的方式会产生错误,因为程序无法处理方程中出现的 log(0) 的奇点。他们建议使用另一种类型的离散化来规避这个单一端点:中点方法。由于我刚刚开始使用 Maple 并且对 ODE 离散化不太满意,所以我想知道是否有一个函数实现这样的算法来解决我的问题。任何帮助将不胜感激。

math ode discrete-mathematics maple discretization
1个回答
0
投票
restart;
ODE:=diff(y(x),x$2)*x*abs(ln(x))
     -2*diff(y(x),x)=0:
initPos:=y(0)= 0:
initVel:=D(y)(1/2)=1:

sol:=dsolve({ODE,initPos,initVel})
       assuming x>0,x<1;

    y(x) = (-x/ln(x)-Ei(1,-ln(x)))*ln(2)^2

我将这种样式等放在精确解的图上,以便它可以很好地与数值解的图重叠。

P1:=plot(eval(y(x),sol),x=0 .. 0.5,
         adaptive=false,numpoints=11,
         color=blue,style=point,
         symbol=solidcircle,symbolsize=20):

现在,数值解。

numsol:=dsolve({ODE,initPos,initVel},numeric,
               method=bvp[midrich],
               maxmesh=10^4,abserr=5e-4):

P2:=plot(X->eval(y(x),numsol(X)),0 .. 0.5):

现在让我们一起来看看吧。

plots:-display(P1,P2);

另一种(有点高级的)绘制由

dsolve(...,numeric)
返回的结果的方法。

plots:-odeplot(numsol,[x,y(x)],x=0 .. 0.5);

© www.soinside.com 2019 - 2024. All rights reserved.