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

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

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

Пишу программу в которой находится значение интеграла методом Симпсона, трапеци и левых прямоугольников Привожу пример кода: Левые прямоугольники
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;
            }
Вопрос вот в чет: после выдачи результата: например функции e^((-x)^2) в л.п. ответ- 1,75;Трапеци - 1,95; Симпсона - 1,93. Преподаватель сказал что погрешность результатов должна быть 0,01 или 0,001 то есть все ответы должны быть одинаковые. Но у меня они разные, хотя если проверять в мат.калькуляторе то все правильно. Скажите почему так: у меня не корректно написана программа для нахождения метода или суть в самих методах и это нормально ???

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

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

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


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

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

15   голосов , оценка 4.4 из 5
Похожие ответы