Нахождение интеграла - C#

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

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

Пишу программу в которой находится значение интеграла методом Симпсона, трапеци и левых прямоугольников Привожу пример кода: Левые прямоугольники
Листинг программы
  1. public double lev1(int n, double a, double b)
  2. {
  3. double sum = 0;
  4. double h = (b - a) / n;
  5. for (double i = a; i < b; i = i + h)
  6. sum += F1(i);
  7. return sum * h;
  8. }
Трапеции
Листинг программы
  1. public double lev3(int n, double a, double b)
  2. {
  3. double h = (b - a) / n;
  4. double result = 0.0;
  5. result += F3(a) / 2.0;
  6. result += F3(b) / 2.0;
  7. for (int i = 1; i < n; ++i)
  8. result += F3(a + i * h);
  9. return h * result;
  10. }
Симпсона
Листинг программы
  1. public double lev8(int n, double a, double b)
  2. {
  3. double h;
  4. h = (b - a) / n;
  5. double I, I2 = 0.0, I4 = 0.0;
  6. I4 = F8(a + h);
  7. for (int k = 2; k < n; k += 2)
  8. {
  9. I4 += F8(a + (k + 1) * h);
  10. I2 += F8(a + k * h);
  11. }
  12. I = F8(a) + F8(b) + 4 * I4 + 2 * I2;
  13. I *= h / 3;
  14. return I;
  15. }
Вопрос вот в чет: после выдачи результата: например функции e^((-x)^2) в л.п. ответ- 1,75;Трапеци - 1,95; Симпсона - 1,93. Преподаватель сказал что погрешность результатов должна быть 0,01 или 0,001 то есть все ответы должны быть одинаковые. Но у меня они разные, хотя если проверять в мат.калькуляторе то все правильно. Скажите почему так: у меня не корректно написана программа для нахождения метода или суть в самих методах и это нормально ???

Решение задачи: «Нахождение интеграла»

textual
Листинг программы
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {            
  5.             Console.Write("Введите начальное n:");
  6.             int n=Convert.ToInt32(Console.ReadLine());
  7.                        
  8.             Console.Write("Введите шаг, с которым будем искать:");
  9.             int shag = Convert.ToInt32(Console.ReadLine());
  10.  
  11.             Console.Write("Введите a:");
  12.             double a = Convert.ToDouble(Console.ReadLine());
  13.  
  14.             Console.Write("Введите b:");
  15.             double b = Convert.ToDouble(Console.ReadLine());            
  16.  
  17.             double res1, res2, res3;
  18.  
  19.             do
  20.             {
  21.                 res1 = lev1(n, a, b);
  22.                 res2 = lev3(n, a, b);
  23.                 res3 = lev8(n, a, b);
  24.                                
  25.                 n = n + shag;                
  26.             }
  27.             while ((Math.Abs(res1 - res2) > 0.0001)||((Math.Abs(res2 - res3) > 0.0001)));
  28.  
  29.             //Выводим результат
  30.             Console.WriteLine(n);
  31.             Console.WriteLine(res1);
  32.             Console.WriteLine(res2);
  33.             Console.WriteLine(res3);
  34.         }
  35.  
  36.         public static double F1(double x)
  37.         {
  38.             return Math.Exp(Math.Pow(-x, 2));
  39.         }
  40.  
  41.         public static double lev1(int n, double a, double b)
  42.         {
  43.             double sum = 0;
  44.             double h = (b - a) / n;
  45.             for (double i = a; i < b; i = i + h)
  46.                 sum += F1(i);
  47.             return sum * h;
  48.         }
  49.  
  50.         public static double lev3(int n, double a, double b)
  51.         {
  52.             double h = (b - a) / n;
  53.             double result = 0.0;
  54.  
  55.             result += F1(a) / 2.0;
  56.             result += F1(b) / 2.0;
  57.  
  58.             for (int i = 1; i < n; ++i)
  59.                 result += F1(a + i * h);
  60.             return h * result;
  61.         }
  62.  
  63.         public static double lev8(int n, double a, double b)
  64.         {
  65.             double h;
  66.             h = (b - a) / n;
  67.             double I, I2 = 0.0, I4 = 0.0;
  68.             I4 = F1(a + h);
  69.             for (int k = 2; k < n; k += 2)
  70.             {
  71.                 I4 += F1(a + (k + 1) * h);
  72.                 I2 += F1(a + k * h);
  73.             }
  74.             I = F1(a) + F1(b) + 4 * I4 + 2 * I2;
  75.             I *= h / 3;
  76.  
  77.             return I;
  78.         }
  79.     }

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


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

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

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

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

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

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