• 締切済み

MATLAB

matlabで for x=1:10 for y=1:10 for z=1:10 f=2*x+3*y-4*z; end end end のようなプログラムで、最大のときのfの値と、そのときのx,y,zの値を表示させるにはどのように書けばいいでしょうか?

みんなの回答

  • Kules
  • ベストアンサー率47% (292/619)
回答No.2

3次元配列からmaxで探すのもいいですし、その時のx,y,zが必要ないならmax(f(:))で10×10×10が1000×1の行列として扱えますので最大値はすぐ求まりますね。 ただ、これを3重ループでするならfを3次元配列にするのではなく、最大値とその時のxyzを覚えるようにしてもいいでしょうね。 Maxx=1; Maxy=1; Maxz=1; maxf=-inf; for x=1:10 for y=1:10 for z=1:10 f=2*x+3*y-4*z; if f>Maxf; Maxx=x; Maxy=y; Maxz=z; Maxf=f; end; end end end とか。わざわざMaxx,Maxy,Maxzを別の変数にしなくてもMaxxyz=[1,1,1];としてもよさそうですね。 全体の最大値を得るだけならf(:)でいいのでforループを使う必要はありませんが、その時のx,y,zを表示するには 結局forループ回さないといけないのでちょっとめんどくさいですね。 あとはx,y,zをmeshgridで3次元配列として作っといてfの各要素を3重forループを使わずに作る、とかでしょうか。 参考になれば幸いです。

  • nao-221
  • ベストアンサー率41% (21/51)
回答No.1

”f”を3次元配列にすれば、すべてのパターンを網羅して、その値を表示できると思います。 そして、その中から最大値を検出する関数maxで最大値を検出できると思います。 ただし、maxは2次元までしか対応していないようですので、zをforで回して、一度z=1~10それぞれの最大値を出して、その10個から最大値を出すということになると思います。

参考URL:
http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/MATLAB5/jhelp/techdoc/ref/max.html

関連するQ&A