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

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

3.6.2 Приближённое вычисление определённых интегралов

Степенные ряды эффективны и удобны при приближённом вычислении определённых интегралов, не выражающихся в конечном виде через элементарные функции. Для вычисления \int_{0}^{x}f(t)dt подинтегральная функция f(t) раскладывается в степенной ряд. Если

f(x)=a_{0}+a_{1}x+a_{2}x^{2}+\dots+a_{n}x^{n}+\dots,
\ \vert x\vert<R,
то при |x| < R степенной ряд можно интегрировать почленно. Получаем метод вычисления интеграла \int_{0}^{x}f(t)dt с любой наперёд заданной точностью
\int_{0}^{x}f(t)dt=a_{0}x+a_{1}\frac{x^{2}}{2}+
a_{2}\frac{x^{3}}{3}+\dots+a_{n}\frac{x^{n+1}}{n+1}+\dots.

Пример: Приближённое вычисление интеграла вероятностей

\phi(x)=\frac{1}{\sqrt{2\pi}}\int_{-x}^{x}e^{-t^{2}/2}dt=
\frac{2}{\sqrt 2\pi }\int_{0}^{x}e^{-t^{2}/2}dt.

Так как

e^{x}=1+x+\frac{x^{2}}{2!}+\frac{x^{3}}{3!}+\dots, \
\vert x\vert <\infty ,
то
e^{-x^{2}/2}=1-\frac{x^{2}}{2}+
\frac{x^{4}}{2^{2}2!}-\frac{x^{6}}{2^{3}3!}+\dots

Подставив этот ряд под знак интеграла и произведя почленное интегрирование получаем

\phi(x)=\frac{2}{\sqrt{2\pi}}\int_{0}^{x}e^{-t^{2}/2}dt=
\frac{2}{\sqrt{2\pi}}\left[x-\frac{x^{3}}{3\cdot 2}+\frac{x^{5}}
{5\cdot 2^{2}\cdot 2!}-\frac{x^{7}}{7\cdot 2^{3}\cdot 3!}+\dots\right]

Так как это знакопеременный ряд с последовательно убывающими слагаемыми, то погрешность вычисления интеграла последовательно убывает и не превышает последнего слагаемого.

Рассмотрим пример приближённого представления интеграла в виде полинома некоторой степени в том случае, когда он не вычисляется в замкнутой аналитической форме.

Пример: Вычислить \displaystyle
\int_{0}^{1}e^{-x^{2}/2}dx, оценить достигнутую точность

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

(%i1)	f(x):=exp(-x^2/2);
f\left( x\right) :=exp\left( \frac{-{x}^{2}}{2}\right) \leqno{(\%o1) }
(%i2)	taylor(f(x),x,0,8);
1-\frac{{x}^{2}}{2}+\frac{{x}^{4}}{8}-\frac{{x}^{6}}{48}+\frac{{x}^{8}}{384}+\dots\leqno{(\%o2) }

Интегрируя в пределах от 0 до 1, получаем числовой результат:

(%i3) 	integrate(%,x,0,1);
\frac{103499}{120960}\leqno{(\%o3) }
(%i4)	float(%);
0.85564649470899\leqno{(\%o4) }

Точность расчёта оцениваем, интегрируя в пределах от 0 до a:

(%i5)	integrate(%o2,x,0,a);
\frac{35\,{a}^{9}-360\,{a}^{7}+3024\,{a}^{5}-20160\,{a}^{3}+120960\,a}{120960}\leqno{(\%o5) }

При a = 1 находим:

(%i6)	expand(%);
\frac{{a}^{9}}{3456}-\frac{{a}^{7}}{336}+\frac{{a}^{5}}{40}-\frac{{a}^{3}}{6}+a\leqno{(\%o6) }
(%i7)	float(1/3456);
2.8935185185185184\,{10}^{-4}\leqno{(\%o7) }

Таким образом, точность расчёта значения интеграла \displaystyle\int_{0}^{1}e^{-x^{2}/2}dx, не хуже 0,0003. Окончательно

\displaystyle\int_{0}^{1}e^{-x^{2}/2}dx = 2.8935 \pm 0.0003

3.7 Преобразование степенных рядов

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

Аппроксимацией Паде для функции f(x) = \sum_{k=0}^{\infty}a_k x^k, заданной степенным рядом, называется такая дробно-рациональная функция R(x) =\frac{\sum_{k=0}^{L}p_k x^k}{1+\sum_{k=1}^{M}q_k x^k}, чьё разложение в степенной ряд совпадает со степенным рядом f(x) с точностью до коэффициента при x^{L+M}.

Паде-аппроксиммант задаётся значением функции в заданной точке и M+L значениями её производных в этой же точке. Эта же информация может послужить основой для степенного ряда, так в чём же отличие? Главное отличие в том, что задав M+L+1 член степенного ряда, мы отбрасываем остальные члены ряда, приравнивая их к нулю. Паде-аппроксимант не является полиномом, поэтому задав M+L+1 членов разложения Паде-аппроксиманта в степенной ряд, мы в неявной форме задаём и остальные члены.

Чему эти дополнительные члены будут равны? Это вопрос, на который нет однозначного ответа. В одних случаях они позволят нам построить более точную аппроксимацию, в других — наоборот могут ухудшить положение. Нет способа, который позволил бы сказать, насколько точна окажется Паде-аппроксимация и в какой окрестности и с какой точностью можно получить результаты.

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

Паде-аппрокимация наиболее эффективна для функций, имеющих полюса на комплексной плоскости в окрестностях точки разложения. Например, функция f(x) = \frac{1}{1+\sin^2(x)} непрерывна на действительной оси, но имеет полюса на комплексной плоскости. Поэтому она неэффективно аппроксимируется степенным рядом (до шестой степени включительно), но хорошо аппроксимируется по Паде со степенями числителя и знаменателя равными 4 и 2.

Функция pade, представленная в пакете Maxima, аппроксимирует отрезок ряда Тейлора, содержащий слагаемые до n-го порядка включительно, дробно-рациональной функцией. Её аргументы — ряд Тейлора, порядок числителя n, порядок знаменателя m. Разумеется, количество известных коэффициентов ряда Тейлора должно совпадать с общим количеством коэффициентов в дробно-рациональной функции минус один, поскольку числитель и знаменатель определены с точностью до общего множителя.

Синтаксис вызова функции pade:

pade (ряд Тейлора, степень числителя, степень знаменателя)

Вместо ряда Тейлора может использоваться ряд Лорана. В этом случае степени числителя и знаменателя могут быть и бесконечными (inf). В этом случае рассматриваются все рациональные функции, суммарная степень которых меньше или равна длине степенного ряда.

Пример:

(%i1)	t:taylor(exp(x),x,0,3);
1+x+\frac{{x}^{2}}{2}+\frac{{x}^{3}}{6}+\dots\leqno{(\%o1) }
(%i2)	pade(t,1,2);
[\frac{2\,x+6}{{x}^{2}-4\,x+6}]\leqno{(\%o2) }
(%i3)	taylor(sin(x)/x,x,0,7);
1-\frac{{x}^{2}}{6}+\frac{{x}^{4}}{120}-\frac{{x}^{6}}{5040}+\dots\leqno{(\%o3) }
(%i4)	pade(%,2,4);
[-\frac{620\,{x}^{2}-5880}{11\,{x}^{4}+360\,{x}^{2}+5880}]\leqno{(\%o4) }
(%i5)	taylor (1/(cos(x) - sec(x))^3, x, 0, 5);
-\frac{1}{{x}^{6}}+\frac{1}{2\,{x}^{4}}+\frac{11}{120\,{x}^{2}}-\frac{347}{15120}-\frac{6767\,{x}^{2}}{604800}-\frac{15377\,{x}^{4}}{7983360}+\dots\leqno{(\%o5) }
(%i6)	pade(%,3,inf);
[-\frac{120}{41\,{x}^{10}+60\,{x}^{8}+120\,{x}^{6}},\frac{8806092\,{x}^{2}-16847160}{1353067\,{x}^{10}-382512\,{x}^{8}+16847160\,{x}^{6}}]\leqno{(\%o6) }

Более специфичной является функция cf, которая рассчитывает коэффициенты цепной дроби, аппроксимирующей заданное выражение. Синтаксис вызова — cf(expr). Выражение expr должно состоять из целых чисел, квадратных корней целых чисел и знаков арифметических операций. Функция возвращает список коэффициентов (непрерывная дробь a + 1/(b + 1/(c + ...)) представляется списком [a,b,c,...]). Флаг cflength определяет количество периодов цепной дроби. Изначально установлено значение 1. Функция cfdisrep преобразует список (как правило выдачу функции ''cf) в собственно цепную дробь вида a + 1/(b + 1/(c + ...)).

Примеры использования функций cf и cfdisrep:

(%i1)	cf ([1, 2, -3] + [1, -2, 1]);
[1,1,1,2]\leqno{(\%o1) }
(%i2)	cfdisrep (%);
1+\frac{1}{1+\frac{1}{1+\frac{1}{2}}}\leqno{(\%o2) }
(%i3)	cflength: 3;
3\leqno{(\%o3) }
(%i4)	cf (sqrt (3));
[1,1,2,1,2,1,2]\leqno{(\%o4) }
(%i5)	cfdisrep(%);
1+\frac{1}{1+\frac{1}{2+\frac{1}{1+\frac{1}{2+\frac{1}{1+\frac{1}{2}}}}}}\leqno{(\%o5) }
(%i6)	ev (%, numer);
1.731707317073171\leqno{(\%o6) }