Лабораторная работа 8 / lab8/LR_8/ВМ_8.doc
Министерство образования и науки РФ
Санкт-Петербургский государственный электротехнический университет
ЛЭТИ
кафедра МОЭВМ
Лабораторная работа No8 по дисциплине вычислительная математика
на тему:
«Формула Гаусса».
г. Санкт-Петербург
- Год
I. Цель работы:
Используя квадратурную формулу Гаусса наивысшего порядка точности, вычислить значения интеграла
Интеграл предлагается вычислить по квадратурной формуле Гаусса с восемью узлами:
, ;
, ;
, ;
, .
II. Общие сведения:
В квадратурной формуле Гаусса
узлы и коэффициенты подобраны так, чтобы формула была точна для всех многочленов степени . Для приближенного вычисления интеграла по конечному отрезку выполняется замена переменной ; тогда квадратурная формула Гаусса имеет следующий вид:
,
где ; - узлы квадратурной формулы Гаусса; - гауссовы коэффициенты .
Если подынтегральная функция достаточно гладкая, то формула Гаусса обеспечивает очень высокую точность при небольшом числе узлов.
III. Порядок выполнения работы:
Составить программу-функцию для вычисления интеграла по формуле Гаусса.
Составить программу-функцию для вычисления значений подынтегральной функции.
Составить головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.
Результаты работы оформить в виде краткого отчета, содержащего характеристику используемого метода вычислений, его точности и полученное значение интеграла.
IV. Выполнение работы:
1) Составим программу-функцию для вычисления интеграла по формуле Гаусса.
double GAUS(double L,double R)
{
float X5,X6,X7,X8,A5,A6,A7,A8;
float A1=A8=0.10122854,
A2=A7=0.22238103,
A3=A6=0.31370664,
A4=A5=0.36268378;
float X1=-0.96028986,
X2=-0.79666648,
X3=-0.52553242,
X4=-0.18343464;
X5=-X4;
X6=-X3;
X7=-X2;
X8=-X1;
float s=(R-L)/2*(A1*F((L+R)/2+(R-L)/2*X1)+A2*F((L+R)/2+(R-L)/2*X2)+A3*F((L+R)/2+(R-L)/2*X3)+A4*F((L+R)/2+(R-L)/2*X4)+A5*F((L+R)/2+(R-L)/2*X5)+A6*F((L+R)/2+(R-L)/2*X6)+A7*F((L+R)/2+(R-L)/2*X7)+A8*F((L+R)/2+(R-L)/2*X8));
return(s);
}
2) Составим программу-функцию для вычисления подынтегральной функции.
double F(double x)
{
double s;
s = (x*sin(x)/(1+x*x));
return (s);
}
3) Составим головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.
void main()
{
clrscr();
cout<< Welcome! ;
cout<<I = x*sin(x)/(1 + x2), [0,1] ;
double a,b,I;
float a1,b1;
double F(double);
double GAUS(double,double);
printf(Input a: );
scanf(%f,&a1);
a = a1;
printf(Input b: );
scanf(%f,&b1);
b = b1;
I = GAUS(a,b);
printf( Method of Gauss: I = %f,I);
cout<< Press any key to exit, please. ;
getch();
}
4) Проведем вычисления по программе:
Integral = 0.195478
Теперь вычислим наш заданный интеграл с помощью программы MathCad:
Integral = 0.19547841
V. Вывод:
Проанализировав результаты работы программы, мы можем сделать вывод, что формула Гаусса позволяет вычислить приближенное значение интеграла по конечному отрезку [a,b].
