滿意答案

yyrhpl3232
2018.02.02

采納率:48% 等級:8
已幫助:1709人
樓上的回答正确,但沒有解釋出錯的原因,對于初學者而言,雖然解決了眼下的問題,但以後仍然可能犯類似的錯。
首先,樓主可能會感到困惑的是,自己的表達式中并沒有mpower這個符号,為什麼會報
Error using ==> mpower
這樣的錯誤?其實,用
help mpower
查閱該函數的參考資訊,可以知道mpower是矩陣幂函數(Matrix power),對應的符号就是“^”,而這個符号在樓主的表達式中。
這裡,要順便做一點背景性的介紹:MATLAB中的運算符其實都有對應的函數,例如,“^”對應mpower,“*”對應mtimes,“/”對應mrdivide,等等。可以用
help ops
檢視關于運算符更詳細的清單。
上面說到的幾個運算符對應的函數都以m開頭,含義是,這幾個運算符所做的都是矩陣運算,即按照矩陣運算規則進行運算。和矩陣運算相對的,還有一類運算,叫做數組運算,也就是通常所說的“點運算”,其規則是按照逐個元素對應進行運算,例如“.*”就是兩個相同維數的數組相應位置的元素相乘得到結果。點運算主要包括以下幾個:
.* 數組乘,對應函數為times;
./ 數組右除,對應函數為rdivide;
.\ 數組左除,對應函數為ldivide;
.^ 數組幂,對應函數為power;
.' 轉置,對應函數為transpose(如果不加點,即“'”,表示共轭轉置)
有了上面這些背景知識,樓主應該知道為什麼會出錯以及怎樣修改了。表達式裡面的T是數組,而樓主的計算顯然是希望對每個元素進行的(element-wise),是以部分運算符應該改成點運算。涉及到的運算符包括三個“^”,一個“*”和一個“/”,改過來就好了:
F=1./(1-(1-(0.05-3*1.2*10^(-5)*(1-0.05)*(T-20))).^0.8+(1-0.005-3*1.2*10^(-5)*(1-0.005)*(T-20)).^0.4.*(0.045226-3*1.2*10^(-5)*(1-0.045226)*(T-20)).^2);
最後,不知道樓主會不會有這樣的疑問:表達式中,“/”出現在“^”之前,為什麼不報右除号的錯誤,而是報了幂運算的錯誤呢?這是因為,表達式的除号右邊是一個括号,要進行除運算,首先要把括号裡的值算出來,而計算括号裡面的值首先會遇到的就是“^”。
00分享舉報