在matlab中具有多个具有相同值的元素的列中的循环

时间:2015-09-27 15:21:12

标签: matlab loops

正如问题所说。我在矩阵中有一列,在300000个条目中,多个元素中存在相同的值。例如

1000
1000
1000
3000
3000
6000
6000

我想做一个循环,其中每个不同的值执行另一个函数。为了澄清,我希望我的程序为具有值1000的三行执行某些操作,然后为具有值3000的行执行其他操作,对具有值6000的行执行另一操作。我做了switch循环,但我不相信它在逻辑上是正确的。这是:

a = M(1,6)

switch a
    case M(:,6) == a 
      y=sinx;  
    case M(:,6) != a 
      b = M(:,6)
      y = 4
    case M(:,6) != b
      c = M(:,6)
      z = 5
    otherwise M(:,6) != c
      d = M(:,6)
      w = 6
end

1 个答案:

答案 0 :(得分:0)

几个错误:

  • matlab使用~作为not,因此~=用于比较矢量。
  • 如果您想比较向量,请使用isequal(a,b),因为a == b的结果是向量而不是逻辑truefalse
  • switch已将M(:,6)a进行了比较。你现在要检查的是:a == (M(:,6) == a)这可能不是你想要的。
  • 您希望在M(:,6)参数中使用switch而不是a

如果您希望每次M(:,6)值更改后都使用其他功能,您可能需要尝试这样的循环。

a = M(:,6)
idx = 1;
for i = 1:numel(M(:,6))
    switch idx
        case 1
            y=sinx;
        case 2
            b = M(:,6)
            y = 4
        case 3
            c = M(:,6)
            z = 5
        otherwise
            d = M(:,6)
            w = 6

    end
    if M(i+1,6) ~= a
        a = (M(i+1,6));
        idx = idx + 1;
    end
end