- •Фгбоу Уфимский государственный авиационный технический университет
- •Пояснительная записка
- •Задание
- •Введение
- •1 Теоретические основы
- •1.1. Численное интегрирование функций
- •Метод трапеций
- •1.2 Применение экстраполяции для оценки погрешности
- •Критерий размытости оценки
- •2) Программная реализация метода интегрирования по методу трапеций и оценки погрешности результата, уточнения результата
- •3) Визуализация результатов уточнения
- •Заключение
- •Список литературы
2) Программная реализация метода интегрирования по методу трапеций и оценки погрешности результата, уточнения результата
#include "stdafx.h"
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#define _USE_MATH_DEFINES
#include <math.h>
#include <iostream>
#include <cmath>
using namespace std;
/*подынтегральная функция*/
inline double INTEGR(double x){
return x/(x*x+1); }
double integral(double left, double right, double h)
{
float sum=0;
float runner;
for(runner=left+h;runner<right;runner+=h)
sum+=INTEGR(runner);
sum=(sum+0.5*(INTEGR(left)+INTEGR(right)))*h;
return sum;
}
int main(){
setlocale(LC_ALL,"rus_rus.1251");
cout.setf(ios::fixed);
cout.precision(23);
float a, b;
float h;
double n=1;
double x;
Z: cout<<"Введите нижний предел интегрирования: "<<endl;
cin>>a;
if(!cin.good()){
cout<<"Ошибка!Некорректный ввод!Нажмите любую клавишу и введите нижний предел заново.\n";
cin.clear();
_flushall();
_getch();
goto Z;
}
Q: cout<<"Введите верхний предел интегрирования: "<<endl;
cin>>b;
if(!cin.good() || b<=a){
cout<<"Ошибка!Некорректный ввод!Нажмите любую клавишу и введите верхний предел заново.\n";
cin.clear();
_flushall();
_getch();
goto Q;
}
x=(b-a)/2;
for(int i=1;i<=23;i++){
h = x/n;
n = n*2;
printf("%.20lf",integral(a,b,h)); printf("\n");}
_getch();
return 0;
}
3) Визуализация результатов уточнения
Была написана программа, производящая численное интегрирование функции: методом трапеций, и произведены уточнения по методу Ромберга. Для визуализации уточнения результатов интегрирования функции y= y=x/(x^2+1) в точке x=0 и x=2 построены графики в логарифмической шкале (по оси абсцисс откладывается lgn):
Численные результаты:
Вычисление экстраполированного значения:
3.1.Строится график
полученных результатов в сравнении с
точным результатом. По оси абсцисс
откладывается lgn,
по оси ординат
значения
,
,
….
рис. 3.1. Результат экстраполяции в сравнении с точным значением
3.2. Строится график
полученных результатов в сравнении с
“эталонным” значением. В качестве
эталона выбирается наиболее точный
результат z,
полученный в результате последней
экстраполяции. По оси абсцисс откладывается
lgn,
по оси ординат
значения
,
,
,…
рис. 3.2. Результат экстраполяции в сравнении с “эталонным” значением
3.3. Сравнения полученных результатов в сравнении с результатами полученными по правилу Рунге: lg|zn-zn*|, lg|zn*-zn**| и т.д. Строится график полученных результатов
рис. 3.3 Сравнения полученных результатов по правилу Рунге
Заключение
При написании данной работы выполнены следующие задания:
1. Реализовано численное интегрирование по методу трапеций функции y=x/(x^2+1).
2. Осуществлена оценка погрешности и уточнение методом Ромберга результатов интегрирования.
3. Выполнена графическая визуализация полученных результатов.
Выполнение программы показало, что наиболее эффективным является расчет интеграла функции y=x/(x^2+1)в точках х=0 и x=2 по методу трапеций с проведением экстраполяций полученных значений по методу Рунге.
Рис 2. График исследуемой функции
