ang=rand(1,10000)*2*pi;%随机10000个0~2pi均匀分布的角度
r=sqrt(rand(1,10000));%随机10000个0~1均分布数的开平方做幅度
x=r.*cos(ang);%计算实部
y=r.*sin(ang);%计算虚部
data=x+1i*y;%得到单位圆里均匀分布的复数
plot(x,y,'.');%根据实部虚部画图
xlabel('实部');
ylabel('虚部');
axis image;
我想求的是单位球内的随机数。。。不过还是感谢你的帮助。
追答球内的只要改一下就好,基本思想都是将直角坐标转为极坐标或求坐标
求坐标的体积元是 r^2*sinθdrdθdφ
所以r的分布函数是r^2的,积分也就是r^3,用0~1均匀分布的开三次方获得
而θ的分布函数是sinθ,积分也就是-cosθ,用-1~1均匀分布的反余弦获得
N=10000;
ang1=rand(1,N)*2*pi;%随机10000个0~2pi均匀分布的角度1
ang2=acos(rand(1,N)*2-1);%随机10000个-1~1均匀分布的反余弦获得角度2
r=rand(1,N).^(1/3);%随机10000个0~1均分布数的开立方做幅度
x=r.*cos(ang1).*sin(ang2);%计算x
y=r.*sin(ang1).*sin(ang2);%计算y
z=r.*cos(ang2);%计算z
plot3(x,y,z,'.');
axis square;