2012-04-09 4 views
1

Wir versuchen, einen DC/DC-Abwärtswandler mit dem ode23-Solver von Matlab zu modellieren. Wenn wir versuchen, unseren Code die folgenden Fehler zu laufen kommen:Matlab ode23 Solver Fehler unbekannt

??? 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); 

Wenn wir den Code herausnehmen, die die Anfangsbedingung Array ändert der Code ohne Fehler läuft, aber das erwartete Ergebnis nicht produzieren.

Dies ist unser Code:

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)]; 

Antwort

0

hier ist das Problem:

in der Schleife, die erste Iteration:

Sie die folgenden

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

t0 = 0 nennen ; und tf = 1;

dann weiter unten in der Schleife:

t0 = t(nt); %so t0 = 1; 

nächste für Schleifeniteration:

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

in anderen Worten:

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

Lösung:

entweder ändern t0 = t(nt); oder Update tf mit tf = t0 +1;

Update:

auch, sollten Sie die folgenden x0 = x(nt,:);

korrigieren