【发布时间】:2016-02-24 03:11:46
【问题描述】:
我正在研究一个凸优化问题,我想计算以下总和:
请注意,我使用粗体表示矢量,使用普通字体表示数字。我用这个函数计算这个表达式:
function [grad_f_x] = gradient1(b, A, x, n, m)
grad_f_x = zeros(n, 1);
for i = 1:m
grad_f_x = grad_f_x + 1/(b(i) - A(i, :)*x)*A(i, :).';
end
end
但是,我担心当优化问题 n 的维度越来越大时,这个循环会非常昂贵,我正试图找到一种方法来使用 Matlab 提供的函数和运算符来表达它,比如矩阵乘法和sum(...)。
编辑
我尝试了以下方法,但不幸的是我没有得到相同的结果:
grad_f_x = ((1/(b - A*x))*A).';
这可能是微不足道的,但请注意 .' 运算符是转置运算符,我使用句号是为了确保我不会弄乱复数(这可能是不必要的)。
【问题讨论】:
-
我不确定你是否可以在不循环的情况下编写列和行向量乘法
-
1.使用
\mathbb{}而不是\mathfrak{}代表R^n :) 2. 我添加了一个答案,但随后我注意到了您的编辑。你几乎做对了:你需要 1./(...)` 来获得一个元素除法。正确使用.'而不是'是非常好的做法。
标签: matlab loops optimization sum