Лабораторная работа 7
.docФедеральное агенство по образованию РФ
СПбГЭТУ «ЛЭТИ»
Кафедра МО-ЭВМ
Факультет КТИ
ОТЧЕТ
по лабораторной работе № 7
Составные формулы прямоугольников, трапеций, Симпсона.
Дисциплина: вычислительная мпатематика
Студент группы 4351
Кузьменко А.
Преподаватель:
Щеголева Н.Л.
Санкт-Петербург
2006
Лабораторная работа № 7
Составные формулы прямоугольников, трапеций, Симпсона.
1. Постановка задачи.
Вычислить методом прямоугольников, трапеций и Симпсона и, применив правило Рунге, найти наименьшее значение n (наибольшее значение шага h), при котором каждый из указанных методов дает приближенное значение интеграла с погрешностью , не превышающей заданную.
2. Теоретические сведения.
Повышения точности численного интегрирования добиваются путем применения составных формул. Для этого, при нахождении определенного интеграла, отрезок разбивают на четное число отрезков длины и на каждом из отрезков длины применяют соответствующую формулу. Таким образом получают составные квадратурные формулы прямоугольников, трапеций и Симпсона.
На сетке , , , составные формулы имеют следующий вид:
формула прямоугольников
;
формула трапеций
;
формула Симпсона
,
где - остаточные члены. При приближенные значения интегралов для всех трех формул (в предположении отсутствия погрешностей округления) стремятся к точному значению интеграла.
Для практической оценки погрешности квадратурной формулы можно использовать правило Рунге. Для этого проводят вычисления на сетках с шагом и , получают приближенные значения интеграла и и за окончательные значения интеграла принимают величины:
- для формулы прямоугольников;
- для формулы трапеций;
- для формулы Симпсона.
За погрешность приближенного значения интеграла для формул прямоугольников и трапеций тогда принимают величину , а для формулы Симпсона .
3. Текст программ.
#include <math.h>
extern double F(double x);
double Met_P (double a,double b,int n)
{
double h, x, s; int i;
h=(b-a)/n;
x=a; s=0;
for (i=1;i<=n;i++)
{
s=s+F(x+h/2);
x=x+h;
}
s=s*h;
return (s);
}
double Met_T (double a,double b,int n)
{
double h, x1, x2, s; int i;
h=(b-a)/n;
x1=a; x2=a+h; s=0;
for (i=1;i<=n;i++)
{
s=s+F(x1)+F(x2);
x1=x2; x2=x2+h;
}
s=s*h/2;
return (s);
}
double Met_S (double a,double b,int n)
{
double h, x1, x2, x3, s; int i;
h=(b-a)/n;
x1=a; x2=a+h; x3=x2+h; s=0;
for (i=1;i<=n/2;i++)
{
s=s+F(x1)+4*F(x2)+F(x3);
x1=x3; x2=x3+h; x3=x2+h;
}
s=s*h/3;
return (s);
}
#include "Met.h"
#include <iostream.h>
#include <conio.h>
void main()
{
double I1, I2, eps, epsil; int n;
clrscr;
cout<<"\n*** Программа вычисляет интеграл f=cos(x^2)на[0,1] ***\n"
<<"*** с заданной точностью eps различными методами ***\n"
<<"\n‚Введите точность: eps=";
cin>>epsil;
cout<<"\n___Метод прямоугольников___";
n=1; eps=1000;
while (epsil<eps)
{
n=n*2;
I1 = Met_P(0,1,n); I2 = Met_P(0,1,n*2);
eps=fabs(I1-I2)/3;
}
I1=I2+eps;
cout<<"\n\nРезультат: "<<I1<<"\nn = "<<n<<"\nТочность: "<<eps;
cout<<"\n\n___Метод трапеций___";
n=1; eps=1000;
while (epsil<eps)
{
n=n*2;
I1 = Met_T(0,1,n); I2 = Met_T(0,1,n*2);
eps=fabs(I1-I2)/3;
}
I1=I2-eps;
cout<<"\n\nРезультат: "<<I1<<"\nn = "<<n<<"\nТочность: "<<eps;
cout<<"\n\n___Метод Симпсона ___";
n=1; eps=1000;
while (epsil<eps)
{
n=n*2;
I1 = Met_S(0,1,n); I2 = Met_S(0,1,n*2);
eps=fabs(I1-I2)/15;
}
I1=I2-eps;
cout<<"\n\nРезультат: "<<I1<<"\nn = "<<n<<"\nТочность: "<<eps;
getch();
}
double F(double x)
{
double s;
s=cos(x*x);
return s;
}
4. Вычислительный эксперимент.
Вычислим точное значение искомого интеграла: = 0,90452426.
Зная точное значение, можем сравнить теоретическую точность с реальной точностью результата.
В столбце «точность» - точность по формуле Рунге, в столбце «точность пр.» - разность полученного и точного результата. Она должна быть меньше точности по Рунге или хотя бы требуемой точности
Результаты работы программы:
epsil=0.01
-
метод
результат
n
точность
точность пр
прямоугольников
0,913267
2
0,00436
0,008743
трапеций
0,887017
2
0,008742
0,017507
Симпсона
0,904378
2
0,000123
0,000146
epsil=0.001
-
метод
результат
n
точность
точность пр
прямоугольников
0,9051
8
0,000274
0,000548
трапеций
0,9034
8
0,000548
0,001095
Симпсона
0,9044
2
0,000123
0,000146
epsil=0.0001
-
метод
результат
n
точность
точность пр
прямоугольников
0,9047
16
6,85E-05
0,000137
трапеций
0,9045
32
3.424e-05
6,83E-05
Симпсона
0,9045
4
1.526e-06
1,26E-06
5. Выводы.
По результатам работы программы видно, что на самом деле результат вычислений обладает точностью несколько меньшей, чем определяют формулы Рунге. При этом метод Симпсона требует гораздо меньшего числа шагов при большой требуемой точности, чем два других метода и имеет большую точность результата.