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

如何用SymPy从符号线性不等式直接获取矩阵-向量表示?

从SymPy符号线性不等式直接生成系数矩阵A和上界向量b

完全可以不用手动转换,借助SymPy的符号表达式处理能力,能直接从定义的符号线性不等式提取出系数矩阵A和上界向量b。以下是具体实现步骤和代码示例:


实现步骤

  1. 用SymPy定义符号变量和目标不等式组;
  2. 遍历每个不等式,将其整理为a₁x + a₂y + a₃z ≤ b的标准形式;
  3. 提取每个不等式中变量的系数作为矩阵A的行,提取右侧常数作为向量b的元素;
  4. 将提取的结果转换为NumPy数组或SymPy矩阵,满足后续计算需求。

完整代码示例

from sympy import symbols
import numpy as np

# 定义符号变量
x, y, z = symbols('x y z')

# 定义符号形式的不等式组
inequalities = [
    -x <= 5,
    x <= 4,
    -y <= 5,
    x + y <= 3,
    -z <= 10,
    x + y + z <= 6
]

# 初始化存储系数和上界的列表
coeff_rows = []
b_values = []

# 逐个处理不等式
for ineq in inequalities:
    # 分离不等式左右两侧
    lhs = ineq.lhs
    rhs = ineq.rhs
    # 将不等式转换为线性表达式:lhs - rhs ≤ 0
    linear_expr = lhs - rhs
    # 提取变量系数和常数项
    coeff_dict = linear_expr.as_coefficients_dict()
    # 获取x、y、z的系数(无对应变量则取0)
    a = coeff_dict.get(x, 0)
    b_coeff = coeff_dict.get(y, 0)
    c = coeff_dict.get(z, 0)
    # 计算上界值(对应标准形式的右侧常数)
    upper_bound = -linear_expr.as_coeff_add()[0]
    
    coeff_rows.append([a, b_coeff, c])
    b_values.append(upper_bound)

# 转换为NumPy数组
A = np.array(coeff_rows, dtype=np.float64)
b = np.array(b_values, dtype=np.float64)

# 输出结果
print("系数矩阵A:\n", A)
print("上界向量b:\n", b)

运行这段代码后,会输出与手动定义完全一致的A和b数组。


内容的提问来源于stack exchange,提问作者Stéphane Laurent

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:23