2017-01-09 89 views
1

使って常微分方程式のシステムを解く私は微分方程式(ローレンツ方程式)のシステムを解決するためにMATLABを使用する方法を学習し、tの関数としての各ソリューションをプロットしようとしていますODE45

X’ = −σx + σy 
Y’ = ρx − y − xz 
Z’ = −βz + xy 

σ = 10β = 8/3 、およびρ = 28、ならびにx(0) = −8,y(0) = 8およびz(0) = 27である。ここで

は、私が使用していたコードです:

function xprime = example(t,x) 

sig = 10; 
beta = 8/3; 
rho = 28; 
xprime = [-sig*x(1) + sig*x(2); 
      rho*x(1) - x(2) - x(1)*x(3); 
      -beta*x(3) + x(1)*x(2)]; 

x0 = [-8 8 27];  
tspan = [0 20];  
[t,x] = ode45(@example, tspan, x0); 

figure  
plot(t,x(:,1)), hold on 
plot(t,x(:,2)), hold on 
plot(t,x(:,3)), hold off 

しかし、これは私がこの問題を解決しますか、エラーを生成しますか?私は、どの入力引数が欠けているのか、どこに間違っているのか分かりません。私は助けていただきありがとうございます。

入力引数が不十分です。例で

エラー(ライン9) xprimeは= [ - sigをX(1)+ sigを X(2)。 ρ* x(1)-x(2)-x(1)x(3); -βx(3)+
x(1)* x(2)];

+0

- その意図的であるか、または...? –

+0

おそらく、私はそれを書くよりよい方法がわからないからです。 – Tina

答えて

3

これは実際にはかなり良い最初の試行です!

問題は、あなたが実行ボタン(またはF5キーを押し)押したとき、あなたは引数なしで機能exampleを呼び出しているということです。これはMATLABが不平を言っているものです。

第二の問題は、あなたがこのような機能を実行できるようにしたとしても、ode45がするまで、そうでode45を呼び出してしまうexampleを呼ぶだろうode45を呼ぶような機能exampleを、呼ぶだろう、ということです再帰の制限に達します。

の両方への解決策は2つの機能(これらは同じMファイルに書き込むようにしてもよい)でそれを分割することです:あなたが再帰している

% top-level function; no arguments 
function caller() 

    x0 = [-8 8 27]; 
    tspan = [0 20]; 
    [t,x] = ode45(@example, tspan, x0); 

    figure 
    plot(t,x(:,1)), hold on 
    plot(t,x(:,2)), hold on 
    plot(t,x(:,3)), hold off 

end 

% The derivative 
function xprime = example(t,x) 

    sig = 10; 
    beta = 8/3; 
    rho = 28; 
    xprime = [-sig*x(1) + sig*x(2); 
       rho*x(1) - x(2) - x(1)*x(3); 
       -beta*x(3) + x(1)*x(2)];    
end 
関連する問題