1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 处理“Python使用sympy求解一元三次方程返回结果含I”的问题

处理“Python使用sympy求解一元三次方程返回结果含I”的问题

时间:2020-01-05 13:58:02

相关推荐

处理“Python使用sympy求解一元三次方程返回结果含I”的问题

在python中使用sympy进行一元三次方程求解的时候,返回值会带I,这些带I的数据很难处理。

import sympyP = 0.2Q = 1200t = sympy.Symbol("x")f = 6.81*t**3+7.73*t**2+0.23*t-Pt = 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])

将程序完整的跑一次:

import sympyP = 0.2Q = 1200t = sympy.Symbol("x")f = 6.81*t**3+7.73*t**2+0.23*t-Pt = sympy.solve(f)print(t)t_true = 0for i in range(0,3):if float(str(t[i]).split(" ")[0])>=0:t_true = float(str(t[i]).split(" ")[0])print(t_true)

由于我需要提取出其中的正数根做计算,所以展示的代码是提取其中的正数根,结果如下图所示:

[-1.07853349308902 + 0.e-23*I, -0.19570234514663 + 0.e-21*I, 0.139140390364868 + 0.e-21*I]0.139140390364868

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。