4

2 つの float 変数があります。

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 を 2 つの別個の引数として指定した場合に必要な動作を示します。

[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

いいえ、できません。
構文からわかるように、フロアは引数を 1 つだけ受け入れることができます。以下の参照を参照して確認できます。

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 に答える