Численное интегрирование методом Гаусса I = exp^(-(x/2))dx - C#

Узнай цену своей работы

Формулировка задачи:

Help me, please возникли трудности с написанием программы(новичек в программировании) вычисления интегрирования методом Гаусса на с# I = exp^(-(x/2))dx Пределы интегрирования - от 0 до х. Сам метод разобрать более менее получилось, а в коде запуталась

Решение задачи: «Численное интегрирование методом Гаусса I = exp^(-(x/2))dx»

textual
Листинг программы
  1.     class Program
  2.     {
  3.  
  4.         public static double Legendre(double x, int deg)
  5.         {
  6. // полином Лежандра степени n в точке X
  7.             double P0 = 1.0;
  8.             double P1 = x;
  9.             double P2 = (3.0 * x * x - 1) / 2.0;
  10.             int n = 1;
  11.             if (deg < 0)
  12.                 throw new Exception("Bad Hermite polynomial: deg < 0");
  13.             if (deg == 0)
  14.                 return P0;
  15.             else if (deg == 1)
  16.                 return P1;
  17.             else
  18.             {
  19.                 while (n < deg)
  20.                 {
  21.                     P2 = 2.0 * x * P1 - P0 - (x * P1 - P0) / (deg + 1);
  22.                     P0 = P1;
  23.                     P1 = P2;
  24.                     n++;
  25.                 }
  26.                 return P2;
  27.             }
  28.         }
  29.         public static double GaussLegendre(Function f, double a, double b, int n)
  30.         {
  31. // Формула Гаусса
  32.             double[] x, w;
  33.             LegendreNodesWeights(n, out x, out w);
  34.  
  35.             double sum = 0.0;
  36.             for (int i = 0; i < n; i++)
  37.             {
  38.                 sum += 0.5 * (b - a) * w[i] * f(0.5 * (a + b) + 0.5 * (b - a) * x[i]);
  39.             }
  40.             return sum;
  41.         }
  42.         public static void LegendreNodesWeights(int n, out double[] x, out double[] w)
  43.         {
  44. // веса полиномов Лежандра
  45.             double c, d, p1, p2, p3, dp;
  46.  
  47.             x = new double[n];
  48.             w = new double[n];
  49.  
  50.             for (int i = 0; i < (n + 1) / 2; i++)
  51.             {
  52.                 c = Math.Cos(Math.PI * (4 * i + 3) / (4 * n + 2));
  53.                 do
  54.                 {
  55.                     p2 = 0;
  56.                     p3 = 1;
  57.                     for (int j = 0; j < n; j++)
  58.                     {
  59.                         p1 = p2;
  60.                         p2 = p3;
  61.                         p3 = ((2 * j + 1) * c * p2 - j * p1) / (j + 1);
  62.                     }
  63.                     dp = n * (c * p3 - p2) / (c * c - 1);
  64.                     d = c;
  65.                     c -= p3 / dp;
  66.                 }
  67.                 while (Math.Abs(c - d) > 1e-12);
  68.                 x[i] = c;
  69.                 x[n - 1 - i] = -c;
  70.                 w[i] = 2 * (1 - x[i] * x[i]) / (n + 1) / (n + 1) / Legendre(x[i], n + 1) / Legendre(x[i], n + 1);
  71.                 w[n - 1 - i] = w[i];
  72.             }
  73.         }
  74.         public delegate double Function(double x);
  75.  
  76.         static double f2(double x)
  77.         {
  78.             return Math.Exp(-x * x);
  79.         }
  80.  
  81.         static void Main(string[] args)
  82.         {
  83. // формулы взяты из [url]https://en.wikipedia.org/wiki/Gaussian_quadrature[/url]
  84.  
  85.             Console.WriteLine("\nResult from Gauss-Legendre method:\n");
  86.             double a,b,result;
  87.  
  88.             // f2 - интегрируемая функция
  89.             // a,b - пределы интегрирования
  90.             // n - степень полинома Лежандра
  91.  
  92.             a = 0;
  93.             b = 10;
  94.             for (int n = 1; n < 9; n++)
  95.             {
  96.                 result = GaussLegendre(f2, a, b, n);
  97.                 Console.WriteLine(" n = {0}, result = {1}", n, result);
  98.             }
  99.         }
  100.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы