Написать программу вычисления определенного интеграла по методу прямоугольников - 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);
}