0

I'd like to make a loop in Matlab that would work only over user specified intervals of time, instead of simply the whole time. How can one write this loop condition?

regards

4

3 に答える 3

1

通常、複数の方法を繰り返します。頭のてっぺんから考えることができる主な方法は2つあります。また、これをコミュニティ wiki 用に公開して、他のユーザーも簡単に編集できるようにします。


まず、単純なForループを使用します。

一般的な構文は次のとおりです。for index = 1:someValue

someValue1実際には、この場合よりも大きいものになる可能性があります。多くの場合、走査したい行列の最後のインデックス値です。

ただし、これを変更することもできます。マトリックスの 2 番目の位置から始まるすべての 3 番目のインデックスが必要だとします。ここでの 3 は、 に到達する (または超える) まで、各ループ反復の最後に にfor index = 2:3:someValue 3 を追加する必要があることをループに伝えます。indexsomeValue

さらに別の変更は、後方へのトラバースです。この場合、「最後」から開始し、最初に移動します。次のようになります:for index = someValue:-1:1 逆方向に移動しながら 4 番目ごとのインデックスを実行することもできますfor index = someValue:-4:1

明らかに、2 つの間の値を置き換えて、:必要なステップ サイズにすることができます。発生する可能性のあるインデックス作成の問題に注意する必要があります。つまり、行列の範囲外にインデックスを付けようとしているか、負になる可能性があります。


次に、ループ自体の中で値を変更できます。通常、forループを使用している場合、インデックス変数の値はループ内だけでなくループによっても変更されるため、これは最良のアイデアではありません。whileこれがループやdo whileコンボで行われることがよくあります。

いくつかの例を次に示します。

index = 0;
do
{
% some operations
index = index + aNumber;
}while(index <= someValue)

上記の例では、ループの現在の繰り返しの最後にインデックス値indexが 以上になるまで、ループはループし続けます。someValueこのタイプのループは常に実行され、少なくとも 1 回は常に実行を繰り返します。

index = 0;
while(index <= someValue)
{
%some operations
index = index + aNumber;
}

indexこの場合、ここでの論理ステートメントを満たしている間、ループはループし続けます。初めてループを実行しようとしたときにステートメントが真でない場合、ループはまったく実行されません。


これがお役に立てば幸いです。追加の説明が必要な場合は、お気軽にお問い合わせください。

他の人は、自由に編集して追加情報を追加したり、私が完全に説明していない可能性のあるものをクリーンアップしてください =)

于 2012-07-20T12:38:54.400 に答える
1

次のような意味ですか。

for i = [1:5 7:10 12:14 21:22]
   do_func(i)
end

あるいは

for i = [1:5 4:7 19:-1:15]
   do_func(i)
end

?

于 2012-07-20T12:34:56.830 に答える
0

ループ内で特定の条件が真の場合にのみアクションを実行したい場合は、次のようなものが必要です。

for i=1:length(arr)
    if condition(arr(i))
        do_something(arr(i));
    end
end
于 2012-07-24T13:41:46.213 に答える