1

matlabのode23ソルバーを使用してDC/DCバックコンバーターをモデル化しようとしています。コードを実行しようとすると、次のエラーが発生します。

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

1 に答える 1

0

ここに問題があります:

ループ内の最初の反復:

あなたは以下を呼び出します

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

t0 = 0; そして tf = 1;

次に、ループをさらに下ります。

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

次の for ループ反復:

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

言い換えると:

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

解決:

t0 = t(nt);でtfを変更または更新しますtf = t0 +1;

アップデート:

また、以下を修正する必要がありますx0 = x(nt,:);

于 2012-04-09T03:29:55.063 に答える