Matlab等效代码如下式

时间:2017-10-19 18:00:54

标签: matlab loops math

我有一个方程式,我试图在Matlab中编写代码,但我不确定我的代码是否正确。公式如下:

Equation

我认为迭代超过上标,即k,k + 1等,尺寸由下标m,n,n'标记。这些符号在文献中没有明确定义,所以我认为这应该是这样的。

此等式的代码段如下:

c_n = [1,2,3,4]';     % c^(0)_n (nx1) vector
K = 50;
d = [0.5,0.9]';

for k = 1:1:K
 c_n = c_n.*((sum(A_mn'*d/(sum(A_mn*c_n,2)),2))./sum(A_mn',2)) ;
end

这个代码对于上面的等式是否正确?等式中的总结使我感到困惑。

1 个答案:

答案 0 :(得分:1)

如果A是包含m行和n列的矩阵,则总和\sum_{m} (A^T)_{nm}只是n行中AT行的总和{1}}。这与n\sum_{m} A_{mn}A列的相应总和相同。它表示的矩阵乘法与转置效果更好,因为矩阵乘法只是加权行的总和。

同样,\sum_{n'} A_{mn'}c_{n'}m的{​​{1}}行,按A按元素加权。

我们可以假设cc分别是大小为dn向量。 (m将由代码中的普通d'表示。在这种情况下,大多数操作可以简化为矩阵操作:

  1. \sum_{n'} A_{mn'}c_{n'}只是矩阵产品d,它会产生一个大小为A * c的列向量。
  2. \frac{d'_m}{\sum_{n'} A_{mn'}c_{n'}}然后成为元素比率m,也是d ./ (A * c)的大小。
  3. 该比率用于缩放分子中m之和的元素,使其成为大小为AT的矩阵乘积A.' * (d ./ (A * c))
  4. 其中的每个元素都由\sum_{m} (A^T)_{nm}缩放,可以由nA.' * ones(m, 1)表示,因此最终矩阵产品只是sum(A, 1).'
  5. 您可以预先计算c .* (A.' * (d ./ (A * c)) ./ sum(A, 1).'),将其称为sum(A, 1).'以获取以下内容:

    e

    如果您希望为每个c = [1; 2; 3; 4]; d = [0.5; 0.9]; A = ... some 2x4 matrix; e = sum(A, 1).'; k = 50; for i = 1 : k c = c .* (A.' * (d ./ (A * c)) ./ e); end 保留c的中间值,您可以分配一个大小为k的矩阵,并用表示{的新迭代的每列填充该值。 {1}}:

    n, k + 1