python學習(四)之二分法求平方根


  前幾天學完python的程序分支結構后,老師課后留了一個問題,用兩種方法計算一個大於或等於 1 的實數 n 數的平方根。
描述
設計一個用二分法計算一個大於或等於 1 的實數 n 的平方根的函數sqrt_binary(n),計算精度控制在計算結果的平方與輸入的誤差不大於1e-6。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
注:初始區間取[0,n]
‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
輸入格式:
輸入一個實數 n(大於或等於1)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

輸出格式:
第一行輸出用自己設計的函數計算得到的平方根‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
第二行輸出用math庫開平方函數計算得到的平方根
 
思路:先說第二種,用math庫函數,這個比較簡單,只要知道math庫里的math.sqrt()就行了。第一種要求用二分法求得平方根。首先,你得明白數學里二分法是怎么求平方根的。這個建議自己如果不知道的畫,百度看一下。下面說一下我代碼中的思想。
二分法思想:
 1.先求區間[0,n]之間的中點值mid=(0+n)/2
 2.判斷mid的平方與n之間差值的絕對值是否符合精確度誤差
 3.符合就返回得到的值,不符合的話,如果mid**2>n,說明n的平方根小於mid,讓mid等於區間較大的數,繼續求中點值。如果mid**2<n,說明n的平方根大於mid,讓mid等於區間較小的數,繼續求中點值。

 代碼如下:
 1 import math#引入math庫
 2 n= eval(input())
 3 def sqrt_binary(n):
 4     low = 0
 5     up = n
 6     a = 1e-6#誤差
 7     while True:
 8         mid = (low+up)/2
 9         if abs(mid**2 - n) < a :#精確度判斷
10             return mid
11         else:
12             if mid**2 > n:
13                 up = mid
14             if mid**2 < n:
15                 low = mid
16 print(sqrt_binary(n))  
17 print(math.sqrt(n))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM