- •С.Н. Стребуляев, д.Ю. Васин
- •Оглавление
- •Введение
- •1. Основные пакеты, операторы и функции системы аналитических вычислений maple
- •1.1. Пакеты функций
- •1.2. Способы задания функций и построение их графиков
- •1.3. Вычисление пределов
- •1.4. Вычисление производных
- •1.5. Вычисление интегралов
- •1.6. Операции с рядами
- •1.7. Решение уравнений, неравенств и их систем
- •1.8. Анализ функций
- •Решение дифференциальных уравнений второго порядка:
- •Численное решение системы дифференциальных уравнений:
- •Решение системы двух дифференциальных уравнений с выводом фазового портрета решения:
- •Фазовый портрет;
- •Решение;
- •Система уравнений Ван дер Поля при аппроксимации характеристики лампы полиномом 3 степени
- •Получаем укороченные уравнения Ван дер Поля
- •Операции с векторами:
- •Способы задания матриц:
- •Операции над матрицами:
- •1.11. Преобразование комплексных чисел, аналитических выражений и функций комплексного переменного
- •Функции комплексного переменного:
- •Работа с комплексными функциями
- •Начальные условия:
- •Конкретные значения параметров системы указаны в вариантах контрольных заданий.
- •Нерезонансные случаи
- •Греческий алфавит
1.6. Операции с рядами
Применение систем символьной математики особенно эффективно при решении одной из задач математического анализа — операций с рядами. В настоящем разделе рассматриваются задачи анализа числовых и функциональных рядов, а также разложения функций в ряды Тейлора, Фурье, асимптотическое разложение.
Числовые последовательности с заданным числом членов:
> restart:with(plots):
> sum(k^2,k=1..4);
> Sum(k^2,k=1..4)=evalf(sum(k^2,k=1..4));
> sum(k,k=1..n);
Бесконечные последовательности:
> restart:sum(-exp(-k),k=1..n);
> sum(-exp(-k),k=1..infinity);
> Sum(k*a^k,k)=evalf(sum(k*a^k,k));
> Sum(1/n!,n=1..infinity)=evalf(sum(1/n!,n=1..infinity));
> Sum(n^2*exp(-sqrt(n)),n=1..5000)=evalf(sum(n^2*exp(-sqrt(n)),n=1..5000));
> Sum(n!/n^sqrt(n),n=1..1000)=evalf(sum(n!/n^sqrt(n),n=1..500));
Вычисление факториала числа:
3!;
> factorial(50);
Двойные суммы:
> Sum(Sum(k^2,k=1..m),m=1..N);
> factor(simplify(value(%)));
> subs(N=100,%);
Вычисление произведений членов последовательности:
> restart:
> Product(k^2,k=1..5)=product(k^2,k=1..5);
> Product(k^2,k)=product(k^2,k);
> product(a[k],k=1..6);
> f:=[1,2,3,4,5]; product(f[k],k=1..5);
> product(n+k,k=1..4);
> Product(2/i,i=1..infinity)=product(2/i,i=1..infinity);
Общая схема исследования сходимости числовых рядов.
Знакопостоянные ряды:
> restart:with(linalg):
> U:=(n)->(1/(ln(n)^2))*cos(Pi*n^2/(n+1));
> S:=Sum(U(n),n=2..infinity);
Проверка необходимого условия сходимости:
> Limit(U(n),n=infinity)=limit(U(n),n=infinity);
Для определения сходимости используем признак Даламбера:
> if limit(U(n+1)/U(n),n=infinity)<1 then print(R-сходится) else print (R- расходится) fi;
R-расходится
Знакопеременные ряды:
> restart:
> V:=(n)-> (-1)^n*sin(n)^2/n;
> S:=Sum(V(n),n=2..infinity);
Проверка необходимого условия сходимости:
> Limit(V(n),n=infinity)=limit(V(n),n=infinity);
Построение графика частичных сумм ряда:
> H:=(k)->sum((-1)^n*sin(n)^2/n,n=1..k);
> plot(H(k),k=1..400);
Построение графика частичных сумм ряда из модулей:
> G:=(k)->abs(H(k));
> plot(G(k),k=1..400);
Нахождение суммы ряда:
> Sum((-1)^n*sin(n)^2/n,n=1..1000)=evalf(sum((-1)^n*sin(n)^2/n,n=1..1000));
Функциональные ряды:
> restart:with(plots):
> U:=(x,n)->x^n/(1+x^(2*n));
> U(x,n+1)/U(x,n);simplify(%);
> Sum(U(x,n),n=1..infinity);
> assume(n>0); solve({abs(U(x,n+1)/U(x,n))<1.01},{x,n});
> f:=(x,n)->abs(U(x,n+1)/U(x,n));
> plot3d(f(x,n),x=-1..1,n=1..100,color=blue,thickness=2,axes=frame);
> x:=3; Sum(U(x,n),n=1..infinity)=evalf(sum(U(x,n),n=1..infinity));
>
Степенные ряды :
> restart:
> a:=(n)->(n^n)/(n!);
> Sum(a(n)*x^n,n=1..infinity);
> R:=limit(a(n)/a(n+1),n=infinity); evalf(%); # область сходимости -e^(-1) < x < e^(-1);
Разложение функций в ряд Тейлора:
Функция от одного переменного:
> restart: with(plots):with(linalg):
> # Разложение в ряд Тейлора до члена с x^4 функции f(x);
> f:=(1+x+x^2)/(1-x+x^2);
> taylor(f,x=0);
> # Разложение в окрестности x=0 до порядка остатка = 5(необязательный параметр);
> taylor(f,x=0,5);f1:=convert(%,polynom);f1;
> f1:=convert(%,polynom);# f1- основная часть ряда;
> # Сравним насколько отличается исходная функция от ее приближения рядом Тейлора;
> plot([f,f1],x=-1..1.2,color=[BLUE,PINK],linestyle=[SOLID,DASHDOT],title="Функция и ее ряд Тейлора",titlefont=[HELVETICA,BOLD,10],legend=["функция","ряд Тейлора"],thickness=3);
Функция от двух переменных:
> restart:
> mtaylor(f(x,y),[x,y],3):
> mtaylor(sin(x^2+y^2),[x,y]);
> mtaylor(sin(x^2+y^2),[x,y],8);
> mtaylor(sin(x^2+y^2),[x,y],8,[2,1]);
> mtaylor(sin(x^2+y^2),[x=1,y],3);
Ассимптотическое разложение функций:
> restart:with(linalg): with(plots):
Warning, the protected names norm and trace have been redefined and unprotected
Warning, the name changecoords has been redefined
> y[1]:=1/(1-x-x^2);
> asympt(y[1],x);
> y[2]:=evalf(convert(%,polynom));
> # Сравним насколько отличается исходная функция от ее ассимптотического приближения;
> plot([y[1],y[2]],x=1..10,color=[BLUE,RED],linestyle=[SOLID,DASHDOT],title="Функция и ее приближение",titlefont=[HELVETICA,BOLD,12],legend=["функция","приближение"],thickness=3);
Разложение в ряд Фурье функции:
Способ № 1
>
> # Разложение в ряд Фурье функции y(x)=abs(1-x) на интервале (-1,1);
> restart;
> with(linalg): with(plots):
Warning, the protected names norm and trace have been redefined and unprotected
Warning, the name changecoords has been redefined
> y := x -> abs(1 - x);
> # Накладываем условия целочисленности на переменные n и k;
> assume(n, integer); assume(k, integer);
> l := 2;
> # Расчитываем коэффициенты Фурье;
> a[0] := 1/2/l*int(y(x), x = -l..l);
> a[n] := n -> 1/l*int(y(x)*cos(n*Pi*x/l), x = -l..l);
> a[n](n);
> b[n] := n -> (1/l)*int(y(x)*sin(n*Pi*x/l), x = -l..l);
> b[n](n);
> F := (x, k) -> a[0] + sum(a[n](n)*cos(n*Pi*x/l) + b[n](n)*sin(n*Pi*x/l), n = 1..k);
> F(x, infinity);
> # Сравним насколько отличается исходная функция от ее приближения рядом Фурье;
> plot([y(x),F(x,20)],x=-2..2,color=[BLUE,RED],linestyle=[SOLID,DASHDOT],title="Функция и ее приближение",titlefont=[HELVETICA,BOLD,12],legend=["функция","приближение"],thickness=3);
Способ № 2
>
> # Разложение в ряд Фурье функции y(x)=sh(4x) на интервале (-Pi,Pi);
> restart; with(linalg): with(plots):
Warning, the protected names norm and trace have been redefined and unprotected
Warning, the name changecoords has been redefined
> y:=x->abs(1-x);
> `FurSer`:=proc(f,VarAndRange,n)
local l,i,t,a,b,A,B,s,Res;
if whattype(VarAndRange)<>`=` then print(`Неверно введённый диапазон`);
else s:=lhs(VarAndRange);
a:=lhs(rhs(VarAndRange));
b:=rhs(rhs(VarAndRange));
l:=(b-a)/2;
Res:=1/(2*l)*int(f(t),t=a..b);
for i from 1 to n do A[i]:=1/l*int(f(t)*cos(Pi*t*i/l),t=a..b);
B[i]:=1/l*int(f(t)*sin(Pi*t*i/l),t=a..b);
Res:=Res+A[i]*cos(Pi*i*s/l)+B[i]*sin(Pi*i*s/l);
end do;
Res;
fi;
end proc:
> z:=(x)->evalf(FurSer(y, x=-Pi..Pi,5));z(x);
> # Сравним насколько отличается исходная функция от ее приближения рядом Фурье;
> plot([y(x),z(x)],x=-Pi..Pi,color=[BLUE,RED],linestyle=[SOLID,DASHDOT],title="Функция и ее приближение",titlefont=[HELVETICA,BOLD,10],legend=["функция","приближение"],thickness=3);