1

我想解决MatLab使用CVXGEN. 我偏爱CVXGENover CVX,因为CVXGEN它要快得多。特别想解决

min f(x) s.t. x in X

其中f(x)是二次形式,并且X是紧凑的、凸的,并且由线性函数定义。问题的大小因运行而异。我想尽可能地自动化这个过程。为了说明,一个 CVXGEN代码示例是:

dimensions
  n = 10  
end

parameters
  Q (n,n) psd  # quadratic penalty.
end

variables
  x (n)
end

minimize
  quad(x, Q)
end​​​​​​​​​​​​​

​此代码输入于cvxgen.com。然后,在这个网站上,我可以生成给我一个唯一编号的 C 代码。然后我可以使用唯一编号将其编译成 MEX 代码。csolve最后,我可以通过运行以下代码从 MatLab调用此 MEX 代码 ( )

n=10; % dimension of the problem
params.Q = eye(n,n); % assume that the Hessian is the identity
[vars, status] = csolve(params); % this outputs optimal x* = 0.

但是,此过程需要针对n我要运行的问题的每个维度,我需要转到cvxgen.com、更改n、编译代码,然后运行我的MatLab代码。是否可以让n输入作为参数?这样,我只需要编译一次代码,然后在我的MatLab代码集中params.n = nparams.Q = eye(n,n),然后调用[vars, status] = csolve(params);.

4

1 回答 1

0

简而言之,我认为不可能在cvxgen.com. 我确实有一个解决方案:首先,在 MatLab 中,允许用户指定他/她的电子邮件地址和密码cvxgen.com。接下来,使用system命令 in MatLab,调用一个pythonjavascript执行以下步骤的程序:

1)登录用户cvxgen.com

2) 转到edit网站上的选项卡

3)复制并粘贴cvxgen代码

4) 转到generate c选项卡

5) 点击generate code

6) 转到matlab选项卡

7)复制要下载的编译C代码的唯一标识号

8)通过调用识别号将唯一识别号传回MatLab并编译Mex文件。MatLab

现在Mex可以MatLab通过以下命令调用文件:

n=10; % dimension of the problem
params.Q = eye(n,n); % assume that the Hessian is the identity
[vars, status] = csolve(params); % this outputs optimal x* = 0.
于 2016-09-30T14:50:58.867 回答