0

出力は常に 2 つの値ですが、それは 1 つだけであると想定されています ..

s は構造体です。

1x1024 struct array with fields:
    ID
    s1
    s2
    s3
    s4
    PB1
    PB2
    PB3
    PB4
    eG
    next

私は次のループを持っています:

for t=1:length(s)

if s(t).eG==0


 if s(t).s1==1

    if s(t).PB1==0
        slackp(t)=0; 
    elseif s(t).PB1==1
        slackp(t)=350;
    elseif s(t).PB1==2
        slackp(t)=600;
    elseif s(t).PB1==3
        slackp(t)=750;
    end
end

 if s(t).s2==1

    if s(t).PB2==0
        slackp2(t)=0; 
    elseif s(t).PB2==1
        slackp2(t)=500;
    elseif s(t).PB2==2
        slackp2(t)=620;
    elseif s(t).PB2==3
        slackp2(t)=785;
    end

  end
 end
end

ただし、次のステートメントで t=2 にあることに気付きました

        elseif s(t).PB1==1
        slackp(t)=350;

それは常に印刷されます

 slackp(1)=[0 350] 

エラーは繰り越され、他の複数のエントリにはそれらと一緒に 0 が含まれています!! なぜこうなった ?私はちょうど 350 を格納しようとしています。そこに 0 は必要ありません。

問題のデバッグを試みたところ、s1 が 1 でない場合は常に 0 が出力されることに気付きました。s1 がそうでない場合は1、IF ステートメントをスキップします。s2も同様です。

4

1 に答える 1

1

この問題を回避するには、s のインデックスではなく slackp のインデックスに別の変数を使用できます。例えば:

clear all
s(1).s1 = 0;
s(1).PB1 = 2;
s(1).PB2 = 2;
s(1).s2 = 0;
s(2).s1 = 1;
s(2).s2 = 1;
s(2).PB1 = 1;
s(2).PB2 = 3;
s(3).s1 = 1;
s(3).PB1 = 2;
s(3).s2 = 1;
s(3).PB2 = 2;

index1 = 1;
index2 = 1;
for t=1:length(s)
if s(t).s1==1
    if s(t).PB1==0
        slackp(inde1x)=0; 
         index1 = index1 + 1;
    elseif s(t).PB1==1
        slackp(index1)=350;
         index1 = index1 + 1;
    elseif s(t).PB1==2
        slackp(index1)=600;
         index1 = index1 + 1;
    elseif s(t).PB1==3
        slackp(index1)=750;
         index1 = index1 + 1;
    end

end 


if s(t).s2==1

    if s(t).PB2==0
        slackp2(index2)=0; 
        index2 = index2 + 1;
    elseif s(t).PB2==1
        slackp2(index2)=500;
        index2 = index2 + 1;
    elseif s(t).PB2==2
        slackp2(index2)=620;
        index2 = index2 + 1;
    elseif s(t).PB2==3
        slackp2(index2)=785;
        index2 = index2 + 1;
    end

    end

 end

あなたに与えます:

slackp =

350 600

slackp2 =

785 620

または、次のように end + 1 を使用して出力配列にインデックスを付けることができます。

slackp = [];
for t=1:length(s)
    if s(t).s1==1
        if s(t).PB1==0
            slackp(end + 1)=0; 
        elseif s(t).PB1==1
            slackp(end + 1)=350;
        elseif s(t).PB1==2
            slackp(end + 1)=600;
        elseif s(t).PB1==3
            slackp(end + 1)=750;
        end
    end 
 end
于 2013-04-07T21:52:24.187 に答える