【问题标题】:Factor sympy expression to matrix coefficients?将 sympy 表达式分解为矩阵系数?
【发布时间】:2015-05-07 22:19:30
【问题描述】:

我试图勤奋地查看文档,但结果却一无所获。

我正在尝试将表达式中的项分解或消除为矩阵形式。我的问题似乎与多项式因式分解不同(因为我计划实现一个函数phi(x,y,z) = a_1 + a_2*x + a_3*y + a_4*z

import sympy
from sympy import symbols, pprint
from sympy.solvers import solve

phi_1, phi_2, x, a_1, a_2, L = symbols("phi_1, phi_2, x, a_1, a_2, L")

#Linear Interpolation function: phi(x)
phi = a_1 + a_2*x
#Solve for coefficients (a_1, a_2) with BC's: phi(x) @ x=0, x=L
shape_coeffs = solve([Eq(phi_1, phi).subs({x:0}), Eq(phi_2, phi).subs({x:L})], (a_1, a_2))
pprint(shape_coeffs)
#Substitute known coefficients
phi = phi.subs(shape_coeffs)
pprint(phi)

这按预期工作,但是,我想将其分解为矩阵形式,其中:

我尝试了factor()cancel()as_coefficient(),但没有成功。在纸面上,这是一个微不足道的问题。我在同情解决方案中缺少什么?谢谢。

有效方法:作为答案

C_1, C_2 = symbols("C_1, C_2", cls=Wild)
N = Matrix(1,2, [C_1, C_2])
N = N.subs(phi.match(C_1*phi_1 + C_2*phi_2))
phi_i = Matrix([phi_1, phi_2])
display(Math("\phi(x)_{answered} = " + latex(N) + "\ * " + latex(phi_i)))

【问题讨论】:

    标签: python matrix sympy symbolic-math


    【解决方案1】:

    My first answer 使用phi.match(form) 来查找系数,但这似乎不太有效when matching many Wild symbols。所以相反,我认为更好的方法是使用phi = collect(expand(...)),然后使用phi.coeff 来查找系数:

    import sympy as sy
    
    phi_1, phi_2, x, a_1, a_2, L = sy.symbols("phi_1, phi_2, x, a_1, a_2, L")
    
    phi = a_1 + a_2*x
    shape_coeffs = sy.solve([sy.Eq(phi_1, phi).subs({x:0}), sy.Eq(phi_2, phi).subs({x:L})], (a_1, a_2))
    phi = phi.subs(shape_coeffs)
    
    phi = sy.collect(sy.expand(phi), phi_1)
    N = sy.Matrix([phi.coeff(v) for v in (phi_1, phi_2)]).transpose()
    print(N)
    

    产量

    Matrix([[1 - x/L, x/L]])
    

    【讨论】:

    • 我将此标记为答案,但在尝试使用更多 Wilds 和 Symbols 实现解决方案时,match 返回 None。我发布了一个新问题,因为我不确定“SO”约定:stackoverflow.com/questions/30209215/…>
    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多