首先,我必须道歉,因为我非常确定我只是犯了一个简单的错误。我正在使用MatLab创建我的第一个程序,并且已经阅读了相关文档,但仍然无法解决我的问题。
我正在尝试在MatLab中实现信息熵的等式(我确定它可能已经存在,但这不是重点),但我遇到了arrayfun的问题,因为它似乎是在没有参数的情况下调用entropySingle。
我在适当命名的文件中有以下功能
function y = entropySingle(x)
y = x * log2(x);
end
和
function y = entropy(x)
if ~isvector(x)
error('Input must be a vector');
end
x = arrayfun(entropySingle, x);
y = sum(x);
end
我正在调用entropy([1/3 1/4 1/6 1/8 1/12 1/24]).
错误发生在entropySingle的第2行,但是为什么用空指针调用它?提前谢谢,
答案 0 :(得分:1)
您需要使用element wise multiplication:
y = x .* log2(x);
在乘法之前不使用那个小的.
告诉matlab这是关于矩阵乘法而不是它。
另外,请勿使用名称entropy
。你正在覆盖一个内置的matlab函数,这只会给你的代码和生活带来更多麻烦。