for 文

matlab のループに for 構文がある.

for i = 1:N
   処理
end

matlab の2重ループは非常に原則として使わない方針だが,ループの回数が少ないものをあるループの中に入れる場合がある.help には

for R = 1:N
   for C = 1:N
      A(R,C) = 1/(R+C-1);
   end
end

とある.
次はだめな記述の一例.

for i = 1:100
   処理 1
   for i = 1:3
      処理 2
   end
end

上のように記述した場合,予想どおりに,一応は動く.しかし,次のような記述を行うと,正しく動作しない.

for i = 1:100,
   処理 1
   for i = 10,
      処理 2
   end
   a(i) = i;
end

どこが正しく動作しないかというと,最後から 2 行目の配列への代入が正しく行われない.なぜかと言えば,あたりまえの話だが,for を回してる変数 i が2つの for で使われているため,2つめのループを回した時点で1つ目の for の i のもつ情報が失われている.
正しくは次のように書くべき,

for i = 1:100,
   処理1
   for j = 1:10,
      処理2
   end
   a(i) = i;
end

このように,for ごとに繰り返しを表す変数を分けて書く(C,C++ だったら当たり前のこと!).
何が問題かというと,上述の3つ目のコードのような書き方でも,場合によっては記述者の予想道理に動いていることがあるが,そういうものを少し変更して4つ目のような記述をすると正しく動かないということ.人からもらったコードを変更したら,あらうごきませんでした,なんてことになった本日.
matlab の構文,なんだかいいかげんな部分が多い気がする今日この頃.