Re: [運算] 求解精準值

作者: celestialgod (天)   2015-10-29 11:21:22
※ 引述《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....
程式只是工具別想靠程式幫你直接解決全部問題...
去了解一下你要解的問題比較重要
作者: s4300026 (s4300026)   2015-10-29 13:00:00
跪了。
作者: abc76522000 (Ray)   2015-10-29 13:34:00
感謝您的解釋!!!我在試試看 謝拉!

Links booklink

Contact Us: admin [ a t ] ucptt.com