Программная реализация метода интегрирования по методу трапеций и оценки погрешности результата, уточнения результата
#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;
}
Визуализация результатов уточнения
Была написана программа, производящая численное интегрирование функции: методом трапеций, и произведены уточнения по методу Ромберга. Для визуализации уточнения результатов интегрирования функции 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. График исследуемой функции
СПИСОК ЛИТЕРАТУРЫ
1. Бахвалов И.С, Жидков Н.П., Кобельков Г.М. Численные методы. -М.: Наука, 2004. -636 с.
2. Самарский А.А. Численные методы математической физики. -
М.: Научный мир, 2000.-316с:
3. Самарский А.А. Задачи и упражнения по численным методам.
-XI: Эдиториал УРСС 2000.-208с
4. Самарский А. А. Математическое моделирование. Идеи.
Методы. Примеры / А. А. Самарский , А. П. Михайлов.-2-е
изд., испр..-М.: ФИЗМАТЛИТ, 2005.-320 с;
5. Крылов В.И., Бобков В.В., Монастырный П.И. Вычислитель
ные методы. Т. I, II. -М.: Наука, 1987. -600 с.
6. Васильков Ю.В. Компьютерные технологии вычислений в
математическом моделировании: Учеб.пособие.-М.: Финансы
и статистика, 2001.-256с.
7. Подвальный С. Л. Численные методы и вычислительный
эксперимент: учебное пособие для вузов / С. Л. Подвальный,
Л. В. Холопкина , Д. В. Попов; Воронеж: Воронеж, гос. техн.
ун-т., 2005.-224 с.
8. Голичев И.И. Численные методы: Лабораторный практикум по
курсу «Численные методы» - Уфа: УГАТУ, 2006.-50 с.