Python 二分法求一元三次方程唯一的正实数根

Python 二分法求一元三次方程唯一的正实数根,第1张

小白第一次发文章,有不足之处还请各位大佬指出哈哈哈

最开始写的时候还加了if hanshu(mid,a,b,c)==0的情况,结果死活求不出解,就在那里循环,后来才反应过来,如果还要判断这种情况,实际上就是要求自己找出精确解,但我只给mid精确到十位,这怎么可能呢

所以 删除掉这样一种情况,只判断下面mid的函数值大于0还是小于0即可

                if hanshu(mid, a, b, c) > 0:
                    right = mid
                else:
                    if hanshu(mid, a, b, c) < 0:
                        if abs(left-mid)<=0.0000000001:
                            return left
                        else:
                            left = mid
注意要加上边界条件,我计划最后解精确到10位,并且与真实解差值控制在0.0000000001以内,所以代码如下:
if abs(left-mid)<=0.0000000001:
    return left

最后整体的代码是这样的~

class Solution:
    def solve(self , a,b,c,left,right):
        def hanshu(x, a, b, c):
            return x * x * x + a * x * x + b * x - c
        while left 0:
                mid = round((left + right) / 2, 10)
                if hanshu(mid, a, b, c) > 0:
                    right = mid
                else:
                    if hanshu(mid, a, b, c) < 0:
                        if abs(left-mid)<=0.0000000001:
                            return left
                        else:
                            left = mid
            else:
                left = right
                right = right + 100

so=Solution()

q=int(input())
left1 = 0
right1 = 100
ans=[]
for num in range(q):
    a1,b1,c1=map(lambda x:int(x),input().split(' '))
    ans.append(so.solve(a1,b1,c1,left1,right1))
for ele in ans:
    print(ele)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/791377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存