【问题标题】:How to call multiple functions using if statement?如何使用 if 语句调用多个函数?
【发布时间】: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


【解决方案1】:

如果 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 函数的输出是数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多