scilab - 如何从带有 if 语句的函数中 return 矩阵?

scilab - how to return matrices from a function with if-statements?

我有一个看起来像这样的 scilab 函数(非常简化的代码只是为了了解它是如何工作的概念):

function [A, S, Q]=myfunc(a)
  A = a^2;

  S = a+a+a;    

  if S > A then
    Q = "Bigger";
  else 
    Q = "Lower";
  end
endfunction

如果我 运行 我会得到预期的结果:

--> [A,S,Q]=myfunc(2)
 Q  = 

 Bigger

 S  = 

   6.

 A  = 

   4.

但是,如果我将矩阵放入函数中,我希望得到等效矩阵作为结果的答案,但我却得到了这个:

--> [A,S,Q]=myfunc([2 4 6 8])
 Q  = 

 Lower

 S  = 

   6.   12.   18.   24.

 A  = 

   4.   16.   36.   64.

为什么 Q return 不是像 SA 这样的值矩阵?我如何实现它将 return "Bigger. Lower. Lower. Lower." 作为答案?即我想对矩阵的每个元素进行运算

因为在你的程序中你写了 Q = "Bigger"Q = "Lower"。这意味着 Q 将只有一个值。如果您想存储 AS 中每个值的比较,您必须让 Scilab 这样做。

您可以使用循环实现此类行为。这是通过使用两个 for 循环可以做到的:

function [A, S, Q]=myfunc(a)
    A = a^2;
    S = a+a+a;

    //Get the size of input a
    [nrows, ncols] = size(a)

    //Traverse all rows of the input
    for i = 1 : nrows 

        //Traverse all columns of the input
        for j = 1 : ncols 

            //Compare each element
            if S(i,j) > A(i,j) then

                //Store each result
                Q(i,j) = "Bigger"

            else
                Q(i,j) = "Lower"
            end
        end
    end
endfunction

小心 A = a^2. 它会破坏您的功能。如果输入 a 是向量(1-by-n 或 n-by-1 矩阵),矩形矩阵(m-by-n 矩阵,m ≠ n ),它有不同的行为,或方阵(n-by-n矩阵):

  • 向量:它的工作方式类似于 .^,即它单独提升每个元素 (see Scilab help)。
  • 矩形:它不起作用,因为它必须遵循 matrix multiplication 的规则。
  • 平方:有效并遵循矩阵乘法规则。

我要补充一点,在 Scilab 中,循环次数越少越好:所以@luispauloml 的答案可能会重写为

function [A, S, Q]=myfunc(a)
    A = a.^2; // used element wise power, see luispauloml advice
    S = a+a+a;
    Q(S > A) = "Bigger"
    Q(S <= A) = "Lower"
    Q = matrix(Q,size(a,1),size(a,2)) // a-like shape
endfunction