Символьное дифференцирование.

Символьное дифференцирование в MATLAB выполняет команда

diff(func [, var, n])

где func – символьная запись функции или ее имя; var – переменная дифференцирования (если этот параметр отсутствует, то в качестве переменной дифференцирования будет выбрана первая по алфавиту символьная переменная); n – порядок (номер) производной, которую требуется определить (по умолчанию ищется первая производная).

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

Вычислим, например, производную от по переменной :

>> syms a x

>> f=cos(a*x)

f =

cos(a*x)

>> diff(f)

ans =

-a*sin(a*x)

Вычислим производную от функции по переменной :

>> syms x y n

>> y=x^n

y =

x^n

>> diff(y,x)

ans =

n*x^(n - 1)

Вычислим производную от функции по переменной :

>> syms a b t

>> y=sin(a*t+b)

y =

sin(b + a*t)

>> diff(y,t)

ans =

a*cos(b + a*t)

Вычислим теперь производную от функции по параметру :

>> syms a x

>> f=cos(a*x)

f =

cos(a*x)

>> diff(f,a)

ans =

-x*sin(a*x)

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

>> diff(f,2)

ans =

-a^2*cos(a*x)

>> diff(f,a,2)

ans =

-x^2*cos(a*x)

Вычислим производную четвертого порядка от по переменной :

>> diff('tan(x)',x,4)

ans =

16*tan(x)*(tan(x)^2 + 1)^2 + 8*tan(x)^3*(tan(x)^2 + 1)

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

Вычислим частные производные от функции по переменным и :

>> syms x y

>> diff('y^2/3-x^2/5-1',x)

ans =

-(2*x)/5

>> diff('y^2/3-x^2/5-1',y)

ans =

(2*y)/3

Вычислим частные производные второго порядка от функции по переменным и :

>> diff('sin(x)-ln(y)',x,2)

ans =

-sin(x)

>> diff('sin(x)-ln(y)',y,2)

ans =

1/y^2

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

>> syms t

>> x=sym('3*cos(t)^3')

x =

3*cos(t)^3

>> y=sym('3*sin(t)^3')

y =

3*sin(t)^3

>> diff(y)/diff(x)

ans =

-sin(t)/cos(t)

Вычислим производную от матрицы

.

Имеем:

>> A=[cos(a*x) sin(a*x); -sin(a*x) cos(a*x)]

A =

[ cos(a*x), sin(a*x)]

[ -sin(a*x), cos(a*x)]

>> diff(A)

ans =

[ -a*sin(a*x), a*cos(a*x)]

[ -a*cos(a*x), -a*sin(a*x)]

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

Вычисление пределов.

Одной из важных задач математического анализа является вычисление пределов последовательностей и функций [99,103,113,187,190,221]. Для решения этой задачи в системе MATLAB предусмотрена функция:

limit(func [, x, b, options])

где func – символьная запись функции или ее имя; x – имя переменной относительно которой вычисляется предел; b – точка в которой вычисляется предел (возможно вычисление справа и слева от заданной точки).

Рассмотрим использование функции limit на нескольких примерах.

Пусть требуется вычислить предел

.

Имеем:

>> syms x h

>> limit((cos(x+h)-cos(x))/h,h,0)

ans =

-sin(x)

Функция limit(func,x,a) возвращает предел символьного выражения func в точке x, стремящейся к значению a.

Пусть требуется вычислить предел

.

Имеем:

>> syms x n

>> limit((1+x/n)^n,n,inf)

ans =

exp(x)

Функция limit(func,x,inf) возвращает предел символьного выражения func в точке x, стремящейся к бесконечности.

Пусть требуется вычислить предел

.

Имеем:

>> syms x

>> limit(1/(2-x),x,2)

ans =

NaN

Поясним, что значение NaN переменной ans в данном случае означает, что значение рассматриваемого предела не определено.

Пусть требуется вычислить пределы

и .

Имеем:

>> syms x

>> limit(1/(2-x),x,2,'left')

ans =

Inf

>> limit(1/(2-x),x,2,'right')

ans =

-Inf

Функция limit(func,x,a,’right’) возвращает предел символьного выражения func в точке x, стремящейся к значению a справа (т.е. x принимает значения большие, чем a). Функция limit(func,x,a,’left’) возвращает предел символьного выражения func в точке x, стремящейся к значению a слева (т.е. x принимает значения меньшие, чем a).

Пусть требуется вычислить пределы слева и справа:

и .

Имеем:

>> syms x

>> f=2^(1/(x^2-4))

f =

2^(1/(x^2 - 4))

>> limit(f,x,2,'left')

ans =

>> limit(f,x,2,'right')

ans =

Inf