2 つの float 変数があります。
x = 0.5;
y = 1.5;
私はそれらを床に置きたいです:
x = floor(x);
y = floor(y);
単一のコマンドで実行できますか? これによりエラーが発生します。
[x y] = floor([x y]);
フロア用の独自のラッパーを作成できます。
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
ここにランダムなアイデアを追加するだけです...
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
いいえ、できません。
構文からわかるように、フロアは引数を 1 つだけ受け入れることができます。以下の参照を参照して確認できます。
もしも
A = [0.5 1.5]
それからあなたはすることができます
floor(A)
それは結果として
ans = [0 1]
例を次に示します: http://www.matlabtutorials.com/functions/floor.html