2017-06-22 3 views
1

私はScilab(5.5.2)をまだ学んでいるので、ソフトウェアに慣れ親しむためのテストコードを書き、実行しています。 ScilabのODEの奇妙な振る舞い:方程式dy/dx = Aが正しく解けない

Iは溶液Y =アックス+ C(線式)として有する式DY/DX = A、より簡単開始、数値微分方程式解法をテストします。

これは私が書いたコードです:

// 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あなたは、パラメータを含める方法をリストとしての機能を通過させることであることを

を見ることができ、Fの引数は、以下の構造を持つリストになりますから:realfはScilabのあるlst=list(realf,u1,u2,...un)構文と機能: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