- •Вычислительная математика лабораторный практикум
- •Содержание
- •Метод исключения Гаусса
- •Введение
- •Построение алгоритма исключения Гаусса
- •3. Реализация алгоритма Гаусса в Excel
- •4. Реализация алгоритма Гаусса в пакете Mathcad
- •5. Реализация алгоритма Гаусса на языке Turbo Pascal
- •6. Вычисление определителя и обратной матрицы
- •7. Выбор ведущего элемента
- •8. Числа обусловленности
- •9. Задания для самостоятельной работы
- •Контрольные вопросы
- •1.Введение
- •Метод Якоби для решения слау
- •Метод Зейделя для решения слау
- •Задания для самостоятельной работы
- •5. Контрольные вопросы
- •Численные методы решения нелинейных уравнений
- •1. Введение
- •2. Отделение корней уравнения
- •3. Метод дихотомии для решения нелинейных уравнений
- •4. Метод Ньютона для решения нелинейных уравнений
- •5. Задания для самостоятельной работы
- •6. Контрольные вопросы
- •Полиномиальная интерполяция
- •1. Интерполяция данных каноническим полиномом
- •2. Интерполяционный полином Ньютона
- •3. Интерполяционный полином Лагранжа
- •4. Задания для самостоятельной работы
- •Контрольные вопросы
- •Метод наименьших квадратов
- •1. Введение
- •2. Линейная аппроксимация
- •3. Аппроксимация нелинейными функциями
- •4. Аппроксимация полиномом
- •Задания для самостоятельной работы
- •6. Контрольные вопросы
- •1. Введение
- •2. Постановка задачи
- •3. Численное дифференцирование с заданной точностью
- •Модификация алгоритма численного дифференцирования Использование центральной разности (6.3) для приближения производной позволяет проводить вычисления с точность порядка :
- •Результаты вычислений сведем в таблицу:
- •5. Действия над приближенными числами
- •6. Задания для самостоятельной работы
- •Контрольные вопросы
- •1. Введение
- •2. Метод прямоугольников
- •3. Метод трапеций
- •4. Метод парабол
- •5. Вычисление интегралов с заданной точностью
- •Метод Гаусса
- •7. Задания для самостоятельной работы
- •2. Провести расчеты знакомого уже нам интеграла ошибок
- •8. Контрольные вопросы
- •Список литературы
- •Учебное издание
5. Вычисление интегралов с заданной точностью
Уменьшая шаг, мы добиваемся большей точности результата. Это подсказывает алгоритм двойного пересчета, когда вычисления проводятся с шагом h, а затем с шагом h/2. Результаты сравниваются и если разность по модулю полученных квадратур удовлетворяет условию
,
где наперед заданная точность, то расчет заканчивается.
Детальнее проанализировав этот алгоритм, нетрудно заметить, что выполняются лишние действия. Действительно, когда проводится повторный расчет с уменьшенным вдвое шагом, происходит повторное вычисление значений функции в некоторых из узлов. Проиллюстрируем сказанное на методе трапеций.
1. Пусть n=1, т.е. на интервале [a,b] всего одна трапеция. Обозначим квадратурную формулу как
, где
Если n=2, то
где
Далее при n=4:
,
где .
Эти выкладки позволяют составить следующую рекуррентную формулу
, (7.14)
где ; . Она позволяет сделать алгоритм двойного пересчета более экономичным.
Вычисляя квадратурные формулы с шагом h и h/2, можно существенно улучшить результат, составляя комбинацию этих результатов, как это делалось в методах численного дифференцирования. Запишем
;
,
откуда нетрудно получить постоянную , подставляя которую во второе из этих равенств, получим соотношение
(7.15)
Запишем его для метода трапеций в узлах :
подставляя в (7.15 ), получим
формулу Симпсона для частичного интервала. Следовательно, комбинируя в методе двойного пересчета формулы трапеций, получаем метод парабол, имеющий точность на два порядка выше.
Обобщение этих выводов связано с формулой Ромберга:
, (7.16)
где , а результаты удобно представить в виде треугольной таблицы
где индекс i описывает изменение по строкам, а j - по столбцам.
Процедура заканчивается, когда диагональные элементы удовлетворяют условию:
(7.17)
Составим подпрограмму-функцию, реализующую метод Ромберга
function TrRomb( a,b,eps: real; f1:fun): real;
const m=10;
var q:array{1..m,1..m] of real;
h,s:real; i,j,k,m1,m2: integer;
begin
h:=b-a; i:=1; m1:=1;
q[1,1]:=0.5*h*(f1(a)+f1(b));
repeat
s:=0; Inc(i);
if (i>=m) then
begin writeln(‘Error!’); Exit end;
for k:=1 to m1 do
s:=s+ f1(a+h*(k-0.5));
m1:=m1*2; m2:=1;
q[i,1] := 0.5*(q[i-1,1]+ h*s); h:=0.5*h;
for j:=2 to i do
begin m2:=m2*4;
q[i,j]:=(m2*q[i.j-1] - q[i-1.j-1])/(m2-1)
end;
until (abs(q[i.j] - q[i-1.j-1]) < eps);
TrRomb:= q[i.i]
end;
Приведем результаты расчетов в виде треугольной таблицы для выбранного нами теста
0.0000000000
1.5707963268 2.0943951024
1.8961188979 2.0045597550 1.9985707318
1.9742316019 2.0002691699 1.9999831309 2.0000055500
1.9935703438 2.0000165910 1.9999997525 2.0000000163 1.9999999962
1.9983933610 2.0000010334 1.9999999962 2.0000000001 2.0000000000 2.0000000000
Первый столбец – это уже известные нам результаты, когда в методе трапеций мы просто уменьшали шаг вдвое. Видно, что скорость сходимости в таком подходе невелика. Однако смещение по таблице вправо, т.е. комбинация с соответствующим весом предыдущих результатов говорит сама за себя.
Дальнейшее развитие этого алгоритма, связанное с изменением шага интегрирования в зависимости от функциональных колебаний, именуется адаптивной квадратурой. О нем Вы можете прочитать в специальной литературе.