2017-05-08 46 views
0

,我很新。我寫了下面的簡單功能,它得到一對,並返回極座標的形式MATLAB - 該函數返回不需要的輸出

function [r,a] = rect2polar(x,y) 
    r = sqrt(x^2 + y^2); 
    a = atan(y/x); 
    [r,a] 
end 

,當我嘗試例如rect2polar(3,5)它給我的下一個輸出:

ans = 
5.8310 1.0304 

ans = 
5.8310 

它返回所需的輸出,加上輸出5.8310,換句話說,它返回第二次函數中的變量r。我怎樣才能解決這個問題?寫作

rect2polar(3,5); 

幫助(區別在於我寫了;最後),但它不覺得正確。任何幫助表示讚賞,謝謝!

+0

它與你的函數的最後一行做。最後一行將導致運行該函數時顯示變量「r」和「a」。 您看到的第二個輸出是您的函數的輸出;但是它只會將第一個變量寫入'ans'。 你應該刪除函數中的最後一行('[r,a]'),並用[r,a] = rect2polar(x,y)來調用它。 –

回答

4

第一顯示部分,

ans = 
    5.8310 1.0304 

由該線在您的函數產生

[r,a] 

由於它缺少一個;,Matlab的顯示結果。

第二部分,

ans = 
    5.8310 

產生,因爲當調用函數作爲rect2polar(3,5)要表示要僅一個輸出,即第一,它是在函數返回之後顯示。

所以,解決辦法是:

  • 刪除線[r, a]在你的函數,這是做什麼,但顯示的內容的功能將輸出;
  • 將您的功能稱爲[out1, out2] = rect2polar(3,5)

或者,如果你想在函數返回一個向量:

function out = rect2polar(x,y) 
    r = sqrt(x^2 + y^2); 
    a = atan(y/x); 
    out = [r,a]; 
end 
+0

感謝您的回答!我仍然不清楚,因爲我想要函數得到一對,並且會返回極座標的向量,所以我需要第一個輸出(它給出了5.8310 1.0304),而不是第二個輸出(它是5.3810)。如果我刪除行[r,a],那麼它不會返回第一個答案(5.8310 1.0304),只返回我不想要的第二個輸出(5.8310)。我輸入了行[out1,out2] = rect2polar(3,5),它只是分配給out1和out2(並打印出)值爲5.83310 1.0304的分別,這不是我想要的。我只想要一個2values的向量輸出 – mathstackuser123

+0

或者我誤解了一些東西。我寫了 函數[r,a] = rect2polar(x,y) 這個事實並不意味着輸出必須是兩個輸入的向量?我被告知它的工作方式是 function output = function_name(輸入) – mathstackuser123

+0

@ mathstackuser123使用簽名'[r,a] = rect2polar(x,y)',您有兩個輸出,而不是一個向量輸出。爲了得到這個,你需要將函數定義爲'out = rect2polar(x,u)'並且在函數體中將'out'構建爲一個向量。見編輯答案 –