如何在MATLAB中删除满足截止函数的矩阵表示中的某些元素?

时间:2011-06-06 14:10:43

标签: matlab

X=(-5:.5:5)
Z=(-3:.5:3)
[x z]=meshgrid(X,Z)

必须删除所需元素的截止函数是半径为1的圆     (X-1)^ 2 +(Z-1)^ 2'= 1 我们如何管理循环以将这些元素0放在输出数据中?

2 个答案:

答案 0 :(得分:3)

我首先假设xz表示将评估某些二维函数f以生成输出的坐标。鉴于xz在您的示例中最终为13 x 21矩阵,f的输出也应为13 x 21。然后,您可以找到一个logical index,表示您的圆圈内的点,并使用此索引将输出矩阵中的点设置为零:

output = f(x,z);  %# Compute your output, which should be a 13-by-21 matrix
index = (x-1).^2 + (z-1).^2 <= 1;  %# Logical index of elements inside the circle
output(index) = 0;  %# Set the output values inside the circle to 0

答案 1 :(得分:0)

我认为你在寻找的是:

for i=1:size(x,1)
   for j=1:size(x,2)
      if ((x(i,j)-1)^2+(z(i,j)-1)^2<=1)
          x(i,j) = 0;
          y(i,j) = 0;
      end
   end
end

我希望这段代码很容易理解它的作用 - 如果不是,你应该去某个地方编写课程或坐下来看书。

现在,如果您正在寻找上述答案,请接受我的说法,即gnovice的答案(实际上是edit 2edit 3的混合)显示了如何更聪明地做到这一点的方式在MATLAB中:

radius = 1;
index = (x-1).^2 + (z-1).^2 <= radius^2;  %# Logical index of elements inside the circle
x(index) = 0;  %# Set the x values inside the circle to 0
z(index) = 0;  %# Set the z values inside the circle to 0

希望这会有所帮助 - 否则我会放弃; - )。