// MMath.BesselInverse(ref double, double, double, double, double, double) /// <summary> /// Setzt den Interpolationsfaktor der Nullstelle für fünf Tabellenwerte und liefert TRUE, falls die Interpolation in weniger als 100 Schritten konvergiert. /// </summary> /// <param name="p">Interpolationfaktor der Nullstelle.</param> /// <param name="yM2">Funktionswert an der Stelle t-2.</param> /// <param name="yM1">Funktionswert an der Stelle t-1.</param> /// <param name="y0">Funktionswert an der Stelle t0.</param> /// <param name="yP1">Funktionswert an der Stelle t+1.</param> /// <param name="yP2">Funktionswert an der Stelle t+2.</param> /// <returns>TRUE, falls die Interpolation in weniger als 100 Schritten konvergiert.</returns> public static bool BesselInverse(ref double p, double yM2, double yM1, double y0, double yP1, double yP2) { // Lokale Felder einrichten double a = yM1 - yM2; double b = y0 - yM1; double c = yP1 - y0; double d = yP2 - yP1; double e = b - a; double f = c - b; double g = d - c; double h = f - e; double j = g - f; double k = j - h; // Lokale Hilfsfelder einrichten double h1 = k / 24.0; double h2 = (h + j) / 12.0; double h3 = f / 2.0 - h1; double h4 = (b + c) / 2.0 - h2; // Interpolation einrichten double n = 0.0; double dN = -1.0 * MMath.Polynome(n, y0, h4, h3, h2, h1) / MMath.Polynome(n, h4, 2.0 * h3, 3.0 * h2, 4.0 * h1); int i = 0; // Interpolationsschleife while (MMath.Abs(dN) > 0.00005) { // Zähler inkrementieren und prüfen i++; if (i > 100) { return(false); } // Nächsten Schritt vorbereiten n += dN; dN = -1.0 * MMath.Polynome(n, y0, h4, h3, h2, h1) / MMath.Polynome(n, h4, 2.0 * h3, 3.0 * h2, 4.0 * h1); } // Faktor anwenden p = n; return(true); }
// MMath.Bessel(double, double, double, double, double, double) /// <summary> /// Liefert den Funktionswert der Interpolation mit fünf Tabellenwerten. /// </summary> /// <param name="p">Interpolationsfaktor.</param> /// <param name="yM2">Funktionswert an der Stelle t-2.</param> /// <param name="yM1">Funktionswert an der Stelle t-1.</param> /// <param name="y0">Funktionswert an der Stelle t0.</param> /// <param name="yP1">Funktionswert an der Stelle t+1.</param> /// <param name="yP2">Funktionswert an der Stelle t+2.</param> /// <returns>Funktionswert der Interpolation mit fünf Tabellenwerten.</returns> public static double Bessel(double p, double yM2, double yM1, double y0, double yP1, double yP2) { // Lokale Felder einrichten double a = yM1 - yM2; double b = y0 - yM1; double c = yP1 - y0; double d = yP2 - yP1; double e = b - a; double f = c - b; double g = d - c; double h = f - e; double j = g - f; double k = j - h; // Hilfsfelder einrichten double h1 = k / 24.0; double h2 = (h + j) / 12.0; double h3 = f / 2.0 - h1; double h4 = (b + c) / 2.0 - h2; // Funktionswert berechnen return(MMath.Polynome(p, y0, h4, h3, h2, h1)); }