如何提取SymPy矩阵中指定变量的系数并生成系数矩阵?
在SymPy中提取矩阵变量的系数矩阵(类似Mathematica的CoefficientArrays)
要提取eqs矩阵中变量{r11,r12,r21,r22}的系数矩阵,SymPy提供了linear_eq_to_matrix函数,可实现类似MathematicaCoefficientArrays的功能。具体实现如下:
完整代码
import sympy as sp # 定义符号变量与基础矩阵 r11,r12,r21,r22,rx,ry,k,s,dt,omega,gamma = sp.symbols('r11,r12,r21,r22,rx,ry,k,s,dt,omega,gamma') Ad = sp.Matrix([[0,1],[0,0]]) Aa = sp.Matrix([[0,0],[1,0]]) H0 = omega * sp.Matrix([[1,0],[0,0]]) rho = sp.Matrix([[r11,r12],[r21,r22]]) sx = sp.Matrix([[0,1],[1,0]]) # 生成目标方程矩阵eqs eqs = sp.simplify( (dt*(-1j*(H0*rho - rho*H0) + k*sp.exp(-s)*Aa*rho*Ad - k/2*(Ad*Aa*rho + rho*Ad*Aa)) - gamma*(sx*(sx*rho - rho*sx) - (sx*rho - rho*sx)*sx)*dt)/dt ) # 提取系数矩阵 target_vars = [r11, r12, r21, r22] # 将2x2的eqs转换为4x1的一维向量(行优先) eq_vector = sp.Matrix(eqs.reshape(4, 1)) # 转换为Ax = b形式,获取系数矩阵A和常数项b coeff_matrix, const_term = sp.linear_eq_to_matrix(eq_vector, target_vars) # 打印结果 print("系数矩阵:") sp.pprint(coeff_matrix) print("\n常数项向量:") sp.pprint(const_term)
关键说明
linear_eq_to_matrix会自动解析每个方程中目标变量的系数,生成对应的系数矩阵:矩阵每一行对应eq_vector中的一个元素(即原eqs矩阵的每个元素),每一列对应一个目标变量的系数。- 先将
eqs从2x2矩阵reshape为4x1向量,是为了适配线性方程组的标准形式,确保每个矩阵元素都作为独立方程处理。
内容的提问来源于stack exchange,提问作者Raman
相关产品推荐
相关产品推荐

