当以多变量为表达式,进行符号运算时,若仅对某一个变量赋值(有条件,见下),且赋值为0,则evalf运算不会进行(同时对全部变量赋数值没有问题)
触发条件:
- 仅对部分变量赋值
- 赋值为0
- 表达式中至少有一项与赋0值的变量没有高级运算关系(除加减运算以外的运算)
# b这一项中,与赋0值的a变量无关
a + b
# b*a这一项中,与赋0值的a变量有关
a + b*a
import sympy as sp
a, b = sp.symbols('a b')
y = a + b
result = y.evalf(subs={'a': 0})
print(result)
测试结果:
尝试过的办法:(均无效)
1.对全部变量赋值,但不进行运算的部分仍赋为符号
result = y.evalf(subs={'a': 0, 'b': 'b'})
2.修改表达式,使赋0值的变量形式上与全部项均有关
y = a + b * a**0
3.赋浮点类型的0
result = y.evalf(subs={'a': 0.0})
4.赋带符号的0
result = y.evalf(subs={'a': -0})
result = y.evalf(subs={'a': +0})
解决办法:
1.用matlab计算
2.单独处理赋0值的情况,或者不直接赋0,而是赋一个和0很接近的小数
1e-10