赞
踩
rand([m n])产生 m行,n列(0,1)范围内均匀分布的伪随机数 如果要求在区间(a,b)
由热心网友提供的答案1:
实现方法:首先使用rand()函数生成N个随机数,假设此时N个随机数的和是S,那么将每个随机数变为原
rand([m n])产生 m行,n列(0,1)范围内均匀分布的伪随机数如果要求在区间(a,b)内产生均匀分布的随机数r = a + (b-a).*rand([m n]));
2*rand-1rand函数产生的是0到1之间的数祝你学习愉快!
扩展阅读,根据您访问的内容系统为您准备了以下扩展内容,希望对您有帮助。
matlab 如何在指定圆域中生成随机数
%算法为:
%1)在指定圆的最小外切正方形内均匀布n个点
%2)删除圆外的m个点
%3)重复1、2步骤,每次重复1时的布置点数n为上一次删除点数m
%因为正方形的面积与圆面积之比为pi/4约为0.75
%循环第二次时删除的点数m就仅为0.0625*需要点数,收敛快。
n=1000;%总点数
r=5;%半径
x=2*r*rand(1,n)-r;%开始构造随机点
y=2*r*rand(1,n)-r;
index=find(x.^2+y.^2>r.^2);
len=length(index);
x(index)=[];
y(index)=[];
while len
xt=2*r*rand(1,len)-r;
yt=2*r*rand(1,len)-r;
index=find(xt.^2+yt.^2>r.^2);
len=length(index);
xt(index)=[];
yt(index)=[];
x=[x xt];
y=[y yt];
end
plot(x,y,'ro')
axis equal
matlab 如何将所有的点都规定在圆的范围内。用正态随机生成器
你的要求有问题。
正态分布无法确保随机数的范围——尽管在超过一定范围(例如3倍标准差)的概率很小,但毕竟是存在的。
而且,你用正态分布产生半径,也并不意味着点在圆内服从正态分布(正如用均匀随机数产生半径,并不会产生在圆内均匀分布的随机数)。
产生二维正态分布应该用 mvnrnd 函数。
至于说要保证点在圆内,那就只能是把落在圆外的少数点剔除,或者强制*到圆内(直接放到边缘似乎不是好办法,可以考虑将其和圆心的距离对圆的半径取模)。更多追问追答追问那能否加个循环将圆外的点清除呢追答
前些天刚好编了类似的代码(原来的是均匀分布),改写一下,供参考:N = 1000;
L = 4;
W = 2;
D = sqrt(L^2+W^2);
% 模拟
r = mvnrnd([0 0],[1 0; 0 1]*D/2/3,1000);
x = r(:,1);
y = r(:,2);
% 对圆外的点进行*
R = sqrt(x.^2+y.^2);
t = atan2(y, x);
inx = R >= D/2;
R(inx) = mod(R(inx), D/2);
x = R .* cos(t);
y = R .* sin(t);
% 判断在球门范围内
inx = abs(x) <= L/2 & abs(y) <= W/2;
P = sum(inx) / N;
% 绘图
clf
t = linspace(0,2*pi,200);
plot(D/2*cos(t),D/2*sin(t),'linewidth',2);
hold on
patch([-1 1 1 -1]*L/2,[-1 -1 1 1]*W/2,'c','Facealpha',0.3)
plot(x(inx),y(inx),'go');
plot(x(~inx),y(~inx),'r*');
axis equal
追问感谢
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。