Лабораторная работа 8 / LR_8 / ВМ_8
.docМинистерство образования и науки РФ
Санкт-Петербургский государственный электротехнический университет
“ЛЭТИ”
кафедра МОЭВМ
Лабораторная работа №8 по дисциплине вычислительная математика
на тему:
«Формула Гаусса».
г. Санкт-Петербург
-
Год
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<<"\n Welcome!\n\n";
cout<<"I = x*sin(x)/(1 + x^2), [0,1]\n\n";
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("\nMethod of Gauss: I = %f",I);
cout<<"\n\nPress any key to exit, please.\n";
getch();
}
4) Проведем вычисления по программе:
Integral = 0.195478
Теперь вычислим наш заданный интеграл с помощью программы MathCad:
Integral = 0.19547841
V. Вывод:
Проанализировав результаты работы программы, мы можем сделать вывод, что формула Гаусса позволяет вычислить приближенное значение интеграла по конечному отрезку [a,b].