在MATLAB中编写方程式

时间:2013-12-31 00:42:47

标签: matlab equation

对于以下等式:

enter image description here

我们是否在MATLAB中写下如下:

sum=0;
    for j=1:k
        for i=1:n
          sum = sum + (u(i,j)*log2(u(i,j)+(1-u(i,j)*log2(1-u(i,j)))))/n;  
        end
    end
    result = -1 * sum;

感谢。

3 个答案:

答案 0 :(得分:2)

引用Jongware: 不,我们不是这样做的!

你宁愿写:

fun = @(x) x*log2(x)+(1-x)*log2(1-x);
result = -1/n*sum( arrayfun(fun,u(:)) )

答案 1 :(得分:1)

以下是我写这个的方法:

  1. 在Matlab中,我们倾向于避免循环。

  2. 考虑到等式的形式,两个总和可以合并为一个。在Matlab中,我们可以使用linear indexing

  3. 来实现
  4. n移出总和以减少操作次数。

  5. 所以:

    H = -sum(u(:).*log2(u(:))+(1-u(:)).*log2(1-u(:)))/n;
    

    另一方面,在您的代码中:

    1. 你有一些括号错了。计算出的值不是等式给出的值。

    2. 您应该避免使用ij作为变量名称,因为它们会覆盖虚构单位(请参阅here)。

    3. 您应该避免使用sum作为变量名称,因为它会覆盖Matlab的bulit.in函数sum

答案 2 :(得分:0)

sum=0;
for i=1:k
    for j=1:n
      sum = sum + (u(i,j)*log2(u(i,j)+(1-u(i,j)*log2(1-u(i,j)))))/n;  
    end
end
result = -1 * sum;