SymPy线性代数与矩阵运算

SymPy线性代数与矩阵运算

【免费下载链接】sympy 一个用纯Python语言编写的计算机代数系统。 【免费下载链接】sympy 项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

本文详细介绍了SymPy符号计算库在线性代数和矩阵运算方面的强大功能。文章首先深入探讨了SymPy符号矩阵系统的设计与实现,包括其核心架构、MatrixExpr基类设计、MatrixSymbol实现细节以及矩阵运算表达式系统。接着系统讲解了行列式、特征值与特征向量的符号计算方法,包括各种算法选择和性能优化策略。然后全面阐述了矩阵分解技术(LU、QR、Cholesky、LDL分解)及其在线性方程组求解中的应用。最后重点介绍了SymPy的张量运算与多维数组处理能力,包括张量积、缩并、对角化等高级操作及其在物理和工程领域的实际应用。

符号矩阵系统设计与实现

SymPy的符号矩阵系统是其线性代数模块的核心组成部分,它提供了一个强大的框架来处理抽象的矩阵表达式。与传统的数值矩阵不同,符号矩阵允许用户使用符号变量来表示矩阵元素,从而能够进行符号计算、代数推导和理论证明。

核心架构设计

SymPy的符号矩阵系统建立在面向对象的设计理念之上,采用了层次化的类结构:

mermaid

MatrixExpr基类设计

MatrixExpr是所有矩阵表达式的抽象基类,它定义了符号矩阵系统的基本接口和行为模式:

class MatrixExpr(Expr):
    """Superclass for Matrix Expressions
    
    MatrixExprs represent abstract matrices, linear transformations 
    represented within a particular basis.
    """
    is_Matrix = True
    is_MatrixExpr = True
    is_commutative = False
    is_number = False
    
    @property
    def shape(self):
        raise NotImplementedError
        
    def _entry(self, i, j, **kwargs):
        raise NotImplementedError

基类提供了矩阵操作的标准接口,包括形状查询、元素访问、转置、逆矩阵、行列式等基本操作。所有具体的矩阵表达式类都必须实现这些核心方法。

MatrixSymbol实现细节

MatrixSymbol是符号矩阵系统的基础构建块,它代表一个具有符号名称和特定维度的矩阵:

class MatrixSymbol(MatrixExpr):
    """Symbolic representation of a Matrix object
    
    Creates a SymPy Symbol to represent a Matrix. This matrix has a shape 
    and can be included in Matrix Expressions.
    """
    is_symbol = True
    _diff_wrt = True
    
    def __new__(cls, name, n, m):
        n, m = _sympify(n), _sympify(m)
        cls._check_dim(m)
        cls._check_dim(n)
        # ... 参数验证和对象创建逻辑
        
    @property
    def shape(self):
        return self.args[1], self.args[2]
        
    def _entry(self, i, j, **kwargs):
        return MatrixElement(self, i, j)

MatrixSymbol的关键特性包括:

  • 支持符号维度(如n, m等符号变量)
  • 严格的维度验证机制
  • 延迟求值的设计理念
  • 与SymPy符号系统的深度集成

矩阵运算表达式

符号矩阵系统支持丰富的矩阵运算表达式,包括加法、乘法、幂运算等:

矩阵加法 (MatAdd)
class MatAdd(MatrixExpr, Add):
    """A Sum of Matrix Expressions"""
    identity = GenericZeroMatrix()
    
    def _entry(self, i, j, **kwargs):
        return Add(*[arg._entry(i, j, **kwargs) for arg in self.args])

矩阵加法表达式维护一个操作数列表,并在求值时对每个对应位置的元素进行符号加法。

矩阵乘法 (MatMul)
class MatMul(MatrixExpr, Mul):
    """A product of matrix expressions"""
    identity = GenericIdentity()
    
    def _entry(self, i, j, expand=True, **kwargs):
        # 实现矩阵乘法的元素级计算
        from sympy.concrete.summations import Sum
        # ... 复杂的求和表达式生成逻辑

矩阵乘法表达式的实现涉及复杂的索引处理和求和表达式生成,支持符号维度的正确推导。

表达式化简与求值系统

符号矩阵系统包含一个强大的化简和求值系统,能够处理各种矩阵表达式:

mermaid

维度推导与验证

符号矩阵系统实现了智能的维度推导机制:

def validate_matmul_integer(*matrices):
    """验证矩阵乘法的维度兼容性"""
    for i in range(len(matrices)-1):
        if matrices[i].cols != matrices[i+1].rows:
            raise ShapeError("矩阵维度不兼容")

系统能够在符号层面验证矩阵运算的维度兼容性,即使维度本身是符号变量。

符号索引与元素访问

符号矩阵支持灵活的索引机制:

# 创建符号矩阵
A = MatrixSymbol('A', n, m)
B = MatrixSymbol('B', m, p)

# 访问具体元素
element = A[0, 1]  # 返回MatrixElement对象

# 符号索引
i, j = symbols('i j', integer=True)
symbolic_element = A[i, j]  # 支持符号索引

求导与微分支持

符号矩阵系统提供了矩阵微分的完整支持:

def _eval_derivative_matrix_lines(self, x):
    """计算矩阵对矩阵的导数"""
    # 实现复杂的矩阵导数计算规则
    # 支持链式法则和转置规则

性能优化策略

系统采用了多种性能优化策略:

  1. 延迟求值:保持表达式符号形式直到显式调用doit()
  2. 表达式缓存:重用已计算的子表达式
  3. 模式匹配:识别常见模式进行特殊处理
  4. 符号简化:应用代数恒等式进行化简

扩展性与自定义

符号矩阵系统设计具有良好的扩展性,用户可以定义自定义的矩阵表达式类:

class CustomMatrixExpr(MatrixExpr):
    def __new__(cls, *args):
        # 自定义创建逻辑
        pass
        
    @property
    def shape(self):
        # 自定义形状推导
        pass
        
    def _entry(self, i, j):
        # 自定义元素访问逻辑
        pass

这种设计使得SymPy的符号矩阵系统不仅功能强大,而且具有很好的灵活性和可扩展性,能够满足各种复杂的符号线性代数计算需求。

行列式、特征值与特征向量计算

SymPy提供了强大的符号计算能力来处理线性代数中的核心概念,包括行列式计算、特征值和特征向量的求解。这些功能使得符号矩阵的代数运算变得简单而精确。

行列式计算

行列式是矩阵的一个重要数值特征,用于判断矩阵是否可逆、计算矩阵的秩等。SymPy提供了多种算法来计算行列式:

基本行列式计算
from sympy import Matrix, symbols

# 创建一个3x3符号矩阵
a, b, c, d, e, f, g, h, i = symbols('a:i')
M = Matrix([[a, b, c], [d, e, f], [g, h, i]])

# 计算行列式
det_M = M.det()
print(f"矩阵M的行列式: {det_M}")
# 输出: a*e*i - a*f*h - b*d*i + b*f*g + c*d*h - c*e*g
数值矩阵的行列式
from sympy import Matrix

# 数值矩阵示例
M = Matrix([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])

det_value = M.det()
print(f"数值矩阵的行列式: {det_value}")
# 输出: 0 (因为矩阵是奇异的)
使用不同算法计算行列式

SymPy支持多种行列式计算算法,可以通过method参数指定:

# 使用Bareiss算法
det_bareiss = M.det(method='bareiss')

# 使用Berkowitz算法  
det_berkowitz = M.det(method='berkowitz')

# 使用LU分解算法
det_lu = M.det(method='lu')

# 使用Laplace展开
det_laplace = M.det(method='laplace')

特征多项式

特征多项式是求解特征值的基础,其根即为矩阵的特征值:

from sympy import symbols

# 计算特征多项式
lamda = symbols('lamda')
char_poly = M.charpoly(lamda)

print(f"特征多项式: {char_poly}")
# 对于3x3矩阵,输出: PurePoly(lamda**3 - (a + e + i)*lamda**2 + ...)

特征值计算

特征值是线性变换的重要不变量,SymPy可以精确计算符号矩阵的特征值:

基本特征值计算
from sympy import Matrix

# 创建一个矩阵
M = Matrix([
    [3, -2, 4, -2],
    [5, 3, -3, -2], 
    [5, -2, 2, -2],
    [5, -2, -3, 3]
])

# 计算特征值(返回字典形式:特征值->代数重数)
eigenvals_dict = M.eigenvals()
print(f"特征值及其重数: {eigenvals_dict}")
# 输出: {-2: 1, 3: 1, 5: 2}

# 计算特征值(返回列表形式)
eigenvals_list = M.eigenvals(multiple=True)
print(f"特征值列表: {eigenvals_list}")
# 输出: [-2, 3, 5, 5]
符号矩阵的特征值
from sympy import Matrix, symbols

x, y = symbols('x y')
M_sym = Matrix([
    [x, 1],
    [1, y]
])

# 计算符号矩阵的特征值
eigenvals_sym = M_sym.eigenvals()
print(f"符号矩阵特征值: {eigenvals_sym}")

特征向量计算

特征向量描述了线性变换的不变方向,SymPy可以精确计算特征向量:

基本特征向量计算
# 计算特征值和特征向量
eigenvects = M.eigenvects()
print("特征向量信息:")
for eigenval, multiplicity, eigenvectors in eigenvects:
    print(f"特征值: {eigenval}, 重数: {multiplicity}")
    for i, vec in enumerate(eigenvectors):
        print(f"  特征向量 {i+1}: {vec.T}")
验证特征向量
# 验证特征向量的正确性
for eigenval, multiplicity, eigenvectors in eigenvects:
    for vec in eigenvectors:
        # 检查 M*v = λ*v 是否成立
        lhs = M * vec
        rhs = eigenval * vec
        print(f"验证: M*v = {lhs}")
        print(f"      λ*v = {rhs}")
        print(f"      是否相等: {lhs.equals(rhs)}")

对角化

当矩阵可对角化时,SymPy可以找到相似变换矩阵:

# 矩阵对角化
P, D = M.diagonalize()
print(f"相似变换矩阵 P: {P}")
print(f"对角矩阵 D: {D}")

# 验证: M = P * D * P^{-1}
M_reconstructed = P * D * P.inv()
print(f"重构的矩阵: {M_reconstructed}")
print(f"是否相等: {M.equals(M_reconstructed)}")

特殊矩阵的特征值特性

对称矩阵
from sympy import Matrix, symbols

# 创建对称矩阵
a, b, c = symbols('a b c')
M_symmetric = Matrix([
    [a, b],
    [b, c]
])

# 对称矩阵的特征值都是实数
eigenvals_symm = M_symmetric.eigenvals()
print(f"对称矩阵特征值: {eigenvals_symm}")
对角矩阵
# 对角矩阵的特征值就是对角线元素
M_diag = Matrix.diag(1, 2, 3, 4)
eigenvals_diag = M_diag.eigenvals()
print(f"对角矩阵特征值: {eigenvals_diag}")
# 输出: {1: 1, 2: 1, 3: 1, 4: 1}

计算流程示意图

mermaid

性能考虑和算法选择

对于大型符号矩阵,特征值计算可能非常耗时。SymPy提供了多种优化策略:

  1. 使用charpoly代替eigenvals:如果只需要特征多项式而不需要具体特征值
  2. 设置simplify=False:避免不必要的化简操作
  3. 使用数值方法:对于数值矩阵,可以使用数值近似方法
# 性能优化示例
eigenvals_fast = M.eigenvals(simplify=False)

# 数值近似
M_num = M.evalf()
eigenvals_approx = M_num.eigenvals()

应用实例

物理系统分析
from sympy import Matrix, symbols, sqrt

# 简谐振子系统
m, k = symbols('m k', positive=True)
# 动力学矩阵
K = Matrix([
    [2*k, -k],
    [-k, 2*k]
])
M_mass = Matrix([
    [m, 0],
    [0, m]
])

# 求解特征值问题: K * x = ω² * M * x
eigenvals = (M_mass.inv() * K).eigenvals()
frequencies = [sqrt(lamda) for lamda in eigenvals.keys()]
print(f"系统固有频率: {frequencies}")
图像处理中的特征脸
# 伪代码: 特征脸计算
def compute_eigenfaces(data_matrix):
    # 中心化数据
    mean_face = data_matrix.mean(axis=1)
    centered_data = data_matrix - mean_face
    
    # 计算协方差矩阵的特征向量
    covariance = centered_data * centered_data.T
    eigenvals, eigenvects = covariance.eigenvects()
    
    return eigenvals, eigenvects, mean_face

SymPy的行列式、特征值和特征向量计算功能为符号线性代数提供了强大的工具,特别适用于需要精确符号结果的数学推导、物理建模和工程分析场景。通过合理的算法选择和性能优化,可以高效处理各种规模的矩阵运算问题。

矩阵分解与线性方程组求解

SymPy提供了强大的矩阵分解功能,包括LU分解、QR分解、Cholesky分解和LDL分解等。这些分解方法不仅有助于理解矩阵的结构特性,还能高效地解决线性方程组问题。

LU分解及其应用

LU分解将矩阵A分解为下三角矩阵L和上三角矩阵U的乘积,即A = LU。SymPy中的LU分解实现支持部分主元选取,确保数值稳定性。

from sympy import Matrix

# 创建示例矩阵
A = Matrix([[4, 3], [6, 3]])
L, U, perm = A.LUdecomposition()

print("L矩阵:")
print(L)
print("U矩阵:")
print(U)
print("置换信息:", perm)

输出结果:

L矩阵:
Matrix([
[  1, 0],
[3/2, 1]])
U矩阵:
Matrix([
[4,    3],
[0, -3/2]])
置换信息: []

LU分解的数学原理可以通过以下流程图表示:

mermaid

QR分解与最小二乘问题

QR分解将矩阵分解为正交矩阵Q和上三角矩阵R的乘积,特别适用于解决超定方程组的最小二乘问题。

# QR分解示例
A = Matrix([[12, -51, 4], [6, 167, -68], [-4, 24, -41]])
Q, R = A.QRdecomposition()

print("Q矩阵:")
print(Q)
print("R矩阵:")
print(R)
print("验证正交性 Q^T * Q = I:")
print(Q.T * Q)

QR分解的算法基于Gram-Schmidt正交化过程:

mermaid

Cholesky分解与正定矩阵

对于对称正定矩阵,Cholesky分解提供了一种高效的分解方法,将矩阵分解为下三角矩阵L及其转置的乘积。

# Cholesky分解示例
A = Matrix([[25, 15, -5], [15, 18, 0], [-5, 0, 11]])
L = A.cholesky()

print("Cholesky分解结果L:")
print(L)
print("验证 L * L.T = A:")
print(L * L.T == A)

LDL分解

LDL分解是Cholesky分解的变体,避免了平方根运算,特别适合符号计算:

# LDL分解示例
L, D = A.LDLdecomposition()
print("L矩阵:")
print(L)
print("D矩阵:")
print(D)
print("验证 L * D * L.T = A:")
print(L * D * L.T == A)

线性方程组求解方法比较

SymPy提供了多种基于矩阵分解的线性方程组求解方法:

方法适用条件时间复杂度稳定性
LUsolve方阵,非奇异O(n³)中等
QRsolve任意矩阵O(mn²)
cholesky_solve对称正定O(n³/3)
LDLsolve对称矩阵O(n³/3)

实际应用示例

使用LU分解求解方程组
# 构建线性方程组 Ax = b
A = Matrix([[2, 3, 1], [1, 1, 1], [1, 2, -1]])
b = Matrix([9, 6, 2])

# 使用LU分解求解
x = A.LUsolve(b)
print("解向量x:", x)
print("验证 Ax = b:", A * x == b)
使用QR分解解决最小二乘问题
# 超定方程组示例
A = Matrix([[1, 1], [1, 2], [1, 3], [1, 4]])
b = Matrix([6, 5, 7, 10])

# QR分解求解
x = A.QRsolve(b)
print("最小二乘解:", x)
print("残差范数:", (A*x - b).norm())

数值稳定性与算法选择

在选择矩阵分解方法时,需要考虑以下因素:

  1. 矩阵特性:对称正定矩阵优先选择Cholesky或LDL分解
  2. 数值稳定性:QR分解具有最好的数值稳定性
  3. 计算效率:Cholesky分解计算量最小
  4. 内存需求:稀疏矩阵应考虑特殊存储格式

SymPy的矩阵分解功能不仅支持精确符号计算,还能处理复杂的数学表达式,为科学计算和工程应用提供了强大的工具。通过合理选择分解方法,可以高效解决各类线性代数问题。

张量运算与多维数组处理

SymPy作为强大的符号计算库,提供了完整的张量运算和多维数组处理功能。在物理、工程和数学计算中,张量运算扮演着至关重要的角色,SymPy的张量模块让用户能够在符号层面进行复杂的多维数组操作。

多维数组基础

SymPy提供了多种多维数组类型,支持从简单的数值数组到复杂的符号张量运算。核心的数组类包括:

数组类型可变性存储方式特点
MutableDenseNDimArray可变密集存储支持原地修改操作
ImmutableDenseNDimArray不可变密集存储线程安全,哈希可用
MutableSparseNDimArray可变稀疏存储适合大型稀疏数组
ImmutableSparseNDimArray不可变稀疏存储稀疏且不可变

创建多维数组的基本方法:

from sympy.tensor.array import Array, MutableDenseNDimArray
from sympy import symbols

# 从列表创建数组
A = Array([[1, 2, 3], [4, 5, 6]])
print(f"数组A: {A}")
print(f"形状: {A.shape}")
print(f"秩: {A.rank()}")

# 创建符号数组
x, y, z = symbols('x y z')
B = Array([[x, y], [z, x+y]])
print(f"符号数组B: {B}")

# 创建高维数组
C = MutableDenseNDimArray.zeros(2, 3, 4)
print(f"三维零数组形状: {C.shape}")

张量积运算

张量积(Tensor Product)是张量代数中的基本操作,SymPy提供了强大的张量积计算功能:

from sympy.tensor.array import tensorproduct
from sympy import Matrix

# 矩阵的张量积
m1 = Matrix([[1, 2], [3, 4]])
m2 = Matrix([[x, y], [z, w]])
tp = tensorproduct(m1, m2)
print(f"矩阵张量积:\n{tp}")
print(f"结果形状: {tp.shape}")

# 多维数组的张量积
A = Array([1, 2, 3])
B = Array([x, y])
result = tensorproduct(A, B)
print(f"向量张量积: {result}")
print(f"结果形状: {result.shape}")

张量积的数学表示: 对于两个张量 $A_{i_1i_2\ldots i_m}$ 和 $B_{j_1j_2\ldots j_n}$,它们的张量积为: $$(A \otimes B){i_1i_2\ldots i_mj_1j_2\ldots j_n} = A{i_1i_2\ldots i_m} \cdot B_{j_1j_2\ldots j_n}$$

张量缩并运算

张量缩并(Tensor Contraction)是张量分析中的重要操作,用于对指定指标进行求和:

from sympy.tensor.array import tensorcontraction

# 创建三维数组
arr = Array(range(24), (2, 3, 4))
print(f"原始数组形状: {arr.shape}")

# 对第0和第2个指标进行缩并
contracted = tensorcontraction(arr, (0, 2))
print(f"缩并后数组: {contracted}")
print(f"缩并后形状: {contracted.shape}")

# 矩阵迹运算(对角线和)
matrix = Array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
trace = tensorcontraction(matrix, (0, 1))
print(f"矩阵迹: {trace}")

缩并运算的流程可以用以下流程图表示:

mermaid

张量对角化

张量对角化(Tensor Diagonalization)将多个指标合并为一个对角指标:

from sympy.tensor.array import tensordiagonal

# 三维数组的对角化
arr = Array(range(18), (3, 2, 3))
print(f"原始数组形状: {arr.shape}")

# 对第0和第2个指标进行对角化
diagonalized = tensordiagonal(arr, (0, 2))
print(f"对角化结果: {diagonalized}")
print(f"结果形状: {diagonalized.shape}")

# 验证对角化结果
for i in range(3):
    print(f"对角线元素{i}: {arr[i, :, i]}")

数组表达式系统

SymPy提供了强大的数组表达式系统,支持符号化的数组操作:

from sympy.tensor.array.expressions import ArraySymbol, ArrayTensorProduct, ArrayContraction

# 定义符号数组
A = ArraySymbol("A", (3, 3))
B = ArraySymbol("B", (3, 3))

# 构建张量积表达式
tp_expr = ArrayTensorProduct(A, B)
print(f"张量积表达式: {tp_expr}")

# 构建缩并表达式(矩阵乘法)
matmul_expr = ArrayContraction(tp_expr, (1, 2))
print(f"矩阵乘法表达式: {matmul_expr}")

# 转换为显式形式(如果可能)
from sympy import Matrix
A_mat = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
B_mat = Matrix([[x, y, z], [1, 2, 3], [a, b, c]])

# 将符号表达式替换为具体矩阵
result = matmul_expr.replace({A: A_mat, B: B_mat})
print(f"具体计算结果: {result}")

高级张量操作

SymPy支持更复杂的张量操作,包括指标操作、对称性处理和坐标变换:

from sympy.tensor import TensorIndexType, tensor_indices, tensorhead
from sympy import symbols

# 定义张量指标类型
Lorentz = TensorIndexType('Lorentz', dummy_name='L')
mu, nu, rho = tensor_indices('mu nu rho', Lorentz)

# 定义度规张量
g = tensorhead('g', [Lorentz, Lorentz], [[1,1]])

# 定义电磁场张量
F = tensorhead('F', [Lorentz, Lorentz], [[1,2]])

# 构建麦克斯韦方程中的项
term1 = F(mu, nu) * F(-mu, -nu)  # F_{\mu\nu}F^{\mu\nu}
term2 = F(mu, nu) * F(nu, rho) * F(rho, mu)  # 更复杂的收缩

print(f"第一项: {term1}")
print(f"第二项: {term2}")

# 自动进行指标收缩和简化
from sympy.tensor import tensor_contract
contracted_term = tensor_contract(term1)
print(f"收缩后的项: {contracted_term}")

性能优化技巧

对于大型张量运算,SymPy提供了多种优化策略:

from sympy.tensor.array import ImmutableDenseNDimArray
import time

# 创建大型数组
large_array = ImmutableDenseNDimArray(range(1000), (10, 10, 10))

# 时间性能测试
start = time.time()
result = tensorcontraction(large_array, (0, 1))
end = time.time()
print(f"缩并运算时间: {end - start:.4f}秒")

# 使用稀疏数组优化内存
from sympy.tensor.array import MutableSparseNDimArray
sparse_array = MutableSparseNDimArray.zeros(100, 100)
sparse_array[50, 50] = 1  # 只存储非零元素
sparse_array[25, 75] = 2

print(f"稀疏数组内存效率更高,特别适合大型稀疏张量")

实际应用案例

在理论物理中,张量运算广泛应用于相对论和量子场论:

from sympy import symbols, simplify
from sympy.tensor import TensorIndexType, tensor_indices, tensorhead

# 广义相对论中的黎曼曲率张量
Lorentz = TensorIndexType('Lorentz', dummy_name='L')
a, b, c, d = tensor_indices('a b c d', Lorentz)

# 定义度规张量、克里斯托费尔符号和黎曼张量
g = tensorhead('g', [Lorentz, Lorentz], [[1,1]])
Gamma = tensorhead('Gamma', [Lorentz, Lorentz, Lorentz], [[2,1]])
Riemann = tensorhead('R', [Lorentz, Lorentz, Lorentz, Lorentz], [[2,2]])

# 爱因斯坦场方程中的里奇张量
Ricci = Riemann(a, b, -a, c)  # R_{b c}

# 爱因斯坦张量
Einstein = Ricci(b, c) - (1/2)*g(b, c)*Ricci(a, -a)

print(f"爱因斯坦张量: {Einstein}")

# 在具体度规下计算
from sympy import diag
g_metric = diag(-1, 1, 1, 1)  # 闵可夫斯基度规
# 可以进一步计算具体分量...

SymPy的张量模块为科学计算提供了强大的符号处理能力,无论是简单的多维数组操作还是复杂的微分几何计算,都能提供清晰而强大的解决方案。通过结合符号计算和数值计算的优势,SymPy使得复杂的张量运算变得直观且易于验证。

总结

SymPy提供了一个完整而强大的符号线性代数计算生态系统,从基础的矩阵操作到高级的张量运算都能得到很好的支持。其符号矩阵系统采用面向对象设计,具有优秀的扩展性和灵活性,能够处理符号变量表示的矩阵元素和维度。通过各种矩阵分解技术和求解算法,SymPy能够高效解决各类线性代数问题。特别值得注意的是其张量运算模块,为物理、工程等领域的多维计算提供了强有力的符号处理工具。SymPy的这些功能使得数学推导、理论证明和科学计算变得更加精确和高效,是科研工作者和工程师进行符号计算的宝贵工具。

【免费下载链接】sympy 一个用纯Python语言编写的计算机代数系统。 【免费下载链接】sympy 项目地址: https://gitcode.com/GitHub_Trending/sy/sympy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值