Matlab将输出分成两个变量

4

我有两个浮点变量:

x = 0.5;
y = 1.5;

我愿意让他们大吃一惊:
x = floor(x);
y = floor(y);

我能用一条命令完成吗?这会导致错误:

[x y] = floor([x y]);

为什么你需要单独使用这两个变量? - Rody Oldenhuis
没有什么特别的...但这是一个普遍的问题,可以应用于其他用途。不要专注于 x,y。 - dynamic
那么为什么不使用 z = floor([x y]) 呢?这肯定比 @H.Muster 的解决方案更快...如果你必须这样做,那么只需在某个时候执行 x = z(:,1), y = z(:,2) - Rody Oldenhuis
像 @RodyOldenhuis 一样,我也更喜欢干净的 floor 版本,而不是我在下面发布的包装器来回答 OP 具体要求的问题。 - H.Muster
4个回答

7
你可以编写自己的floor函数包装器:
function varargout = myFloor(varargin)
for k = 1:nargin
    varargout{k} = floor(varargin{k});
end

如果您将x和y作为两个单独的参数提供,则此函数显示所需的行为。

[a, b] = myFloor(x,y)

这会导致
a =

     0


b =

     1

如果您想使用连接的数组[x y]作为输入(就像您的示例中一样),您可以使用以下函数:
```javascript function myFunction(x, y) { var arr = [x, y]; // 在这里执行您的代码 } ```
function varargout = myFloor(x)
for k = 1:numel(x)
    varargout{k} = floor(x(k));
end

那么你就会调用

[a, b] = myFloor([x y])

这将导致:
a =

     0


b =

     1

2

在这里补充一个随机想法...

基于H.Muster的解决方案,您可能想要定义一个个性化的deal函数,它类似于deal但还将函数应用于每个参数:

function varargout = myDeal(fun, varargin)
    if nargin == 2
        varargout(1:nargout) = {feval(fun, varargin{1})};
    elseif nargin-1 == nargout
        for k = 1:nargout
            varargout{k} = feval(fun, varargin{k}); end
    else
        error('Argument count mismatch.');
    end
end

这样,您可以多次分配任何函数:
>> [x,y,z] = myDeal(@floor, 0.5, 0.6, 2.7)
x =
     0
y =
     0
z =
     2

>>  [x,y,z] = myDeal(@sin, pi/6)
x =
     4.999999999999999e-01
y =
     4.999999999999999e-01
z =
     4.999999999999999e-01

>> [a, b] = myDeal(@fix, 10*rand(2), 8*rand(5))         
a =
     7     2
     7     6
b =
     5     2     4     1     6
     1     4     5     1     1
     0     1     7     2     7
     3     6     7     6     2
     7     2     4     2     1

@yes123:这种方法不会很快,至少不如向量化方式快。因此,我建议不要在任何“生产代码”或性能敏感的区域使用它。 - Rody Oldenhuis
1
@yes123:在文件交换平台上可以找到类似的想法,即disperse函数 链接 - Jonas
@Jonas:是的,我也这么想……真正的新想法很少 :) - Rody Oldenhuis
@Jonas:啊!但是disperse不像上面那个函数一样将东西通过函数传递! :) - Rody Oldenhuis

1

0

如果可能的话,我需要结果在一个命令中以x和y变量的形式返回。 - dynamic
那么答案是否定的。正如Fyre所说,floor()函数只能接受一个参数,这个参数可以是向量,但它会返回一个向量。 - Rodrigo Neves

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