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