Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 圆中的几何随机图_Matlab_Graph_Geometry_Topology - Fatal编程技术网

Matlab 圆中的几何随机图

Matlab 圆中的几何随机图,matlab,graph,geometry,topology,Matlab,Graph,Geometry,Topology,我想在半径为R的球内生成一组随机均匀分布的坐标。在Matlab中,有没有办法不用for循环,以类似矩阵的形式来实现这一点 谢谢 更新: 很抱歉给你带来了困惑。我只需要在半径为R的圆上均匀地随机生成n个点,而不是一个球体。不确定我是否正确理解了你的问题,但你不能通过设置φ、θ和R来生成球体内的任意随机数,分配给随机数吗?不确定我是否正确理解了你的问题,但是,你不能通过设置φ、θ和r,分配给随机数,在球体内部生成任意随机数吗?我正要将此标记为上一个问题的副本,但我认为你应该在这里提出质疑,因为尽管问

我想在半径为R的球内生成一组随机均匀分布的坐标。在Matlab中,有没有办法不用for循环,以类似矩阵的形式来实现这一点

谢谢

更新:
很抱歉给你带来了困惑。我只需要在半径为R的圆上均匀地随机生成n个点,而不是一个球体。

不确定我是否正确理解了你的问题,但你不能通过设置φ、θ和R来生成球体内的任意随机数,分配给随机数吗?

不确定我是否正确理解了你的问题,但是,你不能通过设置φ、θ和r,分配给随机数,在球体内部生成任意随机数吗?

我正要将此标记为上一个问题的副本,但我认为你应该在这里提出质疑,因为尽管问题中有一个matlab脚本,但大多数线程都是python

问题中给出的这个小函数(我直接从这里粘贴)就是您所需要的

function X = randsphere(m,n,r)

% This function returns an m by n array, X, in which 
% each of the m rows has the n Cartesian coordinates 
% of a random point uniformly-distributed over the 
% interior of an n-dimensional hypersphere with 
% radius r and center at the origin.  The function 
% 'randn' is initially used to generate m sets of n 
% random variables with independent multivariate 
% normal distribution, with mean 0 and variance 1.
% Then the incomplete gamma function, 'gammainc', 
% is used to map these points radially to fit in the 
% hypersphere of finite radius r with a uniform % spatial distribution.
% Roger Stafford - 12/23/05

X = randn(m,n);
s2 = sum(X.^2,2);
X = X.*repmat(r*(gammainc(s2/2,n/2).^(1/n))./sqrt(s2),1,n);

要了解为什么不能像人们认为的那样,对所有三个坐标使用统一的随机变量

我正要将此标记为上一个问题的重复,但我认为您值得怀疑,因为尽管问题中有一个matlab脚本,但大多数线程都是python

问题中给出的这个小函数(我直接从这里粘贴)就是您所需要的

function X = randsphere(m,n,r)

% This function returns an m by n array, X, in which 
% each of the m rows has the n Cartesian coordinates 
% of a random point uniformly-distributed over the 
% interior of an n-dimensional hypersphere with 
% radius r and center at the origin.  The function 
% 'randn' is initially used to generate m sets of n 
% random variables with independent multivariate 
% normal distribution, with mean 0 and variance 1.
% Then the incomplete gamma function, 'gammainc', 
% is used to map these points radially to fit in the 
% hypersphere of finite radius r with a uniform % spatial distribution.
% Roger Stafford - 12/23/05

X = randn(m,n);
s2 = sum(X.^2,2);
X = X.*repmat(r*(gammainc(s2/2,n/2).^(1/n))./sqrt(s2),1,n);

要了解为什么不能像人们认为的那样,对所有三个坐标使用统一的随机变量

为了完整起见,下面是一些用于点剔除解决方案的MATLAB代码。它在单位立方体内生成一组随机点,删除单位球体外的点,并向上缩放坐标点以填充半径为
R
的球体:

XYZ = rand(1000,3)-0.5;           %# 1000 random 3-D coordinates
index = (sum(XYZ.^2,2) <= 0.25);  %# Find the points inside the unit sphere
XYZ = 2*R.*XYZ(index,:);          %# Remove points and scale the coordinates
XYZ=rand(1000,3)-0.5;%#1000个随机三维坐标

index=(sum(XYZ.^2,2)为了完整起见,这里有一些用于点剔除解决方案的MATLAB代码。它在单位立方体内生成一组随机点,删除单位球体外的点,并缩放坐标点以填充半径球体
R

XYZ = rand(1000,3)-0.5;           %# 1000 random 3-D coordinates
index = (sum(XYZ.^2,2) <= 0.25);  %# Find the points inside the unit sphere
XYZ = 2*R.*XYZ(index,:);          %# Remove points and scale the coordinates
XYZ=rand(1000,3)-0.5;%#1000随机三维坐标

index=(sum(XYZ.^2,2)正确答案在这里。该分布称为“磁盘点拾取”

正确答案在这里。该分布称为“磁盘点拾取”

他希望它是均匀分布的。如果你均匀分布这三个变量,你会发现靠近中心的区域分布更密集,即不均匀。你可以均匀分布在x、y、z上,并拒绝生成不在球体中的点,但这仍然需要循环(或者,如果您确实必须避免循环,请使用递归,这在这里很愚蠢。)啊!我明白了!那么你可能想要一些分布概率,这样就不太可能随机选取导致密度变化的值。但是,你确定计算复杂性超过了标准的蒙特卡罗方法,如果点在球体之外,就简单地丢弃它吗?看起来yoda上面的链接为你提供了回答如何向下分布值。就个人而言,我会使用愚蠢的方法,因为我理解数学。如果我尝试实现标准化分布,我可能会在某个地方弄乱一个方程。他希望它是均匀分布的。如果你均匀分布这三个变量,你会发现靠近中心的区域你可以在x、y、z上均匀分布,并拒绝不在球体中的生成点,但这仍然需要循环(或者如果你真的必须避免循环,那么使用递归,这在这里是愚蠢的)啊!我明白了!那么你可能想要一些分布概率,这样就不太可能随机选取导致密度变化的值。但是,你确定计算复杂性超过了标准的蒙特卡罗方法,如果点在球体之外,就简单地丢弃它吗?看起来yoda上面的链接为你提供了回答如何向下分布值。就个人而言,我会用这种愚蠢的方法,因为我理解数学。如果我尝试实现标准化分布,我可能会在某个地方弄乱一个方程式。你的维基百科链接在这里似乎不适用。那篇文章讨论的是如何在球体表面上创建均匀分布,w在这里,我们在一个球形体积内创建一个均匀分布。@gnovice:我不是在提供一个解决方案,而是解释为什么一个直观的解决方案可能不起作用。在这两种情况下,w.r.t.PDF/CDF的参数都是相同的。@banana:我刚刚看到了你更新的问题。你可以对圆上的点使用上面相同的脚本。语法将是
randsphere(N,2,R)
,其中
N
是点数,
R
是圆的半径。你的维基百科链接在这里似乎不适用。那篇文章讨论的是如何在球体表面上创建均匀分布,而我们在球体体积内创建均匀分布。@gnovice:我没有提供这个t作为一个解决方案,而不是解释为什么直观的解决方案可能不起作用。两种情况下的参数w.r.t.PDF/CDF是相同的。@香蕉:我刚刚看到了你更新的问题。你可以对圆上的点使用上面相同的脚本。语法将是
randsphere(N,2,r)
,其中
N
是点数,
R
是圆的半径。我也考虑过,但我想精确生成N个点。最坏的情况下,我将使用c中的for循环并从matlab调用函数。但我正在寻找更好的解决方案我也考虑过,但我想生成精确的连n分。最坏的情况我会机智地去做