如何将Matlab函数的输出分配给单行中的变量?

时间:2018-02-07 18:38:49

标签: matlab function vector syntax coding-style

在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]

但这并不像保持一条线那么好。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

您可以使用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和两个sigle变量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

答案 1 :(得分:1)

函数输出的值是两个不同的变量,而不是数组。 因此输出应存储为两个单元格。

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

此处,该值存储在同一阵列的两个不同的单元格v(1)和v(2)中。'

答案 2 :(得分:0)

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

c = test();

function result = test()
    a = ...; % complex computation
    b = ...; % complex computation

    result = [a b];
end

C变量将是包含两个值的列向量。但是,只有当您的功能输出不需要灵活时,此解决方案才适用。

答案 3 :(得分:0)

您可以在单元格阵列中获取多个输出。

在你的情况下:

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