Разложение функций в ряды 

Часто бывает необходимо представить функцию в простом и единообразном виде. Рассмотрим представление функции в виде степенного многочлена в окрестности некоторой точки на оси абсцисс. Такое разложение называют разложением в ряд Тейлора. Если разложение выполняется относительно точки x = 0 , то такое разложение называют разложением в ряд Маклорена. 

Разложим функцию exp(x) в степенной ряд в окрестности x = 1, т.е. в ряд Тейлора. 

> restart:
series(exp(x),x=1);
 

`+`(exp(1), `*`(exp(1), `*`(`+`(x, `-`(1)))), `*`(`/`(1, 2), `*`(exp(1), `*`(`^`(`+`(x, `-`(1)), 2)))), `*`(`/`(1, 6), `*`(exp(1), `*`(`^`(`+`(x, `-`(1)), 3)))), `*`(`/`(1, 24), `*`(exp(1), `*`(`^`(`+...
 

Рассмотрим еще один пример. 

> series(exp(x),x);
 

`+`(1, x, `*`(`/`(1, 2), `*`(`^`(x, 2))), `*`(`/`(1, 6), `*`(`^`(x, 3))), `*`(`/`(1, 24), `*`(`^`(x, 4))), `*`(`/`(1, 120), `*`(`^`(x, 5))), O(`*`(`^`(x, 6))))
 

В последнем примере значение точки разложения неуказанно. В таком случае Maple раскладывает функцию точке x = 0, т.е. в ряд Маклорена. Число членов ряда может быть изменено третьим необязательным параметром – неотрицательным целым числом (по умолчанию оно равно 5) или системной переменной Order. 

Ряд можно преобразовать в полином (исключить остаточный член) используя convert с параметром polynom. 

Следующий пример демонстрирует разложение функции в ряд Маклорена с числом членов ряда от 1 до 40. 

> restart:
with(plots):
f:=x->sin(x)^2+cos(x);
for i from 1 to 40 do
Ris[i]:=plot([f(x),convert(series(f(x),x,i),polynom)],x=-8..8,y=-1..2,title=cat("Число членов ряда =", i)):
end do:
display([seq(Ris[i],i=1..40)], insequence=true);
 

 

proc (x) options operator, arrow; `+`(`*`(`^`(sin(x), 2)), cos(x)) end proc
Plot_2d
 

В этом примере изображения, созданные функцией plot, записываются в одномерный массив Ris, а функция display с параметром insequence=true отображает изображения друг за другом, создавая анимированное изображение. 

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

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

Тригонометрический ряд Фурье – это представление произвольной периодической функции f ( x) с периодом [-π, π] в виде 

 где a[n]b[n] = `/`(`*`(int(`*`(f, `*`(x, `*`(sin(`*`(n, `*`(x)))))), x = `+`(`-`(Pi)) .. Pi)), `*`(Pi)), `>=`(`*`(?@8, `*`(n)), 1.) 

Числа a[n] и b[n] – называются коэффициентами Фурье функции f ( x) . 

Рассмотрим пример разложения функции в тригонометрический ряд Фурье. Периодическая функция с периодам 2π определена следующим образом: 

 

> restart:
a:=n->1/Pi*int(f(x)*cos(n*x),x=-Pi..Pi);
b:=n->1/Pi*int(f(x)*sin(n*x),x=-Pi..Pi);
FS:=(x,k)->a(0)/2+sum(a(n)*cos(n*x)+b(n)*sin(n*x),n=1..k);
f:=x->piecewise(x>-Pi and x<0, -1,x>=0 and x <=Pi, 1);
FS(x,15);
 

 

 

 

 

proc (n) options operator, arrow; `/`(`*`(int(`*`(f(x), `*`(cos(`*`(n, `*`(x))))), x = `+`(`-`(Pi)) .. Pi)), `*`(Pi)) end proc
proc (n) options operator, arrow; `/`(`*`(int(`*`(f(x), `*`(sin(`*`(n, `*`(x))))), x = `+`(`-`(Pi)) .. Pi)), `*`(Pi)) end proc
proc (x, k) options operator, arrow; `+`(`*`(`/`(1, 2), `*`(a(0))), sum(`+`(`*`(a(n), `*`(cos(`*`(n, `*`(x))))), `*`(b(n), `*`(sin(`*`(n, `*`(x)))))), n = 1 .. k)) end proc
proc (x) options operator, arrow; piecewise(`and`(`<`(`+`(`-`(Pi)), x), `<`(x, 0)), -1, `and`(`<=`(0, x), `<=`(x, Pi)), 1) end proc
`+`(`/`(`*`(4, `*`(sin(x))), `*`(Pi)), `/`(`*`(`/`(4, 3), `*`(sin(`+`(`*`(3, `*`(x)))))), `*`(Pi)), `/`(`*`(`/`(4, 5), `*`(sin(`+`(`*`(5, `*`(x)))))), `*`(Pi)), `/`(`*`(`/`(4, 7), `*`(sin(`+`(`*`(7, `...
 

Выше представлено разложение функции f ( x) в тригонометрический ряд Фурье. 

Изобразим исходную функцию и ее разложение. 

> plot([f(x),FS(x,20)],x=-2*Pi..2*Pi,thickness=[3,1],legend=["исходная функция","ряд Фурье"],title="Разложение функции в ряд Фурье");
 

Plot_2d
 

Рассмотрим еще один пример. Периодическая функция с периодам 2π определена следующим образом: f(x) = `*`(`^`(x, 2)). 

> f:=x->x^2;
FS(x,15);
 

 

proc (x) options operator, arrow; `*`(`^`(x, 2)) end proc
`+`(`*`(`/`(1, 3), `*`(`^`(Pi, 2))), `-`(`*`(4, `*`(cos(x)))), cos(`+`(`*`(2, `*`(x)))), `-`(`*`(`/`(4, 9), `*`(cos(`+`(`*`(3, `*`(x))))))), `*`(`/`(1, 4), `*`(cos(`+`(`*`(4, `*`(x)))))), `-`(`*`(`/`(...
`+`(`*`(`/`(1, 3), `*`(`^`(Pi, 2))), `-`(`*`(4, `*`(cos(x)))), cos(`+`(`*`(2, `*`(x)))), `-`(`*`(`/`(4, 9), `*`(cos(`+`(`*`(3, `*`(x))))))), `*`(`/`(1, 4), `*`(cos(`+`(`*`(4, `*`(x)))))), `-`(`*`(`/`(...
 

Изобразим исходную функцию и ее разложение. 

> plot([f(x),FS(x,20)],x=-5*Pi..5*Pi,y=0..10,thickness=[3,1],legend=["исходная функция","ряд Фурье"],title="Разложение функции в ряд Фурье");
 

Plot_2d