matlab - 用matlab选择网格数据的节点来设置边界条件

标签 matlab vector

我已将带有网格数据的曲面 2Dmesh 文件导入到 matlab 中。

该网格文件有 3 列:第一列包含节点编号,第二列包含节点的 x 坐标,第三列包含节点的 y 坐标。

我想选择这个圆x²+y² = 4内的节点。将数据文件导入matlab后,我有三个列向量,节点向量,x坐标向量和y坐标向量。

有什么技巧可以强加 x² + y² < 4 条件来做到这一点吗?谢谢。

最佳答案

您可以使用并行扫描三个向量的 for 循环轻松地做到这一点。

首先,您可能需要检查这 3 个向量是否具有相同的长度。比方说x是 x 坐标的向量 y是具有 y 坐标和 idx 的向量是带有节点编号的向量。

if(length(x)~=length(y) || length(x)~=length(idx) || length(y)~=length(idx))
   error('Vectors must have the same length.');
end

然后您可以继续。

SelectedNodes=[];
for i=1:length(x) %or length(y) or length(idx)...they must have the same length
    if(x(i)^2+y(i)^2<4)
        SelectedNodes=[SelectedNodes idx(i)];
    end
end

现在在SelectedNodes您拥有位于圆内的节点的 ID,要知道您的圆内有多少个节点,只需评估其长度 ( length(SelectedNodes) )。

更新:正如 @rayryeng 正确指出的那样,有一种更聪明的方法可以通过使用逻辑索引而不是 for 循环来实现此目的。逻辑索引(用糟糕的话说)给出了逻辑 1 (真实)在 i -第一个位置如果 i向量(或矩阵)的第一个元素满足特定条件。否则就会出现逻辑0 (错误的)。按照建议运行,

SelectedNodes=idx(x.^2+y.^2<4)

代码x.^2+y.^2<4将返回与 x 长度相同的数组(和 y )包含 10 s 就位 i取决于 x 中是否有这样的元素和y满足圆方程。这样的数组将是 idx 的输入这意味着“从idx中选择标记为true的值”。最后,这将是存储在 SelectedNodes 中的结果。 .

关于matlab - 用matlab选择网格数据的节点来设置边界条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35311963/

相关文章:

matlab - 透明重叠条形图

c++ - 从由函数填充的字符串的推导 vector 中将字符串转换为 int

c++ - 自定义 vector 模板 - 字符串

Matlab:具有统一绘图列高度的 seqlogo

image-processing - 向矢量添加噪声

windows - 安装希伯来语字体matlab

excel - 使用 xlswrite 将大矩阵从 MATLAB 导出到 Excel

c++ - 如何对包含通过索引相互关联的数据的多个数组进行排序

c++ - QVector 与 QList

C++11 vector 包含 2 个不同的子类,但不同时