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

看板C_and_CPP作者 (wi)時間15年前 (2010/11/03 23:29), 編輯推噓7(7022)
留言29則, 7人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 最後跑得出最小值 但是直接把極接近0的數值帶入func,例如0.00001跑出來的數值 跑出來的數值會小於最後結果的最小值 希望得到的正確結果: 正確的跑出最小值 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) gcc 有問題的code: (請善用置底文標色功能) http://nopaste.csie.org/c1004 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.125.20.91

11/03 23:41, , 1F
double轉string的數值參考就好
11/03 23:41, 1F

11/03 23:43, , 2F
樓上...這程式裡好像沒碰到字串?
11/03 23:43, 2F

11/03 23:45, , 3F
我以為cout << temp[0]是轉字串,第一個推文當沒看見
11/03 23:45, 3F

11/03 23:45, , 4F
應該是精度問題? 要準的話只好做大數模擬...
11/03 23:45, 4F

11/03 23:46, , 5F
話說回來這函式把接近 0 的數值代入式子會得到很大的數..
11/03 23:46, 5F

11/03 23:48, , 6F
http://nopaste.csie.org/d616e <-稍微修改了一下
11/03 23:48, 6F

11/03 23:48, , 7F
但是其實這樣寫還是很差XD
11/03 23:48, 7F

11/03 23:54, , 8F
會不會就算宣告成0.1,電腦也只能以0.099999999來存?
11/03 23:54, 8F

11/03 23:55, , 9F
我比較好奇的是原PO的問題是怎麼來的...
11/03 23:55, 9F

11/03 23:55, , 10F
明明這個式子就是個遞減函數怎麼會代個0.0001就突然變小?
11/03 23:55, 10F

11/03 23:56, , 11F
0.1 本來就不被 2 整除, 不可能存精準, 用浮點數跑迴
11/03 23:56, 11F

11/03 23:56, , 12F
這個式子的x都在分母,越接近0理論上會越大才對@@"
11/03 23:56, 12F

11/03 23:57, , 13F
圈是錯誤的方式, 應該要先離散化再進去迴圈還原, 不然
11/03 23:57, 13F

11/03 23:57, , 14F
誤差只會愈來愈大, 浮點數也不能比較相等
11/03 23:57, 14F

11/04 01:11, , 15F
這個是最佳化的問題,我這跑得跟matlab的結果一樣...
11/04 01:11, 15F

11/04 01:11, , 16F
我也懷疑過是精準度的問題,但是直接帶值是小的沒錯
11/04 01:11, 16F

11/04 01:15, , 17F
請問為什麼浮點數不能比較?麻煩love大大解答...
11/04 01:15, 17F

11/04 01:47, , 18F
這個問題是個遞減函數吧...原po要不要看一下公式有沒有打錯
11/04 01:47, 18F

11/04 01:48, , 19F
但是這個不是重點..假如是代入的值愈小 出來的值愈小的話
11/04 01:48, 19F

11/04 01:50, , 20F
光是暴力法的interval就是0.0001了 比你測試的0.00001還要
11/04 01:50, 20F

11/04 01:51, , 21F
大,這個問題還是用類似bisection之類的最佳化方法求解吧
11/04 01:51, 21F

11/04 02:27, , 22F
公式並沒有錯...我覺得奇怪的是說,例如用0.1也是會
11/04 02:27, 22F

11/04 02:28, , 23F
不好意思,剛剛突然發現我po的程式for的區間錯誤
11/04 02:28, 23F

11/04 02:29, , 24F
應該是要for(x=-4;x<=4;x+=0.0001),結果是
11/04 02:29, 24F

11/04 02:29, , 25F
在x=0.2783有最小值-4.79072
11/04 02:29, 25F

11/04 02:32, , 26F
但是如果帶入-0.01會有更小的-6e+012,為什麼最小的
11/04 02:32, 26F

11/04 02:33, , 27F
不是那些更小的值呢?如果是像前面love大大講的浮點
11/04 02:33, 27F

11/04 02:33, , 28F
浮點數不能比較大小,那是為什麼呢?
11/04 02:33, 28F

11/04 02:33, , 29F
不好意思問題比較多,麻煩大家了
11/04 02:33, 29F
文章代碼(AID): #1CqN_UgG (C_and_CPP)
文章代碼(AID): #1CqN_UgG (C_and_CPP)