我想使用if语句执行以下函数,其中包含变量。考虑三个单元阵列A,B和C,每个单元大小为16 x 16。例如,我只需要4 x 4单元阵列。
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中的值我需要在A和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是要调用的函数。我尝试了下面的代码但不知何故'如果'声明使得很难得到结果。我已经定义了函数以及用于执行上述操作的代码。
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 :(得分: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} == 0
,O{i,j} = complement(B(i,j))
这样的单元数组元素运算符,因为B(i,j)
是一个单元格但是complement
函数的输出是数字。