You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用cvxpy从向量变量构造矩阵并添加半正定约束

Cvxpy 实现结构化对称矩阵半正定约束的方法

你可以直接构造符合指定结构的cvxpy表达式矩阵,再通过半正定锥约束完成需求,具体实现如下:

首先导入依赖库:

import cvxpy as cp
import numpy as np

声明你提到的向量变量:

x = cp.Variable(5)

构造目标矩阵

有两种常用的构造方式,你可以根据自己的使用习惯选择:

方法1:逐元素直接构造

适合结构简单、规模小的矩阵:

A = cp.vstack([
    cp.hstack([x[0], 0, 0, x[1]]),
    cp.hstack([0, x[2], 0, 0]),
    cp.hstack([0, 0, x[3], 0]),
    cp.hstack([x[1], 0, 0, x[4]])
])

方法2:利用分块对角结构构造

你给出的矩阵实际是分块对角结构,用分块拼接的方式写更简洁,也不容易出现下标错误:

# 左上角2*2对称块
block1 = cp.vstack([
    cp.hstack([x[0], x[1]]),
    cp.hstack([x[1], x[4]])
])
# 右下角2*2对角块
block2 = cp.diag(cp.hstack([x[2], x[3]]))
# 拼接为完整4*4矩阵
A = cp.bmat([
    [block1, np.zeros((2, 2))],
    [np.zeros((2, 2)), block2]
])

添加半正定约束

cvxpy中使用>>运算符来表示半正定锥约束,等价于Matlab中的semidefinite约束,直接添加即可:

constraints = [A >> 0]

后续你就可以把这个约束加入到你的优化问题中正常求解了。

注意:半正定约束仅支持对称(实矩阵)/埃尔米特(复矩阵)矩阵,构造矩阵时需要保证结构对称,否则cvxpy会直接报错。

内容的提问来源于stack exchange,提问作者Zhong Guo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:45:04