4

我有两个浮点变量:

x = 0.5;
y = 1.5;

我想把它们放在地板上:

x = floor(x);
y = floor(y);

我可以在一个命令中完成吗?这会引发错误:

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

4 回答 4

7

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

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]作为输入(如在您的示例中),您可以使用以下函数:

function varargout = myFloor(x)
for k = 1:numel(x)
    varargout{k} = floor(x(k));
end

然后你会打电话

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

这导致

a =

     0


b =

     1
于 2012-11-30T14:21:03.073 回答
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
于 2012-11-30T14:36:46.447 回答
1

不,这是不可能的。
Floor 只能接受一个参数,从语法中可以看出。您可以查看下面的参考来验证:

http://www.mathworks.in/help/symbolic/mupad_ref/floor.html

于 2012-11-30T14:13:53.607 回答
0

如果

    A = [0.5 1.5]

那么你可以做

    floor(A)

这将导致

    ans = [0 1]

这是一个例子: http: //www.matlabtutorials.com/functions/floor.html

于 2012-11-30T14:14:44.997 回答