2016-08-11 70 views
-1

elseifステートメントを頻繁に使用する必要があり、elseifはシーケンスの位置に依存します。MATLAB:if..elseif ... elseif多くの場合

if cond1 
    action1 
    elseif cond2 
    action2 
    elseif cond3 
    action3 
    . 
    . 
    elseif cond101 
    action101 
    else 
    action102 
    end 
ループを使用してMATLABでそれを実装する方法

またはこの目的のために、より良い、より簡潔な機能があります:

は私がelseif 100倍を使用したいと?

また、私は101条件すべてを自分で書いており、どのような構造にでも入れることができます。

答えて

1

コメントには、一般に、真または偽の101条件のセットがあり、真になった最初のもののインデックスを取得したいと考えているようです。

これはifですが、101個ではありません。そのようなものは動作します:

conditions=[false true true false ... ]; % E.g. conditions=rand(1,101)<0.2; 
% find the first one that is true 
index=find(conditions,1,'first'); 
3

他のコメントは、ソフトウェアエンジニアリングの観点からカスケードが悪い場合は本当に悪いので、データを扱う方法について再考するべきだと思います。

しかし、あなたがそれを表現するより良い方法がないなら、本当に便利なMatlabの2つの簡単な機能、つまり匿名関数とセル配列を使用することができます。

考えられるのは、関数のセル配列を作成することです。各関数は、ifの中に入れたい条件を与え、各関数をテストし、どれが真であるかを調べます。 0と1の間で、0未満となるように数をテストするための例えば

、または1よりも大きい、あなたが行うことができます:

test_array = { 
    @(n) n < 0, 
    @(n) n >= 0 && n < 1, 
    @(n) n >= 1 
} 

を、その後、0.5をテストするために、あなただけ行うことができます

for ii =[1:numel(test_array)] 
    if(test_array{ii}(0.5)) 
     disp(ii) 
    end 
end 

私はこれをMatlab R2016aでテストして動作します。

希望すると助かります!

関連する問題