2014-10-20 65 views
0

這裏有很多變數,所以忍受着我。經過調試等所有變量都工作正常,除了Tinf,所以假設所有其他變量是恆定的。 TINF被定義爲矩陣功能,fzero不工作

Tinf=34.5*cos((2*pi).*(t-5))+275.5 

是t的函數,其中t爲

t=linspace(0,50,600) 

我試圖計算

T(1)=fzero(fun_Partridge,0) 

其中

[email protected](x) ((I(1).^2).*Rprime(1))+(Alpha.*D(1).*Gs)-(o*E*pi.*D(1).*(x.^4-Tinf.^4))-(h*pi.*D(1).*(x-Tinf)) 

(記住,所有其他變量正在工作,並在那裏礦石基本上是常數,也即是矩陣的每一個值),只有兩列變量

一切都正常運行,直到

T(1)=fzero(fun_Partridge,0) 

,我得到的錯誤信息:

「操作數到||和& &運算符必須可轉換爲邏輯標量值。

在fzero(線308) 錯誤ELSEIF〜ISFINITE(FX)|| 〜isreal(fx)

MaxSag_Take_2錯誤(第102行) T(1)= fzero(fun_Partridge,0); 「

我非常初學者,當談到MATLAB的,所以請不要猶豫,愚蠢的事了一些。 提前感謝!

+0

你可以試試這個'選項= optimset(「顯示」,「ITER」);',看看它甚至開始重複與否。並通過'[x fval exitflag output] = fzero(fun,x0,options)' – NKN 2014-10-20 21:26:25

+0

'來跟蹤它,我對MatLab並不熟悉,所以我不確定代碼中的所有時間段,並且我不知道您是否在做任何部門,但我會檢查以確保您在任何時候都不會被零分。 – TheBlindSpring 2014-10-20 21:31:39

回答

0

不知道的大小,形狀和類型,你的其他變量,這是很難說,但基於該錯誤消息,fx應該是一個標量和它的未來作爲一個載體,這意味着你傳遞的東西fzero,它不喜歡。

我現在沒有MATLAB在我面前,但看着你的fun_Partridge函數,你正在做一些變量的矩陣乘法和其他元素的乘法。如果o和/或E是向量,則可能會以矩陣而不是向量函數結束,如果fzero正在使用類似sum的函數構造fx,則會產生向量而不是標量,從而導致短路行爲的&&||嗆。

除了上面@ NKN的評論,請嘗試執行size(fun_Partridge(1)),看看你得到了一個向量或矩陣。

+0

我最終做了一個for循環與計數器,它似乎有固定的東西,無論如何短期... – 2014-10-21 00:21:10