Нахождение интеграла - C#
Формулировка задачи:
Пишу программу в которой находится значение интеграла методом Симпсона, трапеци и левых прямоугольников
Привожу пример кода:
Левые прямоугольники
Трапеции
Симпсона
Вопрос вот в чет: после выдачи результата: например функции e^((-x)^2) в л.п. ответ- 1,75;Трапеци - 1,95; Симпсона - 1,93. Преподаватель сказал что погрешность результатов должна быть 0,01 или 0,001 то есть все ответы должны быть одинаковые.
Но у меня они разные, хотя если проверять в мат.калькуляторе то все правильно. Скажите почему так: у меня не корректно написана программа для нахождения метода или суть в самих методах и это нормально ???
Листинг программы
- public double lev1(int n, double a, double b)
- {
- double sum = 0;
- double h = (b - a) / n;
- for (double i = a; i < b; i = i + h)
- sum += F1(i);
- return sum * h;
- }
Листинг программы
- public double lev3(int n, double a, double b)
- {
- double h = (b - a) / n;
- double result = 0.0;
- result += F3(a) / 2.0;
- result += F3(b) / 2.0;
- for (int i = 1; i < n; ++i)
- result += F3(a + i * h);
- return h * result;
- }
Листинг программы
- public double lev8(int n, double a, double b)
- {
- double h;
- h = (b - a) / n;
- double I, I2 = 0.0, I4 = 0.0;
- I4 = F8(a + h);
- for (int k = 2; k < n; k += 2)
- {
- I4 += F8(a + (k + 1) * h);
- I2 += F8(a + k * h);
- }
- I = F8(a) + F8(b) + 4 * I4 + 2 * I2;
- I *= h / 3;
- return I;
- }
Решение задачи: «Нахождение интеграла»
textual
Листинг программы
- class Program
- {
- static void Main(string[] args)
- {
- Console.Write("Введите начальное n:");
- int n=Convert.ToInt32(Console.ReadLine());
- Console.Write("Введите шаг, с которым будем искать:");
- int shag = Convert.ToInt32(Console.ReadLine());
- Console.Write("Введите a:");
- double a = Convert.ToDouble(Console.ReadLine());
- Console.Write("Введите b:");
- double b = Convert.ToDouble(Console.ReadLine());
- double res1, res2, res3;
- do
- {
- res1 = lev1(n, a, b);
- res2 = lev3(n, a, b);
- res3 = lev8(n, a, b);
- n = n + shag;
- }
- while ((Math.Abs(res1 - res2) > 0.0001)||((Math.Abs(res2 - res3) > 0.0001)));
- //Выводим результат
- Console.WriteLine(n);
- Console.WriteLine(res1);
- Console.WriteLine(res2);
- Console.WriteLine(res3);
- }
- public static double F1(double x)
- {
- return Math.Exp(Math.Pow(-x, 2));
- }
- public static double lev1(int n, double a, double b)
- {
- double sum = 0;
- double h = (b - a) / n;
- for (double i = a; i < b; i = i + h)
- sum += F1(i);
- return sum * h;
- }
- public static double lev3(int n, double a, double b)
- {
- double h = (b - a) / n;
- double result = 0.0;
- result += F1(a) / 2.0;
- result += F1(b) / 2.0;
- for (int i = 1; i < n; ++i)
- result += F1(a + i * h);
- return h * result;
- }
- public static double lev8(int n, double a, double b)
- {
- double h;
- h = (b - a) / n;
- double I, I2 = 0.0, I4 = 0.0;
- I4 = F1(a + h);
- for (int k = 2; k < n; k += 2)
- {
- I4 += F1(a + (k + 1) * h);
- I2 += F1(a + k * h);
- }
- I = F1(a) + F1(b) + 4 * I4 + 2 * I2;
- I *= h / 3;
- return I;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д