""" regressione funzione potenza 'pagine' n 19 pag 114 Impedovo la funzione cercata e' y=a*x^b , si passa ai logaritmi""" from graftarta2 import Graf from graphics import * import math # metri X=[100,200,400,800,1500,5000,10000,42195] # primati in s Y=[9.77,19.32,43.18,101.11,206.00,757.35,1577.53,7440.55] def media(Lista): """ media, varianza dei valori in Lista, sqm """ somma = 0 sommaqua = 0 n = len(Lista) for k in Lista: somma = somma+k sommaqua = sommaqua+k*k m = float(somma)/n varian = float(sommaqua)/n-m*m sqm=varian**0.5 #print 'media ',m, ' varianza ', varian,' sqm ', sqm return m, varian, sqm def covarianza(X,Y): prod=[] for i in range(len(X)): prod.append(X[i]*Y[i]) mediaX=media(X) mediaY=media(Y) mediaXY=media(prod) return mediaXY[0]-mediaX[0]*mediaY[0] logX=[] for i in X: logX.append(math.log10(i)) logY=[] for i in Y: logY.append(math.log10(i)) print logX, logY medX, varX, sqmX=media(logX) medY, varY, sqmY=media(logY) cov=covarianza(logX,logY) m=cov/varX q=medY-m*medX print 'm ', m print 'q ', q #print m[0] gr=Graf("regressione con funzione potenza",600,400) gr.coordinate(-1,-0.5,5,4.5,True) for i in range(len(logX)): Point(logX[i],logY[i]).draw(gr) def f(x): return m*x+q gr.colorePenna("red") gr.grafico(f,2,4.6253,0.02) a=math.pow(10,q) b=abs(m) b=1.104 print a, b gr1=Graf("regressione con funzione potenza II",600,400) gr1.coordinate(-5000,-1000,45000,9000,True) for i in range(len(X)): Point(X[i],Y[i]).draw(gr1) def f(x): return a*(x**b) gr1.colorePenna("red") gr1.grafico(f,0,43000,100) print f(42195) print f(42195/2.0)