Проблема с интегралами
При решении задачи по написанию алгоритма вычисления интегралов методом Симпсона столкнулся со следующей проблемой: при вычислении программа выдает значение с некоторой погрешностью. Например, программа выдает одно число, а при проверке его на различных сайтах по интегрированию получается другое, хоть и незначительно, но меньшее. В чем может быть проблема: в самом алгоритме, или же это действительно погрешность?
Код метода:
public delegate double Func (double x);
public static double Function1 (double x)
{
return 20/(10+2*x*x);
}
public static double Simpsons (double a, double b, int N, double h, Func Y)
{
double q = 0;
double q1 = a + h;
for (int i = 1; i < N; i+=2) {
q = q + 4 * Y(q1);
q1 = q1 + h;
q = q + 2 * Y(q1);
q1 = q1 + h;
}
q = h/3*(q+Y(a) - Y(b));
return q;
}
Код основной программы:
double a = 0;
double b = 1;
double N = 40;
double h = (b-a)/N;
double S2 = Class1.Simpsons(a,b,N,h,Class1.Function1);
Console.WriteLine(S2.ToString("0.0000000000"));
Console.ReadKey();
Вывод программы: 1,8806867227
Вывод сайтов: 1.8806867212
P.S. Пробовал поменять количество итераций - значение либо все равно больше, либо меньше, но никак не совпадает.
Ответы (1 шт):
Действительно, проблема оказалась лишь в погрешностях. Связанно это с принципом работы компьютера с длинными числами и их переводом в двоичную систему. Поэтому небольшие погрешности - нормальное явление.