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

📄 univerify.m

📁 该程序用来检验monte carlo随机数的分布是否满足随机性要求。包括独立性检验、均匀性检验和参数检验。
💻 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 + -