среда, 24 сентября 2008 г.

Основы информатики. Вычисление определенных интегралов. Метод Симпсона.

Метод трапеций наиболее прост, но не является оптимальным по быстродействию. Ненамного более громоздким, но значительно более оперативным является МЕТОД СИМПСОНА. Не вдаваясь в детали, укажем, что в этом методе отдельные участки подынтегральной функции представляются не линейной, как в методе трапеций, а квадратичной интерполяцией. По этой причине метод Симпсона имеет второе название - метод парабол. В этой методике число разбиений области интегрирования n должно быть четным. Тогда формула Симпсона запишется в виде:Для вычисления интеграла с заданной точностью можно начать, например, с n=2 и далее действовать аналогично методу трапеций, удваивать число разбиений.
В данном разделе было бы естественным представить методы вычисления кратных (двойных, тройных и так далее) определенных интегралов. Однако, мы отложим этот вопрос на будущее. Дело в том, что применение к кратным интегралам концепций методов трапеций или парабол сталкивается с рядом серьезных проблем. Так, для двойных интегралов, область интегрирования следовало бы разбивать на прямоугольные или квадратные малые подобласти. При этом возникает достаточно нетривиальная задача правильного учета произвольной формы границы. Еще большие проблемы связаны с аппроксимацией "вырезаемого" подобластью участка телом с достаточно просто вычисляемым объемом. Хотя указанные проблемы в принципе решаемы, более эффективным оказывается применение здесь одного из приложений общей концепции методики статистических испытаний или метода Монте-Карло. Рассмотрению этой концепции посвящен последний раздел этой главы, где и описаны средства вычисления кратных интегралов.


Методом трапеций и методом Симпсона вычислить с заданной точностью определенный интеграл:


Программный код:

procedure TForm1.Button1Click(Sender: TObject);
var
p,x,h,a,b,xch,xnch:real;
n,i:integer;
begin
a:=0;
b:=pi;
n:=strtoint(edit1.Text);
h:=(b-a)/n;
x:=sin(a)+sin(b);
xch:=0;
xnch:=0;
for i:=1 to n do
if i mod 2=0 then
xch:=xch+sin(a+i*h)
else
xnch:=xnch+sin(a+i*h);
x:=(x+4*xnch+2*xch)*h/3;
edit2.Text:=floattostr(x);
p:=abs((2-x)/2);
edit3.Text:=floattostr(p);
end;

Скачать проект

Вся теория

1 комментарий:

[wiZArd] комментирует...
Этот комментарий был удален автором.