Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.99 KB | None | 0 0
  1. import math
  2. import numpy as np
  3. def A(x):
  4. return ((2019*x**5)-(2018*x**4)+(2017*x**3))
  5. def B(x):
  6. return (1/(1+25*x**2))
  7. def C(x):
  8. return (math.sin((9*x)+1)/x)
  9.  
  10. def Romberg(f,a,b,n):
  11. sum=0
  12. h = b - a
  13. R = np.zeros((n+1 , n+1 ))
  14. R[0][0] = 0.5 * h * (f(a) + f(b))
  15.  
  16. for i in range(1,n+1):
  17. h *= 0.5
  18. sum = 0
  19. for k in range(1,2**i,2):
  20. sum += f(a + k * h)
  21.  
  22. R[i][0] = 0.5 * R[i-1][0] + sum * h
  23.  
  24.  
  25. for j in range(1,i+1):
  26. R[i][j] = R[i][j-1] + (R[i][j-1] - R[i-1][j-1]) / ((4**j)-1)
  27.  
  28.  
  29. return R
  30.  
  31. def prettyprint(R):
  32. float_formatter = lambda x: "%.6f" % x
  33. np.set_printoptions(formatter={'float_kind':float_formatter})
  34. for i, row in enumerate(R):
  35. print("%3d" % (i + 1), row[:i + 1])
  36. print("Wynik to %.18f\n" % R[-1][-1])
  37.  
  38. n = 15
  39.  
  40. prettyprint(Romberg(A, -1.0, 2.0, 15))
  41.  
  42.  
  43. prettyprint(Romberg(B, -1.0, 1.0, 15))
  44.  
  45.  
  46. prettyprint(Romberg(C, 1, 2 * math.pi, 15))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement