我一直在看这段代码一段时间,并且无法弄清楚为什么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))
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助!
在这种情况下,良好的代码格式是你的朋友.使用省略号(即...,该行延续符号)来创建一个多行语句可以极大地帮助...
看起来你在错误的地方有一个括号.您的代码如下所示:
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));
Run Code Online (Sandbox Code Playgroud)
你可能想要这个:
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));
Run Code Online (Sandbox Code Playgroud)
编辑:
另外,正如Darren在他的回答中提到的那样,你可能不得不使用逐元素乘法运算符.*而不是矩阵乘法运算符*.可在此处找到算术运算符的说明.
此外,通过使用函数SUM对其进行矢量化,可以大大简化计算,如下所示:
result = sum((1-EU_P2par3(:,1:7)).*US_P2par3(:,1:7),2);
Run Code Online (Sandbox Code Playgroud)