Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import numpy as np
- import scipy as sp
- import math
- import matplotlib.pyplot as plt
- def wartosc(f,x=0):
- return eval(f,{'x':x})
- print("Funkcja y=a*x+b")
- a=int(input("Podaj a="))
- b=int(input("Podaj b="))
- funkcja=str(a)+"*x+"+str(b)
- print("Twoja funkcja to y=",funkcja," + wartosc losowa")
- xmin=int(input("Podaj dolny zakres przedzialu "))
- xmax=int(input("Podaj gorny zakres przedzialu "))
- krok=float(input("Podaj krok "))
- x=np.arange(xmin,xmax,krok)
- y=x+0.0
- for i in range(0,len(x)):
- y[i]=wartosc(funkcja,x[i])+sp.rand()
- #wyznaczam wspolczynniki a i b funkcji regresji liniowej
- #metodą najmniejszych kwadaratów
- #wyznaczamy x i y srednie
- x_avg = np.average(x)
- y_avg = np.average(y)
- #obliczamy sume roznic elementow od sredniej
- sumOfXYDifferences = 0.0
- for i in range (0,len(x)):
- sumOfXYDifferences += ((x[i]-x_avg)*(y[i]-y_avg))
- #obliczamy sume kwadratow roznic elementow x
- sumOfXSquares = 0.0
- for i in range(0,len(x)):
- sumOfXSquares += ((x[i]-x_avg)**2)
- #wspolczynnik kierunkowy a w tym wypadku wynosi:
- a = sumOfXYDifferences / sumOfXSquares
- #znając a wyznaczenie b jest juz proste dzieki przekształceniu wzoru:
- b = y_avg - (a*x_avg)
- #pozostalo juz tylko wypelnic tabele danymi regresji i dodac
- #je do wykresu:
- regresja = str(a)+"*x+"+str(b)
- y_reg=x+0.0
- for i in range(0,len(x)):
- y_reg[i] = wartosc(regresja,x[i])
- print("dla podanej funkcji, wzor funkcji regresji liniowej to f(x)=",regresja,"\n")
- #obliczamy odchylenie standardowe Sx(odrazu obliczamy Sy):
- Sx = 0.0
- kwadrat_odchylen_x = 0.0
- kwadrat_odchylen_y = 0.0
- for i in range(0,len(x)):
- kwadrat_odchylen_x += ((x[i] - x_avg)**2)
- kwadrat_odchylen_y += ((y[i] - y_avg)**2)
- Sx = math.sqrt(kwadrat_odchylen_x/len(x))
- Sy = math.sqrt(kwadrat_odchylen_y/len(x))
- #obliczamy kowariancję X i Y:
- cov = 0.0
- for i in range(0,len(x)):
- cov += ((x[i] - x_avg)*(y[i] - y_avg))
- cov = cov/len(x)
- #obliczamy wspolczynnik korelacji r - Pearsona:
- rxy = cov/(Sx*Sy)
- print("Dla podanego zbioru, odchylenie standardowe Sx dla wartosci objasniajacej wynosi ",Sx,"\n")
- print("Dla podanego zbioru, odchylenie standardowe Sy dla wartosci objasnianej wynosi ",Sy,"\n")
- print("Kowariancja cov(x,y) tych zmiennych wynosi ",cov,"\n")
- print("Wspolczynnik korelacji r - Pearsona dla badanych zmiennych wynosi ",rxy,"\n")
- plt.plot(x,y,"ro",ms=5)
- plt.plot(x,y_reg,"b-",ms=3)
- plt.title("Funkcja y="+funkcja+" oraz funkcja jej regresji")
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement