本文实例讲述了Python查找函数f(x)=0根的解决方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
''' root = ridder(f,a,b,tol=1.0e-9).
Finds a root of f(x) = 0 with Ridder's method.
The root must be bracketed in (a,b).
'''
import error
from math import sqrt
def ridder(f,a,b,tol = 1.0e - 9 ):
fa = f(a)
if fa = = 0.0 : return a
fb = f(b)
if fb = = 0.0 : return b
if fa * fb > 0.0 : error.err( 'Root is not bracketed' )
for i in range ( 30 ):
# Compute the improved root x from Ridder's formula
c = 0.5 * (a + b); fc = f(c)
s = sqrt(fc * * 2 - fa * fb)
if s = = 0.0 : return None
dx = (c - a) * fc / s
if (fa - fb) < 0.0 : dx = - dx
x = c + dx; fx = f(x)
# Test for convergence
if i > 0 :
if abs (x - xOld) < tol * max ( abs (x), 1.0 ): return x
xOld = x
# Re-bracket the root as tightly as possible
if fc * fx > 0.0 :
if fa * fx < 0.0 : b = x; fb = fx
else : a = x; fa = fx
else :
a = c; b = x; fa = fc; fb = fx
return None
print 'Too many iterations'
|
希望本文所述对大家的Python程序设计有所帮助。