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 の構文,なんだかいいかげんな部分が多い気がする今日この頃.