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); }
}
}