| 6 | 1/1 | 返回列表 |
| 查看: 2602 | 回復(fù): 5 | |||
| 【懸賞金幣】回答本帖問題,作者dsmj1995將贈(zèng)送您 10 個(gè)金幣 | |||
[求助]
請(qǐng)教如何提高M(jìn)ATLAB函數(shù)norminv(p,0,1)的使用精度
|
|||
|
請(qǐng)教各位大佬一個(gè)MATLAB問題:如何提高函數(shù)norminv(p,0,1)的使用精度? norminv為一維正態(tài)分布的累積分布函數(shù)的逆函數(shù),假設(shè) p = 1-10^(i) , i = 1,...,.N, 因?yàn)閙atlab的運(yùn)算精度為雙精度16位有效數(shù)字 ,因此當(dāng)N>16的時(shí)候,norminv(p,0,1)返回的都是正無(wú)窮大,F(xiàn)在編程涉及到的p比較小,所以想請(qǐng)教一下如何使得p<1-10^16時(shí),也能使得該函數(shù)得出較為準(zhǔn)確的結(jié)果? |
木蟲 (著名寫手)
|
做數(shù)值計(jì)算的第一步就應(yīng)該是把問題歸一化,從而在計(jì)算質(zhì)量最高的范圍求解 發(fā)自小木蟲IOS客戶端 |

|
該問題已經(jīng)解決。實(shí)際上,我本來(lái)的目的是為生成服從左截?cái)嗟恼龖B(tài)分布變量,X~N(mu,sigma,u-), 式中mu,sigma為標(biāo)準(zhǔn)正態(tài)變量的均值與方差,u-為左截?cái)嗟奈恢。通常的的方法是生成均勻分布變?p~U(p1,1),其中p1 = normcdf(u-,mu,sigma),然后再根據(jù)正態(tài)函數(shù)的累積分布函數(shù)將p1轉(zhuǎn)化目標(biāo)的截?cái)嗾龖B(tài)分布變量X, 即是X = norminv(p1,mu,sigma)。其中normcdf,norminv都是MATLAB內(nèi)置函數(shù),分別是正態(tài)分布函數(shù)的累積分布函數(shù)與其逆函數(shù)。這種做法在u-與mu比較接近的時(shí)候,效率還是可以的。但是當(dāng)u->>mu,即是p1非常接近于1,如同我在帖子中所描述的問題,由于數(shù)值計(jì)算的精度所限制這種做法是行不通的。 關(guān)于當(dāng)p1非常接近于1時(shí),對(duì)應(yīng)的逆函數(shù)值的求解問題,我在鏈接上 https://www.mathworks.com/matlab ... ty-is-close-to-zero 看到兩種解決方法:一種是在MATLAB采用符號(hào)變量sym,一種是通過(guò)迭代的方法。這里不再贅述。下面說(shuō)我的問題怎么解決,相應(yīng)的MATLAB代碼如下: Beta = u-;即是上面問題描述的截?cái)嗟奈恢?br /> % % method#1:經(jīng)典方法 U1 = rand(1); X = norminv(U1+(1-U1).*normcdf(Beta)); % % method#2: 采用matlab的sym變量 U1 = rand(1); p = (U1+(1-U1).*(1-sym(normcdf(Beta,'upper')))); X = double(norminv(p)); % % method#3:文獻(xiàn)鏈接https://arxiv.org/pdf/0907.4010.pdf,提供了一種采用平動(dòng)指數(shù)分布函數(shù)作為抽樣函數(shù)的Accept-Reject模擬方法,根據(jù)此編制了MATLAB函數(shù) LeftTruncatedNormrnd X = LeftTruncatedNormrnd(Beta,Ns);, |
|
編制的MATLBA函數(shù) LeftTruncatedNormrnd及其驗(yàn)證代碼如下,經(jīng)過(guò)驗(yàn)證感覺這種方法還不錯(cuò)。有路過(guò)大佬或蟲友如果覺得有什么不對(duì),或者更高效的方法,還請(qǐng)多指教。 主函數(shù): function [X,accept_rate] = LeftTruncatedNormrnd(ul,Ns) alpha = (ul+sqrt(ul^2+4))/2; Ns_accept = 0; while Ns_accept==0 % 1. Generate translated exponential distribution Z = exprnd(1/alpha,Ns,1)+ul; % 2. Compute coeffcient of accept rate po = exp(-(Z-alpha).^2/2); % 3. Accept or reject U = rand(Ns,1); index = find(U<=po); X = Z(index,1); % 4. other Ns_accept = length(index); accept_rate = Ns_accept/Ns; end return 驗(yàn)證代碼: xc_max = max(X); xc = ul xc_max-ul)/1000:xc_max;dx = xc(2)-xc(1); n1 = hist(X,xc); pdf_sim = n1/Ns_accept/dx; pdf_norm = normpdf(xc,0,1)/normcdf(ul,'upper'); plot(xc,pdf_sim) hold on plot(xc,pdf_norm) |
|
驗(yàn)證代碼更正,需先保存主函數(shù)LeftTruncatedNormrnd: ul = 2 Ns = 1e5; % method#1 % U1 = rand(Ns,1); % X = norminv(U1+(1-U1).*normcdf(ul)); % % % method#2 % U1 = rand(Ns,1); % p = (U1+(1-U1).*(1-sym(normcdf(ul,'upper')))); % X = double(norminv(p)); % % method#3 [X,accept_rate] = LeftTruncatedNormrnd(ul,Ns); close all xc_max = max(X); xc = ul xc_max-ul)/1000:xc_max;dx = xc(2)-xc(1); n1 = hist(X,xc); pdf_sim = n1/(Ns*accept_rate)/dx; pdf_norm = normpdf(xc,0,1)/normcdf(ul,'upper'); plot(xc,pdf_sim) hold on plot(xc,pdf_norm) legend('sim','target') |
| 6 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 293求調(diào)劑 +9 | zjl的號(hào) 2026-03-16 | 14/700 |
|
|---|---|---|---|---|
|
[考研] 281求調(diào)劑(0805) +3 | 煙汐憶海 2026-03-16 | 8/400 |
|
|
[考研] 材料,紡織,生物(0856、0710),化學(xué)招生啦 +3 | Eember. 2026-03-17 | 7/350 |
|
|
[考研] 328求調(diào)劑,英語(yǔ)六級(jí)551,有科研經(jīng)歷 +3 | 生物工程調(diào)劑 2026-03-16 | 8/400 |
|
|
[考研] 312求調(diào)劑 +4 | 陌宸希 2026-03-16 | 5/250 |
|
|
[考研] 【0856】化學(xué)工程(085602)313 分,本科學(xué)科評(píng)估A類院;瘜W(xué)工程與工藝,誠(chéng)求調(diào)劑 +7 | 小劉快快上岸 2026-03-11 | 8/400 |
|
|
[考研] 26考研求調(diào)劑 +6 | 丶宏Sir 2026-03-13 | 6/300 |
|
|
[考研] 271求調(diào)劑 +12 | 生如夏花… 2026-03-11 | 14/700 |
|
|
[碩博家園] 深圳大學(xué)碩士招生(2026秋,傳感器方向,僅錄取第一志愿) +4 | xujiaoszu 2026-03-11 | 9/450 |
|
|
[考研] 326求調(diào)劑 +4 | 諾貝爾化學(xué)獎(jiǎng)覬?/a> 2026-03-15 | 7/350 |
|
|
[考研] 0703一志愿211 285分求調(diào)劑 +5 | ly3471z 2026-03-13 | 5/250 |
|
|
[考研] 0703化學(xué)調(diào)劑 290分有科研經(jīng)歷,論文在投 +7 | 膩膩gk 2026-03-14 | 7/350 |
|
|
[考研] 0856求調(diào)劑 +3 | 劉夢(mèng)微 2026-03-15 | 3/150 |
|
|
[考研] 材料工程327求調(diào)劑 +3 | xiaohe12w 2026-03-11 | 3/150 |
|
|
[考研] 一志愿中科院,化學(xué)方向,295求調(diào)劑 +4 | 一氧二氮 2026-03-11 | 4/200 |
|
|
[考研] 求調(diào)劑(材料與化工327) +4 | 愛吃香菜啦 2026-03-11 | 4/200 |
|
|
[考研] 329求調(diào)劑 +3 | miaodesi 2026-03-12 | 4/200 |
|
|
[考研] 085600材料與化工 309分請(qǐng)求調(diào)劑 +7 | dtdxzxx 2026-03-12 | 8/400 |
|
|
[考研] 283求調(diào)劑,材料、化工皆可 +8 | 蘇打水7777 2026-03-11 | 10/500 |
|
|
[考研] 333求調(diào)劑 +3 | 152697 2026-03-12 | 4/200 |
|