Re: [運算] 求解精準值

看板MATLAB作者 (天)時間9年前 (2015/10/29 11:21), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《abc76522000 (Ray)》之銘言: : 各位大大您好 我是Matlab初學者 : 而近在使用Matlab上遇到了一些問題,不知各位大大能否給點建議,謝謝您!!!! : 問題如下: : 1. : 如何使b精準的算出確切值(因為fzero算出得解是近似值) : clear : U=3; L=-3; : for i=1:300 : for a=i : f=@(b)1/3*norminv(1/2*normcdf((U-((a/100)-0.01))/b) + ... : 1/2*normcdf((((a/100)-0.01)-L)/b))-2; : b=fzero(f,1); : end : end 你要讓norminv(x) = 2/3 ? 等同於 求 quantile of normal cdf = 2/3 所以就是在解 x = normcdf(2/3) = 0.7453731 因此,你只要專心解 1/2*normcdf((U-((a/100)-0.01))/b)+1/2*normcdf((((a/100)-0.01)-L)/b) =0.7453731 再兩邊都乘上2 normcdf((U-((a/100)-0.01))/b) + normcdf((((a/100)-0.01)-L)/b) = 1.490746 解這個會比你解上面那個會簡單一點 不過你要確切值是不可能,我丟到symbolic toolbox去算 syms b solve(normcdf((U-((a/100)-0.01))/b) + normcdf((((a/100)-0.01)-L)/b) == 1.490746, b) 跑出warning: Warning: Cannot solve symbolically. Returning a numeric approximation instead. > In solve (line 303) 所以你只能用fzero求而已 : 2. : 如何精準的算出s,使其不會產生inf : clc : U=3; L=-3; : mu=0.023638; : sigma=0.362759; : s=1/3*norminv(1/2*normcdf((U-mu)./sigma)+1/2*normcdf((mu-L)./sigma)); (U-mu)./sigma = 8.2048 (mu-L)./sigma = 8.3351 normcdf(4.0) = 0.999968328758 normcdf(6.5) = 0.999999999960 你可能需要夠長的位數才有辦法去解出來不是無限大的s.... 程式只是工具別想靠程式幫你直接解決全部問題... 去了解一下你要解的問題比較重要 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.73.190 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1446088885.A.859.html

10/29 13:00, , 1F
跪了。
10/29 13:00, 1F

10/29 13:34, , 2F
感謝您的解釋!!!我在試試看 謝拉!
10/29 13:34, 2F
文章代碼(AID): #1MCP2rXP (MATLAB)
文章代碼(AID): #1MCP2rXP (MATLAB)