Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Python
Posted by: psichic
Added: Nov 29, 2020 6:59 PM
Modified: Nov 29, 2020 7:02 PM
Views: 7
  1. '''
  2. Calculates the Richardson extrapolation of f(x) at x0
  3. '''
  4. from math import exp
  5. def f(x): return x*exp(x)
  6. h=0.4
  7. x0=2.0
  8. iMax=4
  9. # No change required after this line
  10. ###################################################################
  11. def dfunc(f,x,i,h):
  12.         if i==1:
  13.                 out=( f(x+h)-f(x-h) ) / (2*h)
  14.         else:
  15.                 out = dfunc(f,x,i-1,h)  -  ( ( dfunc(f,x,i-1,2*h) - dfunc(f,x,i-1,h) ) / ( 2**(2*(i-1)) - 1.0 ) )
  16.         return out
  17. print '{0:<3s} {1:^9s} {2:^9s} {3:^9s} {4:^9s}'.format('h','D1','D2','D3','D4')
  18. for i in range(1,iMax+1):
  19.         #print 'h:',format(h,'4.2f'),
  20.         print '{0:3.2f}'.format(h),
  21.         for j in range(1,i+1):
  22.                 p=dfunc(f,x0,j,h)
  23.                 #print 'D'+str(j)+'= ', format(p,'9.6f'),
  24.                 #print '{h:3.2f} D{order!s:s}={approx:9.6f}'.format(h=h,order=j,approx=p),
  25.                 print '{approx:9.6f}'.format(h=h,approx=p),
  26.         print  
  27.         h=h/2.0
  28.  
  29. ####################################################################   
  30. # ~ See, e.g Loveday, Pg 5, Art. 1.1
  31. #~ Output:
  32. #~ h      D1        D2        D3        D4
  33. #~ 0.40 23.163464
  34. #~ 0.20 22.414161 22.164393
  35. #~ 0.10 22.228787 22.166996 22.167169
  36. #~ 0.05 22.182565 22.167158 22.167168 22.167168