はじめまして。C++を勉強し始めたばかりです。
いろいろなホームページを見させて頂いたのですが
どうしてもわかりません。
宜しくお願いします。
質問内容は
関数xとyで求まる式(例えば簡単な2次関数など)があるとします。
xをある範囲、例えば1~10まで変化させてyを求め、
その範囲の中のyの最小値と、そのときのxの値を求め表示させたいのですが
どうしたらよいのかわかりません。
for文でxを1~10まで繰り返してそれぞれのyの値を求めることはできるのですが・・・。
宜しくお願いします。
微分してNewton法というのが定石でしょうが、
直感的で効率も悪く複雑な関数には対応できない方法を。
f(1),f(2),,,f(10)を調べ、最小値を求める。
(仮にf(3)が最小とする)
f(2.0),f(2.1),,,f(4.0)を調べ、最小値を求める。
(仮にf(3.3)が最小とする)
f(3.20),f(3.21),,,f(3.40)を調べ、、、以下同様。
さっそくのお返事ありがとうございます。
あまりにも稚拙で申し訳ないのですが
f(1),f(2),,,f(10)を計算で求めたあと
min f(x)とそのときのxを求めるにはどうしたらよいでしょうか?
詳しく教えてくださると助かります。
本当にすみません。
プログラミングから離れて考えてください。
10個の箱に1つずつ数字があり、1度に1つの箱しか中を見れないとき、
どうやって最小を見つけます?
3番目の箱の9という数字が今まで開けた箱の中では最小だと、
覚えておきながら箱を最後まで開けるでしょう、普通。
プログラミングから離れて考えてください。
10個の箱に1つずつ数字があり、1度に1つの箱しか中を見れないとき、
どうやって最小を見つけます?
3番目の箱の9という数字が今まで開けた箱の中では最小だと、
覚えておきながら箱を最後まで開けるでしょう、普通。
何故か重ねて投稿。失礼しました。
最初に、保存用のxとyを初期化しておく。
yは予定データより大きい数字を設定しておく
あとは、保存用のyと計算したyを比較して小さかったらx,yを置き換える。
最後に残ったものが答えではないでしょうか
シンプレックス法(滑降シンプレックス法)というアルゴリズムがあります。
調べてみてください。
簡単に作ってみました。
ロジックは下記のようにすればよいと思います。
#include stdafx.h
#include stdlib.h
int main(int argc, char* argv[])
{
int x, y;
int save_x, save_y;
int i;
save_x = 0x7fffffff;
save_y = 0x7fffffff;
for( i = 0; i < 10; i++) {
x = rand();
y = x * 2;
printf( x = %d y = %d\n, x, y);
if( y < save_y) {
printf( 置き換え有り\n);
save_y = y;
save_x = x;
}
}
printf( x = %d y = %d\n, save_x, save_y);
return 0;
}