开3次方根(多次方根)的代码:二分法,python

  • Post author:
  • Post category:python


基本问题:

给出n值,求其对应的三次方根
\sqrt[3]{n}
的值(该问题可以扩展到多次方根
\sqrt[m]{n}
的值)

解决思路:

该问题的解决思路可以有两个:

1)类比于在一堆数列里找某一个符合条件的值x,条件为:
x^{3}=n
,可想而知,最常用的搜索方法为

二分法

其基本思路为:假设n=7

step1: 7/2=3.5;
3.5^{3}
=42.875>7;

step2: 3.5/2= 1.75;
1.75^{3}
=5.359<7;

step3: (1.75+3.5)/2=2.625;
2.625^{3}
=18.088>7;

step4: (1.75+2.625)/2=2.1875;
2.1857^{3}
=10.47>7

…..

stepn: 通过二分法,不断逼近
x^{3}=n
,达到最终解。

通过low,high,middle 三个变量进行控制。python代码如下:

# 通过二分法求n的三次方根的值
def cube_root(n):
    if(n<0):
        temp=-n
    else: temp=n
    precision=0.0000001
    low=0
    high= temp/2
    while(abs(high*high*high-temp)>precision):
        if(high*high*high>temp):
            high=high-(high-low)/2
        elif(high*high*high<temp):
            x=high+(high-low)/2
            low=high
            high=x
        else:
            return high
        print(high)
    result=high
    if (n<0):
        result=-high
    print(result)


if __name__=="__main__":
    cube_root(12)

运行结果为:

……. (未完还有)

2)使用

牛顿迭代

进行推导。

牛顿迭代求解这些问题是非常快的,牛顿迭代法顾名思义当然是迭代法的一种,所谓迭代法顾名思义就是重复地进行某种运算。进行到何时为止全凭个人好恶,但是理想情况下应该是计算的次数越多离真正的解就越近 [1]。

但最近看一篇知乎文章里面说,文章链接在参考文献 [2] 中。ps.该文章对牛顿迭代讲解非常清楚,并且有图解释。

特注明:在此引用的知乎内容,无恶意,若作者不希望被引用,联系我则删

参考文献:

[1] 如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 鍵山小鞠的回答 - 知乎
https://www.zhihu.com/question/20690553/answer/564405611
[2] 如何通俗易懂地讲解牛顿迭代法求开方?数值分析? - 马同学的回答 - 知乎
https://www.zhihu.com/question/20690553/answer/146104283



版权声明:本文为linweieran原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。