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

如何使用Sympy从线性变换表达式中求解系数矩阵A

Sympy提取线性向量表达式系数矩阵的正确实现

报错原因

sympy.solve的定位是求解方程中未知符号的具体取值,不适用于提取线性表达式系数的场景。你未预先定义待求矩阵A的维度与元素结构就传入矩阵乘法方程,Sympy做维度校验时自然会触发Matrices A and x are not aligned报错。

实现方法

你的需求本质是提取向量每个分量对α、β、γ三个变量的线性系数,Sympy提供了两个原生方法可以直接实现,不需要手写求解逻辑:

方法1:雅可比矩阵法(兼容线性/非线性场景,线性场景下直接得到系数矩阵)

对于线性变换F(x) = Ax,系数矩阵A就是F对向量x的雅可比矩阵——线性表达式对变量的一阶偏导恰好是对应项的系数。
实现代码如下:

import sympy as sp

# 定义所有符号变量
alpha, beta, gamma, theta, phi = sp.symbols('alpha beta gamma theta phi')

# 定义输入的线性变换结果向量F(x)
F = sp.Matrix([
    alpha - gamma * sp.sin(theta),
    beta * sp.cos(phi) + gamma * sp.sin(phi) * sp.cos(theta),
    -beta * sp.sin(phi) + gamma * sp.cos(phi) * sp.cos(theta)
])

# 定义由α、β、γ构成的自变量向量
x = sp.Matrix([alpha, beta, gamma])

# 计算雅可比矩阵,即为目标系数矩阵A
A = F.jacobian(x)

方法2:线性方程组系数提取法(仅适用于线性表达式场景)

Sympy提供的linear_eq_to_matrix工具可以直接把线性方程组整理为Ax = b的标准形式,直接返回系数矩阵A和常数项向量b。
实现代码如下:

# 传入F向量和变量列表,直接拆分出系数矩阵和常数项
A, b = sp.linear_eq_to_matrix(F, [alpha, beta, gamma])

由于你给出的F向量没有常数项,返回的b为3×1的全零向量,A和目标矩阵完全一致。

结果验证

执行上述任意一段代码后,打印A得到的结果如下,和你给出的期望矩阵完全匹配:

⎡1     0        -sin(θ)   ⎤
⎢                         ⎥
⎢0  cos(φ)   sin(φ)⋅cos(θ)⎥
⎢                         ⎥
⎣0  -sin(φ)  cos(φ)⋅cos(θ)⎦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:32:22