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