Почти итерационный
метод численного
интегрирования
Какой метод численного интегрирования самый лучший?
Хороший вопрос. Но мне кажется, что учитывая уровень современных компьютеров, то есть их быстродействие, простому человеку (т.е. не физику-теоретику, а, скажем, инженеру) нет смысла искать самый крутой метод, а надо выбрать себе тот метод, в котором человек уверен, или, скажем, который человеку наиболее понятен.
Вспоминая все методы, которые я в разное время придымывал для себя сам, я с особой "теплотой" вспоминаю один – метод итерационного численного интегрирования. Причин "тёплых" чувств несколько:
1) Этот метод очень простой…
2) Метод действительно похож на итерацию – к точному значению программа приходит шаг за шагом, постепенно: от очень грубого к более точному…
3) Программа даёт вам не просто точный ответ, а выдаёт точный интервал, внутри которого находится настоящее точное значение интеграла…
4) Вы всегда уверены, что точность достигнута точно…
Я думаю, что четырёх причин вполне достаточно для того, чтобы полюбить не только какой-то там метод, на даже женщину… Даже красивую.
За основу я взял метод прямоугольников, потому что он самый простой. Я написал такую программу:
{iterint1.pas}
uses crt ;
function f(x:real):real;
begin
f:=x*x;
end;
var
i,n :longint;
x,x0,x1,dx,int :real;
begin clrscr;
x0:=1; x1:=2;
n:=20;
dx:=(x1-x0)/n;
for i:=0 to n-1 do int:=int+f(x0+i*dx)*dx;
writeln('Int=',int:12:6);
if readkey=#3 then; end.
Далее я рассуждал так. При N=2 мы имеем сумму двух прямоугольников:
Рис 1
Точность такого интеграла очень низкая. Поэтому, затем мы делаем так: увеличим N в два раза. Но чтобы использовать предущее значение интеграла, мы его значение поделим попалам. А в новых точках (так как N стало в два раза больше) вычислим новые площади новых прямоугольников. А потом к половинке старого значения интеграла прибавим новую часть, которая на рисунке показана серым цветом:
Рис2
И так много раз – много раз умножаем N в два раза. Поучается почти итерационное приближение к точного значению. После этого я написал новый вариант программы: |