Array arrayIntervals; // Массив отрезков
Array arrayResults; // Массив интегралов
// Ньютон-Котес -----------------------------------------------------------------------------------------int m = 0; // количество отрезков
do {
m++; // увеличиваем кол-во отрезков
h = (RIGHT - LEFT) / m; // длина отрезка
result = intKotes(m, h); // ~ интеграл
arrayIntervals.add(h); // добавляем Hm-тое в массив
arrayResults.add(result);
} while (abs(richardson(arrayResults, arrayIntervals)) > PRECISION) ;
cout<<"Kotes: "<<"m = 1; R = J - S = " << setprecision(15) << J - intKotes(1, (RIGHT-LEFT)) << endl;
cout<<" "<<"m = " << m << "; R = J - S = " << setprecision(15) << J - result << endl;
cout<<" "<<" " << m << "; S = " << setprecision(15) << result << endl << endl;
// Гаусс ------------------------------------------------------------------------------------------------m = 0; arrayIntervals.free(); arrayResults.free();
do {
m++; // увеличиваем кол-во отрезков
h = (RIGHT - LEFT) / m; // длина отрезка
result = intGauss(m, h); // ~ интеграл
arrayIntervals.add(h); // добавляем Hm-тое в массив
arrayResults.add(result);
} while (abs(richardson(arrayResults, arrayIntervals)) > PRECISION) ;
cout<<"Gauss: "<<"m = 1; R = J - S = " << setprecision(15) << J - intGauss(1, (RIGHT-LEFT)) << endl;
cout<<" "<<"m = " << m << "; R = J - S = " << setprecision(15) << J - result << endl;
cout<<" "<<" " << m << "; S = " << setprecision(15) << result << endl << endl;
system("pause");
return 0;
}
Результаты вычислений
k –число разбиений
J = 27.56649553 - исходный интеграл, подсчитанный в Maple
k |
Sk |
|J - Sk| |
|
Вариант «Ньютона-Котеса» |
|||
k = 1 |
26.6910388264606 |
0.8754567035393 |
|
k = 102 |
27.5664966167191 |
0.0000010867191 |
|
Вариант «Гаусса» |
|||
k = 1 |
27.5522952951239 |
0.0142002348760 |
|
k = 8 |
27.5664959544617 |
0.0000004244616 |
Как видим, вариант «Гаусса» намного эффективнее. Нам понадобилось разбить отрезок интегрирования всего на 8 частей, чтобы добиться точности вычисления исходного интеграла до 10-6.
Список литературы:
1. Олемской И. В. Методические указания по вычислительному практику. (Вычисление определённого интеграла)
2. Полный справочник по С++ (Г. Шилдт)
3. Справочник программы Maple
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.