Численное интегрирование методом Гаусса I = exp^(-(x/2))dx - C#
Формулировка задачи:
Help me, please
возникли трудности с написанием программы(новичек в программировании) вычисления интегрирования методом Гаусса на с#
I = exp^(-(x/2))dx
Пределы интегрирования - от 0 до х.
Сам метод разобрать более менее получилось, а в коде запуталась
Решение задачи: «Численное интегрирование методом Гаусса I = exp^(-(x/2))dx»
textual
Листинг программы
- class Program
- {
- public static double Legendre(double x, int deg)
- {
- // полином Лежандра степени n в точке X
- double P0 = 1.0;
- double P1 = x;
- double P2 = (3.0 * x * x - 1) / 2.0;
- int n = 1;
- if (deg < 0)
- throw new Exception("Bad Hermite polynomial: deg < 0");
- if (deg == 0)
- return P0;
- else if (deg == 1)
- return P1;
- else
- {
- while (n < deg)
- {
- P2 = 2.0 * x * P1 - P0 - (x * P1 - P0) / (deg + 1);
- P0 = P1;
- P1 = P2;
- n++;
- }
- return P2;
- }
- }
- public static double GaussLegendre(Function f, double a, double b, int n)
- {
- // Формула Гаусса
- double[] x, w;
- LegendreNodesWeights(n, out x, out w);
- double sum = 0.0;
- for (int i = 0; i < n; i++)
- {
- sum += 0.5 * (b - a) * w[i] * f(0.5 * (a + b) + 0.5 * (b - a) * x[i]);
- }
- return sum;
- }
- public static void LegendreNodesWeights(int n, out double[] x, out double[] w)
- {
- // веса полиномов Лежандра
- double c, d, p1, p2, p3, dp;
- x = new double[n];
- w = new double[n];
- for (int i = 0; i < (n + 1) / 2; i++)
- {
- c = Math.Cos(Math.PI * (4 * i + 3) / (4 * n + 2));
- do
- {
- p2 = 0;
- p3 = 1;
- for (int j = 0; j < n; j++)
- {
- p1 = p2;
- p2 = p3;
- p3 = ((2 * j + 1) * c * p2 - j * p1) / (j + 1);
- }
- dp = n * (c * p3 - p2) / (c * c - 1);
- d = c;
- c -= p3 / dp;
- }
- while (Math.Abs(c - d) > 1e-12);
- x[i] = c;
- x[n - 1 - i] = -c;
- w[i] = 2 * (1 - x[i] * x[i]) / (n + 1) / (n + 1) / Legendre(x[i], n + 1) / Legendre(x[i], n + 1);
- w[n - 1 - i] = w[i];
- }
- }
- public delegate double Function(double x);
- static double f2(double x)
- {
- return Math.Exp(-x * x);
- }
- static void Main(string[] args)
- {
- // формулы взяты из [url]https://en.wikipedia.org/wiki/Gaussian_quadrature[/url]
- Console.WriteLine("\nResult from Gauss-Legendre method:\n");
- double a,b,result;
- // f2 - интегрируемая функция
- // a,b - пределы интегрирования
- // n - степень полинома Лежандра
- a = 0;
- b = 10;
- for (int n = 1; n < 9; n++)
- {
- result = GaussLegendre(f2, a, b, n);
- Console.WriteLine(" n = {0}, result = {1}", n, result);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д