こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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の値を表示させるにはどのように書けばいいでしょうか?

投稿日時 - 2012-02-04 20:37:15

QNo.7285408

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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ループを使わずに作る、とかでしょうか。

参考になれば幸いです。

投稿日時 - 2012-02-05 11:02:53

ANo.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

投稿日時 - 2012-02-05 09:35:40

あなたにオススメの質問