Численное интегрирование, формула Симпсона
"Численное
интегрирование, формула Симпсона"
Постановка задачи.
Задание состоит в написании программы для
численного интегрирования с помощью формулы Симпсона.
Описание формулы Симпсона
Формула Симпсона (также
Ньютона-Симпсона<https://ru.wikipedia.org/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%B0>)
относится к приёмам численного
интегрирования.
Формулой Симпсона называется
интеграл от интерполяционного многочлена второй степени на отрезке :
где , и - значения функции в
соответствующих точках (на концах отрезка и в его середине).
Погрешность.
При условии, что у функции на отрезке существует
четвёртая производная, погрешность , согласно найденной Джузеппе Пеано
<https://ru.wikipedia.org/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%B5>
формуле, равна:
В связи с тем, что значение зачастую
неизвестно, для оценки погрешности используется следующее неравенство:
интерполяционный
многочлен программа
Текст программы.
// sim.cpp : Defines the entry point
for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <math.h>
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 < 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);
}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", rez);
printf("Правило
Рунге:%f\n",
run);
return 0;
}
Скриншоты
Рис.
1.