【问题标题】:Solving a non-linear second order differential equation on Scilab?在 Scilab 中求解非线性二阶微分方程?
【发布时间】:2021-06-07 07:02:14
【问题描述】:

我需要解决以下问题

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

由于y'^2 一词以及边界条件,我发现很难解决。

【问题讨论】:

  • 您希望找到什么样的解决方案?我不知道 scilab 中的 BVP 求解器,但您可以实现射击方法。对于符号解决方案,请与 u=f(y) 进行比较,然后将 u'=f'(y)y'u''=f'(y)y''+f''(y)y'^2 进行比较,并尝试找出合适的 f
  • Scilab 有bvodebvodeS 来解决边值问题。
  • @LutzLehmann 我可以先z=(-cos(y)y') 然后z'=-sin(y) 吗?边界条件呢?
  • 更改符号后,您现在可以简单地使用u=sin(y),然后使用-u''+u=0,只需简单的解决方案。
  • @LutzLehmann 谢谢!一般呢,比如把cos(y)换成(1-cos(y)),我觉得是一种拍摄方法,取边界y(0)y(1),但不适用于y'(0)y'(1)

标签: matlab numerical-methods differential-equations scilab


【解决方案1】:

这是您的 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,:))

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 2019-03-09
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多