正態分佈,銳利分佈,萊斯分佈 matlab擬合原始碼
如果你得到一堆數,你想知道它們的大致分佈,該怎麼辦呢?kedensity命令可以幫助你解決這個問題。命令如下:
[f,xi]=ksdensity(x)
plot(xi,f)
其中,f是估計的密度值,而xi是一個輔助引數,用來決定畫出圖形的取值區間,簡言之,xi大致涵蓋了x的取值區間。
看過圖形之後,開始對分佈有大概的直觀印象,然後可以用比如normfit命令來獲得相關的引數估值。
matlab中normfit在正態分佈中的使用技巧如下:
函式 normfit 格式 [muhat,sigmahat,muci,sigmaci] = normfit(X) ;
[muhat,sigmahat,muci,sigmaci] =normfit(X,alpha)
說明 muhat,sigmahat分別為正態分佈的引數μ和σ的估計值;,muci,sigmaci分別為置信區,其置信度為:alpha
給出顯著水平α,預設時預設為0.05,即置信度為95%.
功能:根據給定的資料,估計概率密度分佈
示例:
1. 正態分佈
x = randn(1,100000);
[y,xi] = ksdensity(x);
plot(xi,y, 'bo')
% 驗證
hold on
yn=normpdf(xi,0,1); % 標準正態分佈的概率密度函式
plot(xi,yn,'b')
2. 瑞利分佈
x = abs(randn(1,10000) + 1i*randn(1,10000));
[y,xi] = ksdensity(x);
plot(xi,y, 'bo')
% 驗證
hold on
b = 1;
yn = zeros(size(xi));
k=find(b > 0 & xi >= 0);
if any(k),
xk = xi(k);
% 瑞利分佈的概率密度函式
yp(k) = (xk ./ b^2) .* exp(-xk.^2 ./ (2*b^2));
end
plot(xi,yp,'b')
3. 萊斯分佈
N = 100000;
K = 0.5;
const=1/(2*(K+1));
x1=randn(1,N);
x2=randn(1,N);
x=sqrt(const*((x1+sqrt(2*K)).^2+x2.^2));
[y,xi] = ksdensity(x);
plot(xi,y, 'bo')
% 驗證
hold on
sig = 1;
v = 1;
yn = zeros(size(xi));
k=find(b > 0 & xi >= 0);
if any(k),
xk = xi(k);
% Rician分佈的概率密度函式
yp(k) = (xk ./ sig^2) .* exp((-xk.^2 + v.^2) ./ (2*sig^2)) .* besselj(0, (xk .*v ./ sig^2));
end
plot(xi,yp,'b')