我还在学习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.41327y2 = 1. 3. 5. 7. 9. 11。
似乎 y = e ^ x 。有人可以解释出了什么问题,或者我做错了什么?
答案 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));