首页 > 解决方案 > 在 Scilab 上求解非线性二阶微分方程?

问题描述

我需要解决以下问题

-cos(y)y''+sin(y)y'^2+sin(y)=0, y'(0)=y'(1)=0, such that y=y(t)

y'^2由于术语和边界条件,我发现很难解决。

标签: matlabnumerical-methodsdifferential-equationsscilab

解决方案


这是您的 bvp 的 Scilab 代码

-cos(y)y''+sin(y)y'^2+sin(y)=0, y'(0)=y'(1)=0, y(0)=0, y(1) =1.5

但不同的边界条件不能给出平凡的解决方案。您必须首先将 y'' 写为 y 和 y' 的函数。该函数fsub计算 y'' 作为u=[y,y']

function ysecond=fsub(x,u)
    y=u(1);
    yprime=u(2);
    ysecond = sin(y)/cos(y)*(1+yprime^2);
end

function g=gsub(i, u),
    y=u(1);    
    select i
      case 1 then  // x=zeta(1)=0
        g = y // y(0)=0
      case 2 then // x=zeta(2)=1
        g = y-1.5 // y(1)=1.5
    end
end

N=1;
m=2;
x_low=0
x_up=1;
xpoints=linspace(0,1,100);
zeta=[0,1];


u = bvodeS(xpoints,m,N,x_low,x_up,fsub,gsub,zeta)
plot(xpoints,u(1,:))

在此处输入图像描述


推荐阅读