Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        // 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));
        }