如何制作同时接受矩阵和单个参数的重载函数?

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 除了一个函数之外的所有函数( 一次只能使用一个具有给定名称的函数),这不是在实践中非常有趣。

但是,如果您绝对只想要一个具有两种不同行为的函数,则可以使用 narginnargout 变量来实现。在函数内部,它们表示调用 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