Come calcolare interpolazione spline cubica naturale

Calcola interpolazione spline cubica naturale tra n punti dati. Polinomi grado 3 per segmento, continuità' C2, condizioni naturali agli estremi. Formule, esempi numerici, applicazioni in CAD, finanza, robotica.

Parametri di calcolo
Questo calcolatore ti è stato utile?

Come calcolare l'interpolazione spline cubica naturale: data una serie di n punti (x_i, y_i) con x_0 < x_1 < ... < x_{n-1}, la spline cubica naturale costruisce n-1 polinomi cubici S_i(x) = a_i + b_i(x-x_i) + c_i(x-x_i)^2 + d_i(x-x_i)^3, uno per ogni intervallo [x_i, x_{i+1}], che passano per tutti i punti e sono di classe C^2 (derivata prima e seconda continue alle giunzioni). Le condizioni naturali impongono S''(x_0) = S''(x_{n-1}) = 0, riducendo il sistema a un sistema lineare tridiagonale risolvibile in O(n) con l'algoritmo di Thomas. Risultato: una curva morbida senza oscillazioni di Runge tipiche dei polinomi di interpolazione globali ad alto grado.

Formule del metodo

Per ogni segmento i = 0, ..., n-2, il polinomio cubico S_i(x) ha quattro coefficienti a_i, b_i, c_i, d_i. Le 4(n-1) incognite sono determinate da: (1) interpolazione S_i(x_i) = y_i (n condizioni); (2) interpolazione finale S_{n-2}(x_{n-1}) = y_{n-1} (1 condizione); (3) continuità' della derivata prima alle giunzioni S_i'(x_{i+1}) = S_{i+1}'(x_{i+1}) (n-2 condizioni); (4) continuità' della derivata seconda S_i''(x_{i+1}) = S_{i+1}''(x_{i+1}) (n-2 condizioni); (5) condizioni naturali S''(x_0) = S''(x_{n-1}) = 0 (2 condizioni). Totale 4n - 4 = 4(n-1) equazioni per 4(n-1) incognite.

Definendo h_i = x_{i+1} - x_i e M_i = S''(x_i) (momenti), il sistema si riduce alla matrice tridiagonale: h_{i-1}M_{i-1} + 2(h_{i-1} + h_i)M_i + h_i M_{i+1} = 6((y_{i+1}-y_i)/h_i - (y_i - y_{i-1})/h_{i-1}) per i = 1, ..., n-2, con M_0 = M_{n-1} = 0. Risolto in O(n) con l'algoritmo di Thomas (eliminazione di Gauss specializzata per matrici tridiagonali). I coefficienti finali sono a_i = y_i, b_i = (y_{i+1}-y_i)/h_i - h_i(2M_i + M_{i+1})/6, c_i = M_i/2, d_i = (M_{i+1} - M_i)/(6 h_i).

Storia e contesto

Il termine "spline" deriva dalle aste flessibili usate nei cantieri navali britannici del XIX secolo per disegnare curve morbide attraverso punti fissati con pesi (ducks). Isaac Schoenberg formalizzo' matematicamente le spline cubiche nel suo articolo seminale del 1946 "Contributions to the problem of approximation of equidistant data by analytic functions" pubblicato in Quarterly of Applied Mathematics. La spline cubica naturale minimizza l'integrale della curvatura (nel limite di piccole derivate prime), proprietà' equivalente alla minima energia di flessione di una trave elastica - giustificando il nome storico. Negli anni '60 Carl de Boor estese la teoria alle B-spline (Basis splines) e nel 1978 pubblico' "A Practical Guide to Splines" presso Springer, testo di riferimento. Pierre Bezier alla Renault e Paul de Casteljau alla Citroen svilupparono le curve di Bezier (caso particolare di B-spline) per il design automobilistico CAD/CAM. Oggi le spline cubiche sono il fondamento di Adobe Illustrator, AutoCAD, SolidWorks, blendare animazioni in Pixar, font TrueType e molto altro. ISO 10303-42 (STEP) standardizza le rappresentazioni spline per scambio dati CAD industriale.

Tabella confronto metodi interpolazione

  • Lineare (1 grado): semplice, C^0, non differenziabile, errore O(h^2)
  • Quadratica (2 grado): pochi punti, oscillazioni
  • Cubica naturale: C^2, errore O(h^4), no Runge, raccomandata per dati lisci
  • Cubica vincolata (clamped): derivate prima specificate agli estremi
  • Spline non-a-nodo: terza derivata continua agli estremi penultimi (usata in MATLAB)
  • B-spline: locale, controllo nodi, base CAD/CAM
  • NURBS: B-spline razionali pesate, rappresentano coniche esattamente, ISO 10303
  • Polinomio di Lagrange: globale, soggetto a oscillazioni di Runge per n grandi
  • Hermite cubica: usa derivate, monotonia preservabile (PCHIP MATLAB)
  • Akima 1970: robusta a outlier, meno oscillazioni

Esempi numerici dettagliati

Esempio 1 - parabola y = x^2. Punti (0,0), (1,1), (2,4), (3,9), (4,16). h_i = 1 costante. Sistema tridiagonale: 2(M_{i-1} + 2M_i + M_{i+1})/2 = 6(y_{i+1} - 2y_i + y_{i-1}) per i = 1, 2, 3 con M_0 = M_4 = 0. Differenze seconde: y_2 - 2y_1 + y_0 = 4 - 2 + 0 = 2, y_3 - 2y_2 + y_1 = 9 - 8 + 1 = 2, y_4 - 2y_3 + y_2 = 16 - 18 + 4 = 2. Sistema: 4M_1 + M_2 = 12, M_1 + 4M_2 + M_3 = 12, M_2 + 4M_3 = 12. Per simmetria M_1 = M_3 e si ottiene M_1 = M_3 = 12/5 = 2,4 e M_2 = 12/5 = 2,4. Spline esatta per parabola? No, deviazione minima dovuta a M_0 = 0 (non vero per parabola dove S'' = 2 ovunque). Interpolazione in x = 1,5: y = 2,25 (esatto per parabola), spline da' 2,247 (errore 0,3%).

Esempio 2 - dati sperimentali fisici. Misura coefficiente di dilatazione termica acciaio AISI 304 da NIST a temperature {0, 100, 200, 300, 400}°C: alpha (10^-6/K) = {15,3, 16,4, 17,5, 18,2, 18,7}. Spline cubica naturale stima alpha(150) = 16,9 vs interpolazione lineare 16,95 e polinomio Lagrange grado 4 16,87. Per simulazione FEM strutturale ANSYS la spline da' transizione liscia C2 evitando discontinuita' nelle sollecitazioni termiche.

Esempio 3 - curva yield finanza. Tassi BTP italiani Banca d'Italia 28/04/2026 a scadenze {0,5; 1; 2; 5; 10; 30} anni: yield (%) = {2,85; 2,92; 3,15; 3,42; 3,68; 4,12}. Spline cubica naturale per yield(7) = 3,55%, valore usato per pricing obbligazioni 7-anni non liquide. ECB e Banca d'Italia pubblicano curve zero-coupon costruite con spline Nelson-Siegel-Svensson o cubic spline, a seconda mercato.

Esempio 4 - traiettoria robot. ABB IRB 2600 robot industriale con 6 waypoint cartesiani (x, y, z) richiesti dal task. Spline cubica naturale genera traiettoria C^2 differenziabile (accelerazione continua, jerk limitato). Velocità' joint massima 4 m/s, accelerazione 8 m/s^2 - con spline cubica jerk e' continua mantenendo motori sotto soglia danneggiamento. ISO 9283 (test prestazioni robot) richiede traiettoria liscia per misurazioni ripetibilita'.

Esempio 5 - font TrueType. Carattere Times New Roman lettera "O" descritta da 12 punti di controllo. Spline cubica B-spline rasterizza il font a qualunque scala (1pt = 1/72 inch). Standard ISO/IEC 14496-22 definisce font OpenType con spline cubiche e quadratiche. Adobe PostScript usa spline cubiche; Apple TrueType usa spline quadratiche per minor calcolo. Antialiasing FreeType applica subpixel positioning per rendering nitido a basse risoluzioni (LCD).

Limiti e considerazioni

  1. Servono almeno n >= 3 punti per spline cubica naturale ben definita.
  2. I valori X devono essere distinti (no duplicati) e ordinati crescenti.
  3. Spline naturale assume curvatura nulla agli estremi: per dati con curvatura non nulla agli estremi (es. parabola pura) usare spline clamped o non-a-nodo.
  4. Estrapolazione fuori [x_0, x_{n-1}] e' rischiosa: il polinomio cubico ai bordi cresce rapidamente.
  5. Spline non preservano monotonia: tra due punti monotonicamente crescenti la spline può' presentare oscillazioni; per monotonia stretta usare PCHIP (Piecewise Cubic Hermite Interpolating Polynomial).
  6. Sensibilità' a outlier: un singolo punto erroneo deforma localmente la spline su 2-3 segmenti adiacenti.
  7. Costo computazionale O(n) per costruzione (algoritmo Thomas), O(log n) per valutazione con ricerca binaria del segmento.
  8. Numericamente stabile per n < 10000; per dataset molto grandi preferire B-spline locali o moving average.
  9. Differenza con regressione: spline interpola esattamente i punti (passa per tutti); regressione minimizza errore quadratico totale.
  10. UNI EN ISO 10303 (STEP) standardizza scambio dati CAD industriale con rappresentazione NURBS.

Errori comuni

  1. Confondere spline cubica naturale con clamped (clamped richiede derivate agli estremi).
  2. Estrapolare fuori [x_0, x_{n-1}] e fidarsi del valore (errore può' essere arbitrario).
  3. Applicare spline su X non ordinati senza pre-sort (algoritmo fallisce).
  4. Tentare spline con duplicati X (matrice singolare).
  5. Usare spline su dati rumorosi senza prima smoothing (overfitting locale).
  6. Confondere spline cubica con polinomio cubico globale (sono diversi).
  7. Aspettarsi monotonia automatica (non garantita; usare PCHIP per monotone).
  8. Non verificare condizioni di bordo: per dati simmetrici naturale può' introdurre asimmetria.
  9. Usare spline per estrapolazione previsioni (forecasting): curve di yield in finanza richiedono modelli specifici (Nelson-Siegel).
  10. Confondere spline interpolante (passa per i punti) con spline approssimante (lisciatura, fit di minimi quadrati).

Applicazioni numerate

  1. CAD/CAM: AutoCAD SPLINE comando, SolidWorks superfici NURBS, Rhino 3D modeling.
  2. Computer Graphics: animazioni Pixar, motion blur, keyframe interpolation Maya/Blender.
  3. Tipografia: TrueType e PostScript fonts, rendering FreeType, OpenType ISO/IEC 14496-22.
  4. Robotica: pianificazione traiettorie joint space, ABB IRB 2600, ISO 9283 test prestazioni.
  5. Finanza: curve yield bond (ECB, Banca d'Italia BTP), pricing options interpolando volatility surface.
  6. Geofisica: profili sismici 2D/3D, smoothing dati gravitazionali, INGV reti sismiche italiane.
  7. Meteo: campi di temperatura, pressione, precipitazioni a partire da stazioni meteo (ISTAT, ARPA, MeteoSwiss).
  8. Medicale: ricostruzione 3D TC/RM in DICOM, planning radioterapia (Eclipse Varian).
  9. Aerospaziale: profili alari NACA, traiettorie satelliti GNSS, ESA Galileo orbit determination.
  10. Acustica: equalizzazione audio, smoothing FFT spettro, AES/EBU standards.

Per supporto

Per domande tecniche o segnalazioni: info@calcoi.com. Strumento didattico per metodi numerici. Per implementazione professionale consultare Burden-Faires Numerical Analysis 10th ed (Cengage 2016), de Boor "A Practical Guide to Splines" (Springer 1978), libreria SciPy scipy.interpolate.CubicSpline.

Aggiornato a luglio 2026

Domande frequenti

Cosa significa spline cubica naturale?

E' una funzione costituita da n-1 polinomi cubici S_i(x) di classe C^2 (continuità' valori, derivata prima e seconda alle giunzioni) che interpola n punti dati. "Naturale" indica le condizioni al contorno S''(x_0) = S''(x_{n-1}) = 0 (curvatura nulla agli estremi). Schoenberg formalizzo' la teoria nel 1946. Differenza con clamped: clamped specifica derivate prime ai bordi anziché' seconde.

Quando usare spline cubica vs polinomio Lagrange?

Lagrange e' un polinomio di grado n-1 globale: per n grande oscilla agli estremi (fenomeno di Runge, evidente con f(x) = 1/(1+25x^2) su 11 punti). Spline cubica e' locale: ogni segmento e' grado 3, no oscillazioni. Per dati tabulati con n > 5-7 preferire sempre spline. Burden-Faires Numerical Analysis 10ed dedica capitolo 3.5 a confronto con figure illustrative.

Come risolvere il sistema tridiagonale efficacemente?

Algoritmo di Thomas (variante Gauss specializzata): forward elimination O(n), back substitution O(n), totale O(n) operazioni e O(n) memoria. Stabile per matrici diagonalmente dominanti, condizione soddisfatta dalla matrice spline. Implementazione SciPy scipy.interpolate.CubicSpline usa Thomas; LAPACK dgtsv routine BLAS. Per n = 1000 punti tempo trascurabile (microsecondi su CPU moderna).

Spline cubica preserva monotonia dei dati?

No. Tra due punti monotonicamente crescenti la spline cubica naturale può' presentare overshoot (valori superiori al massimo locale) o undershoot. Per monotonia stretta usare PCHIP (Piecewise Cubic Hermite Interpolating Polynomial, Fritsch-Carlson 1980): impone derivate uguali ai dati Hermite con vincoli che preservano monotonia. MATLAB pchip(), SciPy PchipInterpolator.

Differenza tra spline interpolante e spline di smoothing?

Interpolante: la curva passa esattamente per tutti i punti dati (S(x_i) = y_i). Smoothing: la curva minimizza un funzionale lambda * integrale(S'')^2 + sum (S(x_i) - y_i)^2 con parametro lambda di regolarizzazione - quanto più' grande, più' liscia ma meno aderente ai dati. Per dati rumorosi (errori di misura) preferire smoothing. SciPy UnivariateSpline parametro s controlla lisciatura.

Posso estrapolare con spline cubica?

Tecnicamente si' (valuti S_0(x) per x x_{n-1}), ma e' fortemente sconsigliato. Il polinomio cubico ai bordi cresce come x^3 fuori dal range, errori arbitrari. Per estrapolazioni motivate fisicamente usare modelli specifici (esponenziali, logaritmici) o estensioni come Akima. ISO 10303 raccomanda di non estrapolare oltre 5-10% del range originale.

Errore di approssimazione di una spline cubica naturale?

Per dati provenienti da funzione liscia f in C^4 con h = max h_i, errore di approssimazione e' O(h^4) per la funzione e O(h^2) per la derivata seconda. Se f e' di classe C^2 ma non C^4 errore degrada a O(h^2). Stima rigorosa in Burden-Faires teorema 3.13. Per applicazioni di alta precisione (CAD/CAM aerospaziale) usare quintic spline (grado 5) o NURBS.

Formula

S_i(x) = a_i + b_i*(x-x_i) + c_i*(x-x_i)^2 + d_i*(x-x_i)^3

Commenti (0)

Ancora nessun commento. Sii il primo!