2013-03-07 455 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,:));