2017-06-22 88 views
1

我仍在学习Scilab(5.5.2),因此我正在编写并运行测试代码以熟悉本软件。Scilab中ODE的奇行为:方程dy/dx = A没有正确解决

要测试的数值微分方程解算器,我开始容易从方程DY/DX = A,其具有作为溶液Y =斧+ 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

重命名变量不会改变ODE求解器在内部使用它们的方式。由于解算器需要一个参数为time,state的函数,它将以这种方式解释提供的函数。

重命名变量回来,你编程的是相当于

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

这的确具有指数函数的解决方案。

manual你可以看到,包括参数的方式是通过函数作为一个列表,

歼参数也可以是结构如下列表: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)); 
+0

我意识到,我将考验你的建议的代码。 –

+0

经过了一段时间,如果A是矢量,如何使它工作? –

+0

你试过了吗?它不应该在参数列表中传递哪个对象。 – LutzL