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

如何在矩阵运算中代入数值但不执行计算求解?

实现SymPy矩阵运算的表达式可视化(不自动计算)

方法1:自定义矩阵类重载运算符

通过继承SymPy的Matrix类,重载核心运算方法,让每个元素以未计算的表达式形式保留,而非自动化简。

from sympy import Matrix, Add, Mul, Integer

class ExprMatrix(Matrix):
    def __add__(self, other):
        if not isinstance(other, Matrix):
            other = self.__class__([[other]*self.shape[1]]*self.shape[0])
        # 逐个元素生成Add表达式,不化简
        new_elements = [[Add(self[i,j], other[i,j], evaluate=False) 
                        for j in range(self.shape[1])] 
                       for i in range(self.shape[0])]
        return self.__class__(new_elements)
    
    def __mul__(self, other):
        if isinstance(other, (int, float, Integer)):
            # 数乘:生成Mul表达式,不化简
            new_elements = [[Mul(self[i,j], other, evaluate=False) 
                            for j in range(self.shape[1])] 
                           for i in range(self.shape[0])]
            return self.__class__(new_elements)
        elif isinstance(other, Matrix):
            # 矩阵乘法:按乘法规则生成Add+Mul的嵌套表达式,不化简
            new_elements = []
            for i in range(self.shape[0]):
                row = []
                for j in range(other.shape[1]):
                    terms = [Mul(self[i,k], other[k,j], evaluate=False) for k in range(self.shape[1])]
                    row.append(Add(*terms, evaluate=False))
                new_elements.append(row)
            return self.__class__(new_elements)
    
    # 处理右数乘(比如 2 * A)
    __rmul__ = __mul__

用法示例

# 初始化自定义矩阵
A = ExprMatrix([[-7, 0], [4, 0]])
B = ExprMatrix([[2, 0], [-3, -3]])

# 矩阵加法
print("A + B =")
print(A + B)
# 输出:
# [[-7 + 2, 0 + 0], [4 + (-3), 0 + (-3)]]

# 数乘
print("\n2 * A =")
print(2 * A)
# 输出:
# [[2*(-7), 2*0], [2*4, 2*0]]

# 矩阵乘法
print("\nA * B =")
print(A * B)
# 输出:
# [[(-7)*2 + 0*(-3), (-7)*0 + 0*(-3)], [4*2 + 0*(-3), 4*0 + 0*(-3)]]

方法2:手动构造表达式矩阵(轻量方案)

如果不想自定义类,可以手动遍历矩阵元素,用evaluate=False的SymPy表达式构造新矩阵:

from sympy import Matrix, Add, Mul

A = Matrix([[-7, 0], [4, 0]])
B = Matrix([[2, 0], [-3, -3]])

# 构造加法表达式矩阵
add_expr = Matrix([[Add(A[i,j], B[i,j], evaluate=False) 
                   for j in range(A.shape[1])] 
                  for i in range(A.shape[0])])
print(add_expr)
# 输出:[[-7 + 2, 0 + 0], [4 + (-3), 0 + (-3)]]

# 构造数乘表达式矩阵
mul_expr = Matrix([[Mul(3, A[i,j], evaluate=False) 
                   for j in range(A.shape[1])] 
                  for i in range(A.shape[0])])
print(mul_expr)
# 输出:[[3*(-7), 3*0], [3*4, 3*0]]

关键说明

  • 核心是利用SymPy的Add、Mul函数的evaluate=False参数,强制保留表达式结构,不自动计算结果。
  • 自定义类方案适合需要频繁进行多种矩阵运算的场景,一次定义后可直接用运算符操作;手动构造适合单次运算的轻量需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:21