Advertisement
Ridwanul_Haque

Curve Fitting with Python

Jul 25th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.33 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3.  
  4. file = open("data.txt","r")
  5. X=[]
  6. Y=[]
  7. n=0
  8. solve=[]
  9. for line in file:
  10.     n  = n+1
  11.     line = line.rstrip().split()
  12.     X.append(float(line[0]))
  13.     Y.append(float(line[1]))
  14. plt.scatter(X,Y,s=2,c="cyan")
  15. plt.grid("true")
  16.  
  17. y_avg=sum(Y)/n
  18. sum_x = sum(X)
  19. sum_y = sum(Y)
  20. sum_xx = sum([x*x for x in X])
  21. sum_xxx = sum([x*x*x for x in X])
  22. sum_xxxx = sum([x*x*x*x for x in X])
  23. sum_xxxxx = sum([x*x*x*x*x for x in X])
  24. sum_xxxxxx = sum([x*x*x*x*x*x for x in X])
  25. sum_xy = sum([x*y for x,y in zip(X,Y)])
  26. sum_xxy = sum([x*x*y for x,y in zip(X,Y)])
  27. sum_xxxy = sum([x*x*x*y for x,y in zip(X,Y)])
  28. sum_xxxxy = sum([x*x*x*x*y for x,y in zip(X,Y)])
  29. st = sum([(y-y_avg)**2 for y in Y])
  30.  
  31.  
  32. def FOC():
  33.     A = [[n,sum_x],[sum_x,sum_xx]]
  34.     B = [[sum_y],[sum_xy]]
  35.     solve = np.linalg.solve(A,B)
  36.     Y1 = [float(solve[0]+x*solve[1]) for x in X]
  37.     sr1 = sum([(y-y1)**2 for y,y1 in zip(Y,Y1)])
  38.     r1 = ((st-sr1)/st)**(1/2)
  39.     print("First order curve:\na0=",solve[0],", a1=",solve[1])
  40.     print("Correlation coefficient of first order curve = ",r1)
  41.     print("St=",st)
  42.     print("Sr=",sr1)
  43.     plt.plot(X,Y1)
  44. def SOC():
  45.     A = [[n,sum_x,sum_xx],[sum_x,sum_xx,sum_xxx],[sum_xx,sum_xxx,sum_xxxx]]
  46.     B = [[sum_y],[sum_xy],[sum_xxy]]
  47.     solve = np.linalg.solve(A,B)
  48.     Y2 = [float(solve[0]+x*solve[1]+x*x*solve[2]) for x in X]
  49.     sr2 = sum([(y-y2)**2 for y,y2 in zip(Y,Y2)])
  50.     r2 = ((st-sr2)/st)**(1/2)
  51.     print("Second order curve:\na0=",solve[0],", a1=",solve[1],", a2=",solve[2])
  52.     print("Correlation coefficient of second order curve = ",r2)
  53.     print("St=",st)
  54.     print("Sr=",sr2)
  55.     plt.plot(X,Y2)
  56. def TOC():
  57.     A = [[n,sum_x,sum_xx,sum_xxx],[sum_x,sum_xx,sum_xxx,sum_xxxx],[sum_xx,sum_xxx,sum_xxxx,sum_xxxxx],[sum_xxx,sum_xxxx,sum_xxxxx,sum_xxxxxx]]
  58.     B = [[sum_y],[sum_xy],[sum_xxy],[sum_xxxy]]
  59.     solve = np.linalg.solve(A,B)
  60.     Y3 = [float(solve[0]+x*solve[1]+x*x*solve[2]+x*x*x*solve[3]) for x in X]
  61.     sr3 = sum([(y-y3)**2 for y,y3 in zip(Y,Y3)])
  62.     r3 = ((st-sr3)/st)**(1/2)
  63.     print((st-sr3)/st)
  64.     print("Third order curve:\na0=",solve[0],", a1=",solve[1],", a2=",solve[2],", a3=",solve[3])
  65.     print("Correlation coefficient of third order curve = ",r3)
  66.     print("St=",st)
  67.     print("Sr=",sr3)
  68.     plt.plot(X,Y3)
  69.    
  70. FOC()
  71. SOC()
  72. TOC()
  73. plt.show
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement