PDA

查看完整版本 : MATLAB:无法正确计算...用户错误?


poster
2019-12-10, 20:48
我一直在看这段代码已有一段时间了,无法弄清楚为什么matlab无法正确计算。有人看到我可能对此代码做错了什么吗?

((1-EU_P2par3(:,1))*US_P2par3(:,1))+((1-EU_P2par3(:,2))*US_P2par3(:,2))+((1-EU_P2par3(:,3))*US_P2par3(:,3))+((1-EU_P2par3(:,4))*US_P2par3(:,4))+((1-EU_P2par3(:,5))*US_P2par3(:,5))+((1-EU_P2par3(:,6)*US_P2par3(:,6)))+((1-EU_P2par3(:,7))*US_P2par3(:,7)) 感谢您的所有帮助!



回答:

在这种情况下,良好的代码格式是您的朋友。使用省略号(即... , 行延续符号 (http://www.mathworks.com/help/techdoc/matlab_env/f0-5789.html#f0-5857) )创建多行语句可以极大地帮助您...

似乎您在错误的位置加上了括号。您的代码如下所示:

result = ((1-EU_P2par3(:,1))*US_P2par3(:,1))+... ((1-EU_P2par3(:,2))*US_P2par3(:,2))+... ((1-EU_P2par3(:,3))*US_P2par3(:,3))+... ((1-EU_P2par3(:,4))*US_P2par3(:,4))+... ((1-EU_P2par3(:,5))*US_P2par3(:,5))+... ((1-EU_P2par3(:,6)*US_P2par3(:,6)))+... %# Notice something here? ((1-EU_P2par3(:,7))*US_P2par3(:,7)); 您可能想要这样:

result = ((1-EU_P2par3(:,1))*US_P2par3(:,1))+... ((1-EU_P2par3(:,2))*US_P2par3(:,2))+... ((1-EU_P2par3(:,3))*US_P2par3(:,3))+... ((1-EU_P2par3(:,4))*US_P2par3(:,4))+... ((1-EU_P2par3(:,5))*US_P2par3(:,5))+... ((1-EU_P2par3(:,6))*US_P2par3(:,6))+... %# Notice the change? ((1-EU_P2par3(:,7))*US_P2par3(:,7)); 编辑:

此外,正如Darren在回答中提到的那样 (https://stackoverflow.com/questions/4084041/matlab-not-calculating-correctly-user-error/4084129#4084129) ,您可能必须使用逐元素乘法运算符.*而不是矩阵乘法运算符* 。算术运算符的说明可以在这里 (http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html)找到。

同样,使用函数SUM (http://www.mathworks.com/help/techdoc/ref/sum.html)对向量 (http://www.mathworks.com/help/techdoc/ref/sum.html)进行矢量化处理可以大大简化您的计算,如下所示:

result = sum((1-EU_P2par3(:,1:7)).*US_P2par3(:,1:7),2);

更多&回答... (https://stackoverflow.com/questions/4084041)