📄 unif_norm.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 + -