MATLAB: неверный расчет ... ошибка пользователя? - PullRequest
1 голос
/ 03 ноября 2010

Я уже давно смотрю на этот код и не могу понять, почему 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))

Спасибо за помощь!

Ответы [ 2 ]

5 голосов
/ 03 ноября 2010

В таких случаях хорошее форматирование кода - ваш друг. Использование многоточия (т.е. ..., символ продолжения строки ) для создания многострочного оператора может очень помочь ...

Похоже, у вас не в круглых скобках. Ваш код выглядит так:

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));

EDIT:

Кроме того, как упоминает Даррен в своем ответе , вам, вероятно, придется использовать оператор умножения элементов .* вместо оператора умножения матриц *. Объяснения арифметических операторов можно найти здесь .

Кроме того, ваш расчет можно значительно упростить, векторизовав его с помощью функции SUM , например:

result = sum((1-EU_P2par3(:,1:7)).*US_P2par3(:,1:7),2);
2 голосов
/ 03 ноября 2010

Попробуйте следующий пример.

xy = rand (10,2);

a = xy (:, 1) * xy (:, 2);% ???Ошибка при использовании ==> mtimes% Размеры внутренней матрицы должны совпадать.

a = xy (:, 1). * Xy (:, 2);

Ошибка возникает при попытке умножениявекторы вместе.Вы должны использовать оператор. *, Чтобы получить поэлементное умножение

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...