我想解决MatLab
使用CVXGEN
. 我偏爱CVXGEN
over 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 = n
和params.Q = eye(n,n)
,然后调用[vars, status] = csolve(params);
.