2015-04-28 73 views
1

我想使用if語句來執行以下函數,該語句中包含變量。考慮三個單元陣列A,B和C,每個單元的大小爲16×16。例如,我只需要4×4單元陣列。如何使用if語句調用多個函數?

A = A B C D   B = C A B D   C = 0 2 1 3    
    D C B A    B D A C    3 2 3 1    
    C B D A    A B A D    2 1 0 1      
    B A D C    D A A C    3 2 2 2 

相對於在C I需要如下對甲執行功能和B的值,

if C == 0 
    Out = B; 
elseif C == 1 
    Out = XX(A,B); 
elseif C == 2 
    Out = complement (B); 
elseif C == 3 
    Out = NX(A,B); 
end 

這裏補充,XX和NX是要被調用的函數。我嘗試了下面的代碼,但不知何故'if'語句使得很難獲得結果。我已經定義了函數以及用於執行上述操作的代碼。

for i=1:1:16 
     for j=1:1:16 
     if C(i,j) == 0 
      O(i,j) = B(i,j); 
     elseif C(i,j) == 1 
       O(i,j) = XX(A(i,j),B(i,j)); 
     elseif C(i,j) == 2 
       O(i,j) = complement(B(i,j)); 
      elseif C(i,j) == 3 
       O(i,j) = NX(i,j); 
      end 
     end end 

功能補體是如下

function [Q]=complement(P) 
    [W1,W2] = size(P); 
    Q = zeros(W1,W2); 
    P1 = cell2mat(P) 
    for i=1:1:W1 
    for j=1:1:W2 
     if P1 == 'A' 
      Q(i,j) == 'D'; 
     elseif P1 == 'B' 
       Q(i,j) == 'C'; 
     elseif P1 == 'C' 
       Q(i,j) == 'B'; 
     elseif P1 == 'D' 
       Q(i,j) == 'A'; 
     end end end 

功能XX是如下

function [Q] = XX(T,P) 
    T = cell2mat(T); 
    P = cell2mat(P); 

    Q(T == 'A' & P == 'A') = 'A'; Q(T == 'A' & P == 'B') = 'B'; Q(T == 'A' & P == 'C') = 'C'; Q(T == 'A' & P == 'D') = 'D'; 
    Q(T == 'B' & P == 'A') = 'B'; Q(T == 'B' & P == 'B') = 'A'; Q(T == 'B' & P == 'C') = 'D'; Q(T == 'B' & P == 'D') = 'C'; 
    Q(T == 'C' & P == 'A') = 'C'; Q(T == 'C' & P == 'B') = 'D'; Q(T == 'C' & P == 'C') = 'A'; Q(T == 'C' & P == 'D') = 'B'; 
    Q(T == 'D' & P == 'A') = 'D'; Q(T == 'D' & P == 'B') = 'C'; Q(T == 'D' & P == 'C') = 'B'; Q(T == 'D' & P == 'D') = 'A'; 

功能NX類似於XX僅取代而不同。我不知道我在哪裏出錯或者在函數中或者在'if'語句中。當我運行代碼時,第一個if語句和補語函數中的「first if語句」單獨執行,其餘函數不會執行。謝謝。

+0

您的僞ifs和實際ifs做不同的事情。你是如何確定函數未被調用的?如果他們根本沒有被打電話,那麼問題就不會自然而然地出現在他們身上。 –

+0

所以,'O'是數字還是單元陣列? – Divakar

+0

O是一個單元格陣列@Divakar – Roshni191

回答

0

如果A,B,C和O都是單元陣列,MATLAB將不會繼續執行C(i,j) == 0,因爲C(i,j)是單元陣列,0是數字。

相反,它會彈出一個錯誤(Undefined function 'eq' for input arguments of type 'cell')。

如果您將第一段代碼作爲腳本運行,請檢查您的工作空間並查看C和C(i,j)究竟是什麼。

如果要保持A,B,C和O作爲單元陣列,我建議使用單元陣列元件運營商如C{i,j} == 0O{i,j} = complement(B(i,j))因爲B(i,j)是細胞但complement函數的輸出是數值。