next up previous contents
Next: Valore medio e deviazione Up: Liste Previous: Liste   Indice

$\sum$ e $\prod$ ovvero sommatorie e produttorie

A questo punto siamo in grado di scrivere facilmente un frammento di codice python che implementi equazioni contenenti le notazioni di sommatoria o produttoria come quelle che che di solito si trovano nei libri di testo. Per esempio

\begin{eqnarray*}
f=\sum_{i=s}^{S}\sum_{j=p}^{P}a(i,j) \\
\\
oppure \\
\\
f=\sum_{i=s}^{S}\prod_{j=p}^{P}a(i,j)
\end{eqnarray*}



I matematici, essendo i molto pigri (forse secondi solo agli informatici), hanno introdotto dei modi comodi e compatti per scrivere più comodamente sequenze di somme ($\sum$) e di prodotti ($\prod$), tali simboli perciò rappresentano soltanto un modo convenientemente compatto di scrivere notazioni matematiche. In altri termini

\begin{eqnarray*}
v=\sum_{i=-2}^{4} q(i) &=& q(-2)+q(-1)+q(0)+q(1)+q(2)+q(3)+q(4)\\
v=\prod_{j=2}^{5} q(j) &=& q(2) \cdot q(3)\cdot q(4)\cdot q(5)
\end{eqnarray*}



Sia la sommatoria che la produttoria, consistono in un numero definito di passi (gli estremi inferiore e superiore), inoltre abbiamo che sia la sommatoria che la produttoria di $n$ elementi si possono scomporre nella sommatoria (o produttoria) dei primi $n-1$ sommata (moltiplicata) per l'elemento $n$. In altre parole

\begin{eqnarray*}
f=\sum_{i=s}^{S}a(i)= \sum_{i=s}^{S-1}a(i) + a(S) \\
f=\prod_{j=p}^{P}a(j)= \prod_{j=p}^{P-1}a(j)\cdot a(P)
\end{eqnarray*}



il che ci porta a comprendere che possiamo calcolare le sommatorie e le produttoria utilizzando i cicli, in quanto la sommatoria (produttoria) finale saranno costruite iterativamente a partire dal primo elemento, poi la somma (prodotto) dei primi due, dei primi tre, ecc. fino all'esaurimento di tutti gli elementi. Se consideriamo un caso esplicito, per esempio
$\displaystyle v=\sum_{i=-3}^{5} q(i)$     (2.1)
$\displaystyle v=\prod_{j=2}^{6} q(j)$     (2.2)

in cui per dare un valore alla nostra funzione poniamo $q(i)=i^2$, le notazioni precedenti si trasformano nel codice seguente
# 
def q(i):
   return i*i

# the sum
s=0 # elemento neutro della somma
for i in range(-3,6): # 6 =5+1
    s = s + q(i) # sum

# prodotto
p=1 # elemento neutro della moltiplicazione
for i in range(2,7): # 7 6+1
    p = p * q(i) # multily

print "sum ",s, "product ",p
La regola è che le somme e i prodotti delle equazioni vengono sostituiti nei programmi dai cicli. Un caso un po' più complesso è
$\displaystyle v=\sum_{i=-3}^{5}\prod_{j=1}^{3} f(i,j)$     (2.3)

In questo caso avremo due cicli annidati (uno all'interno dell'altro) come possiamo vedere dalla seguente scomposizione

\begin{eqnarray*}
p(i)=\prod_{j=1}^{3} f(i,j) \\
v=\sum_{i=-3}^{5}p(i)
\end{eqnarray*}



Il che significa che per ogni dato valore di $i$, noi calcoliamo il prodotto per tutti i valori di $j$. Il valore finale sarà dato dalla somma di tutti i prodotti. Se per esempio poniamo $f(i,j)=i+j$ allora abbiamo il seguente codice python
# 
def f(i,j):
   return i+j

s=0 # somma esterna
for i in range(-3,6): # primo ciclo
    p=1 # inizializziamo il prodotto
    for j in range(1,3): # cicplo per il prodotto
        p = p * f(i,j)
    s = s + p # sommiamo il prodotto per il caso i-mo

print "sumprod ", s


next up previous contents
Next: Valore medio e deviazione Up: Liste Previous: Liste   Indice
2004-11-02