VF_ratinterpol | VD_ratinterpol | VE_ratinterpol |
|
Funktion | diagonal-rationale Interpolation nach Stoer und Bulirsch |
|
Syntax C/C++ | #include <VFmath.h>
void VF_ratinterpol( fVector Y, fVector X, ui sizex, fVector XTab, fVector YTab, ui sizetab, unsigned deg ); |
C++ VecObj | #include <OptiVec.h>
void vector<T>::ratinterpol( const vector<T>& X, const vector<T>& XTab, const vector<T>& YTab, unsigned deg ); |
Pascal/Delphi | uses VFmath;
procedure VF_ratinterpol( Y, X:fVector; sizex:UIntSize; XTab, YTab:fVector; sizetab:UIntSize; deg:UInt ); |
|
CUDA-Funktion C/C++ | #include <cudaVFstd.h>
int cudaVF_ratinterpol( fVector d_Y, fVector d_X, ui sizex, fVector d_XTab, fVector d_YTab, ui sizetab, unsigned deg );
void VFcu_ratinterpol( fVector h_Y, fVector h_X, ui sizex, fVector h_XTab, fVector h_YTab, ui sizetab, unsigned deg );
|
CUDA-Funktion Pascal/Delphi | uses VFstd;
function cudaVF_ratinterpol( d_Y, d_X:fVector; sizex:UIntSize; d_XTab, d_YTab:fVector; sizetab:UIntSize; deg:UInt ): IntBool;
procedure VFcu_ratinterpol( h_Y, h_X:fVector; sizex:UIntSize; h_XTab, h_YTab:fVector; sizetab:UIntSize; deg:UInt );
|
|
Beschreibung | Für jedes der sizex Elemente von X wird ein Y-Wert durch diagonal-rationale Interpolation nach Stoer und Bulirsch aus einer Tabelle gewonnen. Die Tabelle muss als XTab-YTab- Wertepaare vorliegen, wobei XTab geordnet sein muss (streng aufsteigend oder absteigend). Außerdem müssen alle Werte von XTab verschieden sein, da andernfalls eine Division durch 0 auftreten kann mit nachfolgendem Programmabbruch.
Die Routine findet für die einzelnen Elemente von X jeweils die geeignete Stelle in der Tabelle als Ausgangspunkt der Interpolation. Der Parameter deg bezeichnet die Anzahl der für die Interpolation in Betracht gezogenen Tabellen-Punkte. Als Interpolationsfunktion wird der Quotient zweier Polynome verwendet, wobei das Polynom im Nenner von demselben Grad (bei geradem deg) oder um einen Grad höher ist (bei ungeradem deg) als das Polynom im Zähler. Diese Art der Interpolation ist immer dann, wenn Polstellen vorhanden sind, der Polynom-Interpolation überlegen. Auf der anderen Seite können bereits geringfügige Rundungsfehler in den Eingabe-Tabellen dazu führen, dass Polstellen an Stellen berechnet werden, wo "eigentlich" keine wären.
deg muss zwischen 3 und 20 liegen. |
|
Fehlerbehandlung | Eine Polstelle (d.h. ein Wert von Unendlich) in der Interpolationsfunktion wird als SING-Fehler behandelt mit dem Ergebnis ±HUGE_VAL. (Der in C/C++ an _matherr übergebene x-Wert ist dabei das erste Element von XTab). Ein zu hoher Grad der Interpolation (deg > 20) führt zu einer Fehlermeldung "Not possible with more than 20 elements" und zum Programmabbruch.
Wenn deg nicht zwischen 3 und 20 ist oder wenn deg sizetab−1 übersteigt, wird eine Fehlermeldung "Invalid parameter(s)" angezeigt und das Programm ebenfalls abgebrochen. |
|
|
|