栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

在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])

将程序完整的跑一次:

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)

t_true = 0
for 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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号