Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy.optimize import curve_fit
- import matplotlib.pyplot as plt
- import csv
- # Deklaracja funkcji gaussa
- def gauss(x, *p):
- a, b, c, d = p
- y = a*np.exp(-np.power((x - b), 2.)/(2. * c**2.)) + d
- return y
- # Wczytanie danych z pliku godz.ASCII - plik musi być w tym samym folderze co skrypt!
- x_list = []
- y_list = []
- with open('godz.ASCII', 'r') as csvf:
- reader = csv.reader(csvf, delimiter='\t')
- for r in reader:
- if len(r) == 2:
- x_list.append(float(r[0]))
- y_list.append(float(r[1]))
- #Konwersja do tablicy numpy
- x = np.array(x_list)
- y = np.array(y_list)
- n = len(x) #the number of data
- #Centrujemy dane wokol x = 0
- offset = (sum(x)/n)
- x -= offset
- #Okreslamy parametry poczatkowe algorytmu dopasowania
- mean = sum(x*y)/n
- sigma = sum(y*(x-mean)**2)/n
- p_0 = [max(y), mean, sigma, 0]
- #Dopasowanie krzywej
- fit, covariance = curve_fit(gauss, x, y, p0=p_0 )
- #Przesuwamy dopasowana funkcje z powrotem na miejsce
- fit[1]+=offset
- #Przesuwamy z powrotem nasze dane wejciowe na miejsce
- x = x+offset
- #Generujemy Y zgodnie z naszą oszacowaną funkcją
- y_fit = gauss(x, *fit)
- #Rysujemy wszystko:
- fig, ax = plt.subplots()
- ax.plot(x, y, color = 'blue')
- ax.plot(x, y_fit, color = 'red')
- ax.set_xlabel(r'$x$')
- ax.set_ylabel(r'$f(x)$')
- ax.set_title('Dopasowanie krzywej gaussa.')
- print("Dopasowana funkcja: f(x) = {}*np.exp(-np.power((x - {}), 2.)/(2. * {}**2.)) + {}".format(*fit))
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement