2015-09-27 24 views
0

正如問題所述。我在矩陣中有一列,在300000個條目中,多個元素中存在相同的值。例如在matlab中具有相同值的多個元素的列循環

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 
+0

如果您不認爲您的代碼的邏輯是正確的,那麼告訴我們您實際嘗試實現的邏輯可能是個好主意。另外,我在這裏看不到循環,或者使用循環變量。 – beaker

回答

0

夫婦錯誤:

  • MATLAB的使用~作爲not因此~=用來比較矢量。
  • ,如果你想比較載體
  • 使用isequal(a,b)a == b結果是一個向量,而不是邏輯truefalse
  • switch已經比較M(:,6)a。你現在檢查的是:a == (M(:,6) == a)這可能不是目的。
  • 它說明您想要在switch參數中使用M(:,6)而不是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 
+0

感謝您對「不」的澄清。你的答案與我所問的最接近。我基本要問的是:一開始我把'M(1,6)'的值賦給'a'。然後在第一種情況下,「M(:,6)」等於「a」。只要這個陳述是'真實的',我想執行第一個案例。當語句變成'false'時,我想要新的值,比如說'b = M(1657,6)'是一個新變量的值,然後再次運行第二個case作爲語句的行數TRUE;。其餘案例也一樣。 'M(:,6)'是矢量,不能用在'switch'參數中。 – vasouli

+0

所以M(:,6)是排序的,但你不知道你會期望哪些值,以及這個組有多大?你知道最多有多少個案子? –

+0

謝謝!它按我的預期工作。是M(:,6)是排序的,我不知道這些組有多大。這一次我知道案件有四起,但如果我不知道案件有多少,會發生什麼?我們如何概括這一點? – vasouli

相關問題