【问题标题】:Optimization using lsqnonneg function of MATLAB使用 MATLAB 的 lsqnonneg 函数进行优化
【发布时间】:2015-11-11 19:21:06
【问题描述】:

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

【问题讨论】:

  • x的维数是多少?
  • 它的尺寸与 C 和 d 相同,即 1x180。
  • 你的意思是c.*exp(2*x)吗?

标签: matlab optimization data-modeling


【解决方案1】:

首先是一些数学: 定义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的最终值

【讨论】:

  • 但是,如果我必须不受约束地解决相同的问题,我是否只需要从 cvx 代码中省略“subject to”条件?
  • 省略“subject to”条件和约束“1
  • 我明白了 :) 我也希望以数字方式解决这个问题。你能推荐一些好的教程等来帮助我解决这些数字问题吗?
  • @zsha 这是用数值解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 2014-02-14
  • 2015-01-27
相关资源
最近更新 更多