我有一个方程式,我试图在Matlab中编写代码,但我不确定我的代码是否正确。公式如下:
我认为迭代超过上标,即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
这个代码对于上面的等式是否正确?等式中的总结使我感到困惑。
答案 0 :(得分:1)
如果A
是包含m
行和n
列的矩阵,则总和只是n
行中AT
行的总和{1}}。这与n
:中A
列的相应总和相同。它表示的矩阵乘法与转置效果更好,因为矩阵乘法只是加权行的总和。
同样,是m
的{{1}}行,按A
按元素加权。
我们可以假设c
和c
分别是大小为d
和n
的列向量。 (m
将由代码中的普通d'
表示。在这种情况下,大多数操作可以简化为矩阵操作:
d
,它会产生一个大小为A * c
的列向量。m
,也是d ./ (A * c)
的大小。m
之和的元素,使其成为大小为AT
的矩阵乘积A.' * (d ./ (A * c))
。n
或A.' * ones(m, 1)
表示,因此最终矩阵产品只是sum(A, 1).'
。您可以预先计算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