⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unif_norm.m

📁 均匀分布检验
💻 M
字号:
% 来自均匀分布的样本
% 由于采用了近似,使得来自均匀分布的数据样本,经检测判断为服从均匀和正态分布!!!
% 但均匀分布检验的统计量小于正态分布的检验统计量,故仍认为数据服从均匀分布。


x=[99.95	99.231	99.607	99.486	99.891	99.762	99.456	99.019	99.821	99.445...
99.615	99.792	99.922	99.738	99.176	99.406	99.935	99.917	99.41	99.894...
99.058	99.353	99.813	99.01	99.139	99.203	99.199	99.604	99.272	99.199...
99.015	99.747	99.445	99.932	99.466	99.419	99.846	99.525	99.203	99.672...
99.838	99.02	99.681	99.379	99.832	99.503	99.709	99.429	99.305	99.19...
99.193	99.682	99.303	99.542	99.151	99.698	99.378	99.86	99.854	99.594...
99.497	99.9   99.822	99.645	99.818	99.66	99.342	99.29	99.341	99.534...
99.727	99.309	99.838	99.568	99.37	99.703	99.547	99.445	99.695	99.621...
99.795	99.957	99.523	99.88	99.173	99.98	99.271	99.252	99.876	99.737...
99.137	99.012	99.894	99.199	99.299	99.661	99.284	99.469	99.065	99.988];

N=100;
x1=sort(x);  % 升序排列
% 均匀分布检验统计量
a=mean(x)-1.732*std(x);
b=mean(x)+1.732*std(x);

% 正态分布检验统计量
mu=mean(x);
sigma=std(x);

% 对其中相等的数据近似处理
dt=0.0001;% 修正因子
for i=1:N-1
    for j=(i+1):N
        if x1(i)==x1(j);
            x1(j)=x1(j)+dt;
        end
    end
end


% 理论分布U(a,b)
% theoric cdf
% 是否超出范围
if a>x1(1)
    a=x1(1);
end
if b<x1(N)
    b=x1(N);
end

% 均匀累积分布
for i=1:N
    unifthcdf(i)=(x1(i)-a)/(b-a);
end

%  experience cdf
for i=1:N
    unifexcdf(i)=i/N;
end

% 均匀分布的K-S检验
for i=1:N
    unifks(i)=unifthcdf(i)-unifexcdf(i);
end
 unifD=max(abs(unifks));
 if unifD<0.1340
     disp('样本数据服从均匀分布。')
 else
     disp('样本数据不服从均匀分布。')
 end
 
 
 % 正态分布的理论分布
 for i=1:N
     normthcdf(i)=normcdf(x1(i),mu,sigma);
 end
 
 % 经验分布同均匀分布
 
 % 正态检验
 for i=1:N
    normks(i)=normthcdf(i)-unifexcdf(i);
end
normD=max(abs(normks));
 if normD<0.1340
     disp('样本数据服从正态分布。')
 else
     disp('样本数据不服从正态分布。')
 end
 
 if unifD<0.1340
     if normD<0.1340
         if unifD<normD
             disp('样本最终服从均匀分布')
         else
             disp('样本最终服从正态分布')
         end
     end
 end
 
 grid on
 subplot(1,2,1),hist(x)
 subplot(1,2,2),stem(x),axis([0,100,98.8,100.1]);
 
 
 
 % 问题1累积经验分布函数S(x)
y=ones(1,N);
k=0;
for i=1:(1+k):N-1
    k=0;
    for j=(i+1):N
        if x1(i)==x1(j)
            k=k+1;
            for n=i:j
                y(n)=y(n)+k;  %  有问题!!!
            end
        end
    end
end

for n=1:N
    pdf(n)=y(n)/N;
end


% cdf有重复计算问题!!!
% 需将相同但不为1的pdf适当处理
cdf(1)=pdf(1);
for n=2:N
    cdf(n)=cdf(n-1)+pdf(n);
end


% 问题2
t=0;
m=0;
for n=1:(1+t):N
    t=0;
    if y(n)~=1
        m=m+1;
        for l=n+1:n+m
            y(l)=0;
        end
        m=0;
    else 
        y(n)=1;
    end
end
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -