簡體   English   中英

在Matlab中向量求和

[英]Vectorizing a summation in Matlab

我正在研究凸優化問題,我想計算以下總和:

在此處輸入圖片說明

請注意,我對矢量使用了粗體符號,對數字使用了純字體。 我用這個函數計算這個表達式:

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(...)例如矩陣乘法和sum(...)來表達它sum(...)

編輯

我已經嘗試了以下方法,但是不幸的是我沒有得到相同的結果:

grad_f_x = ((1/(b - A*x))*A).';

可能微不足道,但請注意.' 運算符是轉置運算符,為了確保我不會弄復雜的數字(可能沒有必要),我使用了句號。

嘗試

grad_f_x=A.'*(1./(b-A*x));

在這里, A*x是大小為(mxn)*(nx 1) -> (mx 1)的矩陣乘法,即它是列向量,每行告訴您dot(a_i,x) 您可以從同樣的m長度列向量b減去它。 使用1./(bA*x)我們執行逐元素的倒數,因此該對象仍然是m長度的列向量。 然后將其與A的轉置矩陣相乘,大小為(nxm)*(mx 1) -> (nx 1) ,它是列向量,與x大小相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM