Calcolo Numerico 
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
                               
  Relazione sull’interpolazione polinomiale attraverso il  
      Metodo di Newton ‐ Differenze divise 
 
 
 
 
 
 
 
 
 
 
Sergio Porcu 
 
INTERPOLAZIONE POLINOMIALE 
                                                                          

                      Metodo di Newton ‐ Differenze divise 
                                                                          
 

 
L’interpolazione polinomiale è un metodo di calcolo mediante il quale, data una funzione y = ƒ(x) e 
dati  i  valori  numerici  che  tale  funzione  assume  per  x  a  determinati  valori  x1,  x2,  ...,  xn,  si  può 
determinare con buona approssimazione il valore numerico di ƒ(x) per x = x0 con x1<x0<xn e x0 ≠ xi 
(i = 2, 3, ..., xn). Il metodo di Newton riconduce l’interpolazione a un calcolo di differenze, che si 
conducono alla formula di Taylor. 
Il polinomio interpolatore Pn(x) ha la seguente struttura (più avanti vedremo come costruirla): 
 
                Pn(x) = a0 + a1⋅(x ‐ x0) + a2⋅(x ‐ x0)⋅(x ‐ x1) + ... + an⋅(x ‐ x0)⋅(x ‐ x1)⋅...⋅(x ‐ xn‐1) 
 
dove  i  valori  ai  rappresentano  le  differenze  divise,  rapporti  incrementali  che  si  definiscono  sugli 
n+1 punti (x0, x1, ..., xn) 
 
                                          ƒ(x0)                                                             i = 0  
           ai = ƒ[x0, ..., xi] =  ‐ 
                                          (ƒ[x1, ..., xi] ‐ ƒ[x0, ..., xi‐1])/( xi ‐ x0)                    i > 0 
         
Se si considera il caso generale di n+1 punti (x0, ..., xn), la differenza divisa di ordine n risulta 
 
                                 ƒ[x0, ..., xn] = (ƒ[x1, ...,xn] ‐ ƒ[x0, ..., xn‐1] )/(xn ‐ x0) 
                                                                          
La  differenza  divisa  risulta  indipendente  rispetto  alle  permutazioni  in  quanto  dipende 
esclusivamente dai punti e non dall’ordine in cui questi si trovano. 
I  valori  delle  differenze  divise  associate  agli  n+1  punti  xi  ed  i  coefficienti  del  polinomio 
interpolatore  si  ottengono  mediante  la  costruzione  di  un’opportuna  tabella  contenente  i  valori 
degli stessi punti xi e delle funzioni ƒ[x0, ..., xn]: 
 
                ordine 0                    ordine 1                       ordine 2            ...       ordine n 

        xi      yi=ƒ(xi) 
        x0      ƒ(x0) 
        x1      ƒ(x1)                       ƒ[x0, x1] 
        x2      ƒ(x2)                       ƒ[x1, x2]                   ƒ[x0, x1, x2] 
         .          .                             .                              .             . 
         .          .                             .                              .             . 
        x n     ƒ(xn)                       ƒ[xn‐1, xn]                 ƒ[xn‐2, ..., xn]      ...     ƒ[x0, ..., xn] 
 
Dalla tabella, che richiede n2 somme algebriche e n2/2 divisioni, si estrapolano gli elementi della 
diagonale;  questi  rappresentano  i  coefficienti  del  polinomio  interpolatore,  che  avrà,  come 
abbiamo visto prima, la seguente forma: 
 
               Pn(x) = a0 + a1⋅(x ‐ x0) + a2⋅(x ‐ x0)⋅(x ‐ x1) + ... + an⋅(x ‐ x0)⋅(x ‐ x1)⋅...⋅(x ‐ xn‐1) 
 
con a0 = ƒ(x0), a1 = ƒ[x0, x1], a2 = ƒ[x0, x1, x2], ..., an = ƒ[x0, x1, ..., xn]. La costruzione di tale polinomio 
richiede invece n moltiplicazioni e 2n somme. 
 
Nelle  pagine  a  seguire  verranno  presentati  l’algoritmo  risolutivo  del  metodo  delle  differenze 
divise, tradotto in linguaggio C, ed alcuni esempi di interpolazione attraverso il metodo di Newton, 
ciascuno dei quali sarà corredato dalle schermate di visualizzazione dell’algoritmo sopra riportato 
e da opportuni grafici di confronto tra funzione reale e polinomio interpolante. 
 
 
 
 
 
 
/******************************************************************************* 
   Il programma effettua l'interpolazione polinomiale di una serie di numeri inseriti da tastiera   
   attraverso il Metodo di Newton delle Differenze Divise. L'algoritmo visualizza in uscita i risultati 
   del processo di calcolo, quali tabella degli ordini ed elementi della diagonale principale utilizzati 
   come coefficienti del polinomio interpolatore, ed il polinomio stesso. 
 
   Autore: 
   ‐ Sergio Porcu 
*******************************************************************************/ 
 
#include<stdio.h> 
#include<iostream.h> 
#include<math.h> 
#include<conio.h> 
#define N 10 
 
main() 
{ 
         /* Dichiarazione delle variabili */ 
         float x[N];              /* Vettore contenente i valori delle x dei punti */ 
         float y[N];              /* Vettore contenente i valori delle y dei punti */ 
         float f[N];              /* Vettore contenente i valori delle funzioni */ 
         float app[N];            /* Vettore di appoggio contenente i valore delle funzioni */ 
         float diagon[N];         /* Vettore contenente i valori della diagonale principale */ 
         int cont,i,j;            /* Contatori */ 
         int num;                 /* Numero di punti da interpolare */ 
         int salto,passo;         /* Variabili di comodo */ 
 
         /* Inizializzazione delle variabili */ 
         num=0; 
         clrscr(); 
 
         /* Inserimento dei valori dei punti da interpolare */ 
         puts("ttInterpolazione dei punti con il metodo delle "); 
        puts("tt    differenze divise (metodo di Newton)n"); 
         printf("Quanti punti vuoi interpolare? : "); 
         cin>>num; 
         passo=(num‐1); 
         for(cont=0;cont<num;cont++)               /* Ciclo di inserimento */ 
         { 
                  printf("Inserisci il valore x del %d° punto : ",cont+1); 
                  cin>>x[cont]; 
                  printf("Inserisci il valore y del %d° punto : ",cont+1); 
                  cin>>y[cont]; 
         } 
 
         /* Inizializzazione del vettore contenete i valori delle funzioni */ 
         for(cont=0;cont<num;cont++) 
        { 
                f[cont]=y[cont]; 
        } 
 
        /* Inizio elaborazione dati */ 
        clrscr(); 
        printf("Scansione dei risultati elaborati dal calcolatore : n"); 
        printf("Colonna delle differenze divise di ordine 0n"); 
        for(i=0;i<num;i++) 
        { 
                 cout<<f[i]; 
                 printf("n"); 
        } 
        for(i=0;i<num;i++)  /* Scansione dei punti */ 
        { 
                   /* Memorizzazione degli elementi della diagonale */ 
 
                diagon[i]=f[i]; 
                salto=i+1; 
                for(j=i+1;j<num;j++)  /* Ciclo di calcolo */ 
                { 
                        if(j==i+1) 
                                 printf("Colonna delle differenze divise di ordine         %dn",i+1); 
                        if(x[j]!=x[j‐salto])   /* Controllo di eventuali errori di inserimento */ 
             { 
                                              app[j]=(f[j]‐f[j‐1])/(x[j]‐x[j‐salto]); 
             } 
             else 
             { 
                              clrscr(); 
                              printf("Errore di inserimento dati:n"); 
                              printf("i punti inseriti non appartengono ad una funzione "); 
                              printf("continua!a"); 
                              return ‐1; 
                  } 
                     } 
                     for(j=i+1;j<num;j++) 
                     { 
                              f[j]=app[j]; 
                              cout<<f[j]; 
                              printf("n"); 
                     } 
             } 
             /* Fine elaborazione dati */ 
 
             /* Visualizzazione finale dei dati */ 
             printf("n"); 
             printf("I valori della diagonale sono : n"); 
             for(i=0;i<num;i++) 
             { 
                     cout<<diagon[i]; 
                     printf("n"); 
             } 
             printf("n"); 
             printf("P%d(x)=",(num‐1)); 
             cout<<diagon[0]; 
             for(i=1;i<num;i++) 
             { 
                     if(diagon[i]>=0) 
                     printf("+"); 
                     cout<<diagon[i]; 
                     for(j=1;j<=num‐passo;j++) 
                     { 
                             printf("(x"); 
                             if(x[j‐1]>=0) 
                                      printf("‐"); 
                             else 
                                      printf("+"); 
                             cout<<abs(x[j‐1]); 
                     printf(")"); 
                     } 
                     passo‐‐; 
             } 
 
 
             return 0; 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ESEMPIO 1 
Funzione reale y = 3cos(x) + ex 
 
Interpolazione dei punti con il metodo delle differenze divise (metodo di Newton) 
 
Quanti punti vuoi interpolare? : 5 
Inserisci il valore x del 1° punto : ‐3 
Inserisci il valore y del 1° punto : ‐2.92 
Inserisci il valore x del 2° punto : 0 
Inserisci il valore y del 2° punto : 4 
Inserisci il valore x del 3° punto : 2 
Inserisci il valore y del 3° punto : 6.1406 
Inserisci il valore x del 4° punto : 4 
Inserisci il valore y del 4° punto : 52.6372 
Inserisci il valore x del 5° punto : 9 
Inserisci il valore y del 5° punto : 8100.35 
 
Scansione dei risultati elaborati dal calcolatore : 
Colonna delle differenze divise di ordine 0 
‐2.92 
4 
6.1406 
52.6372 
8100.35 
Colonna delle differenze divise di ordine 1 
2.30667 
1.0703 
23.2483 
1609.54 
Colonna delle differenze divise di ordine 2 
‐0.247273 
5.5445 
226.613 
Colonna delle differenze divise di ordine 3 
0.827396 
24.5632 
Colonna delle differenze divise di ordine 4 
1.97799 
 
I valori della diagonale sono : 
‐2.92 
2.30667 
‐0.247273 
0.827396 
1.97799 
 
P4(x)=‐2.92+2.30667(x+3)‐0.247273(x+3)(x‐0)+0.827396(x+3)(x‐0)(x‐2)+1.97799(x+3)(x‐0)(x‐2)(x‐4) 
Esempio 1 ‐ y = 3cos(x) + e^x 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ESEMPIO 2 
Funzione reale y = ln(x) + 1/x  
 
Interpolazione dei punti con il metodo delle differenze divise (metodo di Newton) 
 
Quanti punti vuoi interpolare? : 5 
Inserisci il valore x del 1° punto : 1 
Inserisci il valore y del 1° punto : 1 
Inserisci il valore x del 2° punto : 3 
Inserisci il valore y del 2° punto : 1.432 
Inserisci il valore x del 3° punto : 5 
Inserisci il valore y del 3° punto : 1.809 
Inserisci il valore x del 4° punto : 7 
Inserisci il valore y del 4° punto : 2.089 
Inserisci il valore x del 5° punto : 9 
Inserisci il valore y del 5° punto : 2.308 
 
Scansione dei risultati elaborati dal calcolatore : 
Colonna delle differenze divise di ordine 0 
1 
1.432 
1.809 
2.089 
2.308 
Colonna delle differenze divise di ordine 1 
0.216 
0.1885 
0.14 
0.1095 
Colonna delle differenze divise di ordine 2 
‐0.00687501 
‐0.012125 
‐0.00762498 
Colonna delle differenze divise di ordine 3 
‐0.000874999 
0.000750003 
Colonna delle differenze divise di ordine 4 
0.000203125 
 
I valori della diagonale sono : 
1 
0.216 
‐0.00687501 
‐0.000874999 
0.000203125 
 
P4(x)=1+0.216(x‐1)‐0.00687501(x‐1)(x‐3)‐0.000874999(x‐1)(x‐3)(x‐5)+ 
0.000203125(x‐1)(x‐3)(x‐5)(x‐7) 
Esempio 2 ‐ y = ln(x) + 1/x 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ESEMPIO 3 
Funzione reale y = 2sen(x) + ln1/(x+1) 
 
Interpolazione dei punti con il metodo delle differenze divise (metodo di Newton) 
 
Quanti punti vuoi interpolare? : 5 
Inserisci il valore x del 1° punto : 0 
Inserisci il valore y del 1° punto : 0 
Inserisci il valore x del 2° punto : 2 
Inserisci il valore y del 2° punto : 0.72 
Inserisci il valore x del 3° punto : 5 
Inserisci il valore y del 3° punto : ‐3.710 
Inserisci il valore x del 4° punto : 6 
Inserisci il valore y del 4° punto : ‐2.505 
Inserisci il valore x del 5° punto : 9 
Inserisci il valore y del 5° punto : ‐1.478 
 
Scansione dei risultati elaborati dal calcolatore : 
Colonna delle differenze divise di ordine 0 
0 
0.72 
‐3.71 
‐2.505 
‐1.478 
Colonna delle differenze divise di ordine 1 
0.36 
‐1.47667 
1.205 
0.342333 
Colonna delle differenze divise di ordine 2 
‐0.367333 
0.670417 
‐0.215667 
Colonna delle differenze divise di ordine 3 
0.172958 
‐0.126583 
Colonna delle differenze divise di ordine 4 
‐0.0332824 
 
I valori della diagonale sono : 
0 
0.36 
‐0.367333 
0.172958 
‐0.0332824 
 
P4(x)=0+0.36(x‐0)‐0.367333(x‐0)(x‐2)+0.172958(x‐0)(x‐2)(x‐5)‐0.0332824(x‐0)(x‐2)(x‐5)(x‐6) 
Esempio 3 ‐ y = 2sen(x) + ln1/(x+1) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ESEMPIO 4 
Funzione reale y = sen(x) + cos(x) + x2 
 
Interpolazione dei punti con il metodo delle differenze divise (metodo di Newton) 
 
Quanti punti vuoi interpolare? : 5 
Inserisci il valore x del 1° punto : ‐3 
Inserisci il valore y del 1° punto : 7.869 
Inserisci il valore x del 2° punto : ‐1 
Inserisci il valore y del 2° punto : 0.7 
Inserisci il valore x del 3° punto : 2 
Inserisci il valore y del 3° punto : 4.493 
Inserisci il valore x del 4° punto : 5 
Inserisci il valore y del 4° punto : 24.325 
Inserisci il valore x del 5° punto : 7 
Inserisci il valore y del 5° punto : 50.411 
 
Scansione dei risultati elaborati dal calcolatore : 
Colonna delle differenze divise di ordine 0 
7.869 
0.7 
4.493 
24.325 
50.411 
Colonna delle differenze divise di ordine 1 
‐3.5845 
1.26433 
6.61067 
13.043 
Colonna delle differenze divise di ordine 2 
0.969767 
0.891056 
1.28647 
Colonna delle differenze divise di ordine 3 
‐0.00983889 
0.0494264 
Colonna delle differenze divise di ordine 4 
0.00592652 
 
I valori della diagonale sono : 
7.869 
‐3.5845 
0.969767 
‐0.00983889 
0.00592652 
 
P4(x)=7.869‐3.5845(x+3)+0.969767(x+3)(x+1)‐0.00983889(x+3)(x+1)(x‐2)+ 
0.00592652(x+3)(x+1)(x‐2)(x‐5) 
Esempio 4 ‐ y = sen(x) + cos(x) + x^2 

More Related Content

PDF
Morfologi Citra.pdf
DOCX
Bab 3
DOCX
Penyelesaian sistem persamaan linear dengan
PPTX
Analisis Diskriminan (2)
PPT
Analisis Faktor.Ppt 2
PPT
6. analisis semantik
PPTX
5 penyederhanaan logis
PPT
Metodo dei minimi quadrati
Morfologi Citra.pdf
Bab 3
Penyelesaian sistem persamaan linear dengan
Analisis Diskriminan (2)
Analisis Faktor.Ppt 2
6. analisis semantik
5 penyederhanaan logis
Metodo dei minimi quadrati

Similar to Metodo di Newton (20)

PDF
Lezione 8 (12 marzo 2012)
PDF
Lezione 23 (9 maggio 2012)
PDF
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
PDF
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
PPT
Reti Logic
PPTX
Python@Unina - Exercises
PPTX
07 2 ricorsione
PDF
scipy e rpy per l'analisi degli acquisti della pubblica amministrazione
PPT
2 Rappresentazione Dei Dati
PPTX
Presentazione integrali con economia, malthus e c14
PDF
Lezione 9 (14 marzo 2012)
PPT
Sistemi numerazione - Unità Didattica 1 a cura del prof. Giuseppe Sportelli
PDF
Simulation and analysis of a linear system in MATLAB
PPT
Capitolo 6a elementi di valutazione dei prodotti derivati
PPT
Tutorial Matlab 2009
PDF
2008 python
PDF
Lezione 12 (28 marzo 2012)
PPT
5 Strutture Iterative
PDF
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
Lezione 8 (12 marzo 2012)
Lezione 23 (9 maggio 2012)
Calcolo Numerico - 2 - Rappresentazione Dei Numeri
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Reti Logic
Python@Unina - Exercises
07 2 ricorsione
scipy e rpy per l'analisi degli acquisti della pubblica amministrazione
2 Rappresentazione Dei Dati
Presentazione integrali con economia, malthus e c14
Lezione 9 (14 marzo 2012)
Sistemi numerazione - Unità Didattica 1 a cura del prof. Giuseppe Sportelli
Simulation and analysis of a linear system in MATLAB
Capitolo 6a elementi di valutazione dei prodotti derivati
Tutorial Matlab 2009
2008 python
Lezione 12 (28 marzo 2012)
5 Strutture Iterative
7. MATLAB - Parte 2 (IO, cicli, funzioni).pdf
Ad

More from Sergio Porcu (19)

PDF
Investimenti
PDF
Costi, break even point, analisi make or buy
PDF
Analisi degli scostamenti
PDF
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
PDF
Algoritmi e Programmazione Avanzata - Liste, pile, code
PDF
Il temporizzatore d'intervalli 8253
PDF
Il Turbo Debugger
PDF
L'interrupt nell'8086
PDF
Interfaccia verso il BUS
PDF
Elementi architetturali dell'8086
PDF
Formato istruzioni e direttive 8086
PDF
Assembler 8086
PDF
Microprocessori INTEL 8086/8088
PPT
Reti di Calcolatori - Crittografia
PDF
Mappe di Karnaugh
PDF
Esercizi in linguaggio Assembly 8086
PDF
Traduzione dal modello ER al relazionale
PDF
Soluzione generalizzazioni in diagrammi ER
PPT
Diagrammi Entità/Relazioni (ER)
Investimenti
Costi, break even point, analisi make or buy
Analisi degli scostamenti
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsione
Algoritmi e Programmazione Avanzata - Liste, pile, code
Il temporizzatore d'intervalli 8253
Il Turbo Debugger
L'interrupt nell'8086
Interfaccia verso il BUS
Elementi architetturali dell'8086
Formato istruzioni e direttive 8086
Assembler 8086
Microprocessori INTEL 8086/8088
Reti di Calcolatori - Crittografia
Mappe di Karnaugh
Esercizi in linguaggio Assembly 8086
Traduzione dal modello ER al relazionale
Soluzione generalizzazioni in diagrammi ER
Diagrammi Entità/Relazioni (ER)
Ad

Recently uploaded (11)

PDF
Presentazione di Chimica sui Coloranti Alimentari
PDF
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
PDF
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
PDF
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
PPTX
San Giovanni Eudes, 1601 – 1680, sacerdote e fondatore francese.pptx
PPTX
Santa Rosa da Lima, Vergine, Penitente, Terziaria Domenicana 1586-1617.pptx
PDF
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
PDF
Presentazione educazione finanziaria e informazione.pdf
PDF
Critico_o_creativo_Approcci_al_testo_let.pdf
PDF
PRESENTAZIONE PROGETTO CCCI IN ITALIANO .pdf
PDF
Libro per insegnare di Balboni: Lingue_e_linguaggi.pdf
Presentazione di Chimica sui Coloranti Alimentari
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
San Giovanni Eudes, 1601 – 1680, sacerdote e fondatore francese.pptx
Santa Rosa da Lima, Vergine, Penitente, Terziaria Domenicana 1586-1617.pptx
NGÂN HÀNG CÂU HỎI TÁCH CHỌN LỌC THEO CHUYÊN ĐỀ TỪ ĐỀ THI THỬ TN THPT 2025 TIẾ...
Presentazione educazione finanziaria e informazione.pdf
Critico_o_creativo_Approcci_al_testo_let.pdf
PRESENTAZIONE PROGETTO CCCI IN ITALIANO .pdf
Libro per insegnare di Balboni: Lingue_e_linguaggi.pdf

Metodo di Newton