如何在一行代码中将Matlab函数的输出赋值给变量?

3
有没有一种方法可以在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]

但是将它分成多行看起来并不好看。有什么想法吗?


2
如果你想让你的函数返回一个向量,为什么不把它改成返回 result = [p, a]; 呢? - beaker
相关:https://dev59.com/sXLYa4cB1Zd3GeqPdvcp - Cris Luengo
4个回答

3
您可以通过使用 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

1
函数输出的是两个不同的变量,而不是一个数组。因此输出应该存储为两个单元格。
[v(1),v(2)]=fn(val)

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

0

我脑海中最简单的解决方案是:

c = test();

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

    result = [a b];
end

C变量将成为一个包含两个值的列向量。但是,如果您的函数输出不需要灵活性,则此解决方案仅适用。


0

你可以在一个单元数组中获取多个输出。

在你的情况下:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接