Re: [問題] 暴力法求最小值有問題

看板C_and_CPP作者 (-858993460)時間15年前 (2010/11/04 03:38), 編輯推噓0(003)
留言3則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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
小的那個直,在IF那邊沒判斷出來
11/04 15:05, 2F

11/04 15:34, , 3F
我自己找出問題點了,原來是我IF判斷那邊有錯...
11/04 15:34, 3F
文章代碼(AID): #1CqReZ6W (C_and_CPP)
文章代碼(AID): #1CqReZ6W (C_and_CPP)