【发布时间】:2018-04-12 12:35:32
【问题描述】:
我正在做一个 Matlab 项目,我想在 Matlab 中制作以下函数的渐变:
f(x) = c^T * x - sum (log(bi - (ai ^ T) * x)).
其中 ai^T 是随机 A 矩阵 nxm 的行,其中 n=2 和 m=20
c是随机矩阵nx1,x也是随机nx1。
b 是随机矩阵 mx1。
我已经完成了以下操作,但我得到的结果似乎不正确..
function gc0 = gc(x, c, b, A)
for k = 1 : length(A(:,1))
f1(k) = sum(log(b - A(k,:)'*x(k)));
end
gradient(-f1)
gc0 = c - gradient(f1)';
有什么想法吗?感谢您的帮助,我是 Matlab 的新手..
【问题讨论】:
-
我假设你需要
b(k)。另外A(k,:).'以防万一。log不是log10,以防你需要那个。你既没有转置c,也没有乘以x -
我没有转置 c 也没有将它乘以 x,因为 gc0 是我想要制作的 f 的梯度,而 c^T *x 的梯度是 c..
-
但是
sum (log(bi - (ai ^ T) * x))的梯度不是sum (log(bi - (ai ^ T) * x))
标签: matlab gradient convex-optimization