Come eseguire l'interpolazione della spline cubica in Python?

2022-07-29 12:30:04

Ho due liste per descrivere la funzione y(x):

x = [0,1,2,3,4,5]
y = [12,14,22,39,58,77]

Vorrei eseguire l'interpolazione spline cubica in modo che dato un valore u nel dominio di x, ad es.

u = 1.25

Posso trovarti.

Ho trovato questo in SciPy ma non sono sicuro di come usarlo .

- user112829

Source
Risposta


32
  • Risposta breve:

    from scipy import interpolate
    
    def f(x):
        x_points = [ 0, 1, 2, 3, 4, 5]
        y_points = [12,14,22,39,58,77]
    
        tck = interpolate.splrep(x_points, y_points)
        return interpolate.splev(x, tck)
    
    print(f(1.25))
    

    Risposta lunga:

    scipy separa i passaggi coinvolti nell'interpolazione spline in due operazioni, molto probabilmente per l'efficienza computazionale.

    1. I coefficienti che descrivono la curva spline vengono calcolati, usando splrep(). splrep restituisce un array di tuple contenente il coefficienti.

    2. Questi coefficienti vengono passati a splev() in realtà valutare la spline nel punto desiderato x (in questo esempio 1.25). x può anche essere un array. La chiamata a f([1.0, 1.25, 1.5]) restituisce il punti interpolati rispettivamente a 1, 1.25 e 1,5.

    Questo approccio è certamente scomodo per singole valutazioni, ma poiché il caso d'uso più comune è iniziare con una manciata di punti di valutazione della funzione, quindi utilizzare ripetutamente la spline per trovare valori interpolati, di solito è abbastanza utile nella pratica.< /p>