Написать программу вычисления определенного интеграла по методу прямоугольников - C#

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

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

Люди добрые, может кто подсказать? Задание: Написать программу вычисления определенного интеграла по методу прямоугольников (не важно правого или левого). Ответ должен равняться Пи (3.14159). Есть a, b и шаг n. N вычисляется по следующей формуле: Получился такой код, но ответ не совпадает все равно как ни крути
static void Main(string[] args)
        {
            Console.WriteLine("Введите N");
            double n = Convert.ToDouble(Console.ReadLine());

            Console.WriteLine("Введите границы в формате a-b");
            string s = Console.ReadLine();
            double a = Convert.ToDouble(s.Split('-')[0]);
            double b = Convert.ToDouble(s.Split('-')[1]);
            double step = (b - a) / n;
            double result = 0;
 
            for (double x = a; x < b; x += step)
            {
                result += func(x + step) * step;
            }
            Console.WriteLine(result);
            Console.ReadKey();
        }
 
            static double func(double x)
        {
            return x * Math.Sin(x);
        }
П.с. все темы про этот метод на этом форуме пересмотрены - все равно ничего не выходит...

Решение задачи: «Написать программу вычисления определенного интеграла по методу прямоугольников»

textual
Листинг программы
static void Main(string[] args)
{
    Console.WriteLine("Введите N");
    //double n = Convert.ToDouble(Console.ReadLine());
    int n = 10; // тут шаг можно оптимально определить по формулам
 
    Console.WriteLine("Введите границы в формате a-b");
    //string s = Console.ReadLine();
    double a = 0.0;
    double b = Math.PI;
    double result = 0.0, resultOnHalfDx = double.NegativeInfinity;
    double eps = 1e-5;
 
    while (Math.Abs(resultOnHalfDx - result) > eps) // тут формула оценки погрешности, через производные 
    {
        n++;
        result = resultOnHalfDx;
        resultOnHalfDx = Rects(func, a, b, (b - a) / n);
    }
    Console.WriteLine("{0:F5}", result);
    Console.WriteLine("{0:F5} - Pi", Math.PI);
    Console.ReadKey();
}
 
delegate double F (double x);
 
static double Rects(F f, double a, double b, double dx)
{
    double r = 0.0;
    while (a + dx < b)
    {
        r += f(a) * dx;
        a += dx;
    }
    return r + f(a) * (b - a);
}
 
static double func(double x)
{
    return x * Math.Sin(x);
}

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


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

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

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