MATLAB:没有正确计算...用户错误?

ajj*_*ajj 1 matlab

我一直在看这段代码一段时间,并且无法弄清楚为什么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)

感谢您的帮助!

gno*_*ice 5

在这种情况下,良好的代码格式是你的朋友.使用省略号(即...,该行延续符号)来创建一个多行语句可以极大地帮助...

看起来你在错误的地方有一个括号.您的代码如下所示:

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)