使用 MATLAB 的 lsqnonneg 函数进行优化

Optimization using lsqnonneg function of MATLAB

我必须找到使 C*exp(2x)-d 的范数最小化的 x 值,以 x >= 0 为准。我试图在 MATLAB 中解决这个问题。 C 和 d 都定义为 1x180 维的向量。有没有人对如何在 MATLAB 中使用 lsqnonneg 函数(或其他技术)解决这个问题有任何提示或建议?如果它只是 x 而不是 exp(2x) 它可以很容易地通过 lsqnonneg 来解决!但是由于问题中的指数项,我无法继续进行下去。我将不胜感激。

首先是一些数学: 定义 y = exp(2*x) 那么约束 x >=0 等价于 y >= 1。一个等效的最小化问题是:

minimize(over y) norm(c.*y - d)
     subject to  y >= 1

在 MATLAB 中有多种方法可以做到这一点。一种很酷的方法是使用 CVX,如果您下载 cvx convex optimization 包,代码将是:

n = 180;
cvx_begin
variable y(n)
minimize(norm(c .* y - d))
subject to:
1 <= y
cvx_end

那么你当然可以做x = log(y) / 2得到x

的最终值