Компания ALT Linux
Опубликован: 24.03.2015 | Доступ: свободный | Студентов: 550 / 136 | Длительность: 19:00:00
Лекция 3:

Задачи высшей математики с Maxima

3.6 Методы теории приближения в численном анализе

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

Этим объясняется важность всевозможных аналитических и численных приложений полиномиальных приближений для аппроксимации и вычисления функции. Замена функций на их степенные разложения и полиномиальные приближения помогает изучению пределов, анализу сходимости и расходимости рядов и интегралов, приближённому вычислению интегралов и решению дифференциальных уравнений. Степенные ряды и разложения по многочленам Чебышёва широко используются при вычислении значений функции с заданной степенью точности. Они являются эффективным вычислительным средством при решении широкого круга научно-технических задач.

3.6.1 Приближённое вычисление математических функций

Пусть функция f(x) задана на интервале (x_0 - R,x_0 + R) и нам требуется вычислить значение функции f(x) при x = x_1 \in (x_0-R,x_0+R) с заданной точностью \epsilon > 0.

Предположив, что функция f(x) в интервале x\in (x_0 - R,x_0 + R) раскладывается в степенной ряд

f(x)=\sum^{\infty }_{i=0}u_{i}(x)=
\sum^{\infty }_{i=0}a_{i}(x-x_{0})^{i}=a_{0}+
a_{1}(x-x_{0})+a_{2}(x-x_{0})^{2}+\dots +a_{n}(x-x_{0})^{n}+\dots,
мы получим, что точное значение f(x_1) равно сумме этого ряда при x = x_1
f(x_{1})=\sum^{\infty }_{i=0}a_{i}(x_{1}-x_{0})^{i}=a_{0}+
a_{1}(x_{1}-x_{0})+a_{2}(x_{1}-x_{0})^{2}+\dots+
a_{n}(x_{1}-x_{0})^{n}+\dots,
а приближённое — частичной сумме S_n(x_1)
f(x_{1})\approx S_{n}(x_{1})=\sum^{n}_{i=0}a_{i}(x_{1}-
x_{0})^{i}=a_{0}+a_{1}(x_{1}-x_{0})+a_{2}(x_{1}-x_{0})^{2}+
\dots+a_{n}(x_{1}-x_{0})^{n}.

Для погрешности приближения мы имеем выражение в виде остатка ряда

f(x_{1})-S_{n}(x_{1})=r_{n}(x_{1}),
где
r_{n}(x_{1})=\sum^{\infty}_{i=1}x_{1}^{n+i}=
a_{n+1}x_{1}^{n+1}+a_{n+2}x_{1}^{n+2}+\dots

Для знакопеременных рядов с последовательно убывающими членами

\vert r_{n}(x)\vert=\vert \sum^{\infty}_{i=1}u_{n+i}(x_{1})\vert
<\vert u_{n+1}(x_{1})\vert .

Точность аппроксимации, как правило, возрастает с ростом степени приближающего степенного разложения и тем выше, чем точка x ближе к точке x_0. Для равномерной аппроксимации на интервале наиболее удобными оказываются разложения по многочленам Чебышёва.

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

Ряд Тейлора для функции f(x) — это степенной ряд вида

\sum^{\infty }_{k=0}\frac{f^{(k)}(x_{0})}{k!}(x-x_{0})^{k},
где числовая функция f предполагается определённой в некоторой окрестности точки x_0 и имеющей в этой точке производные всех порядков.

Многочленами Тейлора для функции f(x), порядка n соответственно, называются частные суммы ряда Тейлора

\sum^{n}_{k=0}\frac{f^{(k)}(x_{0})}{k!}(x-x_{0})^{k}.

Если мы распишем эту формулу, то получим следующее выражение

f(x_{0})+\frac{f^{\prime}(x_{0})}{1!}(x-x_{0})+
\frac{f^{\prime\prime}(x_{0})}{2!}(x-x_{0})^{2}+\dots+
\frac{f^{(n)}(x_{0})}{n!}(x-x_{0})^{n}.

Формула Тейлора для функции f(x) — это представление функции в виде суммы её многочлена Тейлора степени n(n = 0, 1, 2,...) и остаточного члена. Другими словами это называют разложением функции f(x) по формуле Тейлора в окрестности точки x_0. Если действительная функция f одного переменного имеет n производных в точке x_0, то её формула Тейлора имеет вид

f(x)=P_{n}(x)+r_{n}(x),
где
P_{n}(x)=\sum^{n}_{k=0}\frac{f^{(k)}(x_{0})}{k!}(x-x_{0})^{k}
— многочлен Тейлора степени n, а остаточный член может быть записан в форме Пеано
r_{n}(x)=o((x-x_{0})^{n}), x\rightarrow x_{0}.

Получаем, что

P_{n}(x)=f(x_{0})+\frac{f^{\prime}(x_{0})}{1!}(x-x_{0})+
\frac{f^{\prime\prime}(x_{0})}{2!}(x-x_{0})^{2}+\dots+
\frac{f^{(n)}(x_{0})}{n!}(x-x_{0})^{n}.

Если функция f дифференцируема n+1 раз в некоторой окрестности точки x_{0}, (x_{0}-\delta , x_{0}+\delta ),\delta >0, то остаточный член в этой окрестности может быть записан в форме Лагранжа

r_{n}(x)=\frac{f^{(n+1)}(x_{0}+\theta (x-x_{0}))}{(n+1)!}(x-x_{0})^{(n+1)} ,
0< \theta <1, x\in (x_{0}-\delta ,x_{0}+\delta ).

Заметим, что при n = 1 выражение для P_1(x) = f(x_0)+ f'(x_0)(x-x_0) совпадает с формулой Лагранжа конечных приращений для функции f(x).

Формула Тейлора для многочленов. Пусть имеется произвольный многочлен f(x)=a_{0}x^{n}+a_{1}x^{n-1}+\dots+a_{n}.. Тогда при любых x и h имеет место следующая формула:

f(x+h)=a_{0}(x+h)^{n}+a_{1}(x+h)^{n-1}+\dots+a_{n}=\\
=f(x)+f^{\prime}(x)h+\frac{f^{\prime\prime}(x)}{2!}h^{2}+\dots+
\frac{f^{(k)}(x)}{k!}h^{k}+\dots+\frac{f^{(n)}(x)}{n!}h^{n}.

Рядом Маклорена для функции f(x) называется её ряд Тейлора в точке 0 начала координат, то есть таким образом это степенной ряд вида

f(x)=\sum^{\infty }_{k=0}\frac{f^{(k)}(0)}{k!}x^{k} .

Таким образом формула Маклорена является частным случаем формулы Тейлора. Предположим, что функция f(x) имеет n производных в точке x = 0 . Тогда в некоторой окрестности этой точки (-\delta , \delta ), \delta >0 , функцию f(x) можно представить в виде

f(x)=\sum^{n}_{k=0}\frac{f^{(k)}(0)}{k!}x^{k}+r_{n}(x),
x\in (-\delta , \delta ),
где r_n(x) — остаточный член n-ого порядка в форме Пеано.

Приведём разложения по формуле Маклорена для основных элементарных математических функций:

e^{x}&=1+x+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+\dots+\frac{x^{n}}{n!}+o(x^{n}),\\
sinx&=x-\frac{x^{3}}{3!}+\frac{x^{5}}{5!}+\dots+
(-1)^{n-1}\frac{x^{2n-1}}{(2n-1)!}+o(x^{2n}),\\
cosx&=1-\frac{x^{2}}{2!}+\frac{x^{4}}{4!}+\dots+
(-1)^{n}\frac{x^{2n}}{(2n)!}+o(x^{2n+1}),\\
(1+x)^{\alpha }&=1+\alpha x+\frac{\alpha (\alpha -1)}{2!}x^{2}+
\dots+\frac{\alpha (\alpha -1)\dots(\alpha-n+1)}{n!}x^{n}+o(x^{n}),\\
ln(1+x)&=x-\frac{x^{2}}{2}+\frac{x^{3}}{3}+\dots+
(-1)^{n-1}\frac{x^{n}}{n}+o(x^{n}).

В Maxima существует специальная команда, позволяющая вычислять ряды и многочлены Тейлора: taylor(expr,x,a,n). Здесь expr — разлагаемое в ряд выражение, a — значение x, в окрестности которого выполняется разложение (по степеням x-a), n — параметр, указывающий на порядок разложения и представленный целым положительным числом. Если a указывается просто в виде имени переменной, то производится вычисление ряда и многочлена Маклорена.

Пример: Найти многочлен Тейлора 9-ой степени экспоненциальной функции e^x в начале координат.

(%i29)	taylor(exp(x),x,0,9);
1+x+\frac{{x}^{2}}{2}+\frac{{x}^{3}}{6}+\frac{{x}^{4}}{24}+\frac{{x}^{5}}{120}+\frac{{x}^{6}}{720}+\frac{{x}^{7}}{5040}+\frac{{x}^{8}}{40320}+\frac{{x}^{9}}{362880}+\dots\leqno{(\%o29) }

Многочлены Тейлора дают наиболее точную аппроксимацию приближаемой функции вблизи точки x_0. По мере удаления от точки x_0 погрешность возрастает. Для приближения приходится использовать многочлены Тейлора более высокой степени, но иногда и они не помогают в связи с накоплением вычислительной погрешности.

Интересно проследить этот процесс графически. Пакет Maxima предоставляет такую возможность с помощью команды plot.

Пример: Найти число e с точностью до 0.001. Положим x =1. Тогда чтобы вычислить значение e, необходимо выполнить серию команд:

Строим разложение функции e^x в ряд Тейлора (до 8 порядка включительно)

(%i1)	t:taylor(exp(x),x,0,8);
1+x+\frac{{x}^{2}}{2}+\frac{{x}^{3}}{6}+\frac{{x}^{4}}{24}+\frac{{x}^{5}}{120}+\frac{{x}^{6}}{720}+\frac{{x}^{7}}{5040}+\frac{{x}^{8}}{40320}+\dots\leqno{(\%o1) }

Вычисляем частичную сумму ряда при x = 1:

(%i2)	ev(t,x=1);
\frac{109601}{40320}\leqno{(\%o2) }

Значение e в форме с плавающей точкой находим, используя функцию float:

(%i3)	float(%);
2.71827876984127\leqno{(\%o3) }

Интересно провести вычисления и сравнить результаты, получающиеся для числа e при различных степенях используемого многочлена Тейлора. Получаются следующие результаты:

k=1, e_{1}=1, k=2, e_{2}=2, k=3, e_{3}=2.5, k=4, e_{4}=\\
2.666666667,k=5, e_{5}=2.708333333, k=6, e_{6}=2.716666667, e_{7}=\\
2.718055556,k=8, e_{8}=2.718253968, k=9, e_{9}=2.718281526, e_{10}=\\
2.718281801.

Отсюда видно, что значение e с точностью 0.001 вычисляется при использовании многочлена Тейлора степени не ниже 7-ой. Также следует, что число e c точностью 0.000001 или что то же самое 10^{-6} вычисляется помощи с многочлена Тейлора 9-ой или более высокой степени.

Оценку остатка ряда произведём по формуле остаточного члена ряда Маклорена

\vert f(x_{1})-S_{n}(x_{1})\vert =\vert r_{n}(x_{1})\vert =
\vert \frac{f^{n+1}(c)}{(n+1)!}\vert ,
где c находится между 0 и x_1. Следует r_{n}(1)=\frac{e^{c}}{(n+1)!}, 0<c<1.. Так как e^{c}<e<3, то r_{n}(1)<\frac{3}{(n+1)!}.. При n = 7 имеем r_{7}<\frac{3}{7!}<0.001, e\approx 2.718.

Наряду с командой taylor для разложения функций и выражений в ряды используется команда powerseries(выражение,x,a) (строится разложение для заданного выражения по переменной x в окрестности a). Результатом выполнения команды powerseries может быть построение её ряда Тейлора в общей форме, например:

(%i1)	powerseries(sin(x),x,0);
\sum_{i2=0}^{\infty }\frac{{\left( -1\right) }^{i2}\,{x}^{2\,i2+1}}{\left( 2\,i2+1\right) !}\leqno{(\%o1) }
(%i2)	powerseries(sin(x^2),x,0);
\sum_{i3=0}^{\infty }\frac{{\left( -1\right) }^{i3}\,{x}^{2\,\left( 2\,i3+1\right) }}{\left( 2\,i3+1\right) !}\leqno{(\%o2) }

Для разложения в ряд Тейлора функции нескольких переменных используется функция taylor с указанием списка переменных в форме: taylor(expr, [x_1,x_2,... ], [a_1,a_2,... ], [n_1,n_2,... ])

Пример: Найти многочлен Тейлора 6-ой степени от функции \frac{x}{1+x}.

(%i1)	f(x):=x/(1+x);
f\left( x\right) :=\frac{x}{1+x}\leqno{(\%o1) }
(%i2)	powerseries(f(x),x,0);
x\,\sum_{i1=0}^{\infty }{\left( -1\right) }^{i1}\,{x}^{i1}\leqno{(\%o2) }
(%i3)	taylor(f(x),x,0,6);
x-{x}^{2}+{x}^{3}-{x}^{4}+{x}^{5}-{x}^{6}+\dots\leqno{(\%o3) }

Пример: Найти разложение функции \arccos(x) в ряд Маклорена.

(%i6)	taylor(acos(x),x,0,12);
\frac{\pi }{2}-x-\frac{{x}^{3}}{6}-\frac{3\,{x}^{5}}{40}-\frac{5\,{x}^{7}}{112}-\frac{35\,{x}^{9}}{1152}-\frac{63\,{x}^{11}}{2816}+\dots\leqno{(\%o6) }

Пример: Найти разложение функции \exp(x)+1 по формуле Тейлора 5-ой степени в окрестности точки x = 2.

(%i7)	taylor(exp(x)+1,x,2,5);
1+{e}^{2}+{e}^{2}\,\left( x-2\right) +\frac{{e}^{2}\,{\left( x-2\right) }^{2}}{2}+\frac{{e}^{2}\,{\left( x-2\right) }^{3}}{6}+\frac{{e}^{2}\,{\left( x-2\right) }^{4}}{24}+\frac{{e}^{2}\,{\left( x-2\right) }^{5}}{120}+\dots\leqno{(\%o7) }

Пример: Найти разложение гиперболического косинуса в ряд Маклорена 8-ой степени.

taylor(cosh(x),x,10);

Получаем

1+\frac{1}{2}x^{2}+\frac{1}{24}x^{4}+\frac{1}{720}x^{6}+
\frac{1}{40320}x^{8}+O(x^{10}).

Заметим, что у аналитических функций их разложения в ряд Тейлора существуют всегда. Приведём пример функции, не имеющей разложения в ряд Тейлора и для которой команда taylor не даёт результата: f(x) = 1/x^2 + x.

(%i8)	taylor(1/x^{2}+x,x,0,7);
\frac{1}{{x}^{{2}}}+x+\dots\leqno{(\%o8) }

В результате выполнения команды taylor или powerseries получаем исходное выражение x^{-2} + x. В то же время в окрестности других точек, например точки x = 2, формула Тейлора вычисляется

(%i13)	taylor(1/x^{2}+x,x,2,2);
\frac{2\,{2}^{{2}}+1}{{2}^{{2}}}-\frac{\left( {2}-2\,{2}^{{2}}\right) \,\left( x-2\right) }{2\,{2}^{{2}}}+\frac{\left( {{2}}^{2}+{2}\right) \,{\left( x-2\right) }^{2}}{8\,{2}^{{2}}}+\dots\leqno{(\%o13) }
(%i14)	ratsimp(%);
{2}^{-{2}-3}\,\left( \left( {{2}}^{2}+{2}\right) \,{x}^{2}+\left( {2}^{{2}+3}-4\,{{2}}^{2}-8\,{2}\right) \,x+4\,{{2}}^{2}+12\,{2}+8\right) \leqno{(\%o14) }

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

Рассмотрим примеры такой графической визуализации для функции \cos(x). Сравним графики самой функции \cos(x) с графиками её разложений Тейлора различных степеней.

Пример: Сравним функцию \cos(x) c её разложением Маклорена 4-ой степени на интервале [-5, 5].

Построим разложение

(%i15)	appr:taylor(cos(x),x,0,5);
1-\frac{{x}^{2}}{2}+\frac{{x}^{4}}{24}+\dots\leqno{(\%o15) }
Сопоставление разложения в ряд Маклорена и функции y=cos(x)

увеличить изображение
Рис. 3.14. Сопоставление разложения в ряд Маклорена и функции y=cos(x)
Построим график (экранная форма, в формате wxMaxima)
(%i16)	wxplot2d([appr,cos(x)], [x,-5,5], [y,-1.1,1.1],
[nticks,100]);

Выведем график в файл:

(%i17)	plot2d([appr,cos(x)], [x,-5,5], [y,-1.1,1.1],
[gnuplot_preamble, "set grid;"], [gnuplot_term, ps],
[gnuplot_out_file, "appr.eps"])$

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

Пример: Сравним функцию \cos(x) с её разложением Маклорена 8-ой степени на интервале [-5, 5]. Сопоставим результат с предыдущим примером.

Построим разложение более высокой степени:

(%i18)	appr1:taylor(cos(x),x,0, 9);
Сопоставление двух разложений в ряд Маклорена и функции y=cos(x)

увеличить изображение
Рис. 3.15. Сопоставление двух разложений в ряд Маклорена и функции y=cos(x)
1-\frac{{x}^{2}}{2}+\frac{{x}^{4}}{24}-\frac{{x}^{6}}{720}+\frac{{x}^{8}}{40320}+\dots\leqno{(\%o18) }

Пример показывает, что при использовании разложения Тейлора более высокой степени точность приближения возрастает и удаётся достичь удовлетворительного приближения на более широком интервале. Однако заметим, что степень разложения Тейлора нельзя повышать неограниченно в связи с накапливанием вычислительной погрешности.

Разложение в ряд Тейлора может использоваться и для вычисления пределов (функция tlimit, по синтаксису аналогичная limit).