Matrix 收集矩阵系数的符号? 我试图将一个表达式因子化,并将系数分离为矩阵形式,以便:

Matrix 收集矩阵系数的符号? 我试图将一个表达式因子化,并将系数分离为矩阵形式,以便:,matrix,sympy,symbolic-math,polynomial-math,Matrix,Sympy,Symbolic Math,Polynomial Math,与密切相关,其中使用野生符号与匹配(形式)来确定其矩阵形式的系数。但是,我无法使用match(form)方法处理以下内容 为什么匹配(表单)方法失败? 实现这一目标的清洁替代方案是什么? 线性插值函数:V(x) v_1,θ_1,v_2,θ_2,x,L=符号(“v_1,θ_1,v_2,θ_2,x,L”) a_1,a_2,a_3,a_4=符号(“a_1,a_2,a_3,a_4”,real=True) V=a_1*x**0+a_2*x**1+a_3*x**2+a_4*x**3 #用BC:V(x)@x=

与密切相关,其中使用野生符号与
匹配(形式)
来确定其矩阵形式的系数。但是,我无法使用
match(form)
方法处理以下内容

为什么
匹配(表单)
方法失败?

实现这一目标的清洁替代方案是什么?

线性插值函数:V(x) v_1,θ_1,v_2,θ_2,x,L=符号(“v_1,θ_1,v_2,θ_2,x,L”) a_1,a_2,a_3,a_4=符号(“a_1,a_2,a_3,a_4”,real=True) V=a_1*x**0+a_2*x**1+a_3*x**2+a_4*x**3 #用BC:V(x)@x=0,x=L求解系数(a_1,a_2,a_3,a_4) shape_coefs=solve([Eq(v_1,v.subs({x:0})), 方程(θu 1,V.diff(x).subs({x:0})), 等式(v_2,v.subs({x:L})), 方程(θu 2,V.diff(x).subs({x:L}))], (a_1,a_2,a_3,a_4)) V=V.subs(形状系数) #矩阵因子 V=同向收集(同向展开(V),(V_1,θu 1,V_2,θu 2))

并收集术语,直到矩阵形式变得明显。要匹配表格:

C_1、C_2、C_3、C_4=符号(“C_1、C_2、C_3、C_4”,cls=Wild)
形式=c_1*v_1+c_2*theta_1+c_3*v_2+c_4*theta_2
材料系数=V.匹配(形式)
N=矩阵([C_1,C_2,C_3,C_4])。转置()
N=N.subs(材料系数)
v=矩阵([v_1,θu 1,v_2,θu 2])

与引用的问题不同,
V.match(form)
,返回None,而不是包含
{C_1:f(x)、C_2:f(x)、C_3:f(x)、C_4:f(x)}的dict()。为什么会失败?--通过检查,解决方案是显而易见的。

因为
收集(扩展(V),…)
已经将
V
显示为变量
V_1、θ_1、V_2、θ_2
中的线性多项式,而不是使用
V.match(form)
,也许更简单、更直接的方法是使用
V.coeff
方法:

N=sy.矩阵([V.coeff(V)表示V in(V_1,θu 1,V_2,θu 2)])。转置()

将sympy导入为sy
#线性插值函数:V(x)
v_1,θ_1,v_2,θ_2,x,L=sy(
“v_1,θ_1,v_2,θ_2,x,L”)
a_1,a_2,a_3,a_4=sy.符号(“a_1,a_2,a_3,a_4”,real=True)
V=a_1*x**0+a_2*x**1+a_3*x**2+a_4*x**3
#用BC:V(x)@x=0,x=L求解系数(a_1,a_2,a_3,a_4)
shape_coefs=sy.solve([sy.Eq(v_1,v.subs({x:0})),
sy.Eq(theta_1,V.diff(x).subs({x:0})),
sy.Eq(v_2,v.subs({x:L})),
sy.Eq(theta_2,V.diff(x).subs({x:L}))],
(a_1,a_2,a_3,a_4))
V=V.subs(形状系数)
V=sy.collect(sy.expand(V),(V_1,theta_1,V_2,theta_2))
N=sy.矩阵([V.coeff(V)表示V in(V_1,θu 1,V_2,θu 2)])。转置()
打印(N)
屈服

矩阵([[1-3*x**2/L**2+2*x**3/L**3,x-2*x**2/L+x**3/L**2,3*x**2/L**2-2*x**3/L**3,-x**2/L+x**3/L**2]]

极好的解决方案:我有一个使用
.coeff()
的方法,但是如果您不理解列表,它有点混乱
.coeff()
似乎在所有情况下都是最稳定的。不过,有人猜测为什么
.match(form)
失败了吗?这两种方法都有好处吗?再次感谢。对不起,我不太了解
.match(form)
是如何实现的。寻找多项式的系数有一个确定性(保证成功)算法。模式匹配是一个更开放的问题。因此,如果一个问题同时适用于这两种方法——只要
V
可以表示为
V
theta
变量中的多项式——我肯定会选择使用
.coeff()