C#, Numerische Berechnung – Berechnungsmethode und Quellcode von Legendre-Funktionen und sphärischen Harmonischen

 

Verwenden des Systems;

Namespace Legalsoft.Truffer
{     /// <summary>     /// Legendre-Funktionen und sphärische Harmonische     /// </summary>     public class Legendre      {         public Legendre()         {         }







        public static double plegendre(int l, int m, double x)
        {             if (m < 0 || m > l || Math.Abs(x) > 1.0)             {                 throw new Exception("Bad arguments in routine plgndr");             }             double pll = 0.0;             doppeltes pmm = 1,0;             if (m > 0)             {                 double omx2 = (1,0 - x) * (1,0 + x);                 doppelte Tatsache = 1,0;                 for (int i = 1; i <= m; i++)                 {                     pmm *= omx2 * fact / (fact + 1.0);                     Tatsache += 2,0;                 }             }
















            pmm = Math.Sqrt((2 * m + 1) * pmm / (4.0 * Math.PI));
            if ((m & 1) != 0)
            {                 pmm = -pmm;             }             if (l == m)             {                 return pmm;             }             else             {                 double pmmp1 = x * Math.Sqrt(2.0 * m + 3.0) * pmm;                 if (l == (m + 1))                 {                     return pmmp1;                 }                 else                 {                     double oldfact = Math.Sqrt(2.0 * m + 3.0);
















                    for (int ll = m + 2; ll <= l; ll++)
                    {                         double fact = Math.Sqrt((4.0 * ll * ll - 1.0) / (ll * ll - m * m));                         pll = (x * pmmp1 - pmm / oldfact) * fact;                         oldfact = Tatsache;                         pmm = pmmp1;                         pmmp1 = pll;                     }                     return pll;                 }             }         }









        public static double plgndr(int l, int m, double x)
        {             if (m < 0 || m > l || Math.Abs(x) > 1.0)             {                 throw new Exception("Bad arguments in routine plgndr");             }             double prod = 1.0;             for (int j = l - m + 1; j <= l + m; j++)             {                 prod *= j;             }             return Math.Sqrt(4.0 * Math.PI * prod / (2 * l + 1)) * plegendre(l, m, x);         }










    }
}
 

Supongo que te gusta

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