我正在尝试编写一个sympy脚本,但是在L1,L2处遇到问题。欢迎任何帮助。

在L1,我试图在前面的行中替换矩阵乘法表达式中的值。我不能代替矩阵对象吗?

在L2,我试图以浮点数评估替换的值,但没有得到它。为什么eval()没有给出浮点值?

from sympy import *
init_printing()
x, x1, x2, x3 = symbols ('x x1 x2 x3')
N1 = ((x-x2)*(x-x3))/( (x1-x2) * (x1-x3) )
N2 = ((x-x1)*(x-x3))/( (x2-x1) * (x2-x3) )
N = Matrix([ [N1,N2] ] )
expr1 = N*Transpose(N)
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1
N1.evalf (subs={x1:0.0, x2:2.5, x3:5}) #L2


编辑:

一个答案后,我要增加一些代码行。 L3,L4行不起作用。在L3,L4,我尝试将f1(该矩阵)和该矩阵的行进行积分。但是在两种情况下都失败了。如何在sympy中整合矩阵?支持吗?

from sympy import *
init_printing()
x, x1, x2, x3 = symbols ('x x1 x2 x3')
N1 = ((x-x2)*(x-x3))/( (x1-x2) * (x1-x3) )
N2 = ((x-x1)*(x-x3))/( (x2-x1) * (x2-x3) )
N = Matrix([ [N1,N2] ] )
expr1 = N*Transpose(N)
print expr1.subs([ (x1,0.0), (x2,2.5), (x3,5) ]) #L1
N1s=N1.subs( [ (x1,0.0), (x2,2.5), (x3,5) ])
N2s=N2.subs( [ (x1,0.0), (x2,2.5), (x3,5) ])
Ns = Matrix([ [N1s,N2s] ] )
f1 = Ns*x**3
f2 = integrate(f1,(x,0,5)) #L3
f2 = integrate(f1.row(1),(x,0,5)) #L4

最佳答案

第一行对我有用。确保您使用的是SymPy的最新版本(在撰写本文时为1.0)。

第二行不起作用,因为evalf(subs={...})不起作用,除非您替换表达式中的所有变量。请参见https://github.com/sympy/sympy/issues/6974。如果只想替换某些变量,请使用subs

关于python - Sympy中的矩阵运算错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42007391/

10-16 07:10