Вычисление элементарных функций Для вычисления значений элементарных функций на компьютере используются разные приемы: разложение функций в ряд Тейлора, рациональные приближения, разложение в цепные дроби и другие методы. Мы будем ипользовать только разложение в ряд Тейлора и некоторые способы оптимизации вычислений. Вычисление многочленов. Рассмотрим многочлен 𝑃 (𝑥) степени 𝑛 с действительными коэффициентами: 𝑃 (𝑥) = 𝑎0 + 𝑎1 𝑥 + 𝑎2 𝑥2 + . . . + 𝑎𝑛 𝑥𝑛 (1) 1 Напишите программу, вычисляющую значение многочлена 𝑃 (𝑥) в точке 𝑥* . Степень многочлена и его коэффициенты задаются пользователем. 2 Определите количество операций сложения и умножения, необходимое для вычисления многочлена по формуле (1) Эффективным методом вычисления многочленов в заданной точке является схема Горнера. Оставим без изменений первое слагаемое в (2), а в остальных вынесем 𝑥 за скобку: 𝑃 (𝑥) = 𝑎0 + 𝑥(𝑎1 + 𝑎2 𝑥 + 𝑎3 𝑥2 + . . . + 𝑎𝑛 𝑥𝑛−1 ). Повторяя эту операций для суммы в скобках, получим выражение: 𝑃 (𝑥) = 𝑎0 + 𝑥(𝑎1 + 𝑥(𝑎2 + 𝑥(𝑎3 + . . . + 𝑥(𝑎𝑛−1 + 𝑥𝑎𝑛 ) . . .))). Обозначим в (2) 𝑏𝑛 = 𝑎𝑛 и запишем рекуррентную формулу 𝑏𝑖−1 = 𝑎𝑖−1 + 𝑥𝑏𝑖 . Заметим, что тогда 𝑃 (𝑥) = 𝑏0 . 3 Решите задачу (1), используя схему Горнера 4 Определите количество операций сложения и умножения при использовании схемы Горнера для вычисления полинома (1). Тригонометрические функции. Для вычисления функций sin (𝑥) и cos (𝑥) используем их разложение в ряд Тейлора вблизи нуля: sin (𝑥) = 𝑥 − cos (𝑥) = 1 − 𝑥3 3! 𝑥2 2! + + 𝑥5 5! 𝑥4 4! − − 𝑥7 7! 𝑥6 6! ..., (2) .... (3) 5 Напишите функции sin(x), cos(x), возвращающие значения синуса и косинуса аргумента 𝑥 с точностью 0.00001. Убедитесь, что для больших значений 𝑥 получается неверный результат. 6 Учитывая периодичность функций sin(𝑥) и cos(𝑥), перед непосредственным вычислением следует свести аргумент 𝑥 к интервал −2𝜋 < 𝑥 < 2𝜋. При реализации 𝑥 часто приводят полуинтервалу 0 ≤ 𝑥 < 2𝜋 и сохраняют знак отдельно. Примените этот подход для оптимизации решения предыдущей задачи. 7 Используя формулы приведения для тригонометрических функций, оптимизируйте вычисление синуса и косинуса, сведя аргумент 𝑥 к полуинтервалу 0 ≤ 𝑥 < 𝜋 4. 8 Определите, сколько членов суммы (2) необходимо использовать чтобы вычислить sin 𝑥 при с точностью 0.1, 0.01, 10−5 при а) 𝑥 — любом, б) 0 ≤ 𝑥 < 2𝜋, в) 0 ≤ 𝑥 < 𝜋 4. Вычисление 𝑒𝑥 . Ряд Тейлора для экспоненты вблизи нуля имеет вид 𝑒𝑥 =1+𝑥+ 𝑥2 2! + 𝑥3 (4) + ... . 3! 9 Напишите функцию, возвращающую значение 𝑒𝑥 , используя формулу (4). Вычисление ln(𝑥) и log𝑎 (𝑥). Разложим ln(𝑥) в ряд Тейлора при |𝑥| < 1: ln (1 + 𝑥) = 𝑥 − 𝑥2 2 + 𝑥3 3 − 𝑥4 4 + ... , |𝑥| < 1. (5) 10 Как воспользоваться формулой (5) при значении аргумента больше 1, зная, что ln 10 ≈ 2.3025851? 11 Напишите функцию, возвращающую значение ln(𝑥). Для вычисления log𝑎 (𝑥) воспользуемся формулой: log𝑎 (𝑥) = ln(𝑥) ln(𝑎) . 12 Напишите функцию, возвращающую значение log𝑎 (𝑥). Вычисление степенной функции. 13 Выразите 𝑥𝑦 при 𝑥, 𝑦 ∈ R через функции ln и exp. Напишите функцию, возвращающую 𝑥𝑦 . 14 Быстрое возведение в степень. Напишите функцию, возвращающую 𝑥𝑦 при 𝑥 ∈ R, 𝑦 ∈ Z, использовав 𝑂(log 𝑦) операций умножения. Андрей Строганов. savthe@gmail.com