-1
>> a = [1 1 2 3 5 8 13 21 13 37];
>> d = [1 2];
>> w = [0 0 0];
  for e = d
      g = 0;
      for f = a
          if mod (f, 2) == 0
              g = [g f];
          end
      end
w = [w;g];
end
>> w

W の出力は行列

0     0     0
0     2     8
0     2     8

私の質問は、for ループについてです。Matlab の for ループは、論理条件ではなく値を取りますか? たとえば、「for f = a」を見ると、f は配列 A の値を取得し、for ループは F をその列ごとに反復しますか?

ありがとう。

4

2 に答える 2

3

FOR ループには変数があり、ループを通過するたびに反復子変数が配列内の次の値を取ります。iterator 変数は、列の値を一度に 1 つずつ受け取ります。foor ループの代入ステートメントの右側は、数値配列である必要はありません。たとえば、文字列のセル配列や構造体などである可能性があります。

言い換えれば、あなたが持っているとき

for f=a, ....., end

これは書くことと同じです

for i=1:numel(a)/size(a,1); f=a(:,i); .... ; end

これは、コードにいくつかの disp ステートメントを追加することで簡単に確認できます。

for e = d
      disp(e)
      g = 0;
      for f = a
          disp(f)
          if mod (f, 2) == 0
              g = [g f];
          end
      end
w = [w;g];
end

matlab の WHILE ループは論理条件を取ります。

(編集:aが多次元の場合、fがaの列の値を取ることを忘れていました)

于 2013-04-25T04:57:18.123 に答える
1

はい、MATLAB ループ変数は、MATLAB 用語でベクトルと呼ばれる「配列」に割り当てられます。ループ変数の値は、ループの反復ごとにベクトルの要素を自動的に反復します。一般的な構造は

for i=1:10 %generates vector of 1,2,...,10
i %will print i=1, i=2, etc.
end

この場合、ベクトルはオンザフライで生成され、連番です。しかし、あなたの場合の「a」のように、反復するために任意のベクトルを渡すことができない理由はありません。各反復で、"f" は "a" に含まれるシーケンスの次の値を取ります。

于 2013-04-25T04:55:22.810 に答える