Операторы сокращения действуют только для скалярных величин. Суть операторов быстрого доступа заключается в том, что RHS не оценивается, если в этом нет необходимости. Таким образом, в следующем примере A==2
никогда не оценивается:
A = 1;
I = A == 1 && A == 2
Имея это в виду, что должно делать следующее?
A = [1 3]
I = A == 1 && A == 2;
Кроме того, условия if должны иметь скалярные условия. Что должен делать этот код?
if [true false], disp('true'), else disp('false'), end
Вы, вероятно, хотите, чтобы all
или any
комбинировали векторные элементы.
В любом случае, я думаю, что у вас также есть предложения if в неправильном порядке. Попробуйте:
if all(A == 1)
Avg = C(1,1)/sum(sum(C));
elseif all(A == 2)
Avg = C(2,2)/sum(sum(C));
elseif all(A == 3)
Avg = C(3,3)/sum(sum(C));
elseIf all(A == 2 | A == 3)
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif all(A == 1 | A == 3)
Avg = sum(diag(C)./sum(C+eps,2))/2;
elseif all(A == 1 | A == 2)
Avg = sum(diag(C)./sum(C+eps,2))/2;
else
Avg = sum(diag(C)./sum(C,2))/3;
end