Re: [問題] 暴力法求最小值有問題
※ 引述《diabloevagto (wi)》之銘言:
: 遇到的問題: (題意請描述清楚)
: 最後跑得出最小值
: 但是直接把極接近0的數值帶入func,例如0.00001跑出來的數值
: 跑出來的數值會小於最後結果的最小值
: 希望得到的正確結果:
: 正確的跑出最小值
: 程式跑出來的錯誤結果:
: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
: gcc
: 有問題的code: (請善用置底文標色功能)
: http://nopaste.csie.org/c1004
: 補充說明:
: → diabloevagto:公式並沒有錯...我覺得奇怪的是說,例如用0.1也是會 11/04 02:27
: → diabloevagto:不好意思,剛剛突然發現我po的程式for的區間錯誤 11/04 02:28
: → diabloevagto:應該是要for(x=-4;x<=4;x+=0.0001),結果是 11/04 02:29
: → diabloevagto:在x=0.2783有最小值-4.79072 11/04 02:29
: → diabloevagto:但是如果帶入-0.01會有更小的-6e+012,為什麼最小的 11/04 02:32
: → diabloevagto:不是那些更小的值呢?如果是像前面love大大講的浮點 11/04 02:33
: → diabloevagto:浮點數不能比較大小,那是為什麼呢? 11/04 02:33
: → diabloevagto:不好意思問題比較多,麻煩大家了 11/04 02:33
這個大概只是數學的問題不是程式的問題...
你這裡求的「最小值」其實正確的說來應該是「低點」
用微積分的術語來說叫做「區域極小」 (local minimum)
x=0.2783 的確是這函數的區域極小沒錯
但區域極小並不代表它是絕對極小
微積分裡我們在求函數的絕對極值時都是列出臨界點再去比較的
區域極小只是其中一個臨界值而已
--
再說 正確說來你的程式求的是
「所有這一點比上一點小的 x 中最大的那一個」
也就是範圍內這函數的下降區間的右端點
因此它甚至不一定是區域極小...
--
順帶一提, 你這函數有垂直漸近線 x=0
這代表 x 越接近 0 這函數值會越往正負無限大跑....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.230.62
→
11/04 15:05, , 1F
11/04 15:05, 1F
→
11/04 15:05, , 2F
11/04 15:05, 2F
→
11/04 15:34, , 3F
11/04 15:34, 3F
討論串 (同標題文章)