давайте рассмотрим следующий кодкак отделить, если и еще в MATLAB
function averageentropy=calculate(f,y)
count1=0;
count0=0;
n=length(f);
n1=0;
n0=0;
entrop1=0;
entrop2=0;
bigp=sum(f)/n;
for i=1:n
if f(i)==1 && y(i)==1
count1=count1+1;
end
end
for i=1:n
if f(i)==0 && y(i)==1
count0=count0+1;
end
end
for i=1:n
if f(i)==1
n1=n1+1;
end
end
for i=1:n
if f(i)==0
n0=n0+1;
end
end
smallpplus=count1/n1;
smallpminus=count0/n0;
if smallpplus==0
entrop1=0;
else
entrop1=-smallpplus*log2(smallpplus)-(1- smallpplus)*log2(1- smallpplus);
end
if smallpminus==0
entrop2=0;
else
entrop2=-smallpminus*log2(smallpminus)-(1- smallpminus)*log2(1- smallpminus);
end
averageentropy=bigp*entrop1+(1-bigp)*entrop2
end
, когда я бегу этот код, я получаю 0.4056, в то время как в Excel такая же процедура возвращает меня примерно 0,91, что означает, что это некоторая ошибка в случае if и else, потому что если я удалю if и else, я получаю тот же ответ, так что проблема? Я использую if и else, чтобы избежать log (0), но есть некоторые проблемы.
Вы установили точку останова в коде, чтобы увидеть, всегда ли вы находитесь в if или else? – Vuwox
Выберите _all_ вашего кода в редакторе MATLAB и нажмите CTRL + I. – chappjc
Какие входные данные? Откуда вы знаете, что Wxcel дает правильный ответ? Если бы вы могли показать свою реализацию excel, возможно, мы сможем помочь вам разобраться в различии - описание того, что вы хотите сделать, не очень понятно ... – Floris