C#, Numerische Berechnung – Berechnungsmethode und Quellprogramm unter Verwendung von Algorithmen zur Beschleunigung der Konvergenz von Folgen

 

Algorithmen beschleunigen die Konvergenz von Folgen. Die Initialisierungsmethode ruft den Konstruktor mit den Parametern nmax auf, was die Anzahl der zu summierenden Terme ist, und eps, die gewünschte Genauigkeit. Rufen Sie dann kontinuierlich die nächste Funktion auf, die Parameter sind der nächste Teil und die Sequenz. Die aktuelle Schätzung des Sequenzlimits wird von next zurückgegeben. Konvergenz erkannt, Einstellungsflag cnvgd.

Verwenden des Systems;

namespace Legalsoft.Truffer
{     /// <summary>     /// Konvergenzbeschleunigung einer Sequenz durch den Algorithmus. Initialisierung durch     /// Aufruf des Konstruktors mit den Argumenten nmax, einer Obergrenze für die     /// Anzahl der zu summierenden Terme, und epss, die gewünschte Genauigkeit. Führen Sie dann     /// aufeinanderfolgende Aufrufe der nächsten Funktion durch, wobei das Argument die nächste Teilsumme     /// der Sequenz ist. Die aktuelle Schätzung des Grenzwerts der Sequenz wird      /// von next zurückgegeben. Das Flag cnvgd wird gesetzt, wenn Konvergenz erkannt wird.     /// </summary>     public class Epsalg     {         private double[] e { get; Satz; }         private int n { get; Satz; }












        private int ncv { get; Satz; }
        public bool cnvgd { get; Satz; }
        /// <summary>
        /// Zahlen in der Nähe der Unterlauf- und Überlaufgrenzen der Maschine.
        /// </summary>
        private double eps { get; Satz; }
        private double small { get; Satz; }
        private double big { get; Satz; }
        private double lastval { get; Satz; }
        private double lasteps { get; Satz; }

        public Epsalg(int nmax, double epss)
        {             this.e = new double[nmax];             this.n = 0;             this.ncv = 0;             this.cnvgd = false;             this.eps = epss;             this.lastval = 0.0;             small = float.MinValue * 10.0;             big = double.MaxValue;         }








        public double next(double sum)
        {             e[n] = sum;             doppelte Temperatur2 = 0,0;             for (int j = n; j > 0; j--)             {                 double temp1 = temp2;                 temp2 = e[j - 1];                 double diff = e[j] - temp2;                 if (Math.Abs(diff) <= small)                 {                     e[j - 1] = big;                 }                 else                 {                     e[j - 1] = temp1 + 1.0 / diff;                 }             }             n++;             double val = (n & 1) != 0 ? e[0] : e[1];


















            if (Math. Abs(val) > 0.01 * great)
            {                 val = lastval;             }             laststeps = Math.Abs(val - lastvalue);             if (laststep > eps)             {                 ncv = 0 ;             }             else             {                 ncv++;             }             if ( ncv >= 3 )             {                 cnvgd = true ;             }             return (lastval = val);         } }
















    }
}
 

Supongo que te gusta

Origin blog.csdn.net/beijinghorn/article/details/132371738
Recomendado
Clasificación