【问题标题】:How do I assign the output from a Matlab function to a variable in a single line?如何将 Matlab 函数的输出分配给一行中的变量?
【发布时间】:2018-02-07 18:38:49
【问题描述】:

matlab 中有没有一种方法可以将 matlab 中函数的输出分配给一行内的向量?

例如,这个函数应该分配周长和面积值

function [p,a] = square_geom(side)
p = perimeter_square(side)
a = side.^2
[p,a]

但是当我尝试像这样存储数据时

v = square_geom(3)

它不起作用。但是可以这样做

[p,a] = square_geom(3)
v=[p,a]

但这看起来不如将其保留在一行中。有什么想法吗?

【问题讨论】:

标签: matlab function vector syntax coding-style


【解决方案1】:

您可以使用varargout 作为输出变量来更改函数的定义:

编辑 更新了函数的定义,包括对输出数量的检查

function varargout = square_geom(side)

p = 3;% %perimeter_square(side)
a = side.^2;
v=[p,a];

switch(nargout)
   case 0 disp('No output specified, array [p,a] returned')
          varargout{1}=v;
   case 1 varargout{1}=v;
   case 2 varargout{1}=p;
          varargout{2}=a;
   case 3 varargout{1}=v;
          varargout{2}=p;
          varargout{3}=a;
   otherwise disp(['Error: too many (' num2str(nargout) ') output specified'])
             disp('array [p,a,NaN, NaN ...] returned (NaN for each extra output)')
             varargout{1}=v;
             varargout{2}=p;
             varargout{3}=a;
             for i=4:nargout
                varargout{i}=NaN
             end
end

这允许您以多种方式调用您的函数

square_geom(3)
v=square_geom(3)
[a,b]=square_geom(3)
[a,b,d]=square_geom(3)
[a,b,d,e,f,g]=square_geom(3)

在第一种情况下,您将数组 v 作为自动变量 ans

square_geom(3)

No output specified, array [p,a] returned
ans =

   3   9

在第二种情况下,你得到数组v

v=square_geom(3)

v =

   3   9

在第三种情况下,你得到了两个变量

[a,b]=square_geom(3)

a =  3
b =  9

在第四种情况下,你得到数组v和两个单一变量ab

[v,b,d]=square_geom(3)

v =

   3   9

b =  3
d =  9

在后一种情况下(指定的输出过多),您会得到数组 v、两个单个变量 ab 以及超出的变量(efg)设置为NaN

[v,b,d,e,f,g]=square_geom(3)

Error: too many (6) output specified
array [p,a,NaN, NaN ...] returned (NaN for each extra output)
v =

   3   9

b =  3
d =  9
e = NaN
f = NaN
g = NaN

请注意,我已经修改了函数的代码,将对perimeter_square 的调用替换为3

【讨论】:

    【解决方案2】:

    函数输出的值是两个不同的变量,不是数组。 所以输出应该存储为两个单元格。

    [v(1),v(2)]=fn(val)
    

    这里,值存储在同一个数组'v'的两个不同的单元格v(1)和v(2)中。

    【讨论】:

      【解决方案3】:

      我想到的最简单的解决方案是:

      c = test();
      
      function result = test()
          a = ...; % complex computation
          b = ...; % complex computation
      
          result = [a b];
      end
      

      C 变量将是一个包含两个值的列向量。但是这个解决方案只适用于你的函数输出不需要灵活的情况。

      【讨论】:

        【解决方案4】:

        您可以在一个元胞数组中获取多个输出。

        在你的情况下:

        v=cell(1,2);
        [v{:}]=square_geom(3)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-19
          • 2010-12-21
          • 2012-06-13
          • 1970-01-01
          相关资源
          最近更新 更多