当前位置:   article > 正文

matlab生成区间随机数,matlab在一定范围内生成随机数

matlab 生成指定范围的随机数

rand([m n])产生 m行,n列(0,1)范围内均匀分布的伪随机数 如果要求在区间(a,b)

由热心网友提供的答案1:

实现方法:首先使用rand()函数生成N个随机数,假设此时N个随机数的和是S,那么将每个随机数变为原

40dd2c1c7c58fe4e7fc1830f42f1623f.png

rand([m n])产生 m行,n列(0,1)范围内均匀分布的伪随机数如果要求在区间(a,b)内产生均匀分布的随机数r = a + (b-a).*rand([m n]));

2*rand-1rand函数产生的是0到1之间的数祝你学习愉快!

406972f30aa8fc53541f441ac5e39afe.png

扩展阅读,根据您访问的内容系统为您准备了以下扩展内容,希望对您有帮助。

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

9f45b36f14f0c57ed79c02c769fcc144.png023a64d597ff3970c4ca86fa61c4e61c.png追问感谢

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/534895
推荐阅读
相关标签
  

闽ICP备14008679号