Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Informatika_Методичка 2 часть

.pdf
Скачиваний:
0
Добавлен:
26.03.2024
Размер:
925.66 Кб
Скачать

3. Апостериорная оценка погрешности. В практических приложениях сравнительно редко удаётся использовать приведённые выше оценки погрешностей квадратурных формул. Рассмотрим метод Рунге апостериорной оценки погрешности численного интегрирования. Пусть для вычисления определённого интеграла от функции, имеющей (s 1) непрерывную производную, применяется составное квадратурное правило, точное для многочленов степени s . Тогда из (7), (13), (19), (27) следует, что его погрешность может быть записана в виде

I I p Cp (s 1) o( p (s 1) ) ,

(33)

где C зависит от подынтегральной функции и применяемого метода, но

не зависит от числа разбиений p отрезка

a,b .

 

Проведём вычисления при двух значениях

p : некотором p1 и p2 kp1 ,

k 1. Тогда

 

 

 

 

 

I I

p

Cp

( s 1) o ( p

( s 1) ) ,

 

1

1

 

 

1

 

 

 

I I p

2

Cp2 ( s 1) o ( p2 ( s 1) ) .

Исключая известное значение C , получим формулу Рунге, позволяющую оценить погрешность составной квадратурной формулы с большим числом разбиений:

 

 

 

 

 

I I

 

 

 

I p2

I p1

o ( p

( s 1) ) .

(34)

 

 

 

 

 

 

 

k s 1 1

 

 

 

 

 

 

 

 

p2

 

 

 

2

 

 

При практическом использовании (34) обычно выбирают значение k 2

или k 3. Тогда для

приведённых выше составных

квадратурных формул

получаем:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I I 2 p

I 2 p

I p

 

o ( p2

2 ) - для формул прямоугольников

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I I3 p

 

 

I3 p I p

o ( p2

2 ) и трапеций,

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I I 2 p

 

 

 

I 2 p

I p

 

 

o ( p2 4 )

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- для формулы Симпсона,

I I

 

 

 

 

 

I2 p

I p1

o ( p

2n ) - для формул Гаусса.

 

 

 

 

 

 

 

 

 

2 p

 

 

22n 1

 

 

2

 

 

Из сравнения с (33) следует, что первое слагаемое в (34) представляет собой главный член погрешности, если C 0 . Его величина может быть использована в качестве оценки погрешности при достаточно большом значении числа разбиений p . При использовании правила апостериорной

21

оценки погрешности необходимо убедиться, что подынтегральная функция обладает необходимой гладкостью.

Полученная оценка может быть использована для уточнения результата (первый шаг процесса Ромберга):

I I2 p

I p

2

I p

 

1

.

 

 

 

 

k s 1 1

Степень точности получаемого таким образом правила превосходит степень точности исходной квадратурной формулы.

Для приближённого вычисления определённых интегралов на ЭВМ с помощью составных квадратурных правил широко используются методы с автоматическим выбором числа разбиений, обеспечивающие заданную точность. Существо их заключается в следующем. Интеграл вычисляется по выбранной формуле сначала при сравнительно небольшом числе разбиений p , а затем при большем числе разбиений. Если оценка погрешности Рунге по абсолютной величине не превосходит критического значения, то полученное при большем числе разбиений или уточнённое по Ромбергу значение принимается в качестве окончательного результата. В противном случае число разбиений увеличивается ещё раз, и процесс повторяется.

Рекомендации к программе

1.Подпрограмма должна быть составлена так, чтобы в одной программе

ееможно было использовать для вычисления интегралов для нескольких подынтегральных функций. Это означает, что имя подпрограммы, реализующей вычисление, должно быть одним из входных параметров подпрограммы интегрирования. Ее заголовок может выглядеть следующим образом:

typedef double (*ptrFunc)(double x)

int Integral(double a, double b, ptrFunc f, double eps, double& res)

/* Подпрограмма вычисляет приближенное значение определенного интеграла Входные параметры:

a, b – нижняя и верхняя границы интегрирования;

f – имя подпрограммы для подынтегральной функции; eps>0 – критерий для оценки Рунге

Выходной параметр:

res - приближенное значение интеграла Функция возвращает:

0 – если нижняя граница интегрирования не превышает верхнюю,

и eps>0;

22

1 - иначе, в таком случае res считается неопределенным.*/

При этом вызов функции может выглядеть так:

code = Integral(a, b, &f1, eps, res);

2.Наряду с вспомогательными переменными в теле подпрограммы должны быть локализованы константы – значение начального числа разбиений, значения узлов и коэффициентов формул Гаусса и т.п. Начальное число разбиений выбирается в виде небольшого числа, тем меньшего, чем выше порядок точности:

~ 64 – для формул трапеций и прямоугольников; ~ 16 – для формул Симпсона и Гаусса при n=2; ~ 4 – для формул Гаусса при n=3 и более.

Допускается включение начального числа разбиений в число входных параметров подпрограммы. Это усложняет её использование для малоквалифицированного пользователя, но может оказаться полезным. При локальном тестировании подпрограммы следует уменьшить начальное число разбиений, чтобы начальные члены последовательности имели значительную погрешность. Переменные, используемые для накопления сумм, должны иметь более высокую точность представления, чем значения, возвращаемые подынтегральной функцией. Это важно, когда из-за низкой точности квадратуры для функций с особенностями приходится суммировать большое число слагаемых. (Вообще говоря, в таких случаях следует использовать специальные методы интегрирования).

При использовании квадратурных формул Ньютона-Котеса необходимо обеспечить однократное вычисление подынтегральной функции в узлах квадратуры.

3.Тестирование следует проводить для интегралов, которые с одной стороны могут быть вычислены в элементарных функциях, а с другой – для которых квадратура не является точной. Например,

b

b

 

ex dx ,

sin xdx

и т.п.

a

a

 

При тестировании следует убедиться, что оценка Рунге является хорошей асимптотической оценкой погрешности метода, а потому поправка Ромберга позволяет существенно увеличить точность результата, если подынтегральная функция достаточно гладкая. В случае же функций не обладающих достаточной гладкостью, точность результата не гарантируется, но по порядку величины она ненамного хуже. После завершения тестирования операторы тестового вывода в теле подпрограммы следует закомментировать. Ещё лучше при тестировании использовать отладчик.

23

Требования к программе

Основные:

1.Подпрограмма получает в качестве параметров: границы отрезка интегрирования, подынтегральную функцию, начальное число отрезков разбиения, точность вычислений; выходные параметры: приближенное значение интеграла; возвращает код завершения. Для передачи подынтегральной функции в качестве входного параметра необходимо описать тип «функция». Вычислительная подпрограмма свободна от операций вводавывода и выполняет проверку входных параметров на допустимость.

2.Для оценки погрешности текущего приближения интеграла использовать критерий Рунге, уточнять значение интеграла с помощью поправки Ромберга.

3.Все параметры интегрирования (например, узлы и коэффициенты в методе Гаусса, коэффициент измельчения разбиения) локализованы в виде констант внутри подпрограммы.

4.Весь ввод с клавиатуры (или из файла) в программе защищен от ошибок.

5.В основной программе обеспечить тестирование подпрограммы на функциях из варианта и двух трансцендентных функциях, для которых можно вычислить интеграл по формуле Ньютона-Лейбница. В последнем случае вывести для сравнения значения интегралов, посчитанных с помощью подпрограммы и с помощью формулы Ньютона-Лейбница.

Дополнительные:

6.(Кроме метода Гаусса) Число отрезков разбиения на каждой итерации увеличивать в 3 раза. Обеспечить однократное вычисление подынтегральной функции в узлах квадратуры.

7.Ограничить число итераций входным параметром подпрограммы.

8.Сделать коэффициент измельчения разбиения входным параметром подпрограммы. Если квадратурная формула позволяет, избежать для формул Ньютона-Котеса повторного вычисления подынтегральной функции в узлах квадратуры.

Варианты задания

1.

Метод центральных прямоугольников

 

 

 

 

 

 

 

2

 

1

 

6

 

x

 

 

 

 

xsin(

)dx ;

2sin(

 

) dx .

 

 

 

2

 

 

 

 

 

 

 

0, 2

 

x

1

 

 

 

 

 

2.

Метод трапеций

 

 

 

 

 

 

 

 

 

 

3

 

 

 

4

 

ln x

 

 

 

xsin x dx ;

 

 

 

dx .

 

 

 

 

 

 

x ln(x

1)

 

1

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

24

 

 

 

 

 

 

3.

Метод Симпсона

ln x

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

dx ;

 

 

 

x

2

 

 

 

0,5

 

 

 

 

 

 

 

 

 

4.

Метод Гаусса (n=2)

 

 

 

 

 

 

 

 

 

 

 

lg3x dx ;

 

2,5

 

 

 

 

 

 

 

 

 

 

0,5

 

x

 

 

 

 

 

 

 

5.

Метод Гаусса (n=3)

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

2ex

 

x2 dx ;

 

0

 

 

 

 

 

 

 

 

 

 

6.

Метод центральных прямоугольников

 

 

2,5

 

 

 

 

 

 

 

 

 

 

 

 

x2 ln xdx ;

 

 

0,5

 

 

 

 

 

 

 

1 sin ex dx .

0

2

 

1

 

x sin

 

 

 

dx .

 

 

2

0, 2

x

 

 

 

ln2x dx .

 

2,5

 

 

 

 

 

0,5

x

 

 

 

3

 

 

 

 

 

 

2sin x2 dx .

 

1

 

 

 

 

 

7.

Метод трапеций

 

 

 

 

 

 

2

 

 

 

 

 

ecos x dx ;

 

 

2

 

 

 

8.

Метод Симпсона

x ln x

 

4

 

 

 

 

 

 

1

 

 

dx ;

 

ln x 1

9.

Метод Гаусса (n=2)

 

 

 

 

 

 

3

x

 

 

1

e

dx ;

 

 

x

10.Метод Гаусса (n=3)

5 5

x 2 e x dx ;

1

2

x

 

 

 

1

 

dx .

sin x

2

2

1

 

 

 

 

 

 

x

 

sin

 

dx .

 

 

0, 2

 

x

 

3

x sin xdx .

0

1

2x2 dx .

1

11. Метод центральных прямоугольников

5

 

 

3

e x 3

x2 1dx ;

3sin x dx .

1

 

 

1

12.Метод трапеций

4 x 1 32 e x dx ;

0

13. Метод Симпсона

1,5

cos 10x dx ;

1,5

1,5

cos ex dx .

1,5

1

2x3 dx .

1

14.Метод Гаусса (n=2)

3

3

 

 

xln x dx ;

 

x cos xdx .

1

1

 

 

 

25

 

 

15.Метод Гаусса (n=2)

2

 

 

1

x x dx ;

2x3 dx .

1

 

 

1

16.Метод центральных прямоугольников

3 1

xe x dx ;

1

17. Метод трапеций

2

x 3 x dx ;

1

18. Метод Симпсона

3

xcos x dx ;

1

19.Метод Гаусса (n=2)

2

ex xdx ;

0

20.Метод Гаусса (n=3)

2

ex2 dx ;

1

4

 

 

 

cos x

 

 

x

dx .

 

 

 

1

 

 

 

 

x

 

2

 

 

 

 

 

 

x2e x2 dx .

 

0

 

 

 

 

 

 

3

 

x

 

2

 

 

dx .

 

ln x

 

2

x

 

 

 

1

dx .

 

sin x

1

ex

0 sin 1 x dx .

26

ЛИТЕРАТУРА

Вирт Н. Алгоритмы + структуры данных = программы / пер. с англ. –

М.:Мир, 1985. – 406 с.

Кнут Д.Э. Искусство программирования. Т. 3. Сортировка и поиск / пер. с англ. – 2-е изд. – М.: Вильямс, 2000. – 832 с.

Конова Е. А., Поллак Г. А. Алгоритмы и программы. Язык С++: Учебное пособие. — 2е изд., стер. — СПб.: Издательство «Лань», 2017. —384с:

Е.А. Конова, Г.А. Поллак, А.М. Ткачев Структуры данных.

Программирование на языке С и С++: учебное пособие под ред. Поллак Г.А. - Челябинск: Издательство ЮУрГУ, 2004, - 106 с.

Кушниренко А.Г., Лебедев Г.В. Программирование для математиков: учеб. пособие для вузов. – М.:Наука, 1988. – 384 с.

Лафоре Р. Объектно-ориентированное программирование в С++. – 4-е

изд., Спб.: Питер, 2004. – 922с.

Методические указания и задания по вычислительной практике: в 2 ч. Ч. I / сост. Л.В. Камаева, С.Е. Макаров, С.А. Терентьев, А.С. Толстуха. – Омск: Изд-во Омск. Гос. Ун-та, 1998. – 32 с.

Методические указания и задания по вычислительной практике: в 2 ч. Ч. II / сост. Л.В. Камаева, С.Е. Макаров, С.А. Терентьев, А.С. Толстуха. – Омск: Изд-во Омск. Гос. Ун-та, 1998. – 32 с.

Прата С. Язык программирования С. Лекции и упражнения, 6-е изд.: Пер. с англ. – М.: ООО «И.Д. Вильямс», 2015. – 928 с.

Романов Е. Л. Практикум по программированию на C++: Уч. пособие. СПб: БХВ-Петербург; Новосибирск: Изд-во НГТУ, 2004. - 432 с.

Страуструп Б. Язык программирования С++. – М.: Бином, 2015. – 1166 с.

Учебная практика на ЭВМ: методические указания и задания: в 2 ч. Ч. I / [сост. Н.С. Бахта, Н.П. Тыркова]. – Омск: Изд-во Омск. Гос. Ун-та, 2013.

– 30 с.

Информатика: практикум: в 2 ч. Ч.1. / [Н.С. Бахта, Е.В. Ушакова]. – Омск: Изд-во Ом.гос.ун-та, 2018. – 32 с.

27

Соседние файлы в предмете Программирование на C++