Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
метод трапеций
Пусть нужно найти значение определенного интеграла для непрерывной на отрезке интегрирования достаточно гладкой функции f(x)
Как и в случае построения формулы прямоугольников введем на отрезке [a,b] равномерную сетку с шагом h
Построим квадратурную формулу трапеций для интеграла на частичном отрезке
Площадь каждой такой трапеции легко подсчитать, используя хорошо известную из школьного курса геометрии формулу:
После очевидных преобразований получим:
Формула (4) носит название формулы трапеций. Ошибку для метода трапеций можно оценить по формуле:
где
Листинг программы: #define _USE_MATH_DEFINES
#include <iostream> #include <stdlib.h> #include <cmath>
using namespace std;
double func(double x) { double tmp = pow(2.0, 3.0*x); return tmp; }
double funcpp(double x) { double tmp = 9*pow(2.0, 3.0*x)*M_LN2*M_LN2; return tmp; }
int main() { double a, b; double eps; //a = 0.0, b = 1.0; cout << " a = "; cin >> a; cout << " b = "; cin >> b; cout << " eps = "; cin >> eps; double maxpp=(funcpp(a)>funcpp(b))? funcpp(a): funcpp(b); double n = pow(pow((b-a),3.0)*fabs(maxpp)/eps/12,0.5); double h = (b - a)/((int)n+1); //cout << "n =" << n << "maxpp = " << maxpp << endl; //double h = (b - a)/50;
double sum = 0.0; for (double i=a+h; i<b; i+=h) sum += func(i); double result = h*((func(a)+func(b))/2+sum);
cout << "result = " << result << endl;
double eps1 = (b-a)/n*maxpp*h*h; cout << "eps <= " << eps1 << endl;
fflush(stdin); getchar(); return 0; }
Date: 2015-09-05; view: 254; Нарушение авторских прав |