Seguendo un approccio incrementale allora prima scriviamo un programma che legga i dati, li immagazzini nelle nostre strutture dati (liste) e poi stampi il contenuto di ciò che ha letto. In questo modo, ci curiamo che la parte di input/output sia corretta e non la toccheremo più. In secondo luogo, possiamo notare che le equazioni precedenti si possono scomporre in
if __name__ == '__main__':
numdata=input('number of data = ')
i = 0
x=[]
y=[]
while i < numdata :
# input legge anche una lista di valori separati da ,
d1,d2=input('give me the x,y value = ')
x.append(d1)
y.append(d2)
i =i+1
N=numdata
A = 0.0
B = 0.0
'''
# equations
D=N*sumXX - (sumX)**2.0
A=(sumXX*sumY-sumX*sumXY)/D
B=(N*sumXY-sumX*sumY)/D
'''
print "data",x,y
print "B x + A => B =",B, "A =", A
A questo punto possiamo fare una importante considerazione. Siccome
abbiamo bisogno della somma degli elemeti della lista
def sum(v):
''' sum(v) -> sum over the element v[i] '''
s=0
for e in v:
s = s + e
return float(s)
e nel programma principale aggiungiamo le istruzioni
sumX=sum(x)
sumY=sum(y)
print 'sumX=',sumX,'sumY='sumY # to test the function
Analogamente al caso precedente, possiamo notare che anche per
sumXX e sumXY è necessaria una sola funzione, per
esempio
def sum2(v1,v2):
''' sum2(v1,v2) -> sum over the v1[i]*v2[i]
'''
d=len(v1)
s=0
for i in range(d):
s = s + v1[i]*v2[i]
return float(s)
di cui possiamo verificare il comportamento, inserendo nel programma
le seguenti istruzioni
sumXX=sum2(x,x) sumXY=sum2(x,y) print 'sumXX=',sumXX,'sumXY='sumXY # to test the functionUna volta verificato che i singoli pezzi del nostro programma singolarmente fanno il loro dovere, allora possiamo vedere se le singole parti funzionano bene assieme, per cui il nostro programma finale sarà
def sum(v):
''' sum(v) -> sum over the element v[i] '''
s=0
for e in v:
s = s + e
return float(s)
def sum2(v1,v2):
''' sum2(v1,v2) -> sum over the v1[i]*v2[i]
'''
d=len(v1)
s=0
for i in range(d):
s = s + v1[i]*v2[i]
return float(s)
if __name__ == '__main__':
numdata=input('number of data = ')
i = 0
x=[]
y=[]
while i < numdata :
d1,d2=input('give me the x,y value = ')
x.append(d1)
y.append(d2)
i =i+1
N=numdata
sumX=sum(x)
sumY=sum(y)
sumXX=sum2(x,x)
sumXY=sum2(x,y)
# equations
D=N*sumXX - (sumX)**2.0
A=(sumXX*sumY-sumX*sumXY)/D
B=(N*sumXY-sumX*sumY)/D
print "data",x,y
print "B x + A => B =",B, "A =", A