Начала математического анализа


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



Пределы

Для нахождения пределов служит функция limit , которая может иметь два или три аргумента. Первый аргумент. - это функция (последовательность), предел которой надлежит искать. Второй указывает переменную и значение, к которому ее надо устремить.

Смысл третьего, необязательного параметра будет ясен из рассматриваемых ниже примеров.

> limit(sin(3*x)/x, x=0);

3

> limit((1+1/n)^n,n=infinity);

e

> limit((exp(x^2)+sin(x)^2)^(1/(x^2)),x=0);

e2

 

В следующем примере предел значений функции при стремлении аргумента к 0 не определен, поскольку односторонние пределы различны:

> a:= (exp(x^2)+sin(x))^(1/(x^2));

>

a := (exp(x^2)+sin(x))^(1/(x^2))

> limit(a, x=0); limit(a, x=0, left); limit(a, x=0, right);

undefined

0

infinity

 

В зависимости от того, где - в действительной или в комплексной области - ведутся вычисления, Maple по-разному интерпретирует константу infinity (бесконечность), различая понятия + infinity и - infinity в области вещественных чисел или оперируя понятием бесконечно-удаленной точки комплексной плоскости:

> limit(1/x,x=0, real);

undefined

> limit(1/x,x=0, complex);

infinity

 

Многие функции, в том числе большинство команд (функций) математического анализа, можно вызывать в так называемой инертной форме. Инертная форма функции (если она имеется) именуется так же, как и активная, с той разницей, что первая буква имени заменяется на соответствующую заглавную. (Заметим, что существуют функции, не имеющие инертной формы, имена которых начинаются, тем не менее, с заглавных букв.) В случае использования инертной формы вычисления откладываются. Этот эффект можно, в частности, использовать для оформления математических документов:

> Limit((n^3+3*n)/2^n, n=infinity) = limit((n^3+3*n)/2^n, n=infinity);

Limit((n^3+3*n)/(2^n),n = infinity) = 0



Производные

Для вычисления обычных и частных производных в Maple

используется команда (функция) diff, первый аргумент которой есть дифференцируемая функция, а второй - переменная, по которой надо брать производную.

 

> diff(sqrt(x^2+3), x);

x/(sqrt(x^2+3))

> diff(diff(z*sin(z), z), z); diff(z*sin(z), z, z);

2 cos(z) - z sin(z)

2 cos(z) - z sin(z)


Обратите внимание на эквивалентность двух последних команд.

Еще несколько примеров:

 

> Diff(exp(x^2)*sin(1/x),x,x);

Diff(exp(x^2)*sin(1/x),`$`(x,2))

> diff(x^3+t*x+t, x);

3 x2 + t

> diff(x^3+t*x+1, t);

x

 

Разумеется, переменная, по которой ведется дифференцирование, должна быть именно переменной (в математическом смысле). В противном случае Maple выдаст сообщение об ошибке.

 

> x:=4: diff(x^2+3*x, x);

Error, wrong number (or type) of parameters in function diff

> x:='x': diff(x^2+3*x, x);

2 x + 3

>


Обратите внимание на то, как было отменено присваивание переменной x конкретного числового значения.

Для нахождения производной неявной функции используется

implicitdiff, у которой второй параметр - неявно заданная функция, а третий - аргумент, по которому ведется дифференцирование:

 

> implicitdiff(x^2+3*y*x+y^3,y,x);

-1/3*(2*x+3*y)/(x+y^2)

 

Кроме команды diff, в Maple имеется также оператор дифференцирования D. Проиллюстрируем его действие на примерах:

> D(x^3); D([sin,cos,tan]);

3 D(x) x2

[cos, -sin, 1 + tan2]

Вышеприведенные примеры показывают, что, в отличие от функции diff, D не требует второго аргумента. Дифференцируя выражение x3, D рассматривает x не как независимый аргумент, а как некоторую функцию. Если результат операции дифференцирования затруднительно записать без использования аргумента дифференцируемой функции, то Maple "выкрутится" следующим образом:

> D(D(log));

proc (a) options operator, arrow; -1/(a^2) end proc...



Интегралы

Для нахождения определенных и неопределенных интегралов в Maple используется функция int, зависящая от двух аргументов, первый из которых представляет собой подынтегральное выражение, а второй - переменную, по которой ведется интегрирование. Если для второй переменной указан диапазон изменения переменной, то Maple ищет определенный интеграл, а в противном случае - неопределенный (возращается одна из первообразных).

 

> int(sin(x)*x^2, x);

-x2 cos(x) + 2 cos(x) + 2 x sin(x)

> Int(x/(x^2+x+1),x)=int(x/(x^2+x+1),x);

Int(x/(x^2+x+1),x) = 1/2*ln(x^2+x+1)-1/3*sqrt(3)*ar...

> int(x^3-t*x^2+4*t, x=1..4);

255/4-9*t

> int(sin(x)/x, x);

Si(x)

 

Последний интеграл не выражается конечным числом элементарных функций. В таких случаях Maple пытается найти интеграл, используя специальные функции. В приведенном примере это несложно сделать с помощью интегрального синуса. Если же Maple все-таки не сможет взять интеграл в конечном числе элементарных и специальных функций (это не обязательно означает, что он не берется), то результатом вызова функции int будет перевод всей команды в математический формат так, как если бы мы использовали инертную форму функции интегрирования ( Int ).

> g:= int(sin(1/cos(x)), x);

g := int(sin(1/cos(x)),x)

> diff(g, x);

sin(1/cos(x))


Для численного интегрирования команда int используется в комбинации с функцией evalf . Причем в этом случае неважно, какая форма функции Int используется: активная или инертная.

> evalf(int(sin(x^2), x=1..2)); evalf(Int(cos(x^2), x=1..2));

.4945081882

-.4430627755



Суммы и ряды

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

> sum(i^3, i=0..5);

225

Во избежание ошибок (связанных, например, с тем, что переменная по которой ведется суммирования уже имела какое-то значение) рекомендуется заключать общий член и переменную суммирования в одинарные кавычки.

 

> sum('a[k]*x^k','k'=0..n);

sum(a[k]*x^k,k = 0.. n)

> sum('1/k!', 'k'=0..infinity);

e

> sum('1/k^2', 'k'=1..infinity);

1/6*Pi^2

 


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

> sum('(1/k!)^2', 'k'=0..infinity);

BesselI(0, 2)

> sum('1/k^3', 'k'=1..infinity);

Zeta(3)

> sum('1/(k^2)!', 'k'=0..infinity);

sum(1/(k^2)!,k = 0.. infinity)

 

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

 

> f:=int(sin(x)/x, x); series(f, x=0,10);

f := Si(x)

series(1*x-1/18*x^3+1/600*x^5-1/35280*x^7+1/3265920...

> h:=series(log(x), x=1, 5);

h := series(1*(x-1)-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-...

 

Часто бывает полезно преобразовать ряд в полином, отбросив остаточный член.

 

> convert(h,polynom);

x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4

 

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

 

 


Дифференциальные уравнения

Maple содержит специализированные пакеты DEtools и PDEtools для решения и графического представления решений дифференциальных уравнений (обыкновенных и в частных производных соответственно). Однако многие дифференциальные уравнения можно решать, и не подгружая этот пакет, используя функции dsolve и pdesolve, входящие в ядро Maple:

> ode := diff(y(x),x)-y(x)^2+y(x)*sin(x)-cos(x);

ode := diff(y(x),x)-y(x)^2+y(x)*sin(x)-cos(x)

> ans := dsolve(ode);

ans := y(x) = sin(x)-exp(-cos(x))/(_C1+Int(exp(-cos...

> pdesolve( diff(f(x,y),x,x)+5*diff(f(x,y),x,y)=3, f(x,y) );

f(x,y) = 3/2*x^2+_F1(y)+_F2(y-5*x)


C помощью Maple можно искать и частные решения дифференциальных уравнений, определяемые начальными условиями.

> dsolve({diff(y(x),x,x)=-2*y(x), y(0)=1, y(Pi)=1}, y(x));

y(x) = -(cos(Pi*sqrt(2))-1)*sin(sqrt(2)*x)/sin(Pi*s...

> dsolve({diff(y(x),x,x)=y(x)+exp(x), y(0)=1, D(y)(0)=1}, y(x));

y(x) = (1/2*cosh(x)^2+1/2*cosh(x)*sinh(x)+1/2*x)*si...
y(x) = (1/2*cosh(x)^2+1/2*cosh(x)*sinh(x)+1/2*x)*si...


Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики