Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab将输出分成两个变量_Matlab_Output - Fatal编程技术网

Matlab将输出分成两个变量

Matlab将输出分成两个变量,matlab,output,Matlab,Output,我有两个浮点变量: x = 0.5; y = 1.5; 我想就这些问题发言: x = floor(x); y = floor(y); 我能用一个命令就完成吗?这会引发一个错误: [x y] = floor([x y]); 不,这是不可能的。 从语法上看,Floor只能接受一个参数。您可以查看以下参考以进行验证: 如果 A = [0.5 1.5] 那你就可以了 floor(A) 这将导致 ans = [0 1] 下面是一个示例:您可以为地板编写自己的包装: fu

我有两个浮点变量:

x = 0.5;
y = 1.5;
我想就这些问题发言:

x = floor(x);
y = floor(y);
我能用一个命令就完成吗?这会引发一个错误:

[x y] = floor([x y]);
不,这是不可能的。
从语法上看,Floor只能接受一个参数。您可以查看以下参考以进行验证:

如果

    A = [0.5 1.5]
那你就可以了

    floor(A)
这将导致

    ans = [0 1]

下面是一个示例:

您可以为地板编写自己的包装:

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
a =

     0


b =

     1
如果要使用串联数组
[x y]
作为输入(如示例中所示),可以使用以下函数:

function varargout = myFloor(x)
for k = 1:numel(x)
    varargout{k} = floor(x(k));
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
那你就给我打电话

[a, b] = myFloor([x y])
这导致

a =

     0


b =

     1
a =

     0


b =

     1

只是在这里添加一个随机的想法

在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
通过这种方式,您可以多重分配任何功能:

function varargout = myFloor(x)
for k = 1:numel(x)
    varargout{k} = floor(x(k));
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

如果可能的话,我需要结果在一个命令的x和y变量中,答案是否定的。正如Fyre所说,floor()只能接受一个参数,实际上可以是一个向量,但它会返回一个向量。为什么你要分别“需要”这两个变量?没有什么特别的。。。但这是一个可以应用于其他用法的一般性问题。不要关注x,为什么不使用
z=floor([xy])
?它肯定比@H.Muster的解决方案要快……如果必须的话,在某个时候只要做
x=z(:,1),y=z(:,2)
。像@RodyOldenhuis一样,我也更喜欢干净的
地板
版本,而不是我在下面发布的包装器来回答OP特别要求的内容。@yes123:它不会很快,至少,没有矢量化的速度快。因此,我建议不要在任何“生产代码”或性能敏感区域使用此功能。@yes123:在函数
Distribute
@Jonas:是的,我也这么认为……真正的新想法很少见:)@Jonas:啊!但是,
discrete
不通过函数传递内容,就像上面的函数一样:)