嵌套函数在matlab中有两个变量

时间:2013-03-07 15:40:23

标签: function matlab

我有三个函数,我想要两个变量来运行所有函数。我试过这样做:

R = rot(mir(sca(P(1,:),P(2,:))));

然而我收到此错误:

Error using mir (line 2)
Not enough input arguments.

有什么建议吗?

%rot.m
function rot = rot(x,y)
    rot = [ cos(pi/6)*x-sin(pi/6)*y; sin(pi/6)*x+cos(pi/6)*y ];

%mir.m
function mir = mir(x,y)
    mir = [x;(-y)];

%sca.m
function sca = sca(x,y)
    sca = [2*x;2*y];

2 个答案:

答案 0 :(得分:1)

你不应该对这个错误感到惊讶。函数mir期望两个参数(实际上,所有函数都期望这样),但是只提供一个参数。请注意,矩阵被认为是一个参数。您可以执行以下任一操作来解决问题:

  1. 重新定义mir接受一个参数并将其在函数内拆分为两个单独的变量

  2. 重新定义sca以返回两个值:

    function [outx, outy] = sca(x, y)
        outx = 2 * x;
        outy = 2 * y;
    

    然后将它们传递给mir,如下所示:

    [scax, scay] = sca(x, y);
    mir(scax, scay);
    
  3. 显然,同样需要对rot进行操作。

答案 1 :(得分:0)

在MATLAB中,如果您有多个输出参数,则必须明确指定输出变量。默认情况下,函数始终返回一个(第一个)参数。

在您的情况下,一种选择可以是改变函数的定义,使得它们只接收一个输入参数作为矩阵。例如:

%mir.m
function mir = mir(xy)
    mir = [xy(1,:); -xy(2,:)];

在这种情况下甚至更容易(您也可以简化其他功能):

function xy = mir(xy)
    xy(2,:) = -xy(2,:);

我希望你明白了。

然后你可以运行:

R = rot(mir(sca(P(1:2,:))));

如果由于某种原因无法更改功能定义,则必须将单行调用拆分为三行,分为3行:

S = sca(P(1,:),P(2,:));
M = mir(S(1,:),S(2,:));
R = rot(M(1,:),M(2,:));