使用 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
的最终值
我必须找到使 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