H0
は配列 ( [1:10]
) でH
、単一の数値 ( 5
) です。
H0
すべての要素を単一の数値と比較する方法はH
?
たとえば、
if H0>H
do something
else
do another thing
end
MATLAB は常に別のことを行います。
H0
は配列 ( [1:10]
) でH
、単一の数値 ( 5
) です。
H0
すべての要素を単一の数値と比較する方法はH
?
たとえば、
if H0>H
do something
else
do another thing
end
MATLAB は常に別のことを行います。
if
スカラー true/false に評価するには、次のステートメントが必要です。ステートメントが配列の場合、動作はそれを でラップするのと同じall(..)
です。
比較の結果が次のような論理配列になる場合
H0 = 1:10;
H = 5;
test = H0>H;
-ステートメントを通過test
するには、次の2 つのオプションがあります。if
(1) の出力を集約できます。たとえば、 の要素またはの要素が truetest
の場合に if 節を実行したい場合などです。any
all
test
if any(test)
do something
end
(2) の要素を反復処理し、test
それに応じて反応します。
for ii = 1:length(test)
if test(ii)
do something
end
end
test
論理ベクトルをインデックスとして使用することで、この操作をベクトル化できる場合があることに注意してください。
編集
コメントに示されているように、必要な場合、P(i)=H0(i)^3 if H0(i)<H
そうP(i)=H0(i)^2
でない場合は、単に書くだけです
P = H0 .^ (H0<H + 2)
@Jonas の最後の行での素晴らしい回答は、論理インデックスを使用したバージョンを思いつくきっかけになりました。
それ以外の
for i=1:N
if H0(i)>H
H0(i)=H0(i)^2;
else
H0(i)=H0(i)^3;
end
end
あなたはこれを行うことができます
P = zeros(size(H0)); % preallocate output
test = H0>H;
P(test) = H0(test).^2; % element-wise operations
% on the elements for which the test is true
P(~test) = H0(~test).^3; % element-wise operations
% on the elements for which the test is false
これは一般的な解決策であることに注意してください。
とにかくこれを見てみましょう:ismemeber()
関数の使用。率直に言って、比較する方法がわかりません。メンバーとしてより大きい、小さい、等しい、または範囲内のいずれか。したがって、私の答えはまだ満足のいくものではないかもしれません。しかし、とにかくあなたにアイデアを与えるだけです。
H0 = [0 2 4 6 8 10 12 14 16 18 20];
H = [10];
ismember(H,H0)
IF (ans = 1) then
// true
else
//false
end
回答を更新
これは非常にブルートフォースな方法です- それを使って説明してください。私が提示したものよりも、ここで与えられた他の答えの方が良いでしょう. 理想的には、処理を使用して、より大きな/より低い値を2つの異なるベクトルに切り取ることが必要です^3
-私は推測します... :)
H0 = [0 2 4 6 8 10 12 14 16 18 20];
H = [10];
H0(:)
ans =
0
2
4
6
8
10
12
14
16
18
20
関数は、10 個を超えるfind
値のすべての値のインデックスを線形インデックスで返します。H0
X = find(H0>H)
X =
7
8
9
10
11
関数は、線形インデックスで 10 未満find
のすべての値のインデックスを返します。H0
Y = find(H0<H)
Y =
1
2
3
4
5
6
必要に応じて、 の各要素にアクセスしてH0
大きい値/小さい値をチェックするか、上記の行列をインデックスと共に使用しH0
て、算術演算で値を 2 つの異なる配列に切り取ることができます。
G = zeros(size(X)); // matrix with the size = number of values greater than H
J = zeros(size(Y)); // matrix with the size = number of values lower than H
for i = 1:numel(X)
G(i) = H0(X(i)).^3
end
G(:)
ans =
1728
2744
4096
5832
8000
for i = 1:numel(Y)
J(i) = H0(Y(i)).^2
end
J(:)
ans =
0
4
16
36
64
100