楼上的回答正确,但没有解释出错的原因,对于初学者而言,虽然解决了眼下的问题,但以后仍然可能犯类似的错。
首先,楼主可能会感到困惑的是,自己的表达式中并没有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);
最后,不知道楼主会不会有这样的疑问:表达式中,“/”出现在“^”之前,为什么不报右除号的错误,而是报了幂运算的错误呢?这是因为,表达式的除号右边是一个括号,要进行除运算,首先要把括号里的值算出来,而计算括号里面的值首先会遇到的就是“^”。
改为
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);