Python programming implements the binary method and the Newton iteration method to obtain the square root code, and python square root
Evaluate the square root function sqrt (int num) of a number, which is provided in most languages. How does one implement the square root of a number?
In fact, there are two main algorithms for finding the square root: binary search and Newton iteration)
1: Binary
Root number 5
A: Half: 5/2 = 2.5
B: Square verification: 2.5*2.5 = 6.25> 5, and the current upper limit is 2.5.
C: fold down again: 2.5/2 = 1.25
D: Square verification: 1.25*1.25 = 1.5625 <5. The current minimum value is 1.25.
E: half again: 2.5-(2.5-1.25)/2 = 1.875
F: Square verification: 1.875*1.875 = 3.515625 <5. The current minimum value is 1.875.
Compare the current value with 5, write down the lower limit and upper limit, iterate in sequence, and gradually approach the square root:
import math from math import sqrt def sqrt_binary(num): x=sqrt(num) y=num/2.0 low=0.0 up=num*1.0 count=1 while abs(y-x)>0.00000001: print count,y count+=1 if (y*y>num): up=y y=low+(y-low)/2 else: low=y y=up-(up-y)/2 return y print(sqrt_binary(5)) print(sqrt(5))
Running result:
1 2.5
2 1.25
3 1.875
4 2.1875
5 2.34375
6 2.265625
7 2.2265625
8 2.24609375
9 2.236328125
10 2.2314453125
11 2.23388671875
12 2.23510742188
13 2.23571777344
14 2.23602294922
15 2.23617553711
16 2.23609924316
17 2.23606109619
18 2.23608016968
19 2.23607063293
20 2.23606586456
21 2.23606824875
22 2.23606705666
23 2.2360676527
24 2.23606795073
25 2.23606809974
26 2.23606802523
27 2.23606798798
2.23606796935
2.2360679775
[Finished in 0.1 s]
After 27 binary iterations, the difference between the obtained value and the system sqrt () is 0.00000001, and the accuracy is one,
0.001 8 iterations required
Therefore, in the case of low precision requirements, the bipartite method is also a relatively efficient algorithm.
2: Newton Iteration
After careful consideration, we can find that the problems we need to solve can be simply understood.
In the function sense, we need the function f (x) = x² to make the approximate solution of f (x) = num, that is, the approximate solution of x 2-num = 0.
From a geometric point of view: we require that g (x) = x 2-num be the closest point to the x axis intersection (g (x) = 0.
Let's assume that g (x0) = 0, that is, x0 is the positive solution, so what we need to do is to let the approximate x constantly approach x0, which is the definition of the function derivative:
You can obtain
From the geometric point of view, because the derivative is a tangent, through continuous iteration, the intersection of the derivative and the X axis will constantly approach x0.
For general cases:
Replace m = 2:
def sqrt_newton(num): x=sqrt(num) y=num/2.0 count=1 while abs(y-x)>0.00000001: print count,y count+=1 y=((y*1.0)+(1.0*num)/y)/2.0000 return y print(sqrt_newton(5)) print(sqrt(5))
Running result:
1 2.5
2 2.25
3 2.23611111111
2.23606797792
2.2360679775
Accurate to one of the hundreds of millions, the Newton method only iterates three times, 10 times that of the binary method.
3: Use the Newton method to obtain the open cube
def cube_newton(num): x=num/3.0 y=0 count=1 while abs(x-y)>0.00000001: print count,x count+=1 y=x x=(2.0/3.0)*x+(num*1.0)/(x*x*3.0) return x print(cube_newton(27))
Calculus, probability, and line generation are basic courses for advanced algorithms. However, after so many years, I have forgotten that ..............................
Summary
The above is all about the implementation of the binary method and the Newton Iteration Method for the square root code in Python programming. I hope it will be helpful to you. If you are interested, you can continue to refer to other related topics on this site. If you have any shortcomings, please leave a message.