Используя Trace[ ]
, вы можете видеть, что функция Entropy[ ]
заканчивается использованием Tally[ ]
для подсчета частоты каждого состояния (в данном случае чисел).
Так, например,
Entropy[{1,2,3,4}, SameTest->(Abs[#1-#2]>1&)]
вызывает
Tally[{1,2,3,4}, SameTest->(Abs[#1-#2]>1&)]
, что дает
-> {{1, 3}, {2, 1}}
, поскольку оно группирует {1,3,4} и{2}
Но если вы спросите
Tally[{2,1,3,4}, SameTest->(Abs[#1-#2]>1&)]
, вы получите
-> {{2, 2}, {1, 2}}
, потому что он группирует {2,4} и {1,3}
Результатом является другое распределение состояний (2,2) по сравнению с (3,1) ранее и, следовательно, другое значение энтропии.
Я думаю, что проблема возникает из-за того, что ваш SameTest не разделяет доменв двух классах эквивалентности, как и должно быть.
Редактировать
Просто переформулируем последнее предложение:
Мма предполагает, что
a === b && b === c Implies a === c
что не соответствует действительности в вашем случае.Например
2 === 4 && 4 === 1 but 2 !=== 1