如何制作同时接受矩阵和单个参数的重载函数?
How can I make overloaded function that accepts both matrix and individual parameters?
作为我的机器人学科布置的家庭作业,我应该编写在坐标系之间转换的函数。具体来说,我们应该这样做:
Function parameters are Xo = mySYSTEM1toSYSTEM2(Xi)
, where:
Xi
is matrix 3 * N.
Every column presents one point, elements of the column are then the coordinates of that point in SYSTEM1.
我知道转换方程式,但我需要 matlab 语法方面的帮助。我在想象这样的事情:
%Takes matrix as arguments
% - loops through it and calls mySphericToCarthesian(alpha, beta, ro) for every column
function [Xo] mySphericToCarthesian[Xi]
%Converts one spheric point to another
function [x, y, z] mySphericToCarthesian[alpha, beta, ro]
Matlab 似乎不喜欢这个。
我怎样才能建立这两个功能,这样我才能真正从作业本身着手?
嗯,最简单的选择可能是定义两个不同的函数。在 Matlab 中,函数重载 shadows 除了一个函数之外的所有函数(即 一次只能使用一个具有给定名称的函数),这不是在实践中非常有趣。
但是,如果您绝对只想要一个具有两种不同行为的函数,则可以使用 nargin
和 nargout
变量来实现。在函数内部,它们表示调用 script/function 指定的输入和输出数。您还可以使用 varargin
,它将所有输入放在一个单元格中。
在实践中,这给出了:
function [x, y, z] = mySphericToCarthesian(varargin)
% Put your function description here.
switch nargin
case 1
Xi = varargin{1};
% Do you computation with matrix Xi
% Define only x, which will be used as the only output
case 3
alpha = varargin{1};
beta = varargin{2};
rho = varargin{3};
% Do you computation with alpha, beta and rho
% Define x, y and z for the outputs
end
作为我的机器人学科布置的家庭作业,我应该编写在坐标系之间转换的函数。具体来说,我们应该这样做:
Function parameters are
Xo = mySYSTEM1toSYSTEM2(Xi)
, where:Xi
is matrix 3 * N. Every column presents one point, elements of the column are then the coordinates of that point in SYSTEM1.
我知道转换方程式,但我需要 matlab 语法方面的帮助。我在想象这样的事情:
%Takes matrix as arguments
% - loops through it and calls mySphericToCarthesian(alpha, beta, ro) for every column
function [Xo] mySphericToCarthesian[Xi]
%Converts one spheric point to another
function [x, y, z] mySphericToCarthesian[alpha, beta, ro]
Matlab 似乎不喜欢这个。
我怎样才能建立这两个功能,这样我才能真正从作业本身着手?
嗯,最简单的选择可能是定义两个不同的函数。在 Matlab 中,函数重载 shadows 除了一个函数之外的所有函数(即 一次只能使用一个具有给定名称的函数),这不是在实践中非常有趣。
但是,如果您绝对只想要一个具有两种不同行为的函数,则可以使用 nargin
和 nargout
变量来实现。在函数内部,它们表示调用 script/function 指定的输入和输出数。您还可以使用 varargin
,它将所有输入放在一个单元格中。
在实践中,这给出了:
function [x, y, z] = mySphericToCarthesian(varargin)
% Put your function description here.
switch nargin
case 1
Xi = varargin{1};
% Do you computation with matrix Xi
% Define only x, which will be used as the only output
case 3
alpha = varargin{1};
beta = varargin{2};
rho = varargin{3};
% Do you computation with alpha, beta and rho
% Define x, y and z for the outputs
end