📄 univerify.m
字号:
function okay=uniVerify(varargin)
if nargin==1
r=varargin{1,1};
alpha=0.05;k=20; %默认为0.05显著性检验,区间等分为20。
end
if nargin==2
r=varargin{1,1};
alpha=varargin{1,2};
k=20;
end
if nargin==3
r=varargin{1,1};
alpha=varargin{1,2};
k=varargin{1,3};
end
% %程序测试代码
% r=myunirnd(30,1);
% alpha=0.05;
% k=20;
r=reshape(r,1,[]);
critical.alpha=[0.05 0.01];
critical.pvalue=[16.919 21.666;30.144 36.191;42.557 49.588]; %规定k=10,20,30,所以自由度为9,19,29。
[row,col]=find(critical.alpha==alpha);
theory_critical=critical.pvalue(k/10,col);
n=prod(size(r));
theory_freq=n/k; %理论频数
%统计实际频数
%等分区间[0 1]为k个,divide_point为各等分点及两个端点。
for i=0:k
divide_point(i+1)=i/k;
end
%对随机数的序列进行重新排序
r=sort(r);
%统计各区间的频数
i=1;
j=1;
real_freq=zeros(k,1);
while i<=n & j<k+1
if r(i)<divide_point(j+1) & r(i)>=divide_point(j)
real_freq(j)=real_freq(j)+1;
i=i+1;
continue
else
j=j+1;
end
end
%统计实际chi-square值
real_chi_square=k/n*sum((real_freq-theory_freq).^2);
if real_chi_square>theory_critical
okay=0;
fprintf('不满足均匀性检验!\n')
else
okay=1;
fprintf('满足均匀性检验!\n')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -