выч матем курсовая 15-16 - Новгородский государственный

advertisement
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
Новгородский государственный университет имени Ярослава Мудрого
С.В. Гарбарь, Т.В. Жгун
ВЫЧ ИСЛИТЕЛЬНАЯ МАТЕМ АТИКА
Методические указания к выполнению курсовой работы
для студентов направления
01.03.02 – Прикладная математика и информатика
Великий Новгород
2014
2
УДК 519.6
ББК 22.19
Рецензент
кандидат физико-математических наук, доцент А. С. Тихомиров
Рекомендовано к изданию кафедрой прикладной математики и информатики
Гарбарь С. В., Жгун Т. В.
Вычислительная математика: Методические указания к выполнению курсовой
работы для студентов направления 01.03.02 – Прикладная математика и инфматика / НовГУ им. Ярослава Мудрого. – Великий Новгород, 2014. – 38 с.
В пособии предлагаются задания на курсовую работу по дисциплине «Вычислительная математика», рассмотрен пример решения типового варианта, перечислены требования к содержанию и оформлению отчёта по работе.
Предназначено для студентов университетов направления «Прикладная
математика и информатика».
© Новгородский государственный университет, 2014
© Гарбарь С. В., Жгун Т. В., 2014
3
ОГЛАВЛЕНИЕ
Оглавление ..................................................................................................................... 3
Предисловие .................................................................................................................. 6
Порядок выполнения работы ....................................................................................... 7
Задания на курсовую работу ........................................................................................ 8
Список литературы ..................................................................................................... 16
Приложение А. Пример выполнения работы ........................................................... 17
1 Задание №1 ............................................................................................................. 17
1.1 Задание .............................................................................................................. 17
1.2 Идея метода простых итераций ..................................................................... 17
1.3 Построение итерационной функции.............................................................. 17
1.4 Критерий окончания итерационного процесса ............................................ 17
1.5 Исходный код программы на языке Python .................................................. 18
1.6 Вывод ................................................................................................................ 19
2 Задание №3 ............................................................................................................. 19
2.1 Задание .............................................................................................................. 19
2.2. Интерполяция с использованием многочлена Лагранжа ........................... 19
2.3 Оценка погрешности метода .......................................................................... 20
2.3 Оценка погрешности вычислений. ................................................................ 20
2.4 Код программы на языке JavaScript............................................................... 20
2.4 Вывод ................................................................................................................ 21
3 Задание №4 ............................................................................................................. 21
3.1 Задание .............................................................................................................. 21
3.2 Исследование задачи ....................................................................................... 21
3.3 Идея метода половинного деления. ............................................................... 22
3.4 Идея метода Ньютона ..................................................................................... 23
3.5 Идея метода хорд ............................................................................................. 24
3.6 Код программы на языке Haskell ................................................................... 25
4
3.6. Вывод ............................................................................................................... 25
4 Задание №5 ............................................................................................................. 26
4.1 Задание .............................................................................................................. 26
4.2. Метод решения задачи ................................................................................... 26
4.3 Код программы на ассемблере IA-32 ............................................................ 26
4.4 Вывод ................................................................................................................ 28
5 Задание №6 ............................................................................................................. 28
5.1 Задание .............................................................................................................. 28
5.2 Описание метода решения задачи ................................................................. 28
5.3 Оценка погрешности квадратурных формул. Правило Рунге .................... 28
5.4 Код программы на языке Scheme ................................................................... 29
5.5 Вывод ................................................................................................................ 30
6 Задание №7 ............................................................................................................. 30
6.1 Задание .............................................................................................................. 30
6.2 Описание метода решения задачи ................................................................. 30
6.3 Оценка погрешности ....................................................................................... 31
6.4 Код программы на языке Visual Basic ........................................................... 31
6.5 Вывод ................................................................................................................ 31
7 Задание №12 ........................................................................................................... 32
7.1 Задание .............................................................................................................. 32
7.2 Описание метода решения задачи ................................................................. 32
7.3 Код программы на языке C++ ........................................................................ 32
7.4 Вывод ................................................................................................................ 33
8 Задание №13 ........................................................................................................... 34
8.1 Задание .............................................................................................................. 34
8.2 Алгоритм определения машинной точности ................................................ 34
8.3 Априорная оценка погрешности .................................................................... 34
8.4 Определение корней при помощи метода Ньютона .................................... 35
9 Задание №14 ........................................................................................................... 36
5
9.1 Задание .............................................................................................................. 36
9.2 Описание метода решения задачи ................................................................. 37
9.3 Вывод ................................................................................................................ 37
6
ПРЕДИСЛОВИЕ
Дисциплина «Вычислительная математика» относится к вариативной части модулей федерального государственного образовательного стандарта высшего образования для направления «Прикладная математика и информатика».
Численные методы являются теоретической базой, на основе которой разработано программное обеспечение решения широкого класса компьютерных задач, а
также используется для разработки новых прикладных программ.
В методических указаниях представлены задания на курсовую работу, посвящённую основам теории погрешностей, основам вычислительной математики, основам численных методом — основным темам курса дисциплины «Вычислительная математика» для студентов направления 01.03.02 «Прикладная математика и информатика» (академический бакалавр).
Целью выполняемой курсовой работы является приобретение практических навыков по их использованию и анализу различных численных методов с
учётом специфики компьютерных вычислений, а также формирование у студентов мотивации к самообразованию за счёт активизации их самостоятельной деятельности.
Данное учебное пособие дополняет конспект лекций по дисциплине и входит в единый учебно-методический комплекс по дисциплине.
Выполнение курсовой работы требует знания соответствующих вопросов
теории численных методов. В методических указаниях представлены задания,
требования к оформлению и образцы выполнения курсовой работы.
7
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Задание студенту выдаётся, как правило, на пятой учебной неделе семестра. Выполненная работа сдаётся для проверки на 16 неделе, за две недели до
окончания семестра. Защита работы – 17 неделя учебного семестра.
Задания выполняются в MathCad или на любом языке программирования.
Отчёт должен содержать краткие необходимые теоретические положения,
аналитическое обоснование применяемых формул, результаты вычислений.
Каждое новое задание выполняется на новой странице.
Оформление отчёта должно соответствовать СТП 1.7.701-98.
К отчёту должен быть приложен диск c оригиналом выполненной работы в
формате *.doc (*.docx, *.odt), а также задания в MathCad. Если работа выполняется на алгоритмическом языке, на диске должны быть: документ *.doc (*.docx,
*.odt) с текстом всего документа, исполняемый файл (*.exe) и исходный файл
программы для каждого задания.
Для выполнения задания студент выбирает параметры:
𝑘 – последняя цифра года, в котором было получено задание.
𝑚 – номер вариант, совпадает с номером студента по списку группы.
Перед каждым заданием указано, какими студентами оно должно быть выполнено.
8
ЗАДАНИЯ НА КУРСОВУЮ РАБОТУ
1. Задание выполняется всеми студентами.
Найти корни уравнения методом итераций с точностью 𝜀 = 10−5 . Функция
𝑓(𝑥) приведена в таблице 1.
Таблица 1 – Функция для выполнения заданий 1, 8, 9, 10, 11, 12, 14
№ п/п
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Функция
𝑥
+ ln 5𝑥 = 0
212
𝑥 – lg12 (𝑥 + 2) = 0
𝑥 156 + ln 31𝑥 – 4 = 0
(𝑥– 1)152 – 0,532𝑒 𝑥 = 0
(𝑥– 1)184 – 𝑒 −2,1𝑥 = 0
𝑥 317 – sin3 𝑥 = 0
4𝑥 112 – cos 31 𝑥 = 0
𝑥 185 – sin17 𝑥 = 0
𝑥 134 – 2,435 ⋅ cos 𝑥 = 0
𝜋𝑥
𝑥 214 − 1,123 ⋅ cos121
=0
2
𝜋𝑥
2√𝑥 315 – cos 31
=0
2
𝜋𝑥
√𝑥 1451 – 2,12123 cos 31
=0
2
𝜋𝑥
𝑥 198 – ctg1421
=0
3
𝑥 212 – cos 2 𝜋𝑥 = 0
𝑥 142 – 0,12345 sin31 𝜋𝑥 = 0
21,35𝑥 48 + 3𝑥 35 – 9𝑥 31 – 9 = 0
2,456𝑥 46 – 4𝑥 38 + 4,235𝑥 2 – 4 = 0
2,056𝑥 43 + 3𝑥 31 + 4𝑥 12 + 𝑥 8 – 3,478 = 0
𝑥 431 – 10,235𝑥 231 – 16,235𝑥 31 + 5,447 = 0
𝑥 431 – 𝑥 33 – 9𝑥 22 + 10𝑥 13 – 10,258 = 0
𝑥 231 – 6𝑥 31 + 12𝑥 17 – 8,45689 = 0
𝑥 131 – 3,258𝑥 102 + 4𝑥 31 – 3,4466 = 0
𝑥 156 – 𝑥 31 – 7,228𝑥 23 – 8𝑥 8 – 6,228 = 0
𝑥 114 – 3,225𝑥 112 + 3𝑥 23 – 2,22258 = 0
𝑓(𝑥) = 𝑥 2 − cos 𝜋𝑥
209
Аргумент для задания 14
1,12
0,75
0,56
1,74
0,26
1,42
0,58
0,23
0,68
0,95
0,26
0,27
0,74
0,83
0,35
0,79
0,34
−0,58
0,32
0,56
−3,58
1,58
−2,24
3,56
9
2. Задание выполняется только студентами с нечётным номером варианта.
Функция 𝑓(𝑥) задана в таблице 2. Пользуясь интерполяционной формулой
2
𝑚
3
115
Ньютона, вычислить значение функции для аргумента 𝑥 = 𝑘 +
. Значение
аргумента вычислить с необходимой точностью.
Таблица 2 – Задание функции 𝑓(𝑥)
𝒙
0,0
0,1
0,2
0,3
0,4
0,5
0,6
𝒇(𝒙)
1,00000
1,20500
1,42007
1,64538
1,88124
2,12815
2,38676
𝒙
0,7
0,8
0,9
1,0
1,1
1,2
1,3
𝒇(𝒙)
2,65797
2,94290
3,24293
3,55975
3,89537
4,25216
4,63285
𝒙
1,4
1,5
1,6
1,7
1,8
1,9
2,0
𝒇(𝒙)
5,04065
5,47918
5,95261
6,46561
7,02350
7,63219
8,29835
Оценить погрешность вычислений, погрешность метода, суммарную погрешность, если точность входных данных одинакова δ𝑥 ∗ = δ𝑦 ∗ .
3. Задание выполняется только студентами с чётным номером варианта.
𝑘
Вычислить значения функции 𝑔(𝑥) (заданной в таблице 3) в точке 𝑥 = −
8
𝑚
417
с помощью интерполяционного многочлена Лагранжа с точностью 𝜀 = 10−3 .
Оценить погрешность вычислений, погрешность метода, суммарную по-
грешность.
Таблица 3 – Задание функции 𝑔(𝑥)
𝒙
0,00000
0,08000
0,13000
0,20000
𝒈(𝒙)
1,00000
1,72539
1,97664
1,92950
𝒙
0,27000
0,31000
0,38000
0,44000
𝒈(𝒙)
1,45474
1,07307
0,42687
0,09338
10
4. Задание выполняется всеми студентами.
С точностью 𝜀 = 10−3 найти наименьший положительный корень уравнения 𝑓(𝑥) = 0 из таблицы 4 тремя способами
1. Методом половинного деления
2. Методом Ньютона
3. Методом хорд
Результаты занести в таблицу. Сделать выводы.
Таблица 4 — Варианты задания 4
Вариант
1, 4, 7, 10, 13, 16, 19, 22, 25
2, 5, 8, 11, 14, 17, 20, 23
3, 6, 9, 12, 15, 18, 21, 24
Интеграл
𝑓(𝑥) = tg(1 + 0,1𝑚)𝑥 + 2𝑘𝑥
𝑓(𝑥) = ctg(0,1𝑚𝑥) + (2𝑘 + 1)𝑥
𝑓(𝑥) = tg 0,31𝑚𝑥 + (2𝑘 + 1)𝑥
4. Задание выполняется всеми студентами.
Дана таблица значений функции 𝑓(𝑥) (см. табл. 2). Вычислить значения
𝑓′(𝑥) и 𝑓″(𝑥) в заданных точках. Обратить внимание на то, что аргумент 𝑥 =
2
3
𝑘+
𝑚
115
не совпадает с узлами таблицы.
Оценить погрешность вычислений, считая, что функция в таблице задана
точно.
6. Задание выполняется всеми студентами.
Вычислить определённый интеграл из таблицы 5 с помощью формул прямоугольников (левых, правых и средних), трапеций, Симпсона с числом узлов
𝑛 = 12 для каждого метода.
Оценить погрешность вычислений интеграла по формуле Рунге.
11
Таблица 5 — Варианты задания 6
Вариант
1, 13, 25
Интеграл
1
ⅆ𝑥
∫
3
0 1+𝑥
Вариант
∫ lg 𝑥 ⅆ𝑥
8, 20
7, 19
2
2, 14
1
2
3, 15
4, 16
5, 17
6, 18
lg 𝑥
∫
ⅆ𝑥
1 𝑥
2
cos 𝑥
∫
ⅆ𝑥
𝑥
1
𝜋
2
cos 𝑥
∫
ⅆ𝑥
0 1+𝑥
0,2
𝜋𝑥 2
∫ cos
ⅆ𝑥
2
0
Интеграл
ln(1 + 𝑥)
∫
ⅆ𝑥
1 + 𝑥2
0
1
arctg 𝑥
∫
ⅆ𝑥
𝑥
0
1
1
∫ √𝑥 sin 𝑥 ⅆ𝑥
9, 21
0
1
10, 22
∫ √𝑥 cos 𝑥 ⅆ𝑥
0
𝜋
11, 23
∫
ⅆ𝑥
1 + 𝑥 + √sin 𝑥
0
3
∫
12, 24
2
ⅆ𝑥
1 + √ln 𝑥
7. Задание выполняется всеми студентами.
Вычислить интеграл из таблицы 6 по формуле Гаусса и оценить погрешность для числа узлов 𝑛 = 4.
Таблица 6 — Варианты задания 7
Вариант
1, 4, 7, 10, 13, 16, 19, 22, 25
2, 5, 8, 11, 14, 17, 20, 23
Интеграл
1
ⅆ𝑥
∫
0 𝑘 + 𝑚𝑥
1
ⅆ𝑥
∫
−1 √𝑚 + 𝑘𝑥
1
3, 6, 9, 12, 15, 18, 21, 24
∫ √1 + 𝑚𝑥 ⅆ𝑥
0
8. Задание выполняется студентами с номерами варианта 1, 6, 11, 16, 21.
Сравнить работу различных модификаций метода Ньютона нахождения
корня функции из таблицы 1 для фиксированного числа шагов 𝑛 = 6:
 модифицированный метод Ньютона;
12
 метод ложного положения;
 метод секущих;
 метод Стефенсена.
Результаты занести в таблицу, оформленную по примеру таблицы 7.
Таблица 7 – Пример оформления результатов
Модифицированный ме- Метод ложного полотод Ньютона
жения
число
число
𝑛 𝑥 (𝑛)
ВЗЦ
Метод секущих
Метод Стефенсена
число
число
(𝑛)
𝑛 𝑥 (𝑛)
𝑛 𝑥 (𝑛)
выч. функ- 𝑛 𝑥
выч.
выч.
выч.
ВЗЦ
ВЗЦ
ВЗЦ
ций
функций
функций
функций
9. Задание выполняется студентами с номерами варианта 2, 7, 12, 17, 22.
Сравнить эффективность работы модификаций метода Ньютона для достижения необходимой точности:
 модифицированный метод Ньютона;
 метод ложного положения;
 метод секущих;
 метод Стефенсона.
Задаются точность ε = 0,01, функция в таблице 1. Результаты занести в
таблицу (см. таблицу 8).
Таблица 8 – Пример оформления результатов
Модифицированный метод
Ньютона
𝑛
𝑥 (𝑛)
(𝜀𝜙(𝑥))
Метод ложного положения
𝑛
𝑥 (𝑛)
(𝜀𝜙(𝑥))
Метод секущих
Метод Стефенсена
𝑛 𝑥 (𝑛) (𝜀𝜙(𝑥)) 𝑛 𝑥 (𝑛)
(𝜀𝜙(𝑥))
13
10. Задание выполняется студентами с номерами варианта 3, 8, 13, 18, 23.
Сравнить работу методов Ньютона и обратной квадратичной интерполяции для фиксированного числа шагов.
Задаются число узлов 𝑛 = 6; функция в таблице 1. Результаты занести в
таблицу (см. таблицу 9 для примера).
Таблица 9 – Пример оформления результатов
𝑛
Метод Ньютона
число ВЗЦ
𝑥 (𝑛)
Метод обратной квадратичной интерполяции
число ВЗЦ
𝑛
𝑥 (𝑛)
11. Задание выполняется студентами с номерами варианта 4, 9, 14, 19, 24.
Сравнить работу методов с высоким порядком сходимости для достижения
заданной точности 𝜀 = 0,01.
 метод Ньютона;
 метод секущих;
 метод Стефенсена
𝑓(𝑥) – функция в таблице 1. Результаты занести в таблицу.
12. Задание выполняется студентами с номерами варианта 5, 10, 15, 20, 25.
Сравнить эффективность метода Ньютона и метода обратной квадратичной интерполяции для достижения заданной точности 𝜀 = 0,01.
𝑓(𝑥) – функция из таблицы 1. Результаты занести в таблицу.
13. Вычислить коэффициенты обусловленности корней полинома пятой
степени из таблицы 10 в зависимости от коэффициентов полинома a priori и a
14
posteriori, то есть теоретически и вычислив корни полинома с помощью приближенных методов по формуле Ньютона.
Показать, что для кратных и простых корней метод имеет различную скорость сходимости
Коэффициенты уравнения вещественны и заданы с точностью 𝜀𝑚 , которая
должна быть предварительно подсчитана (с учётом характеристики машинный
эпсилон используемого типа данных).
Ответ должен содержать 60 значений коэффициентов обусловленности.
Таблица 10 — Варианты задания 13
Вариант
1, 12, 24
2, 13, 25
3, 14
4, 15
5, 16
6, 17
7, 18
8, 19
9, 20
10, 21
11, 22
Интеграл
(х − 2,1114)3 (х − 1)(х − 5) = 0
(х + 2)(х + 1,12459)(х − 3)2 (х − 2.5) = 0
(3х + 2,122345)(х + 2)3 (х − 4) = 0
(х + 3)2 (2х + 3,12987)(х − 2)2 = 0
(х + 2)3 (х − 1)(𝑥 − 4,12654) = 0
(2𝑥 − 7,4445)4 (𝑥 + 12) = 0
(2х − 1)3 (х − 1)(х − 4,45689) = 0
(2х − 1)(х − 1,6548)2 (х − 5)2 = 0
(х − 1,32154)(х − 4)2 (х − 5)2 = 0
(2х − 1)(х − 4)2 (х − 5,65321)2 = 0
(2х − 1,25864)(х − 1)2 (х − 4)2 = 0
14. Вычислить приближённые значения первой и второй производных для
функции 𝑓(𝑥), заданной в таблице 1, аргумент также задан в таблице 1.
Первую производную аппроксимировать центральным разностным отношением, а для второй производной использовать формулу
𝑓(𝑥 + ℎ) − 2𝑓(𝑥) + 𝑓(𝑥 − ℎ)
ℎ2
(а) Найдите приближения к первой производной. Используйте формулу
𝑓 ′′ (𝑥) ≈
центрального разностного отношения для значений ℎ = 10𝑘 3√𝜀𝑚 , где 𝑘 =
−10, −9, −8, −7, −6, −5, −4, −3, −2, −1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
15
(б) Вычислите приближения для вторых производных с теми же значениями шага.
В каждом случае сравните вычисленные приближения с истинными значениями производных. Объясните, как на выбор наилучшего значения ℎ влияет
поведение функции 𝑓(𝑥) вблизи точки 𝑥?
(в) Используйте технику экстраполяции, чтобы улучшить приближения,
полученные в пунктах (а) и (б).
(г) Сделайте выводы, проанализировав погрешность вычислений. Результаты оформите в таблице, сравнив точные и приближенные значения производных, а также полученную ошибку. Приведите график ошибки вычисления 1-ой и
2-ой производной в зависимости от 𝑘.
16
СПИСОК ЛИТЕРАТУРЫ
1. Амосов А. А., Дубинский Ю. А., Копченова Н. В. Вычислительные методы
для инженеров. М., Высшая школа, 2004. – 548 с.
2. Бахвалов Н. С., Жидков Н. П., Кобельков Г. М. Численные методы. М., Бином, 2004. – 636 с.
3. Бахвалов Н. С., Лапин А. В., Чижонков Е. В. Численные методы в задачах и
упражнениях. М., Высшая школа, 2000. - 254 с.
4. В. М. Вербжицкий. Основы численных методов. М., Высшая школа, 2002. 847 с.
5. Волков Е. А. Численные методы. СПб.: Лань, 2004. - 244 с.
6. Калиткин Н. Н. Численные методы. М., Наука, 1978. - 246 с.
7. Крылов В. И., Бобков В.В., Монастырский П.И. Вычислительные методы.
Наука, 1976. – 300с.
8. Научно-практический журнал "Exponenta Pro. Математика в приложениях"
http://rrc.dgu.ru/res/exponenta/educat/systemat/systemat.asp.htm
9. Пирумов У.Г. Численные методы. М., Дрофа, 2003. - 224 с.
10.Турчак Л.И., Плотников П.В. Основы численных методов. М., Физматлит,
2002. - 356 с.
17
ПРИЛОЖЕНИЕ А. ПРИМЕР ВЫПОЛНЕНИЯ
РАБОТЫ
Ниже приводится пример выполнения задания для варианта № 25. Решения отдельных заданий могут быть неполными, иметь пробелы, недочёты, недостаточно полно сформулированные выводы. Коды программ также приведены
исключительно для справки. Для некоторых заданий в квадратных скобках указано, какие действия студент должен произвести самостоятельно.
1 Задание №1
1.1 Задание
Найти корни уравнения 𝑓(𝑥) = 0 методом итераций с точностью 𝜀 = 10−4 .
𝑓(𝑥) = 𝑥 2 − cos 𝜋𝑥
1.2 Идея метода простых итераций
Представим функцию 𝑓(𝑥) = 0 в виде 𝑥 = φ(𝑥). На каждом шаге 𝑥𝑛 =
φ(𝑥𝑛−1 ). Значение 𝑥 (𝑛) постепенно приближается к корню уравнения 𝑓(𝑥) = 0.
1.3 Построение итерационной функции
Преобразуем выражение cos 𝜋𝑥 = 𝑥 2 : 𝜋𝑥 = arccos 𝑥 2 или 𝑥 =
чит, φ(𝑥) =
arccos 𝑥 2
𝜋
– искомая итерационная функция.
1.4 Критерий окончания итерационного процесса
Требуемая точность будет достигнута, когда
1
|𝑥 (𝑛) − 𝑥 (𝑛−1) | < 𝜀,
1−𝑞
где 𝑞 = max|φ′ (𝑥)| на промежутке [0; 0,5].
Так как 𝜑 ′′ (𝑥) =
6𝑥 2 −2
𝜋(1−𝑥 4 )√1−𝑥 4
< 0 на промежутке [0; 0,5], то
arccos 𝑥 2
𝜋
, зна-
18
𝑞 = φ′ (0) = 0,5.
Процесс решения уравнения при помощи метода простых итераций содержится в таблице А.1.
Таблица А.1 – Поиск корня уравнения методом простых итераций.
Номер итерации, n
Предыдущее приближение, 𝑥 (𝑛−1)
Текущее приближение, 𝑥 (𝑛)
0
1
2
3
4
5
6
0,50000
0,41956
0,44367
0,43693
0,43885
0,43830
0,43846
0,41956
0,44367
0,43693
0,43885
0,43830
0,43846
0,43842
1.5 Исходный код программы на языке Python
# coding=utf-8
# Курсовая работа по вычислительной математике
# Задание 1
import math
# Определение функции
def phi(x):
return math.acos(x**2)/math.pi
# Рекурсивная функция поиска корня
def findRoot(f, x, q, epsilon):
fx = f(x)
# Проверка условия окончания
if (1/(1-q)*abs(fx-x) < epsilon):
print 'Значение корня', fx
print '1/(1-q)*abs(fx-x) =', 1/(1-q)*abs(fx-x)
else:
print 'Текущее приближение', fx
print '1/(1-q)*abs(fx-x) =', 1/(1-q)*abs(fx-x)
findRoot(f, fx, q, epsilon)
findRoot(phi, 0.5, 0.5, 0.0001)
1
|𝑥 (𝑛) −
1−𝑞
− 𝑥 (𝑛−1) |
0,16086
0,04820
0,01348
0,00385
0,00109
0,00031
0,00008
19
1.6 Вывод
С помощью метода простых итераций был найден корень уравнения
𝑓(𝑥) = 0, получено значение корня
𝑥 = 0,4384 ± 0,0001
2 Задание №3
2.1 Задание
Функция 𝑔(𝑥) задана в таблице А.2. Вычислить значение функции в точке
𝑥=
337
3336
с помощью интерполяционного многочлена Лагранжа.
Оценить погрешность вычислений, погрешность метода, суммарную погрешность.
Таблица А.2 – Задание функции 𝑔(𝑥)
𝒙
0,00000
0,08000
0,13000
0,20000
𝒈(𝒙)
1,00000
1,72539
1,97664
1,92950
𝒙
0,27000
0,31000
0,38000
0,44000
𝒈(𝒙)
1,45474
1,07307
0,42687
0,09338
2.2. Интерполяция с использованием многочлена Лагранжа
Поскольку в таблице значение функции заданы с четырьмя знаками после
запятой, выберем точность аргумента, которая не ухудшит точность входных
данных 𝑥 = 0,1010192.
В общем случае будем заменять функцию 𝑓(𝑥) полиномом степени 𝑛
𝑃𝑛 (𝑥) = 𝑎0 + 𝑎1 𝑥 + 𝑎2 𝑥 2 + ⋯ + 𝑎𝑛 𝑥 𝑛
совпадающим с функцией 𝑓(𝑥) в 𝑛 + 1 табличных точках 𝑥𝑖 , называемых узлами
интерполяции
𝑎0 + 𝑎1 𝑥𝑖 + 𝑎2 𝑥𝑖2 + ⋯ + 𝑎𝑛 𝑥𝑖𝑛 = 𝑓(𝑥𝑖 ), 𝑖 = 0, 1, 2, … 𝑛. (1)
20
Система уравнений (1) может быть решена, если среди узлов 𝑥𝑖 нет совпадающих. Используя решение этой системы интерполяционный полином можно
записать в виде полинома Лагранжа
𝑛
𝑛
𝐿𝑛 (𝑥) = ∑ 𝑦𝑖 𝑙𝑖 (𝑥) , 𝑙𝑖(𝑥) = ∏
𝑖=0
𝑗=0,𝑗≠ 𝑖
𝑥 − 𝑥𝑗
.
𝑥𝑖 − 𝑥𝑗
2.3 Оценка погрешности метода
Ошибка приближения функции интерполяционным полиномом это разность 𝑅𝑛 (𝑥) = 𝑓(𝑥) − 𝑃𝑛 (𝑥), где
𝑓 (𝑛+1) (𝜉)
(𝑥 − 𝑥0 )(𝑥 − 𝑥1 ) … (𝑥 − 𝑥𝑛 ).
𝑅𝑛 =
(𝑛 + 1)!
Приближенно найдем третью производную функции, заменив полином Лагранжа третьей степени. Тогда третья производная постоянна и равна старшему
члену полинома Лагранжа третьей степени, умноженному на 3!.
[Необходимо привести подсчёты.]
2.3 Оценка погрешности вычислений.
Пусть 𝜀 = 0,00001 – погрешность исходных данных.
[Необходимо привести подсчёты.]
2.4 Код программы на языке JavaScript
function l(x, index, length, xlist)
// Нахождение значения базисного полинома в заданной точке
// Входные параметры: аргумент x, номер базисного полинома,
// число точек интерполяции, массив с точками
{
var numerator = 1, denominator = 1;
for (var i=0; i<length; ++i)
{
if (i != index)
{
numerator *= (x - xlist[i]);
denominator *= (xlist[index] - xlist[i]);
}
}
return numerator / denominator;
21
}
function L(x, length, xlist, fxlist)
// Нахождение значения полинома Лагранжа в заданной точке
// Входные параметры: аргумент x, число точек интерполяции,
// массив с точками, массив со значениями функции
{
var temp = 0;
for (var i = 0; i < length; ++i)
{
temp += fxlist[i]*l(x, i, length, xlist);
}
return temp;
}
var xlist = [0.0, 0.08, 0.13, 0.2, 0.27, 0.31, 0.38, 0.44];
var fxlist = [1.0,1.72539,1.97664,1.9295,1.45474,1.07307,0.42687,0.09338];
document.write(L(337.0/3336.0, 8, xlist, fxlist));
2.4 Вывод
С помощью метода интерполяции полиномами Лагранжа было получено
приближенное значение функции
𝑓(
337
) = 1.857 ± 0.005
3336
3 Задание №4
3.1 Задание
С точностью 𝜀 = 10−3 найти наименьший положительный корень уравнения tg 2𝑥 + 2𝑥 = 0.
1. Методом половинного деления
2. Методом Ньютона
3. Методом хорд
Результаты занести в таблицы.
3.2 Исследование задачи
Построив график функции 𝑓(𝑥) = tg 2𝑥 + 2𝑥 (рисунок А.1), находим, что
наименьший положительный корень уравнения 𝑓(𝑥) = 0 находится на проме-
22
жутке [0,8; 1,2]. Все методы будем применять для поиска корня именно на этом
промежутке.
Рисунок А.1. График функции 𝑓(𝑥) = tg(2𝑥) + 2𝑥
3.3 Идея метода половинного деления.
Разделим исходный отрезок [𝑎; 𝑏] пополам 𝑐 =
𝑎+𝑏
2
. Проверяя знаки 𝑓(𝑎),
𝑓(𝑏), 𝑓(𝑐), выясним, в каком из отрезков [𝑎; 𝑐] или [𝑐; 𝑏] содержится корень
𝑥 ∗ ∈ [𝑎; 𝑐], если 𝑓(𝑎)𝑓(𝑐) < 0;
𝑥 ∗ ∈ [𝑐; 𝑏], если 𝑓(𝑐)𝑓(𝑏) < 0.
Выбранный отрезок принимаем за [𝑎, 𝑏] и повторяем это до тех пор, пока
получаемый отрезок не сожмётся до заданной степени точности.
Процесс решения уравнения с использованием метода половинного деления показан в таблице А.3.
Таблица А.3 – Нахождение корня уравнения методом половинного деления
Число шагов,
𝒏
Начало промежутка, 𝒂
Конец промежутка, 𝒃
Длина промежутка,
|𝒂 − 𝒃|
23
Число шагов,
𝒏
Начало промежутка, 𝒂
Конец промежутка, 𝒃
0
1
2
3
4
5
6
7
8
9
0,8000
1,0000
1,0000
1,0000
1,0000
1,0125
1,0125
1,0125
1,0135
1,0135
1,2000
1,2000
1,1000
1,0500
1,0250
1,0250
1,0175
1,0150
1,0150
1,0142
Длина промежутка,
|𝒂 − 𝒃|
0,4000
0,2000
0,1000
0,0500
0,0250
0,0120
0,0060
0,0030
0,0015
0,0007
3.4 Идея метода Ньютона
Зададим некоторое начальное приближение 𝑥0 ∈ [𝑎; 𝑏] и линеаризуем
функцию 𝑓(𝑥) в окрестности 𝑥0 с помощью отрезка ряда Тейлора
𝑓(𝑥) = 𝑓(𝑥0 ) + 𝑓 ′ (𝑥0 )(𝑥 − 𝑥0 ).
Решим линеаризованное уравнение 𝑓(𝑥0 ) + 𝑓 ′ (𝑥0 )(𝑥 − 𝑥0 ) = 0, трактуя
его решение 𝑥 как первое приближение к корню
𝑥1 = 𝑥0 −
𝑓(𝑥0 )
.
𝑓 ′ (𝑥0 )
Продолжая этот процесс, приходим к формуле Ньютона
𝑥
(𝑛)
=𝑥
(𝑛−1)
𝑓(𝑥 (𝑛−1) )
− ′ (𝑛−1) ,
)
𝑓 (𝑥
которую можно считать итерационным процессом с итерирующей функцией
𝑠(𝑥) = 𝑥 −
𝑓(𝑥)
𝑓′ (𝑥)
.
Процесс решения уравнения с использованием метода Ньютона показан в
таблице А.4.
24
Таблица А.4 – Нахождение корня уравнения методом Ньютона
Текущее приближение,
𝒙(𝒏)
0,80000
0,81412
0,84012
0,88345
0,94325
0,99512
1,01347
1,01412
Число шагов, 𝒏
0
1
2
3
4
5
6
7
Точность, |𝒙(𝒏) − 𝒙(𝒏−𝟏) |
–
0,01412
0,02600
0,04333
0,05980
0,05187
0,01835
0,00065
3.5 Идея метода хорд
Этот метод можно получить из метода Ньютона, заменив производную
𝑓′(𝑥) отношением разности функции к разности аргумента в окрестности рассматриваемой точки
𝑥
(𝑛+1)
=𝑥
(𝑛)
𝑓(𝑥 (𝑛) )(𝑥 (𝑛) − 𝑥 (𝑛−1) )
−
.
𝑓(𝑥 (𝑛) ) − 𝑓(𝑥 (𝑛−1) )
Геометрически это означает, что приближенным значением корня считается точка пересечения секущей, проходящей через две точки функции 𝑓(𝑥 (𝑛) ) и
𝑓(𝑥 (𝑛−1) ), с осью абсцисс.
Процесс решения уравнения с использованием метода хорд показан в таблице А.5.
Таблица А.5 – Нахождение корня уравнения методом хорд
Число шагов, 𝒏
0
1
2
3
4
5
Текущее приближение,
𝒙(𝒏)
1,20000
1,18356
0,94412
1,05345
1,02412
1,01345
Точность, |𝒙(𝒏) − 𝒙(𝒏−𝟏) |
–
0,01644
0,23944
0,10933
0,02933
0,01067
25
Число шагов, 𝒏
6
7
Текущее приближение,
𝒙(𝒏)
1,01445
1,01412
Точность, |𝒙(𝒏) − 𝒙(𝒏−𝟏) |
0,00100
0,00033
3.6 Код программы на языке Haskell
-- Функция
f x = 2 * x + tan(2*x)
-- Производная функции
dfdx x = 2 + 2/(cos(2*x))^2
-- Метод половинного деления
bisection f left right epsilon =
if right - left < epsilon
then right
else if (f mid) * (f right) > 0
then bisection f left mid epsilon
else bisection f mid right epsilon
where mid = (left+right)/2.0
-- Метод Ньютона
newton f dfdx x0 epsilon =
if abs(temp) < epsilon
then x0 - temp
else newton f dfdx (x0-temp) epsilon
where temp = (f x0)/(dfdx x0)
-- Метод хорд
chord f x1 x0 epsilon =
if abs(temp) < epsilon
then x1 - temp
else chord f (x1-temp) x1 epsilon
where temp = (f x1)*(x1-x0)/((f x1) - (f x0))
-- Вывод корней
main=print[(bisection f 0.8 1.2 0.001),(newton f dfdx 0.8 0.001),(chord f
1.18 1.2 0.001)]
3.6. Вывод
Наименьший положительный корень уравнения 𝑥 = 1.014 ± 0.001.
С помощью метода половинного деления требуемой точности удалось достичь за 9 шагов, с помощью метода Ньютона – за 7 шагов, с помощью метода
хорд – за 7 шагов.
Значит, в этом случае наибольшей скоростью сходимости обладают методы Ньютона и хорд.
26
4 Задание №5
4.1 Задание
Дана таблица А.6 значений функции 𝑓(𝑥). Вычислить значения 𝑓′(𝑥) и
𝑓′′(𝑥) в заданной точке 𝑥 = 1,1. Оценить погрешность вычислений, считая, что
функция в таблице задана точно.
Таблица А.6 – Задание функции 𝑓(𝑥)
𝒙
0,0
0,1
0,2
0,3
0,4
0,5
0,6
𝒇(𝒙)
1,00000
1,20500
1,42007
1,64538
1,88124
2,12815
2,38676
𝒙
0,7
0,8
0,9
1,0
1,1
1,2
1,3
𝒇(𝒙)
2,65797
2,94290
3,24293
3,55975
3,89537
4,25216
4,63285
𝒙
1,4
1,5
1,6
1,7
1,8
1,9
2,0
𝒇(𝒙)
5,04065
5,47918
5,95261
6,46561
7,02350
7,63219
8,29835
4.2. Метод решения задачи
Так как требуется найти значение производной в точке, имеющейся в таблице, то для вычисления первой производной можно воспользоваться центральным разностным соотношением 𝑓 ′ (𝑥) =
𝑓(𝑥+ℎ)−𝑓(𝑥−ℎ)
2ℎ
, где ℎ = 0,1.
Для вычисления второй производной в точке 𝑥 воспользуемся формулой
𝑓 ′′ (𝑥) =
𝑓(𝑥+ℎ)−2𝑓(𝑥)+𝑓(𝑥−ℎ)
ℎ2
, которая получается, если дважды применить форму-
лу разностного соотношения.
4.3 Код программы на ассемблере IA-32
; Реализация функций подсчёта производных
.386
.MODEL flat, c
.CODE
PUBLIC C dfdx, C d2fdx2
; Первая производная
; Входные параметры: массив значений функции в равноотстоящих узлах,
27
; номер узла для нахождения производной, величина шага по x
dfdx
PROC
fninit
mov eax, dword PTR [esp+4]
mov ebx, dword PTR [esp+16]
fld qword ptr [eax+ebx*8+8]
fld qword ptr [eax+ebx*8-8]
fsubp
push 2
fild dword ptr [esp]
add esp, 4
fdivp
fld qword PTR [esp+8]
fdivp
ret
dfdx
ENDP
; Вторая производная
d2fdx2 PROC
fninit
mov eax, dword PTR [esp+4]
mov ebx, dword PTR [esp+16]
fld qword ptr [eax+ebx*8+8]
fld qword ptr [eax+ebx*8]
push 2
fild dword ptr [esp]
add esp, 4
fmul
fsubp
fld qword ptr [eax+ebx*8-8]
fadd
fld qword PTR [esp+8]
fdivp
fld qword PTR [esp+8]
fdivp
ret
d2fdx2 ENDP
end
// Вызов функций подсчёта производных из программы на C
#include <stdio.h>
extern "C"
{
double dfdx(double* fx, double h, int n);
double d2fdx2(double* fx, double h, int n);
}
int _tmain(int argc, _TCHAR* argv[])
{
double fx[21]={1.0,1.205,1.42007,1.64538,1.88124,2.12815,2.38676,
2.65797,2.94290,3.24293,3.55975,3.89537,4.25216,4.63285,5.04065,
28
5.47918,5.95261,6.46561,7.02350,7.63219,8.29835};
printf("%g\n", dfdx(fx, 0.1, 11));
printf("%g\n", d2fdx2(fx, 0.1, 11));
return 0;
}
4.4 Вывод
Первая и вторая производные в точке 𝑥 = 1,1 получились равными:
𝑓′(1,1) ≈ 3,4620499610900 ± 0,0000000000001
𝑓′′(1,1) ≈ 2,117013931274 ± 0,000000000001
5 Задание №6
5.1 Задание
1
Вычислить определённый интеграл ∫0 √𝑥 cos 𝑥 ⅆ𝑥 с помощью формул
прямоугольников (левых, правых и средних), трапеций, Симпсона с числом узлов 𝑛 = 12 для каждого метода.
Оценить погрешность по формуле Рунге.
1
∫ √𝑥 cos 𝑥 ⅆ𝑥
0
5.2 Описание метода решения задачи
Для вычисления определённого интеграла воспользуемся квадратурными
формулами.
5.3 Оценка погрешности квадратурных формул. Правило Рунге
Для оценки погрешности 𝑅 квадратурной формулы для непрерывной на
[𝑎; 𝑏] функции 𝑓(𝑥), можно использовать правило Рунге: вычислить по
соответствующей квадратурной формуле с шагом ℎ =
𝑏−𝑎
𝑛
и с шагом
ℎ
2
значения
𝐼𝑘 и 𝐼𝑘/2 , и найти приближенное значение интеграла и оценку погрешности по
формулам:
29
𝑏
∫𝑎 𝑓(𝑥) ⅆ𝑥 ≈ 𝐼𝑘/2 +
𝑏
∫𝑎 𝑓(𝑥) ⅆ𝑥 ≈ 𝐼𝑘/2 +
𝑏
∫𝑎 𝑓(𝑥) ⅆ𝑥 ≈ 𝐼𝑘/2 +
𝐼𝑘/2 −𝐼𝑘
3
𝐼𝑘/2 −𝐼𝑘
3
𝐼𝑘/2 −𝐼𝑘
15
,𝑅 ≈
,𝑅 ≈
,𝑅 ≈
|𝐼𝑘/2 −𝐼𝑘 |
3
|𝐼𝑘/2 −𝐼𝑘 |
3
|𝐼𝑘/2 −𝐼𝑘 |
15
— для формулы прямоугольников;
— для формулы трапеций;
— для формулы Симпсона.
Таблица 7 – Вычисление определённого интеграла с помощью квадратурных формул
Метод
𝑰𝒏 (𝒏 = 𝟏𝟐)
Формула левых прямо0,503357
угольников
Формула правых прямо0,548382
угольников
Формула средних прямо0,532833
угольников
Формула трапеций
0,525870
Формула Симпсона
0,529251
𝑰𝒏 (𝒏 = 𝟐𝟒)
𝑰
𝑹
0,518095
0,523008
0,004912
0,518095
0,523008
0,004912
0,531761
0,532119
0,000357
0,529351
0,530512
0,530512
0,530596
0,001160
0,000084
𝟐
5.4 Код программы на языке Scheme
; Интегрирование квадратурными формулами
(define (int fun points coefs h)
(* h (apply + (map * coefs (map fun points)))))
; Подынтегральная функция
(define (fx x) (* (sqrt x) (cos x)))
; Формирование списка узлов
(define (make-point-list a h n)
(cond
((= 0 n) '())
(else (cons a (make-point-list (+ a h) h (- n 1))))))
; Списки весов для левых/правых/средних прямоугольников
(define (mid n) (if (= 0 n) '(0) (cons 1 (mid(- n 1)))))
(define (left n) (if (= 0 n) '(0) (cons 1 (left (- n 1)))))
(define (right n) (cons 0 (mid (- n 1))))
; Списки весов для формул парабол и трапеций
(define (parabol n) (cons (/ 1 3) (parabol1 (- n 1))))
(define (parabol1 n)
(cons (/ 4 3) (parabol2 (- n 1))))
(define (parabol2 n)
(if (<= n 1)
(list (/ 1 3))
30
(cons (/ 2 3) (parabol1 (- n 1)))))
(define (trap n) (cons (/ 1 2) (trap1 (- n 1))))
(define (trap1 n) (if (= 0 n) '(1/2) (cons 1 (trap1 (- n 1)))))
; Подсчёт списка значений интеграла всеми методами с заданным числом узлов
(define (iN n)
(let ((h (/ 1 n)) (points (make-point-list 0 (/ 1 n) (+ n 1))))
(list (int fx points (left n) h)
(int fx points (right n) h)
(int fx (map (lambda (x) (+ x (/ h 2))) points) (mid n) h)
(int fx points (trap n) h)
(int fx points (parabol n) h))))
; Вывод результатов
(print (iN 12))
(print (iN 24))
(print (map / (map abs (map - (iN 12) (iN 24))) '(3 3 3 3 15)))
(print (map + (iN 24)
(map / (map abs (map - (iN 12) (iN 24))) '(3 3 3 3 15))))
5.5 Вывод
Искомый определённый интеграл получился равным
𝐼 ≈ 0,528 ± 0,002 – по формуле трапеций
𝐼 ≈ 0,529 ± 0,004 – по формуле прямоугольников
𝐼 ≈ 0,5304 ± 0,0001 – по формуле Симпсона
Как видно, наименее точной из этих формул оказалась формула прямоугольников, наиболее точной – формула Симпсона.
6 Задание №7
6.1 Задание
Вычислить интеграл по формуле Гаусса и оценить погрешность для 𝑛 = 4:
1
ⅆ𝑥
−1 10 + 𝑥
∫
6.2 Описание метода решения задачи
1
Воспользуемся следующей формулой: ∫−1 𝑓(𝑥) ⅆ𝑥 ≈ ∑𝑛𝑖=1 𝐴𝑖 𝑓(𝑡𝑖 ).
1
Где 𝑡𝑖 – нули полинома Лежандра четвёртой степени 𝑃4 (𝑥) = (35𝑥 4 −
8
30𝑥 2 + 3).
31
Коэффициенты 𝐴𝑖 и точки 𝑡𝑖 – табличные величины.
6.3 Оценка погрешности
Остаточный член формулы Гаусса для 𝑛 = 4 выражается следующим образом:
(𝑏 − 𝑎)2𝑛+1 (𝑛!)4 (2𝑛)
(𝜉)
𝑅𝑛 =
𝑓
(2𝑛 + 1)[(2𝑛)!]3
[Далее следует привести нахождение десятой производной и её максимума.]
6.4 Код программы на языке Visual Basic
Module Module1
Private Function f(t As Double) As Double
f = 1 / (10 + t)
End Function
Sub Main()
Dim integral As Double = 0.0
Dim t()={System.Math.Sqrt((3-2*System.Math.Sqrt(1.2))/7), _
-System.Math.Sqrt((3-2*System.Math.Sqrt(1.2))/7), _
System.Math.Sqrt((3+2*System.Math.Sqrt(1.2))/7), _
-System.Math.Sqrt((3+2*System.Math.Sqrt(1.2))/7)}
Dim A()={(18+System.Math.Sqrt(30))/36, _
(18+System.Math.Sqrt(30))/36, _
(18-System.Math.Sqrt(30))/36, _
(18-System.Math.Sqrt(30))/36}
For i = 0 To 3 Step 1
integral = integral + A(i) * f(t(i))
Next
Console.WriteLine(integral)
End Sub
End Module
6.5 Вывод
Искомый интеграл получился равным
𝐼 ≈ 0,20067069545 ± 0,00000000003
Данный метод оказался более точным, чем другие рассмотренные методы
численного интегрирования.
32
7 Задание №12
7.1 Задание
Сравнить эффективность метода Ньютона и метода обратной квадратичной интерполяции для достижения заданной точности. 𝜀 = 10−4 .
𝑓(𝑥) = 𝑥 2 – cos 𝜋𝑥 на промежутке [0; 0,5].
7.2 Описание метода решения задачи
Метод Ньютона поиска корней уравнения был описан выше.
Метод обратной квадратичной интерполяции заключается в следующем:
Выбираем любые три точки на промежутке [𝑎; 𝑏], и находим по ним уравнение параболы 𝑥 = 𝑔(𝑦). На каждом шаге находим следующее приближение:
𝑥 (𝑛) = 𝑔(0).
Продолжаем этот процесс, пока |𝑥 (𝑛) − 𝑥 (𝑛−1) | ≥ 𝜀.
Таблица 8 – Сравнение эффективности метода Ньютона и метода обратной
квадратичной интерполяции
Метод Ньютона
𝒏
𝒙(𝒏)
0
0,2000
1
0,5423
2
0,4407
3
0,4384
Метод обратной квадратичной интерполяции
𝒏
𝒙(𝒏)
0
0,4400
1
0,4384
2
0,4384
7.3 Код программы на языке C++
#include <iostream>
#include <fstream>
#define _USE_MATH_DEFINES
#include <cmath>
float f(float q) {
return q * q - cos(M_PI * q);
}
float f1(float q) {
return 2 * q + M_PI * sin(M_PI * q);
}
int main () {
33
std::ofstream out("z12.out");
std::out.precision(4);
std::out.setf (ios::fixed);
std::out << "Square:" << std::endl;
float x0 = 0.2f, x1 = 0.4f, x2 = 0.5f;
float y0 = f(x0), y1 = f(x1), y2 = f(x2);
float e = 0.0001f;
float x = (y0 * y0 * y1 * x2 + y2 * y2 * y0 * x1 + y1 * y1 * y2 * x0
- y2 * y2 * y1 * x0 - y0 * y0 * y2 * x1 - y1 * y1 * y0 * x2)
/ (y0 * y0 * y1 + y2 * y2 * y0 + y1 * y1 * y2 - y1 * y2 * y2
- y2 * y0 * y0 - y0 * y1 * y1);
int i = 0;
while (fabs(x - x2) >= e)
{
std::out << i << ' ' << x0 << ' ' << x1 << ' ' << x2
<< ' ' << x << std::endl;
x0 = x1; x1 = x2; x2 = x;
y0 = f(x0); y1 = f(x1); y2 = f(x2);
x = (y0 * y0 * y1 * x2 + y2 * y2 * y0 * x1 + y1 * y1 * y2 * x0
- y2 * y2 * y1 * x0 - y0 * y0 * y2 * x1 - y1 * y1 * y0 * x2)
/ (y0 * y0 * y1 + y2 * y2 * y0 + y1 * y1 * y2 - y1 * y2 * y2
- y2 * y0 * y0 - y0 * y1 * y1);
i++;
}
std::out << i << ' ' << x0 << ' ' << x1 << ' ' << x2
<< ' ' << x << std::endl;
std::out << x << std::endl;
std::out << "Newton:" << std::endl;
x0 = x1 = 0.2f;
x1 = x0 - f(x0) / f1(x0);
i = 0;
while (fabs(x0 - x1) >= e)
{
out << i << ' ' << x0 << ' ' << x1 << endl;
x0 = x1; x1 = x0 - f(x0) / f1(x0);
i++;
}
std::out << i << ' ' << x0 << ' ' << x1 << std::endl << x1;
return 0;
}
7.4 Вывод
Метод обратной квадратичной интерполяции оказался более эффективным, чем метод Ньютона. Скорость сходимости этих методов примерно одинакова, однако метод Ньютона обладает локальной сходимостью, а метод обратной
квадратичной интерполяции более стабилен.
34
8 Задание №13
8.1 Задание
Вычислить коэффициенты обусловленности корней полинома пятой степени (2х − 1)(х − 4)2 (х − 5)2 = 0 в зависимости от коэффициентов полинома a
priori и a posteori, то есть теоретически и вычислив корни полинома с помощью
приближенных методов по формуле Ньютона.
Показать, что для кратных и простых корней метод имеет различную скорость сходимости
Коэффициенты уравнения вещественны и заданы с точностью 𝜀𝑚 , которая
должна быть предварительно подсчитана (с учётом характеристики машинный
экпилон используемого типа данных).
8.2 Алгоритм определения машинной точности
printf( "\tЭпсилон\tРазмер мантиссы\n");
float epf = 1;
int i = 1;
while ((1+epf/2) != 1)
{
epf/=2;
++i;
}
printf( "float:\t%G\t%i\n", epf/2, i);
Величина машинного эпсилон для типа float составляет 5,96046 ⋅ 10−8 ,
длина мантиссы – 24.
8.3 Априорная оценка погрешности
Вычислим корни уравнения.
𝑥1 = 0,5 – корень первой кратности.
𝑥2,3 = 4 – корень второй кратности.
𝑥4,5 = 5 – корень второй кратности.
35
Сначала найдём коэффициенты обусловленности для корня первой кратности.
Найдём коэффициенты обусловленности для корня 𝑥1 = 0,5 [необходимо
привести явную формулу для вычисления коэффициентов]:
𝜈0 = 1,612
𝜈1 = 2,338
𝜈2 = 0,848
𝜈3 = 0,131
𝜈4 = 0,009
𝜈5 = 0,000
Таким образом, 𝑥1 ≈ 0,5000000000000000 ± 0,0000000000000005
Теперь найдем коэффициенты обусловленности для корней второй кратности.
Для кратных корней кратности 2 𝑥1 = 𝑥2 = 4 и 𝑥4 = 𝑥5 = 5 эти корни будут простыми корнями уравнения 𝑓 ′ (𝑥) = 0.
Как и делалось выше, найдём обусловленность кратных корней𝑥1 = 𝑥2 = 4
и 𝑥4 = 𝑥5 = 5. Необходимо отметить, что погрешность входных данных теперь
2εм, так как коэффициенты представляют собой произведения первоначальных
коэффициентов и степеней, которые ранее были представлены с точностью 𝜀м .
Рассмотрим неявную функцию:
𝐹(𝑥𝑖 , 𝑎0 , 𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 ) = 𝑎4 𝑥𝑖4 + 𝑎3 𝑥𝑖3 + 𝑎2 𝑥𝑖2 + 𝑎1 𝑥𝑖 + 𝑎0
𝐹(𝑥𝑖 , 𝑎0 , 𝑎1 , 𝑎2 , 𝑎3 , 𝑎4 ) = 0,
где 𝑎4 = 10, 𝑎3 = −148, 𝑎2 = 780, 𝑎1 = −1682, 𝑎0 = 1160.
8.4 Определение корней при помощи метода Ньютона
Идея данного метода описана в пункте 3.4.
36
Таблица 9 – Определение корней при помощи метода Ньютона
Точное
значение
корня
0,5
4
5
Начальное
приближение
Приближенное
значение корня
Число
итераций
Фактическая погрешность
0,0
3,5
5,5
0,500000000000000
3,9999997
5,0000004
5
22
22
0,000000000000000
0,0000003
0,0000004
[Необходимо ещё раз определить коэффициенты обусловленности, имея
корни и привести их в таблице.]
9 Задание №14
9.1 Задание
Вычислить приближённые значения производных (первой и второй) для
функции 𝑓(𝑥) = 𝑥 2 – cos 𝜋𝑥 в точке 𝑥 = 0,26.
Первую производную будем аппроксимировать центральным разностным
отношением, а для второй производной используем формулу 𝑓 ′′ (𝑥) =
𝑓(𝑥+ℎ)−2𝑓(𝑥)+𝑓(𝑥−ℎ)
.
ℎ2
a) Найдите приближение к первой производной по указанному правилу. Используйте формулу центрального разностного отношения для
значений ℎ = 10𝑘 3√𝜀𝑚 , где 𝑘 = −10, −9, … − 2, −1, 0, 1, 2, 9, 10.
b) Вычислите приближение для второй производной. Шаг тот же. В
каждом случае сравните вычисленные приближения с истинными
значениями производных. Можете ли вы объяснить, как на выбор
наилучшего значения h влияет поведение функции 𝑓(𝑥) вблизи точки 𝑥?
c) Используйте технику экстраполяции, чтобы улучшить приближения,
полученные в пунктах (а) и (б).
37
d) Сделайте выводы, проанализировав погрешность вычислений. Результаты оформите в таблице, сравнив точные и приближенные значения производных, а также полученную ошибку
9.2 Описание метода решения задачи
Для вычисления первой производной в точке x воспользуемся центральным разностным соотношением:
𝑓′(𝑥) ≈
𝑓(𝑥 + ℎ) − 𝑓(𝑥 − ℎ)
,
2ℎ
где ℎ = 10𝑘 3√𝜀𝑚 , 𝑘 = −10, −9, … − 2, −1, 0, 1, 2, 9, 10.
Для вычисления второй производной в точке x воспользуемся формулой
𝑓(𝑥 + ℎ) − 2𝑓(𝑥) + 𝑓(𝑥 − ℎ)
,
ℎ2
которая получается, если дважды применить формулу центрального разностного
𝑓 ′′ (𝑥) ≈
соотношения.
Таблица 10 – Приближенное вычисление производной
𝒌
𝒉
𝒇′ (𝒙)
−10
−9
0,000000000000000606
0,00000000000000606
15077840,000
1507784,000
Точное
значение
𝜟𝒇′ (𝒙)
𝒇′′ (𝒙)
15077837
1507781,25
0,000
0,000
2,81012
9
10
6055,45
60554,54
0,51
0,51
Точное
значение
𝜟𝒇′′ (𝒙)
8,756
8,756
8,75621
2,29
2,29
2,00
2,00
6,76
6,76
[Необходимо внести все значения в таблицу.]
9.3 Вывод
При приближенном вычислении производной с различным шагом
наибольшая погрешность была получена при наименьшем шаге. Это связано с
большой погрешностью вычислений.
38
С увеличением шага погрешность сначала уменьшается (преобладает вычислительная погрешность, которая уменьшается с увеличением шага), затем
достигает оптимального значения, и вновь начинает расти (преобладает методическая погрешность, которая растет с увеличением шага).
39
Учебное издание
ЧИСЛЕННЫЕ МЕТОДЫ
Методические указания к выполнению курсовой работы
Авторы-составители:
Гарбарь Сергей Владиславович
Жгун Татьяна Валентиновна
Редактор В. Г. Павлов
Компьютерная верстка О. Г. Климантова
Изд. лиц. ЛР № 020815 от 21.09.98.
Подписано в печать 24.08.2007. Бумага офсетная. Формат 6084 1/16.
Гарнитура Times New Roman. Печать офсетная.
Усл. печ. л. 1,2. Уч.-изд. л. 1,3. Тираж 200 экз. Заказ №
Издательско-полиграфический центр Новгородского
государственного университета им. Ярослава Мудрого.
173003, Великий Новгород, ул. Б. Санкт-Петербургская, 41.
Отпечатано в ИПЦ НовГУ. 173003, Великий Новгород,
ул. Б. Санкт-Петербургская, 41.
Download