matlab 如何在指定圆域中生成随机数比如指定圆域为 x^2+y^2<r如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)ran=rand
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/30 00:03:45
![matlab 如何在指定圆域中生成随机数比如指定圆域为 x^2+y^2<r如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)ran=rand](/uploads/image/z/8793232-16-2.jpg?t=matlab+%E5%A6%82%E4%BD%95%E5%9C%A8%E6%8C%87%E5%AE%9A%E5%9C%86%E5%9F%9F%E4%B8%AD%E7%94%9F%E6%88%90%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%AF%94%E5%A6%82%E6%8C%87%E5%AE%9A%E5%9C%86%E5%9F%9F%E4%B8%BA+x%5E2%2By%5E2%26lt%3Br%E5%A6%82%E4%BD%95%E4%BB%85%E4%BB%85%E5%9C%A8%E8%BF%99%E4%B8%AA%E5%8C%BA%E5%9F%9F%E5%86%85%E7%94%9F%E6%88%90%E5%9D%87%E5%8C%80%E9%9A%8F%E6%9C%BA%E6%95%B0%3F%E8%A6%81%E4%BF%9D%E8%AF%81%E8%B6%B3%E5%A4%9F%E5%9D%87%E5%8C%80%7E%E5%B0%9D%E8%AF%95%E8%BF%87%E4%BB%A5%E4%B8%8B%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%9A1%EF%BC%89%E5%85%88%E7%94%9F%E6%88%90%E6%96%B9%E5%BD%A2%E5%8C%BA%E5%9F%9F%E9%9A%8F%E6%9C%BA%E6%95%B0%E5%86%8D%E6%88%AA%E5%8F%96%EF%BC%9A%EF%BC%88%E4%B8%BB%E5%B9%B2%EF%BC%89ran%3Drand)
matlab 如何在指定圆域中生成随机数比如指定圆域为 x^2+y^2<r如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)ran=rand
matlab 如何在指定圆域中生成随机数
比如指定圆域为 x^2+y^2<r
如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~
尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)
ran=rand(1000);
ran2=(ran-0.5)*2*r;
for i=1:1000
for j=1:1000
if r^2>ran2(i)^2+ran2(j)^2
plot(ran2(i),ran2(j),'r')
hold on
end
end
end
2)生成圆域内任意圆上的随机点:
a1=2*pi*rand(1,1000);
r1=r*rand(1,1000);
x=sin(a1).*r1;
y=cos(a1).*r1;
a2=0:2*pi/100:2*pi;
plot(r*sin(a2),r*cos(a2),'-b',x,y,'or')
结果为以下两张图,因为算法本身缺陷,无论1)2)都不够均匀,有高手有更好的方法吗?/>
matlab 如何在指定圆域中生成随机数比如指定圆域为 x^2+y^2<r如何仅仅在这个区域内生成均匀随机数?要保证足够均匀~尝试过以下两种方法:1)先生成方形区域随机数再截取:(主干)ran=rand
%算法为:
%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