matlab cvx

本文详细介绍了如何下载、安装及使用CVX,这是一个用于MATLAB的凸优化库。通过实例展示了如何设置问题、定义变量、目标函数和约束,并解释了支持的凸函数和仿射函数。最后,提供了几个解决凸优化问题的例子,包括最小二乘问题、带有最大函数的优化问题和多个约束的优化问题。
摘要由CSDN通过智能技术生成

下载与安装

http://cvxr.com/cvx/download/
可以选择前两个中的一个
在这里插入图片描述
解压到想安装的地方
然后
打开matlab,cd进去

cd xxx
cvx_setup

结果是这样
在这里插入图片描述
然后可以测试一下

m = 20; n = 10; p = 4;
A = randn(m,n); b = randn(m,1);
C = randn(p,n); d = randn(p,1); e = rand;
cvx_begin
    variable x(n)
    minimize( norm( A * x - b, 2 ) )
    subject to
        C * x == d
        norm( x, Inf ) <= e
cvx_end

在这里插入图片描述
在这里插入图片描述

使用

基本框架

cvx_begin 
    {variables declaration} 
    minimize({objective function}) or maximize{{objective function})   
    subject to
        {constraints} 
cvx_end

cvx只支持凸函数作为目标函数和约束函数

函数含义性质
norm ∥ x ∥ p ( p ≥ 1 ) \|x\|_p(p\ge1) xp(p1)
square(x) x 2 x^2 x2
sum_square(x) ∑ i = 1 n x i 2 \sum_{i=1}^{n}x_i^2 i=1nxi2
square_pos(x) [ x ] + 2 [x]_{+}^2 [x]+2凸,单调不减
sqrt(x) x \sqrt{x} x 凸,单调不减
inv_pos(x) 1 x ( x > 0 ) \frac{1}{x}(x>0) x1(x>0)凸,单调不减
max(x) max ⁡ { x 1 , ⋯   , x n } \max\left\{x_1,\cdots,x_n\right\} max{x1,,xn}凸,单调不减
quad_over_lin(x,y) ∥ x ∥ 2 y ( y > 0 ) \frac{\|x\|^2}{y}(y>0) yx2(y>0)
quad_form(x,P) x T P x ( P ≻ 0 ) x^TPx(P\succ0) xTPx(P0)

约束里,

f(x)<=g(x)
g(x)>=f(x)

其中要求f是凸的,g是凹的

然后

h(x)==s(x)

其中要求h和s都得是仿射函数

例子

最小二乘

min ⁡ ∥ A x − b ∥ 2 \min \|\mathbf{Ax}-\mathbf{b}\|^2 minAxb2

A=[1,2;3,4;5,6];b=[7;8;9];

正常解:

x=(A'*A)\(A'*b)

第一种解法

cvx_begin
    variable x(2)
    minimize(sum_square(A*x-b))
cvx_end

然后输出一下

x

第二种

A=[1,2;3,4;5,6];b=[7;8;9];
cvx_begin
    variable x(2)
    minimize(quad_form(x,A'*A)-2*b'*A*x)
cvx_end

然后输出一下

x

错误解法

cvx_begin
    variable x(2)
    minimize(norm(A*x-b)^2)
cvx_end

在这里插入图片描述

正确解法
cvx_begin
    variable x(2)
    minimize(square_pos(norm(A*x-b)))
cvx_end

例2

min ⁡ x 1 2 + x 2 2 + 1 + 2 max ⁡ { x 1 , x 2 , 0 }  s.t.  ∣ x 1 ∣ + ∣ x 2 ∣ + x 1 2 x 2 ≤ 5 1 x 2 + x 1 4 ≤ 10 x 2 ≥ 1 x 1 ≥ 0 \begin{array}{ll} \min & \sqrt{x_{1}^{2}+x_{2}^{2}+1}+2 \max \left\{x_{1}, x_{2}, 0\right\} \\ \text { s.t. } & \left|x_{1}\right|+\left|x_{2}\right|+\frac{x_{1}^{2}}{x_{2}} \leq 5 \\ & \frac{1}{x_{2}}+x_{1}^{4} \leq 10\\ & x_2\ge1\\ &x_1\ge 0 \end{array} min s.t. x12+x22+1 +2max{x1,x2,0}x1+x2+x2x125x21+x1410x21x10

cvx_begin
    variable x(2)
    minimize(norm([x;1])+2*max(max(x(1),x(2)),0))
    subject to
        norm(x,1)+quad_over_lin(x(1),x(2))<=5
        inv_pos(x(2))+x(1)^4<=10
        x(2)>=1
        x(1)>=0
cvx_end

例子3

min ⁡ x , r r  s.t.  ∥ x − a i ∥ ≤ r , i = 1 , 2 , ⋯   , m \begin{array}{ll} \min_{\mathbf{x},r} & r \\ \text { s.t. } & \|\mathbf{x}-\mathbf{a}_i\|\le r,\quad i=1,2,\cdots,m \end{array} minx,r s.t. rxair,i=1,2,,m

A=[-1,-3,-1,5,-1;3,10,0,0,-5];
cvx_begin
    variables x(2) r
    minimize(r)
    subject to
        for i=1:5
            norm(x-A(:,i))<=r
        end
cvx_end

画图

plot(A(1,:),A(2,:),'*')
hold on
plot(x(1),x(2),'d')
t=0:0.001:2*pi;
xx=x(1)+r*cos(t);
yy=x(2)+r*sin(t);
plot(xx,yy);
axis equal;
axis([-11,7,-6,11])
hold off

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nightmare004

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值