2013-03-07 453 views
0

我有三个函数,我想要两个变量来运行所有的函数。我试着这样做: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

看来你只传递一个参数到函数'mir'('sca'的结果),但它需要更多。 – 2013-03-07 15:43:20

+0

是的,这是我的问题的核心。内函数('sca')有两个参数,并传递两个参数(至少这是我的意图) sca.m看起来像这样,其他函数非常相似: 'function sca = sca(x,y )' 'sca = [2 * x; 2 * y];' – 2013-03-07 15:47:41

+0

你可以在你的问题中加入'mir'和'sca'的语法,并且详细阐述你的意图吗? – 2013-03-07 15:50:38

回答

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也需要完成相同的工作。

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