如何使用if语句调用多个函数?

时间:2015-04-28 05:19:31

标签: matlab function if-statement matrix

我想使用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语句'从补充功能单独执行,其余功能不执行。感谢。

1 个答案:

答案 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} == 0O{i,j} = complement(B(i,j))这样的单元数组元素运算符,因为B(i,j)是一个单元格但是complement函数的输出是数字。