Riferimenti circolari e iterazioni con Excel

Introduzione  Si premette che per la realizzazione dei suddetti esempi è stato utilizzato un foglio di calcolo Excel. Quando una formula fa riferimento direttamente o indirettamente alla propria cella, si verifica un riferimento circolare e il calcolo non viene eseguito. E’ possibile, tuttavia, consentire il funzionamento di un riferimento circolare attivando la casella di controllo Iterazioni. In questo caso il calcolo viene eseguito utilizzando i risultati dell’iterazione precedente. Si mostrerà come tale procedura sia utilissima per risolvere, con pochissime formule, molti calcoli iterativi: integrazioni di funzioni, calcolo radici di equazioni, calcolo equazioni differenziali, ecc..

Impostazione  Consentiamo, quindi, il funzionamento di un riferimento circolare.          1. Scegliere Opzioni dal menu Strumenti, quindi scegliere la scheda Calcolo.                2. Selezionare la casella di controllo Iterazioni;                                                                3. Impostare Numero massimo=1;                                                                                    4. Impostare il calcolo su Manuale.                                                                                      In tal modo: Tasto F9 calcola le formule di tutte le cartelle di lavoro; Tasto MAIUSC+F9 calcola solo le formule del foglio di lavoro attivo.

Con tale impostazione possiamo, scrivere adesso formule con riferimenti circolari. Ad esempio: ponendo la cella [A22] “= [A22]+1”, ad ogni F9 la cella [A22] aumenta di 1.

Alcune regole Creazione di variabili e di funzioni Per potere utilizzare l’iterazione è necessario che almeno una cella ad ogni iterazione vari il suo valore. Se, ad esempio, poniamo [A22] “=A22+A21”, con [A21] “=0,1” la [A22] ad ogni F9 si incrementa di 0,1 in questo modo abbiamo creato la variabile [A22] .Se scriviamo, allora, nella cella [A23] una formula contenente la variabile [A22] abbiamo reso la cella [A23] funzione della variabile [A22]. Iterando, infatti, n volte con F9 vengono calcolati n valore della funzione. Condizioni iniziali Con la formula [A22] “=A22+A21” la variabile [A22] ad ogni iterazione si incrementa di A21. Per resettare la variabile e potere ripartire da zero, si può utilizzare una cella “test” e scrivere la formula con la condizione: [A22] “= SE(A21;A22+1;0)” (che significa: se la cella A21=”VERO” (ovvero diversa da zero) allora A22=A22+1 (incremento), se invece A21=”FALSO” (ovvero uguale a zero) allora A22=0 (azzeramento). Per fare iniziare la variabile x (cella A21) con un valore xo deve essere utilizzata un’altra cella in cui deve porsi la formula: “=A22+xo” (vedi applicazione).

Posizione delle celle Bisogna tenere presente che nell’iterazione i calcoli non vengono eseguiti contemporaneamente in tutte le celle, ma iniziano dalla cella in alto a sinistra e finiscono con la cella in basso a destra. Pertanto la variabile deve essere posta prima della funzione. La funzione y(x), per il suddetto motivo, rimane indietro rispetto alla variabile x di un incremento dx. Si può tenere conto di ciò indicando in altra cella il valore effettivo della variabile “=x-dx” (tale cella non potrà essere utilizzata in altre celle per i calcoli).

Numero Iterazioni Se per il calcolo si pone: Numero massimo = n, ad ogni F9 il programma esegue n iterazioni. Si può, pertanto, utilizzare questa impostazione quando non è necessario conoscere i valori intermedi ma solo il valore finale del calcolo.

Applicazione Vediamo ora di applicare l’iterazione al metodo delle differenze finite per la risoluzione delle equazioni differenziali. Consideriamo l’Eq. Diff. : y’ = y, con la condizione iniziali y0 = 1. Per il calcolo utilizziamo il metodo delle linee spezzate di Eulero, per cui la y’(t) = y, viene calcolata passo passo: y1 = yo + y’o * dt ; y2 = y1 + y’1 * dt; … (con dt = 0.01). Per prima cosa, creiamo la cella “variabile”, ponendo [F21] = SE(A21=1;F21+0,01;0), in tal modo la cella ad ogni F9 si incrementa di 0.01.        poniamo inoltre:

  •  [E22] = SE(A21=1;E22+F22;0);
  •  [F22] = SE(A21=1;E23*0,01;0);
  • [E23] = 1+E22 cioè:
  • la [E22] = Σ(y’i * dt) inizia da 0 e ad ogni iterazione si incrementa di [F22];
  • la [F22] = y’i * dt calcola l’incrementino [E23]*0,01;
  • la [E23] = yi aggiunge il valore iniziale yo = 1 a Σ(y’i * dt).

All’iterazione ennesima, pertanto, viene calcolato il valore yn. Ponendo (dt=0,01) si ottiene y(1)= 2.705, mentre per dt=0,001 y(1)= 2.717 (il valore esatto è EXP(1) = 2.718…). (Una migliore approssimazione si ottiene se si applica la formula di RungeKutta). Per risolvere, quindi, una generica Equazione Differenziale x’= f(x,t) con qualsiasi condizione iniziale xo, si può porre:

  • [A2] = 0.001 = dt incremento
  • [A4] =SE(B2;A4+A2;dt)= t variabile (incrementata di dt)
  • [B2] = Falso (0) , Vero (1) (nome “res”) “Falso” per azzerare; “Vero” per iterare [C2] =1 = x0 = valore iniziale;
  • [B6] =A4-A2 = t-dt valore effettivo di t (ritardato di un dt);
  • [C4] = C5+C8*dt = somma l’incremento corrente C8*dt a tutti gli incrementi precedenti C5;
  • [C5] = SE(B2;C4;0) cioè: se B2=1(vero) C5=C4 ;
  • se B2=0(falso) C5=0 ;
  • [C6] = C2+C5 somma a tutti gli incrementi C5=Σ(xi*dt) il valore iniziale C2=x0; [C8] = C6 = x

In questa cella viene scritta l’ Eq. Diff. (nel nostro caso x’ =x ) Nell’iterazione la [C8]  rimane indietro rispetto a t di una iterazione dt, pertanto si fa partire il tempo t in anticipo di dt cioè: [A4] = t = SE(B2;A4+A2; dt) Si noti che, per il calcolo di una generica E.D., devono essere cambiate solo le celle [C2] e [C8]. Le rimanenti 7 celle costituiscono la “struttura” del programma. Utilizzando altre celle è possibile calcolare contemporaneamente altre Eq.Diff.

Nella figura

con le celle [C1:E8] si possono calcolare 3 E.D. (ovvero un sistema di 3 E.D.) del 1° ordine, mentre, con le celle [C10:E23] si possono calcolare 3 E.D. (ovvero un sistema di 3 E.D.) del 2° ordine. Nella colonna F sono state riportate le espressioni che devono essere scritte nelle celle di colonna E. Scritte le formule nelle celle in una colonna basterà trascinarle nelle altre 2 colonne per trascriverle.

Conclusione

Con tale procedimento:

  •  E’ facile creare “programmi” senza alcuna riga di programmazione;
  •  I “programmi” in genere sono costituiti da pochissime celle;
  • Ogni “programma” può essere clonato copiando il range di celle;
  • Utilizzando le diverse funzioni logiche del foglio elettronico è possibile inserire nel “programma” svariate condizioni di calcolo;
  • E’ possibile eseguire contemporaneamente diversi tipi di calcoli;
  • E’ possibile fare interagire più “programmi” utilizzando le funzioni logiche del foglio di calcolo;
  • Se, durante l’iterazione, i valori calcolati vengono riportati in una tabella, essi potranno essere rappresentati in un grafico a “dispersione (xy)”.

Sono rimasto meravigliato ed entusiasta per la semplicità e potenza di calcolo di tale procedimento: con poche cellette e senza alcuna riga di programmazione ho potuto calcolare integrali, radici di equazioni, equazioni differenziali, e risolvere contemporaneamente diverse equazioni o sistemi di equazioni differenziali !!!

Ritengo che le potenzialità di tale procedimento siano ancora poco conosciute e che molti altri aspetti devono essere studiati, sperimentati, e sviluppati. E’ molto gradita, pertanto, la partecipazione degli utenti interessati alla creazione di nuovi “programmi ” e allo sviluppo di tale procedimento di calcolo. Molti altri problemi, infatti, possono essere studiati con il metodo iterativo: equazioni dinamiche discrete, equazioni di La Place, … che spero di trattare in un prossimo articolo. Alcuni files con il suddetto procedimento sono scaricabili dal sito.

 

Riferimenti circolari e iterazioni con Excelultima modifica: 2018-10-17T19:54:30+02:00da programmiexcel
Reposta per primo quest’articolo