Чисельне інтегрування, формула Сімпсона
Постановка завдання.
Завдання полягає в написанні програми для чисельного інтегрування за допомогою формули Сімпсона.
Опис формули Сімпсона
Формула Сімпсона (також Ньютона-Симпсонаlt;http://ru.wikipedia/wiki/%D0%A4%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0_%D0%A1%D0%B8%D0%BC%D0%BF%D1%81%D0%BE%D0%BD%D0%B0gt;) відноситься до прийомів чисельного інтегрування.
Формулою Сімпсона називається інтеграл від інтерполяційного многочлена другого ступеня на відрізку:
де, і - значення функції у відповідних точках (на кінцях відрізка і в його середині).
Похибка.
За умови, що у функції на відрізку існує четвертий похідна, похибка, згідно знайденої Джузеппе Пеано lt;http://ru.wikipedia/wiki/%D0%9F%D0%B5%D0%B0%D0%BD%D0%BE,_%D0%94%D0%B6%D1%83%D0%B7%D0%B5%D0%BF%D0%BF%D0%B5gt; формулою, дорівнює:
У зв'язку з тим, що значення часто невідомо, для оцінки похибки використовується наступне нерівність:
інтерполяційний многочлен програма
Текст програми.
//sim.cpp: Defines the entry point for the console application.
//
# include stdafx.h
# include lt; iostream gt;
# include lt; math.h gt;
# include lt; locale.h gt;
using namespace std; float (* fun) (float);
float funct (float x)
{
return (sin (x * x) + 2 * x);
} simps (float a, float b, int n, fun f1)
{
float h, sum, x;
int i, k;
sum=0;
h=(b - a)/n;
sum +=f1 (a);
for (i=1; i lt; n; i ++)
{
x=a + i * h;
if (i% 2 == 0) k=2;
else k=4;
sum +=k * f1 (x);
}
x=a + n * h;
sum +=f1 (x);
return h * sum/3;
} rung (float a, float b, int n, fun f)
{
float Ih_2, Ih, modul;
Ih_2=simps (a, b, n * 2, f);
Ih=simps (a, b, n, f);
modul=abs (Ih_2 - Ih);
return modul/15;
} main ()
{
setlocale (LC_CTYPE, Russian );
float a, b, c, d, n, rez, run;
a=2;
b=4;
n=10;
rez=simps (a, b, n, funct);
printf ( Метод Сімпсона:% f n n raquo ;, rez);
printf ( Правило Рунге:% f n raquo ;, run);
return 0;
}
Скріншоти
Рис.
1.