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
通常、複数の方法を繰り返します。頭のてっぺんから考えることができる主な方法は2つあります。また、これをコミュニティ wiki 用に公開して、他のユーザーも簡単に編集できるようにします。
まず、単純なFor
ループを使用します。
一般的な構文は次のとおりです。for index = 1:someValue
someValue
1
実際には、この場合よりも大きいものになる可能性があります。多くの場合、走査したい行列の最後のインデックス値です。
ただし、これを変更することもできます。マトリックスの 2 番目の位置から始まるすべての 3 番目のインデックスが必要だとします。ここでの 3 は、 に到達する (または超える) まで、各ループ反復の最後に にfor index = 2:3:someValue
3 を追加する必要があることをループに伝えます。index
someValue
さらに別の変更は、後方へのトラバースです。この場合、「最後」から開始し、最初に移動します。次のようになります: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
この場合、ここでの論理ステートメントを満たしている間、ループはループし続けます。初めてループを実行しようとしたときにステートメントが真でない場合、ループはまったく実行されません。
これがお役に立てば幸いです。追加の説明が必要な場合は、お気軽にお問い合わせください。
他の人は、自由に編集して追加情報を追加したり、私が完全に説明していない可能性のあるものをクリーンアップしてください =)
次のような意味ですか。
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
?
ループ内で特定の条件が真の場合にのみアクションを実行したい場合は、次のようなものが必要です。
for i=1:length(arr)
if condition(arr(i))
do_something(arr(i));
end
end