【发布时间】:2015-04-28 05:19:31
【问题描述】:
我想使用其中包含变量的 if 语句执行以下功能。考虑三个大小为 16 x 16 的单元阵列 A、B 和 C。例如,我只采用 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 是要调用的函数。我尝试了以下代码,但不知何故,'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 语句和“第一个 if 语句”将被执行,其余的函数不会被执行。谢谢。
【问题讨论】:
-
你的伪 if 和实际 if 做不同的事情。您如何确定未调用函数?如果他们根本没有被调用,那么问题自然不会在他们身上。
-
那么,
O是数字数组还是元胞数组? -
O 是一个元胞数组@Divakar
-
尝试用大括号包裹输出:
{XX(A(i,j),B(i,j))}等等。在循环开始之前初始化O也是一个好主意。 -
@SamiKuhmonen 不确定是否调用了其他函数,但是当我看到结果时执行了补码函数的第一个条件。剩下的所有条件和其他两个函数都没有任何效果。
标签: matlab function if-statement matrix