sympy:符号表达式不能给evalf赋值

在符号表达式赋值中,例如:f.evalf(subs={x:x_tmp,y:y_tmp}

x_tmp和y_tmp不能是符号表达式,即不能数值未知的符号还在x_tmp或y_tmp中!!!

即冒号右边必须是一个数值明确的数或变量!否则就直接带入带原符号表达式中。

注意:这个错误实在很难发现!!!


示例:

import sympy

x,y,r = sympy.symbols('x y r')

f = 1 + x + y 

x_tmp = 1

y_tmp = 2

print(f.evalf(subs={x:x_tmp,y:y_tmp}))   #  结果:4.000000  √

x_tmp = 1 + r

y_tmp = 2 + r

print(f.evalf(subs={x:x_tmp,y:y_tmp}))  #   结果:x + y + 1.0   ×  没有赋值!!!

# 若实在必需,只能将符号表达式带入原式中(没有别的方法!),即:

f_tmp = 1 + x_tmp + y_tmp

print(f_tmp)     结果:2*r + 4   √



还有一个更难发现的错误!!!

示例:

import sympy

x = sympy.Symbol('x')

f = 1 + x

x_tmp = 1

print(f.evalf(subs={x:x_tmp}))   # 没问题!

x_tmp = x_tmp + f.evalf(subs={x:x_tmp})   #  符号与另一个经过sympy操作后的值相加!

print(f.evalf(subs={x:x_tmp}))   #  这里很有可能报类型转换的错误!!!!

# 养成好习惯:x_tmp = float( x_tmp + f.evalf(subs={x:x_tmp}) )



numpy与sympy互用时,一定要牢记下面两点:

1. 符号表达式(有未知数值的符号在里面)不能作为evalf中冒号右边的值去赋值!!

2. 一定要随时记得转数值类型!!

你可能感兴趣的:(sympy:符号表达式不能给evalf赋值)