Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy import integrate
- T = 1.75418438
- C = 1.03439984
- g = 9.8
- exactValue = (T - 1e-7) * np.sqrt(2 * C / g)
- print(exactValue)
- def Ft(t):
- return (1 / np.sqrt(g)) * np.sqrt((1 + ((np.sin(2 * t) ** 2) / (1 - np.cos(2 * t)) ** 2))/(C * (1 - np.cos(2 * t)))) \
- * C * (1 - np.cos(2 * t))
- def compositeSimpson(a, b, n):
- # n - number of dots
- # n - 1 - number of intervals. Must be even
- # nodes sum via odd and even indexes
- if (n - 1) % 2 != 0: # if number of intervals isn't even
- n = n + 1
- dotsNumber = n
- intervalsNumber = n - 1
- h = (b - a) / intervalsNumber
- nodesT = []
- for i in range(1, dotsNumber + 1):
- nodesT.append(a + (i - 1) * h)
- oddSum = evenSum = 0
- for index, item in enumerate(nodesT):
- if index == 0 or index == n - 1:
- continue
- if index % 2 != 0: # for odd indexes
- # print(index, item)
- evenSum += Ft(item)
- else: # for even indexes
- oddSum += Ft(item)
- oddSum *= 2
- evenSum *= 4
- return (Ft(nodesT[0]) + oddSum + evenSum + Ft(nodesT[n - 1])) * h / 3
- def compositeTrapezoid(a, b, n):
- # n - number of dots
- # n - 1 - number of intervals.
- dotsNumber = n
- intervalsNumber = n - 1
- h = (b - a) / intervalsNumber
- nodesT = []
- sum = 0
- for i in range(1, dotsNumber + 1):
- nodesT.append(a + (i - 1) * h)
- # print(len(nodesT))
- for i in range(1, n - 1):
- sum += Ft(nodesT[i])
- sum *= 2
- return (Ft(nodesT[0]) + sum + Ft(nodesT[n - 1])) * h / 2
- def calculateInaccuracy(a, b):
- # n - 1 - number of intervals
- # n - number of dots
- inaccuracyValuesSimpson = []
- inaccuracyValuesTrapezoid = []
- hValues = []
- for n in range(3, 10000, 100):
- inaccuracyValuesSimpson.append(np.abs(exactValue - compositeSimpson(a, b, n)))
- inaccuracyValuesTrapezoid.append(np.abs(exactValue - compositeTrapezoid(a, b, n)))
- hValues.append((b - a) / (n - 1))
- plt.loglog(hValues, inaccuracyValuesSimpson, 'o', color='black')
- plt.loglog(hValues, inaccuracyValuesTrapezoid, 'o', color='red')
- plt.title('Dependence of the absolute error of numerical integration on the integration step', color='grey')
- plt.legend(['Simpson method', 'Trapezoid method'], loc=0)
- plt.xlabel('Integration step', color='grey')
- plt.ylabel('Absolute inaccuracy', color='grey')
- plt.grid(True)
- plt.show()
Add Comment
Please, Sign In to add comment