你能在MATLAB中像一个集合定义一个变量吗?

时间:2015-06-02 20:40:21

标签: matlab multidimensional-array 3d set

我希望能够在MATLAB中处理3d结构。我是MATLAB的新手,在谷歌搜索后我还没有看到这个问题的答案。

如果要显式定义特定球体,而不使用内置球体功能,这将如何工作?例如,有没有办法可以在xyz坐标系中定义变量r =(1,1,1),然后定义一个新的变量/集S = {all s:distance(r,s)< =半径)}。如果我能做到这一点会非常方便,但我不确定MATLAB如何处理类似的东西,因为它涉及无限的一组点,所以MATLAB必须有一些定义的最大分辨率。这可能吗?能够以这种方式定义3d结构会很棒。谢谢

2 个答案:

答案 0 :(得分:2)

如果通过

  

所有s:距离(r,s)< = radius)

你的意思是

  

所有s 在R 3 :距离(r,s)< = radius)

然后答案是:

  • 不,您无法定义该集by extension(即枚举其所有元素),因为该集合具有uncountably infinitely many elements

  • 但您可以定义该集 S by intension。这意味着你可以构建一个规则(一个函数),在R 3 中给出任何值 x ,它会告诉你是否 x 是否在 S 中。

即,可以使用anonymous function构建该规则,如下所示:

>> r = [1 1 1]; %// set center
>> radius = 2;  %// set radius
>> inS = @(s) sqrt(sum((s-r).^2))<radius;

当且仅当其输入属于 S inS({{1}时,函数true才会返回1false) }}) 除此以外。例如,

0

这可能是你最接近“定义”那套的。

如果您想一次测试多个值,而不是使用循环,您可vectorize the function使用bsxfun

>> inS([0 0 0])
ans =
     1
>> inS([3 4 5])
ans =
     0
>> inS([pi sqrt(2) exp(-1)])
ans =
     0

答案 1 :(得分:0)

您可以使用以下代码:

r=1;
resolutionPhi=50;
resolutionTheta=60;
phi=linspace(0,pi,resolutionPhi); %linspace gives (50) equally spaced points between (0) and (pi)
theta=linspace(0,2*pi,resolutionTheta);
[phi,theta]=meshgrid(phi,theta); %meshgrid replicates the vectors into a rectangular array

 x=r*sin(phi).*cos(theta);
 y=r*sin(phi).*sin(theta);
 z=r*cos(phi); 

您可以通过更改分辨率变量来调整分辨率。