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

📄 specrnd.m

📁 以上上传的是一个
💻 M
字号:
function r=specrnd(x,p,m,n)
% 生成给定分布律的随机数
%    r=specrnd(x,p)返回一个来自分布律P(x)=p的随机数
%    r=specrnd(x,p,m,n)返回m*n随机数矩阵
%    p的默认值为等概率
% 例如 分布律
%       ξ 	7      8      9     10
%        p 	0.1   0.2   0.4    0.3
%  命令    specrnd([7 8 9 10],[0.1 0.2 0.4 0.3],10,10)
%  产生100个模拟数据  
    
% L. J. HU 9-10-1999

if nargin<4, n=1;end
if nargin<3, m=1;end
if nargin<2|isempty(p), p=1/length(x)*ones(size(x)); end;

[mx,nx]=size(x);[mp,np]=size(p);
sx=min(mx,nx);sp=min(mp,np);
if (mx~=mp)|(nx~=np), 
   error('size must agree');
end;
if (sx~=1)&(sx~=1),error('should be vector'); end;
x=x(:);
if any(x~=sort(x)), error('x should be acsend'); end;
if any((p<0)|(p>1)),error('p should be between 0 and 1'); end;
if abs(sum(p)-1)>1e-3,error('sum of p should be 1'); end;

r=zeros(m,n);lx=max(mx,nx);
s=rand(m,n);
cp=cumsum(p);
k=find(s<cp(1));r(k)=x(1);
k=find(s>=cp(lx-1));r(k)=x(lx);
for i=2:(lx-1),
   k=find((s>=cp(i-1))&(s<cp(i)));
   r(k)=x(i);
end

⌨️ 快捷键说明

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