- •Часть I. Задания для начинающих................. 17
- •Часть II. Работа с массивами...................... 53
- •Часть III. Прикладные математические задачи ...... 73
- •Введение
- •От издательства
- •О технологии программирования
- •Эффективность алгоритмов и программ
- •Часть I Задания для начинающих
- •1. Линейные алгоритмы
- •Задачи по теме «Линейные алгоритмы»
- •2. Разветвляющиеся алгоритмы
- •Задачи по теме «Разветвляющиеся алгоритмы»
- •3. Циклические и итерационные алгоритмы
- •4. Простейшие операции над массивами
- •Часть II Работа с массивами
- •5. Векторы и матрицы
- •6. Линейный поиск
- •Часть III
- •7. Арифметика
- •8. Геометрия и теория множеств
- •9. Линейная алгебра и сжатие информации
- •10. Комбинаторика и теория вероятностей
- •11. Элементы численного анализа
- •12. Алгоритмы обработки символьной информации
- •13. Элементарная машинная графика
- •14. Элементы компьютерной мультипликации
- •15. Сортировка и слияние массивов
- •17. Разработка простейших арм и ипс
- •17.42 Каталог радиодеталей (справочник радиомастера).
- •18. Электронные таблицы
11. Элементы численного анализа
В задачах этого раздела требуется реализовать заданные численные методы, экспериментально исследовать условия и скорость сходимости методов. В условиях задач, как правило, дается лишь основная идея каждого метода. Рекомендуется самостоятельно познакомиться с обоснованием и условиями применения метода по специальной литературе, например:
1. Демидович Б. П., Марон И. А. Основы вычислительной математики. — М.: Наука, 1970.
2. Калиткин Н. Н. Численные методы. — М.: Наука, 1978.
3. Бахвалов Н. С. Численные методы. — М.: Наука, 1973.
4. Бронштейн И. М., Семендяев К. А. Справочник по математике. — М.: Наука, 1978.
Вычисление функций и их производных, используемых в задачах, рекомендуется оформлять в виде подпрограмм, так чтобы можно было подставлять любую функцию, не меняя самой программы. Погрешность, начальные условия и параметры алгоритма задаются вводом. Там, где это возможно, рекомендуется тестировать алгоритм на примерах, для которых известно или может быть найдено аналитически точное аналитическое решение (например, результат численного интегрирования сравнить с известной первообразной). Кроме собственно программирования и тестирования алгоритма полезно провести исследование предложенного метода на сходимость и скорость сходимости при разных условиях, устойчивость для разных функций и разных начальных условий.
Пример. Рассмотрим решение задачи 11.6 — вычисление определенного интеграла по формуле прямоугольников. В качестве подынтегральной функции возьмем у = е, для которой первообразная не выражается в элементарных функциях (это одна из разновидностей интеграла вероятности), поэтому завершение итерационного процесса — увеличение числа отрезков разбиения — запишем по условию близости соседних приближений, а не близости точного и приближенного результатов. Кроме того, встроенная функция Ехр(х) не может быть вычислена при больших (по модулю) значениях аргумента, поэтому вводим ограничение на задаваемые пределы интегрирования — не более чем [-5; 5], так как подынтегральная функция за пределами этого отрезка практически равна нулю. Решение может быть представлено с помощью следующей программы:
Тестирование. Для испытаний возьмем данные с известным результатом. Так, известно, что
Задачи по теме «Элементы численного анализа»
11.1 (5 6.) Метод простой итерации. Решить методом итераций уравнение вида х = ф(х). Очередное приближение корня находится по формуле ; начальное приближениеx0 задается произвольно. Обратите внимание, что метод сходится, если только .
11.2 (5 б.) Метод Ньютона. Решить методом Ньютона уравнение f(x) = 0. Очередное приближение корня находится по формуле:
11.3 (6 б.) Метод Эйткена-Стеффенсона (развитие метода простой итерации). Найти решение уравнения методом Эйткена-Стеффенсона, в котором от заданного начального х0 три очередных приближения находятся по формулам:
Процесс продолжается до достижения одного из условий: .
11.4 (5 б.) Метод дихотомии. Решить уравнение f(x) = 0 методом деления отрезка пополам (методом дихотомии). На каждой итерации отрезок [а, b] делится пополам и выбирается та из половин, на концах которой функция f(x) имеет значения разных знаков.
11.5 (5 б.) Метод хорд. Найти решение уравнения f(x) = 0 на заданном отрезке ахb методом хорд, в котором очередное приближение находится по формуле:
В задачах на численное интегрирование (задачи 11.6-11.8) определенный интеграл требуется найти с заданной точностью, для чего вычисление по формуле метода рекомендуется проводить многократно, каждый раз уменьшая шаг интегрирования в 2 раза, пока разница между соседними приближениями не станет меньше заданной погрешности.
11.6 (5 б.) Метод прямоугольников. Вычислить определенный интеграл методом прямоугольников:
, где п — количество отрезков разбиения; — значения функции на концах отрезков.
11.7 (5 б.) Метод трапеций. Вычислить определенный интеграл методом трапеций: , где п — количество отрезков разбиения; — значения функции на концах отрезков.
11.8 (6 б.) Метод Симпсона. Вычислить определенный интеграл по формуле Симпсона: где 2n — количество отрезков разбиения; — значения функции f(x) на концах отрезков.
11.9 (7 б.) Метод Эйлера. Найти приближенное решение обыкновенного дифференциального уравнения второго порядка у" = f(x,y,y') с заданными начальными условиями у(а)=у0 и у'(0) = р0 методом Эйлера на отрезке [а, b] с постоянным шагом h. Значения функции у(х) и ее производной р(х) = у' в узловых точках вычисляются по формулам:
11.10 (8 б.) Метод Ньютона. Составить таблицу значений функции у(х), которая задана неявно уравнением F(x,y) = 0. При фиксированном х уравнение F(x,y) = 0 можно решить методом Ньютона (см. задачу 11.2).
11.11 (5 б.) Линейная интерполяция. Функция у = f(*) задана таблично в массиве Y(n) при соответствующих значениях аргумента, хранящихся в неупорядоченном массиве Х(п), не содержащем одинаковых значений. Используя формулу линейной интерполяции:
построить таблицу значений функции на отрезке, содержащем все заданные значения аргумента, с постоянным заданным шагом h. Можно упорядочить пару массивов < Х(п), Y(n) > по возрастанию х.
11.12 (6 б.) Интерполяционный многочлен Лагранжа. Значения функции у=f(x)) заданы таблично в массиве Y(n) при соответствующих значениях аргумента в упорядоченном массиве Х{п). Найти значение функции в произвольной точке х по формуле Лагранжа:
11.13 (7 б.) Метод Рунге-Кутта. Найти приближенное решение обыкновенного дифференциального уравнения у' = f(x,y), у (а)=у0 методом Рунге-Кутта пятого порядка на отрезке [а, b] с заданным постоянным шагом h. Значения функции у(х) в узловых точках вычисляются по формуле:
11.14 (76.) Метод золотого сечения. Найти минимум заданной функции у=f(x) на заданном отрезке [а, b] методом золотого сечения. Для этого на отрезке [а, b] находятся две точки:
Если f(x)> f(x2), отбрасывается интервал [а,x], иначе — [х,b]; процесс продолжается до достижения за данной точности.
11.15 (6 6.) Метод парабол. Найти минимум заданной функции у = f{x), двигаясь от заданной точки х0 по методу парабол:
пока не будет достигнута заданная точность.
11.16 (8 б.) Для заданной матрицы А(п,п) найти обратную Аиспользуя итерационную формулу:
где Е — единичная матрица;=Е. Итерационный процесс заканчивается, если для заданной погрешности справедливо