matlab - 你能在 MATLAB 中像集合一样定义变量吗?

标签 matlab multidimensional-array 3d set

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

如果您想显式定义特定的球体,而不使用内置的球体函数,这将如何工作?例如,有没有一种方法可以在 xyz 坐标系中定义变量 r = (1,1,1),然后定义一个新变量/集 S = {all s: distance (r,s) <= radius )}。如果我能做到这一点,那就非常方便了,但我不确定 MATLAB 如何处理类似的事情,因为它会涉及无限的点集,因此 MATLAB 必须有一些定义的最大分辨率。这可能吗?如果能够以这种方式定义 3D 结构,那就太好了。谢谢您

最佳答案

如果通过

all s: distance (r,s) <= radius)

你的意思是

all s in R3: distance (r,s) <= radius)

那么答案是:

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

  • 但是您可以定义该集合S by intension 。这意味着您可以构建一个规则(函数),给定 R3 中的任何值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 返回 true (1),并且false(0) 否则。例如,

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

这可能是您可以“定义”该集合的最接近的结果。

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

>> inS = @(s) sqrt(sum((bsxfun(@minus, s, r)).^2, 2))<radius;
>> points = [ 0 0 0
              3 4 5
              pi sqrt(2) exp(-1) ];
>> inS(points)
ans =
     1
     0
     0  

关于matlab - 你能在 MATLAB 中像集合一样定义变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606163/

相关文章:

.each 循环内的 javascript .push 方法仅返回一个数组

php - 搜索 php assoc array (hash map) 作为 mysql

python - 如何加快 pyglet 渲染速度?

c++ - 如何设置填充有 mxSetData 的 mxArray 的 classID?

java - matlab细化算法java实现

matlab - Numpy 相当于 MATLAB 的 hist

algorithm - 寻找具有零边界的岛屿

matlab - 提高许多子矩阵左除运算的性能(mldivide,\)

python - 在python中查找点是否在3D多边形中

javascript - 在 Three.js 中创建带圆 Angular 的立方体