Relazione di ricorrenza: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
+fonti da en
mNessun oggetto della modifica
Riga 1:
In [[matematica]], una '''relazione di ricorrenza''', chiamata anche '''equazione di ricorrenza''', è un'equazione che, nei casi più semplici, riguarda i componenti di una [[successione (matematica)|successione]] la quale stabilisce un legame tra alcuni componenti che occupano posizioni generiche ma successive, cioè presenta una forma del tipo:
 
:<math>f(x_n,x_{n+1},\dots,x_{n+k})\,=\,0</math>
 
Il numero <math>\,k</math> viene detto ''ordine della relazione''.
 
Vi sono anche relazioni di ricorrenza interessanti e utili che riguardano più successioni, matrici infinite e successioni con tre o più indici;. In genere le relazioni di ricorrenza sono accompagnate da condizioni iniziali tali da rendere possibile, almeno in questolinea articolodi peròprincipio, nonla levalutazione dei componenti della trattiamosuccessione.
 
In genere le relazioni di ricorrenza sono accompagnate da condizioni iniziali tali da rendere possibile, almeno in linea di principio, la valutazione dei componenti della successione.
 
== Primi esempi ==
Line 39 ⟶ 37:
:<math>c_nx_n + c_{n+1}x_{n+1}+ ... c_{n+k}x_{n+k} + c_0 \,=\, 0</math>
 
con i coefficienti <math>\,c_m</math> costanti, non dipendenti dagli <math>\,x_n</math>. Si parla di '''relazione di ricorrenza lineare omogenea''' nel caso sia <math> c_0 \,=\,0</math>. Le relazioni di ricorrenza lineari come le precedenti devono essere accompagnate da ''<math>k''</math> condizioni iniziali; infatti, se si assegnano i primi ''<math>k''</math> termini, seguendo qualsivoglia criterio, la stessa ricorrenza riscritta come assegnazione di un valore a <math>\,x_{n+k}</math> implica la determinazione univoca dei successivi termini della successione.
 
Le relazioni di ricorrenza lineari possono essere risolte con procedimenti sistematici, spesso utilizzando le [[funzione generatrice|funzioni generatrici]] (ovvero le [[serie formale di potenze|serie formali di potenze]]), oppure osservando che <math>\,r^n</math> è una soluzione per particolari valori di ''<math>r''</math>.
 
Per relazioni di ricorrenza della forma:
Line 55 ⟶ 53:
:<math> r^2\,=\,Ar+B \quad\mathrm{ovvero}\quad r^2-Ar-B\,=\,0</math>
 
Questache viene chiamata '''equazione caratteristica della relazione di ricorrenza'''. Essa fornisce per ''<math>r''</math> due radici <math>\, \lambda_1, \lambda_2 </math>. Se tali radici sono distinte abbiamosi ha la soluzione:
 
:<math>x_n = C\lambda_1^n+D\lambda_2^n </math>
 
Se invece coincidono, cioè se <math>\,A^2+4B=0</math>, abbiamosi ha:
 
:<math>x_n = C\lambda^n+Dn\lambda^n </math>
 
dove ''<math>C''</math> e ''<math>D''</math> sono costanti arbitrarie.
 
Per un'equazione della forma <math>\,x_n = Ax_{n-1}+B</math> nel caso particolare relativo a <math>\,n=2</math> si ottiene <math>\,r^2=Ar+B</math> come sopra. Le costanti <math>C</math> e <math>D</math> possono essere ricavate da "condizioni al contorno" che tipicamente sono date nella forma:
 
:<math>x_0\,=\,a ~,~~ x_1\,=\,b</math>
 
Per un'equazione della forma <math>\,x_n = Ax_{n-1}+B</math> nel caso particolare relativo a <math>\,n=2</math> si ottiene <math>\,r^2=Ar+B</math> come sopra. Le costanti ''C'' e ''D'' possono essere ricavate da "condizioni al contorno" che tipicamente sono date nella forma :<math>x_0\,=\,a ~,~~ x_1\,=\,b</math>. Si ottengono differenti soluzioni in dipendenza dalla natura delle radici dell'equazione caratteristica.
 
Se la relazione di ricorrenza non è omogenea, si può trovare una soluzione particolare con il [[metodo dei coefficienti indeterminati]] e la soluzione è la somma della soluzione della equazione di ricorrenza omogenea e della soluzione particolare. È interessante notare che il metodo per risolvere le [[equazioni differenziali lineari]] è simile a quello ora illustrato (il "tentativo intelligente" per le equazioni differenziali lineari è <math>\,e^x</math>). Naturalmente questa non è una mera coincidenza. Se si considera la [[serie di Taylor]] della soluzione di un'equazione differenziale lineare:
Line 71 ⟶ 73:
:<math>\sum_{n=0}^{\infin} \frac{f^{(n)}(a)}{n!} (x-a)^{n}</math>
 
si osserva che i coefficienti della serie sono dati dalla ''n''-esima derivata della <math>\,f(x)</math> valutata al punto ''<math>a''</math>. Dalla equazione differenziale si ricava un'equazione alle differenze lineare che collega questi coefficienti. Questa equivalenza può essere utilizzata per risolvere rapidamente la relazione di ricorrenza per i coefficienti nella soluzione mediante serie di potenze di un'equazione differenziale lineare.
 
=== Esempio della successioneSuccessione di Fibonacci ===
Dalla definizione, posto <math>\Phi := {1+\sqrt{5} \over 2}</math> per la [[sezione aurea]], si deduce l'espressione:
 
Line 82 ⟶ 84:
Molti classici [[algoritmo|algoritmi]] possono essere descritti tramite procedure ricorsive. Di conseguenza l'analisi dei relativi tempi di calcolo è ridotta alla soluzione di una o più equazioni di ricorrenza nelle quali si esprime il termine n-esimo di una sequenza in funzione dei precedenti.
 
Se si vuole analizzare la complessità di un algoritmo mediante un insieme di procedure P1,P2,P3,...Pm che si richiamano tra di loro si sfrutta la funzione T<submath>iT_i(n)</submath>(n) che rappresenta il tempo di calcolo impiegato dall'i-ma procedura su dati di dimensione n. Se la procedura richiama sé stessa diminuendo l'ordine dei dati la si può descrivere come T<sub>i</submath>T_i(k)</math>, dove <math>k</math> è un valore minore di <math>n</math>.
 
Analizzando una sola procedura che richiama sé stessa si può impostare la seguente relazione di ricorrenza:
Line 88 ⟶ 90:
:<math>T(n)\leq f_n(T(n-1),\dotsT(2),T(1),T(0))</math>
 
In questo modo si fissa che con numero 0 di input si ha una sola funzione <math>T(n)</math> che la soddisfa. L'analisi di un algoritmo ricorsivo prevede quindi due fasi:
 
* Deduzione di relazioni di ricorrenza contenenti come incognita la funzione <math>T(n)</math> da stimare
* Soluzione delle relazioni di ricorsività stesse.
 
PrendiamoSi prenda come esempio il semplice codice, scritto in [[linguaggio C]] per semplicità:
 
int B(int m) {
Line 112 ⟶ 114:
Questo codice prende un numero m ed effettua un ciclo da 0 a m incrementando il valore di s a A(i), dove A(i) ritorna 0 nel caso in cui è 0, oppure torna il valore di i + A(i-1) (essenzialmente effettua una ricorrenza su i).
 
IndicandoIndicandolo con <math>T_B(n)</math>, e <math>T_A(n)</math>, il tempo di calcolo di <math>B,</math> e <math>A</math> vale:
 
:<math> T_B(n) = c_1 + \sum_{i=0}^n (c_2 + T_A(i)) </math>
Line 118 ⟶ 120:
:<math> T_A(n) = d_2 T_A(n-1) \, n \,>\, 0 \, T_A(0) =d_1 </math>
 
A queste successioni abbiamosi associatoè associata una [[funzione generatrice]]. Generalizzando:
 
:<math>S = {a_n} = a_0,a_1,a_2, \dots a_n </math>