1D lineare Extrapolation
lineare Extrapolation verwendet Linie gebildet durch zwei bekannte Punkte. so beispielsweise davon ausgehen, diesen Vektor:
Die x-Achse ist der Vektor/Array-Index und y-Achse Wert der Zelle. Also habe ich 2 letzte bekannte Punkte (blau) genommen und daraus eine Linie gebildet (grün). Wo es die nächsten Array-Positionen schneidet, gibt es Ihre extrapolierten Werte (rot). So in C++ sieht es wie folgt aus:
float a[8]={ 1.0,2.0,4.0,8.0,10.0,7.0,0.0,0.0 }; // your vector (last two numbers are unknown)
a[6]=a[4]+((a[5]-a[4])*2.0); // =4.0
a[7]=a[4]+((a[5]-a[4])*3.0); // =1.0
1D kubische Extrapolation
Es ist ähnlich wie # 1 aber anstatt Linie verwenden Sie 4 Kontrollpunkt kubische Kurve in parametrischer Polynom Form. Die meisten kubischen Kurven sind so konstruiert, dass Sie, wenn Sie den Parameter t=0
erhalten, den zweiten Kontrollpunkt erhalten und wenn Sie t=1
erhalten, erhalten Sie den dritten Kontrollpunkt. Wenn Sie t=<0,1>
verwenden, werden Sie zwischen ihnen reibungslos durchlaufen. Hove jemals müssen wir den Bereich nach dem letzten Kontrollpunkt so erweitern t>=3
mit Schritt 1
für die nächste Punktposition. Also:
float a[8]={ 1.0,2.0,4.0,8.0,10.0,7.0,0.0,0.0 }; // your vector (last two numbers are unknown)
float a0,a1,a2,a3; // your cubic curve polynomial coefficients (computed from 4 control points a[2],a[3],a[4],a[5])
float t; // curve parameter
// here compute the a0,a1,a2,a3
t=3.0; a[6]=a0+a1*t+a2*t*t+a3*t*t*t*t;
t=4.0; a[7]=a0+a1*t+a2*t*t+a3*t*t*t*t;
Nun, wie die a0,a1,a2,a3
Koeffizienten erhalten? Sie können ein beliebiges Interpolationspolynom verwenden.Mein Favorit ist die (Kugel # 3):
Also hier ist es (ich hoffe nicht etwas albern Index Fehler tat, während pi ersetzt mit einem [2 + i]):
float d1,d2;
d1=0.5*(a[4]-a[2]);
d2=0.5*(a[5]-a[3]);
a0=a[3];
a1=d1;
a2=(3.0*(a[4]-a[3]))-(2.0*d1)-d2;
a3=d1+d2+(2.0*(-a[4]+a[3]));
Sie Extrapolation suchen müssen statt Interpolation (btw schöne Lena Icon Avatar) – Spektre
@Spektre: Dank – skm