1

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

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];
4

2 回答 2

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);
    

显然,同样需要做同样的事情才能发挥作用rot

于 2013-03-07T16:02:09.150 回答
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,:));
于 2013-03-07T18:01:25.463 回答