在python中使用sympy进行一元三次方程求解的时候,返回值会带I,这些带I的数据很难处理。
import sympy
P = 0.2
Q = 1200
t = sympy.Symbol("x")
f = 6.81*t**3+7.73*t**2+0.23*t-P
t = sympy.solve(f)
print(t)
当输入以上代码后,可以看到结果为:
[-1.07853349308902 + 0.e-23*I, -0.19570234514663 + 0.e-21*I, 0.139140390364868 + 0.e-21*I]
使用isinstance()判断后会得出该sympy返回的3个根不是复数的结果。
# 判断是否为复数
for i in range(0,3):
if isinstance(t[i], complex):
print("t["+str(i)+"]是复数")
else:
print("t["+str(i)+"]不是复数")
t[0]不是复数
t[1]不是复数
t[2]不是复数
而得到的结果很难处理,之后我又试了试,发现这个带I的玩意既不是int也不是float也不是str。
最后我找了解决办法,先转化成str,然后把空格后头的切掉,只保留前头的数字,之后再转化成float,就可以当成正常数字转化了。
float(str(t[i]).split(" ")[0])
将程序完整的跑一次