Символьное дифференцирование.
Символьное дифференцирование в 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