我想使用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語句」單獨執行,其餘函數不會執行。謝謝。
您的僞ifs和實際ifs做不同的事情。你是如何確定函數未被調用的?如果他們根本沒有被打電話,那麼問題就不會自然而然地出現在他們身上。 –
所以,'O'是數字還是單元陣列? – Divakar
O是一個單元格陣列@Divakar – Roshni191