同情

时间:2017-02-02 16:28:18

标签: python 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,这是一个矩阵,和该矩阵的行。但两种情况都失败了。如何在同情中整合矩阵?是否支持?

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

1 个答案:

答案 0 :(得分:1)

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

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