Симпсоны томьёогоор интегралчлах¶
Бид тодорхой интегралын утгыг тооцоолох гэж байна
Энд тайлбарласан шийдлийг Томас Симпсон 1743 онд диссертацийнхаа нэгэнд нийтэлсэн.
Симпсоны томьёо¶
$n$ нь ямар нэг натурал тоо байг. Бид интегралчлалын $[a, b]$ хэрчмийг $2n$ тэнцүү хэсэгт хуваана:
Одоо бид $[x_ {2i-2}, x_ {2i}]$, $i = 1 \ldots n$ хэрчим тус бүр дээр интегралыг тусад нь тооцоолж, дараа нь бүх утгыг нэмнэ.
Тэгэхээр $[x_ {2i-2}, x_ {2i}], i = 1 \ldots n$ дараагийн хэрчмийг авч үзье гэж бодъё. Түүн дээрх $f(x)$ функцийг $(x_ {2i-2}, x_ {2i-1}, x_ {2i})$ гэсэн 3 цэгээр дайрч буй $P(x)$ параболоор сольё. Ийм парабол үргэлж оршин байх ба цор ганц; түүнийг аналитик байдлаар олж болно. Жишээ нь бид Лагранжийн олон гишүүнтийн интерполяц ашиглан түүнийг байгуулж болно. Үлдсэн цорын ганц зүйл бол энэ олон гишүүнтийг интегралчлах явдал юм. Хэрэв та үүнийг ерөнхий $f$ функцийн хувьд хийвэл гайхалтай энгийн илэрхийллийг олж авна:
Эдгээр утгыг бүх хэрчмээр нэмбэл бид эцсийн Симпсоны томьёо-г олж авна:
Алдаа¶
Симпсоны томьёогоор интегралыг ойролцоолоход гарах алдаа нь
энд $\xi$ нь $a$ ба $b$ хоёрын хооронд орших ямар нэг тоо.
Алдаа нь асимптотоор $(b-a)^5$-д пропорциональ. Гэвч дээрх гаргалгаанууд нь $(b-a)^4$-д пропорциональ алдааг санал болгож байгаа. Симпсоны дүрэм нэмэлт эрэмбэ олж авдаг, учир нь интеграл доорх функцийг тооцоолох цэгүүд $[a, b]$ интервалд тэгш хэмтэйгээр тархсан байдаг.
Implementation¶
Here, $f(x)$ is some user-defined function.
const int N = 1000 * 1000; // number of steps (already multiplied by 2)
double simpson_integration(double a, double b){
double h = (b - a) / N;
double s = f(a) + f(b); // a = x_0 and b = x_2n
for (int i = 1; i <= N - 1; ++i) { // Refer to final Simpson's formula
double x = a + h * i;
s += f(x) * ((i & 1) ? 4 : 2);
}
s *= h / 3;
return s;
}