Algoritmi e dintorni Calcolo dei valori di un polinomio Prof. Ettore Limoli Algoritmo di Ruffini-Horner Sia dato un polinomio P(x) di grado n, ci proponiamo di determinare il valore che esso assume assegnato il valore di x. ๐(๐ฅ) = ๐ด0 ๐ฅ ๐ + ๐ด1 ๐ฅ ๐−1 + โฏ + ๐ด๐−1 ๐ฅ + ๐ด๐ Il problema si ha quando vogliamo automatizzare il calcolo senza voler stabilire a priori il valore di n. Osserviamo che si può scrivere: ๐(๐ฅ) = ๐ด0 ๐ฅ ๐ + ๐ด1 ๐ฅ ๐−1 + โฏ + ๐ด๐−1 ๐ฅ + ๐ด๐ = (๐ด0 ๐ฅ ๐−1 + ๐ด1 ๐ฅ ๐−2 + โฏ + ๐ด๐−1 ) ๐ฅ + ๐ด๐ = = ((๐ด0 ๐ฅ ๐−2 + ๐ด1 ๐ฅ ๐−3 + โฏ + ๐ด๐−2 ) ๐ฅ + ๐ด๐−1 ) ๐ฅ + ๐ด๐ = โฏ = = (โฏ (((๐ด0 ๐ฅ + ๐ด1 ) ๐ฅ + ๐ด2 ) ๐ฅ + ๐ด3 ) โฏ )๐ฅ + ๐ด๐ . Questo suggerisce di scrivere la seguente formula iterativa: P0 = A0 P1 = P0 x + A1 … Pn = Pn-1 x + An Questo ci consentirà di conseguire il risultato in n+1 passi senza calcolare potenze. Esempio Sia dato il polinomio di terzo grado (n = 3): ๐(๐ฅ) = 2 ๐ฅ 3 + ๐ฅ 2 − 2 ๐ฅ − 1 I coefficienti del polinomio sono: Indice 0 1 2 3 Coefficiente 2 1 -2 -1 I coefficienti di Horner sono dati da: P0 = 2 P1 = P0 x + 1 P2 = P1 x - 2 P3 = P2 x - 1 Assegnato il valore di x, Il valore del polinomio è: P(x) = P3. Seguiamo il calcolo di P(1,5), ossia per x = 1,5 tramite una calcolatrice con display a due righe, memoria e tasto Ans che restituisce l’ultimo valore calcolato. 1 Per introdurre in memoria il valore 1,5 come valore di x, eseguiamo la sequenza di tasti: 1.5 STO X Sul display appare: 1.5๏ฎX . Nota Con una calcolatrice del tipo CASIO fx-350 MS, il tasto STO , ossia il tasto che manda un valore in memoria, è in seconda funzione del tasto RCL che richiama un dato dalla memoria, quindi occorre premere il tasto SHIFT per ottenerlo. Il tasto X è il valore alfanumerico del tasto ) quindi è il tasto della parentesi che deve essere premuto senza altri tasti, automaticamente lo STO darà riferito a X. Iniziando la sequenza di calcolo sul display vedremo: Input line 2 Output line [=] 2 Quindi introduciamo la sequenza di calcolo, dove x è il tasto del prodotto x e X si ottiene dalla sequenza di tasti ALPHA ) . Si consulti il manuale della propria calcolatrice. Input line Ans x X+1 Output line [=] 4 Input line Ans x X-2 Output line [=] 4 Input line Ans x X-1 Output line [=] 5 Ossia: P(1,5) = 5. Automazione del calcolo Scriviamo una funzione VBA che ci consente di automatizzare il calcolo in Excel. Public Function Horner(x As Double, ParamArray A() As Variant) As Double Dim i As Integer Dim P As Double P = A(0) For i = 1 To UBound(A()) P = P * x + A(i) Next i Horner = P ‘assegna il valore iniziale di P ‘esegue n = UBound iterazioni ‘algoritmo di Ruffini-Horner ‘chiude la function assegnando a Horner il valore P End Function 2 La funzione Horner è definita come pubblica (Public) per poter essere utilizzata entro il foglio di Excel. Ad essa vengono passati i parametri: ๏ท ๏ท x come variabile in virgola mobile in doppia precisione (double) A() come array (variabile con indice) di dati del tipo variant. Il tipo di dati variant è il tipo di dati che può contenere una cella del foglio elettronico (stringa, intero, decimale,…). La variabile con indice ParamArray deve essere messa in coda alla lista di parametri perché il numero di valori che si passano non è predeterminato (nel nostro caso dipende dal grado del polinomio). La funzione predefinita UBound ci consente di stabilire quanti valori sono stati passati come ParamArray. L’algoritmo di Ruffini-Horner, avendo un numero prestabilito n di passi, è realizzabili tramite un ciclo For… Next. All’interno del foglio elettronico questa funzione viene usata, ad esempio, per tabulare il nostro polinomio al fine di avere il grafico della funzione y = P(x) come grafico di dispersione XY. I colori e l’aspetto della griglia sono stati variati rispetto ai valori di default. Le formule introdotte sono: 3 Si osservi che le celle contenenti i coefficienti del polinomio sono passate come riferimento assoluto (simbolo $) mentre i valori di x come riferimento relativo (senza simbolo $). Questo ci consente di limitarci a scrivere la formula in [B7] e poi ricopiarla o estenderla nelle caselle sottostanti. L’indirizzo relativo sarà aggiornato automaticamente mentre quello assoluto rimarrà invariato. Con metodo analogo si potrebbero calcolare le derivate di P(x). Noi ci fermiamo qui. Prof. Ettore Limoli 4