Небольшой вычислительный эксперимент.
Выбрана для интегрирования функция
от нуля до 3. Расчёт делался методом прямоугольников (Rect) и Симпсона (который для данной функции точный)
Для наглядности выбран тип данных float (языка С), то есть 6-7 значащих цифр.
Шаг постепенно уменьшался (втрое каждый раз)
Видно, что для метода прямоугольников ошибка (разность с аналитически полученным значением 9) по мере уменьшения шага падает, но начиная с какого-то значения начинает расти.
Для метода Симпсона ошибка нулевая и при большом шаге, но когда шаг уменьшается, накопление ошибок в силу большого числа шагов начинает проявляться, в какой-то момент оба метода близки по погрешности (и она именно вычислительная, а не от низкого порядка метода), а потом погрешность начинает катастрофически расти.
Код:
N h ErrRect ErrSimp
0 1.000000000 -4.000000000 0.000000000
1 0.333333343 -1.444444656 0.000000000
2 0.111111112 -0.493822098 0.000004768
3 0.037037037 -0.165981293 -0.000000954
4 0.012345679 -0.055462837 0.000015259
5 0.004115226 -0.018441200 0.000065804
6 0.001371742 -0.005952835 0.000224113
7 0.000457247 -0.001404762 0.000656128
8 0.000152416 0.000142097 0.000816345
9 0.000050805 -0.005940437 -0.005706787
10 0.000016935 -0.007421494 -0.007340431
11 0.000005645 -0.005413055 -0.005387306
12 0.000001882 0.182534218 0.182544708
13 0.000000627 0.165490150 0.165493965
14 0.000000209 1.796812057 1.796812057
15 0.000000070 -1.000000000 -1.000000000
16 0.000000023 -8.875000000 -8.875000000
17 0.000000008 -8.984375000 -8.984375000
18 0.000000003 -8.999755859 -8.999755859
Взяв более употребительный тип double (14-15 значащих цифр), получил более поздний срыв точности, но эффект тот же.
Код:
N h ErrRect ErrSimp
0 1.000000000 -4.000000000 0.000000000
1 0.333333333 -1.444444444 -0.000000000
2 0.111111111 -0.493827160 0.000000000
3 0.037037037 -0.165980796 -0.000000000
4 0.012345679 -0.055479348 0.000000000
5 0.004115226 -0.018510051 0.000000000
6 0.001371742 -0.006171899 -0.000000000
7 0.000457247 -0.002057509 -0.000000000
8 0.000152416 -0.000685859 0.000000000
9 0.000050805 -0.000228622 0.000000000
10 0.000016935 -0.000076208 0.000000000
11 0.000005645 -0.000025403 0.000000000
12 0.000001882 -0.000008468 -0.000000000
13 0.000000627 -0.000002823 -0.000000000
14 0.000000209 -0.000000944 -0.000000003
15 0.000000070 -0.000000316 -0.000000002
16 0.000000023 -0.000000144 -0.000000040
17 0.000000008 -0.000000087 -0.000000052
18 0.000000003 0.000000175 0.000000186
видим тот же эффект, только отсроченный.