2012-07-06 114 views
1

我被這個錯誤卡住了:爲什麼不是標量的結果?

在賦值A(I)= B中,B和I中的元素數必須相同。 (1)=((u-uc)。^ 2)+((y-yc)。^ 2) - (d。^ 2); 我不明白,爲什麼這不會得到一個skalar?因爲元素都是標量。應該改變什麼來獲得標量?

問候

編輯:感謝sloede,所有的輸入都是標量,但我仍然得到這個錯誤

在分配A(I)= B,B中元素的個數,我必須 相同。

 Error in myfun (line 7) 
    yres(1)=sqrt(((u - uc).^2) + ((y - yc).^2)) -d; 
    Error in fsolve (line 241) 
     fuser = feval(funfcn{3},x,varargin{:}); 
    Error in modfsolve (line 26) 
    x= fsolve(@myfun,x0,options,uc,d,spacing_amplitude,spacing_width); 
    Caused by: 
    Failure in initial user-supplied objective function evaluation. FSOLVE 
    cannot continue.* 
+1

function out = myfun(in) if ~isscalar(in) % assuming it's a matrix or vector out = reshape(arrayfun(@myfun,in(:)),size(in)); else % your actual function execution statements out = dostuffon(in); end end 

或正常矢量化的功能(如果可能的話): 您可以通過添加自己的函數中的下列建設解決這個問題(當然它改變您的需要/你的參數)可以插入命令'whos y uc y uc y yc d',並報告輸出?輸入變量或分配的變量肯定存在問題,'whos'命令將允許您查看這些變量的屬性。 – 2012-07-06 07:02:31

回答

1

「。」在運算符之前意味着應該以元素方式應用以下操作,而不是整個向量。因此

a = b.^2 

會給你結果的b所有元素的平方和保存回一個。因此,在上面的代碼中的語句,如果任何üUCÿYCd不是標量而是一個向量,你的結果將是一個載體爲好。

否則,你的代碼似乎沒有錯。

+0

感謝您的回覆,所有輸入都是標量。我編輯與我得到的錯誤的問題。 – shun 2012-07-06 05:39:21

+0

看起來你正試圖在函數'myfun'中使用變量,這些變量在函數範圍之外定義,因此不可見。我建議遵循比爾的建議,弄清楚錯誤陳述中的所有變量是否都是明確的。 – 2012-07-06 07:32:38

0

讀fsolve的文檔:http://www.mathworks.nl/help/toolbox/optim/ug/fsolve.html

它指出:

fun
The nonlinear system of equations to solve. fun is a function that accepts a vector x and returns a vector F , the nonlinear equations evaluated at x .

顯然你的函數myfun不處理向量輸入。以前只是

相關問題