正态分布,锐利分布,莱斯分布 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')

猜你喜欢

转载自blog.csdn.net/strikedragon/article/details/83349502