2012-04-09 13 views
1

私たちはmatlabのode23ソルバを使ってDC/DCバックコンバータをモデル化しようとしています。私たちは、コードを実行しようとすると、以下のエラーが出てくる:matlab ode23ソルバーのエラーが不明です

??? Error using ==> odearguments at 91 
The last entry in tspan must be different 
from the first entry. 

Error in ==> ode23 at 171 
[neq, tspan, ntspan, next, t0, tfinal, 
tdir, y0, f0, odeArgs, odeFcn, ... 

Error in ==> buck2 at 13 
     [t,x] = ode23(@event1,[t0 tf],x0); 

我々はエラーなしでコードが実行される初期条件配列を変更しますが、期待される結果を生成しないコードを取り出したとき。

これが私たちのコードです:

function buck2 
close all 
clear all 
clc 

t0 = 0; 
tf = 1; 
x0 = [0 0]; % Initial conditions 

for i = 1:10 
    if (1 <= i <= 4), 
     [t,x] = ode23(@event1,[t0 tf],x0); 
     nt = length(t);   
    else 
     [t,x] = ode23(@event2,[t0 tf],x0); 
     nt = length(t); 
    end 
    t0 = t(nt); 
    x0 = x(nt); 
end 

plot(t,x) 

function xdot = event1(t,x) 
L = (12.12e-6); 
C = (19.5e-6); 
RC = (2.5*19.5e-6); 
xdot = [(24/L) - (x(2)/L); (x(1)/C) - (x(2)/RC)]; 

function xdot = event2(t,x) 
L = (12.12e-6); 
C = (19.5e-6); 
RC = (2.5*19.5e-6); 
xdot = [-(x(2)/L); (x(1)/C) - (x(2)/RC)]; 

答えて

0

は、ここで問題です:ループ内

、最初の反復:

[t,x] = ode23(@event1,[t0 tf],x0); 

T0 = 0を呼び出します; tf = 1である。

次いでさらにループダウン:

ループの反復のために次
t0 = t(nt); %so t0 = 1; 

:言い換える

[t,x] = ode23(@event1,[t0 tf],x0); 

[T、X] = ode23(@イベント1、[1 1]、x0);

ソリューション:

いずれかtf = t0 +1;

更新にt0 = t(nt);または更新TFを変更します。

また、次のx0 = x(nt,:);

を修正する必要があります