Scilab中ODE的奇数行为:方程式dy / dx = A未得到正确解决

时间:2017-06-22 17:01:09

标签: line ode scilab

我还在学习Scilab(5.5.2),所以我正在编写和运行测试代码以熟悉软件。

为了测试数值微分方程求解器,我从等式 dy / dx = A 开始,其解决方案 y = Ax + c (线方程)

这是我写的代码:

// Function y = A*x+1
function ydot=fn(x, A)
    ydot=A
endfunction
A=2;
//Initial conditions
x0=0;
y0=A*x0+1;
//Numerical Solution
x=[0:5];
y= ode(y0,x0,x,fn);
//Analytical solution
y2 = A*x+1;
clf(); plot(x, y); plot(x, y2, '-k');
//End

这些是意想不到的结果:

  

y = 1. 2.7182824 7.3890581 20.085545 54.598182
  148.41327

     

y2 = 1. 3. 5. 7. 9. 11。

似乎 y = e ^ x 。有人可以解释出了什么问题,或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

仅重命名变量不会改变ODE求解器在内部使用它们的方式。由于该求解器需要一个带参数time,state的函数,因此它将解释所提供的函数。

重新命名变量,编程的内容相当于

function ydot=fn(t,y)
    ydot = y
endfunction

确实具有指数函数作为解决方案。

manual可以看出,包含参数的方法是将函数作为列表传递,

  

f参数也可以是具有以下结构的列表:lst=list(realf,u1,u2,...un)其中realf是具有语法的Scilab函数:ydot = f(t,y,u1,u2,...,un)

function ydot=fn(t,y,A)
    ydot = A
endfunction

y= ode(y0,x0,x,list(fn,A));