Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт ЯиТП 2012 З.О.Р.doc
Скачиваний:
3
Добавлен:
24.09.2019
Размер:
433.15 Кб
Скачать

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. График исследуемой функции

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]