lab8 / report_lab8
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра математического обеспечения и применения ЭВМ
отчет
по практической работе № 8
по дисциплине «Вычислительная математика»
Тема: Формула Гаусса
Студент гр. 7777 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2018
Цель работы.
Используя квадратурную формулу Гаусса наивысшего порядка точности, вычислить значения интеграла
(1)
Интеграл предлагается вычислить по квадратурной формуле Гаусса с восемью узлами:
, ;
, ;
, ;
, .
Основные теоретические положения.
В квадратурной формуле Гаусса
узлы и коэффициенты подобраны так, чтобы формула была точна для всех многочленов степени . Для приближенного вычисления интеграла по конечному отрезку выполняется замена переменной ; тогда квадратурная формула Гаусса имеет вид [2,8,12]:
, (2)
где ; – узлы квадратурной формулы Гаусса; – гауссовы коэффициенты .
Если подынтегральная функция достаточно гладкая, то формула Гаусса обеспечивает очень высокую точность при небольшом числе узлов.
Постановка задачи.
Порядок выполнения, следующий:
-
Составить программу-функцию для вычисления интеграла по формуле Гаусса.
-
Составить программу-функцию для вычисления значений подынтегральной функции.
-
Составить головную программу, содержащую обращение к вычислительным процедурам и осуществляющую печать результатов.
-
Результаты работы оформить в виде краткого отчёта, содержащего характеристику используемого метода вычислений, его точности и полученное значение интеграла.
Выполнение работы.
Были составлены функцию для вычисления интеграла по формуле Гаусса, функция для вычисления подынтегральной функции. Также была написана головная программа, содержащая обращение к заданным функциям. Коды данных функций приведены в приложении A.
Были проведены вычисления по программе:
.
Вычисление интеграла с помощью WolframAlpha:
.
В данном случае метод Гаусса дал точность в 7 знаков после запятой.
Выводы.
Проанализировав результаты работы программы, мы можем сделать вывод, что формула Гаусса позволяет вычислить достаточно точное значение интеграла по конечному отрезку [a,b]. Метод Гаусса даёт большую точность вычисления чем формулы прямоугольников, трапеций и метод Симпсона.
ПРИЛОЖЕНИЕ А
Код программы
#include "pch.h"
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
double F(double x) {
return (x*exp(x) / (1 + x * x));
}
double gauss(double a, double b) {
double s = 0, t, t1 = (a + b) / 2, t2 = (b - a) / 2;
double A[8], X[8];
double X5, X6, X7, X8, A5, A6, A7, A8;
A[0] = A[7] = 0.10122854;
A[1] = A[6] = 0.22238103;
A[2] = A[5] = 0.31370664;
A[3] = A[4] = 0.36268378;
X[0] = -0.96028986;
X[1] = -0.79666648;
X[2] = -0.52553242;
X[3] = -0.18343464;
X[4] = -X[3];
X[5] = -X[2];
X[6] = -X[1];
X[7] = -X[0];
for (int i = 0; i < 8; i++){
t = t1 + t2 * X[i];
s += A[i] * F(t);
}
return (t2 * s);
}
int main(){
double a, b, I;
a = 0;
b = 1;
cout << "I = x*e^x/(1 + x^2), [0,1]\n";
I = gauss(a, b);
cout << "I = " <<fixed << setprecision(10)<< I << endl;
}