این برنامه برای الگوریتم نیوتن-رافسون، برای بدست آوردن ریشهی تابع
f(x) = 3**x - 1.39
در بازهی
(.5,3)
و دقت محاسبهی جواب
ep = 10**(-4)
و معیار توقف
abs( c[n] - c[n-1] ) > ep or abs( ( c[n] - c[n-1] ) / c[n] ) > ep or abs( f( c[n] ) > ep
نوشته شده است.
همچنین برای مشتقگیری از ماژول Mpmath استفاده شده است.
from mpmath import *
# mpmath Option
mp.dps = 10; mp.pretty = True
#------ Input ----------------
def f(x):
    return 3**x-1.39
d = [0.5, 3.]
ep = 10**(-4)
#------ calc -----------------
c = [0 for i in range(20)]
n = 0
a=d[0];b=d[1]
if f(a)*diff(f,a,2)>0:
    c[0]=a
else:
    c[0]=b
    
n+=1
c[n]=c[n-1]-f(c[n-1])/diff(f,c[n-1])
while(not(abs( c[n] - c[n-1] ) < ep or
          abs( (c[n] - c[n-1] )/c[n])< ep or
          abs( f(c[n])) < ep )):
    n+=1
    c[n]=c[n-1]-f(c[n-1])/diff(f,c[n-1])
print("n\tc[n]\t\tf(c[n])")
[print("{:}\t{:<{width}}\t{:<{width}}".format(i,c[i],f(c[i]),width=15))\
 for i in range(n+1)]
nst = len(str(round(1/mpf(ep))))-1
#------ Print -----------------
print('\nResult ',nstr(c[n],nst))
خروجی
n c[n] f(c[n]) 0 0.5 0.3420508075688773 1 0.3202431123 0.0316568945 2 0.2999742645 0.0003498599539 3 0.2997452169 4.401896159e-8 Result 0.2997
بررسی روی نمودار
در اینجا چون در خط چهارم mpmath.dps=10 میباشد. دقت انجام محاسبات در مشتقگیری تا ۱۰ رقم بعد از اعشار خواهد بود و محدودیتی در این عدد وجود ندارد. اما دقت جواب نهایی ما به خاطر خط دوازدهم تا (۴-)^۱۰ خواهد بود.
برای مثال:
برنامهی زیر عدد نپر تا ۱۰۰۰۰۰۰ رقم اعشار را در فایل چاپ میکند.
from mpmath import *
f=open("exp.txt",'w')
mp.dps=1000000
f.write(str(exp(1)))
f.close()
و یا کد زیر
>>> from mpmath import *
>>> mp.dps = 50
>>> print mpf(2) ** mpf('0.5')
1.4142135623730950488016887242096980785696718753769
>>> print 2*pi
6.2831853071795864769252867665590057683943387987502

 
 
 
 
 
 
 

TypeError: unsupported format string passed to mpf.__format__