- •Глава 7 символьные вычисления
- •7.1 Символьные переменные, константы и выражения
- •7.2 Вычисления с использованием арифметики произвольной точности
- •7.3 Функции упрощения выражений – simplify, simple
- •7.4 Функция расширения выражений – expand
- •7.5 Разложение выражений на простые множители – функция factor
- •7.6 Приведение подобных членов – функция collect
- •7.7 Обеспечение подстановок – функция subs
- •7.8 Функция вычисления пределов – limit
- •7.9 Функция вычисления производных – diff
- •7.10 Функция вычисления интегралов – int
- •7.11 Функция разложения выражения в ряд Тейлора – taylor
- •7.12 Функция вычисления сумм рядов – symsum
- •7.13 Решение алгебраических уравнений и систем– функция solve
- •7.14 Решение дифференциальных уравнений – функция dsolve
- •7.15 Прямое и обратное преобразования Лапласа – функции laplace, ilaplace
- •7.16 Графики символьных функций – команды ezplot, ezpolar
- •7.17 Доступ к ресурсам ядра системы Maple
- •1) Разложение рациональной дроби на сумму простейших дробей
- •2) Нахождение интерполяционного полинома Лагранжа
- •3) Решение неравенств и систем неравенств
- •4) Разложение в ряд Тейлора функции нескольких переменных
- •5) Решение дифференциальных уравнений с помощью степенных рядов
- •6) Решение тригонометрических уравнений
7.9 Функция вычисления производных – diff
Для вычисления в символьном виде производных от выражения S служит функция diff, записываемая в форме diff(S, x, n). Она возвращает символьное значение n-ой производной (производной степени n ) от символьного выражения или массива символьных выражений S по переменной x, т.е.
Sn(x) = .
В формате diff(S, x) находится первая производная (n=1 по умолчанию).
Пусть требуется найти первую и третью производные функции y = x2sinx.
Решения будут иметь вид:
>> syms x
>> y=x^2*sin(x);
>> diff(y,x)
ans =
2*x*sin(x)+x^2*cos(x)
>> diff(y,x,3)
ans =
6*cos(x)-6*x*sin(x)-x^2*cos(x)
Если выражение S зависит от нескольких переменных, например, S=S(x,y), то ее частная производная (или S'x(x,y) )по аргументу x есть производная этой функции по x при постоянном значении y.
В декартовой системе координат на плоскости xOy градиент функции S(x,y) есть вектор
grad S = .
Частными производными второго порядка функции S=S(x,y) называются частные производные от ее первых производных , , т.е.
= , = , = , = .
Частные производные второго порядка обозначаются также символами
S''xx(x,y), S''xy(x,y), S''yx(x,y), S''yy(x,y).
Аналогично определяются и обозначаются частные производные более высоких порядков. Смешанные производные второго порядка, (например, S''xy(x,y) и S''yx(x,y)), отличающиеся только порядком дифференцирования, равны между собой при условии их непрерывности.
Функция S может быть массивом. В этом случае результат вычисления будет представлен в виде массива, элементами которого являются производные от исходных функций, образующих массив. Например,
>> syms a x
>> y=[a*log(x);x^a];
>> diff(y,x)
ans =
[ a/x]
[ x^a*a/x]
Рассмотрим еще один пример. Для функции двух переменных f(x,y) = arcsinxy вычислить gradf(x;y) в точке (0;0) и найти смешанную прозводную .
Решение:
>> syms x y
>> f=asin(x*y);
>> x1=diff(f,x)
x1 =
y/(1-x^2*y^2)^(1/2)
>> y1=diff(f,y)
y1 =
x/(1-x^2*y^2)^(1/2)
>> subs([x1 y1],[x y],[0 0])
ans =
0 0
>> xy=diff(diff(f,x),y)
xy =
1/(1-x^2*y^2)^(1/2)+y^2/(1-x^2*y^2)^(3/2)*x^2
>> [m n]=simple(xy)
m =
1/(1-x^2*y^2)^(3/2)
>> pretty(m)
1
--------------
2 2 3/2
(1 - x y )
Итак, grad(arcsinxy)│(0;0) = (0;0) и = .
7.10 Функция вычисления интегралов – int
В ряде случаев возникает необходимость вычисления неопределенных и определенных интегралов
I = f(x)dx и I = f(x)dx.
Здесь f(x) - подынтегральная функция независимой переменной x, a – нижний и b – верхний пределы интегрирования для определенного интеграла.
Функция int(f, x) – возвращает неопределенный интеграл (первообразную функцию) от символьного выражения f по переменной x.
Функция int(f, x, a, b) – возвращает значение определенного интеграла от символьного выражения f по переменной x с пределами от а до b.
Вычислить неопределенный интеграл:
dx.
Решение:
>> syms x
>> int(x/(1-x^2))
ans =
-1/2*log(x-1)-1/2*log(1+x)
Полученное решение с помощью элементарных преобразований приводится в виду ln. Для этого можно попробовать упростить полученный ответ с помощью функций simple, simplify или factor.
Проверим результат дифференцированием:
>> diff(-1/2*log(x-1)-1/2*log(1+x),x)
ans =
-1/2/(x-1)-1/2/(1+x)
>> [q,w]=simple(ans)
q =
-x/(x^2-1)
В результате получена подинтегральная функция, т.е. интеграл вычислен правильно.
Вычислить неопределенный интеграл:
dx.
Решение:
>> syms x a b
>> int(x/(a+b*x^2),x)
ans =
1/2/b*log(a+b*x^2)
В этом случае подинтегральная функция была задана в аналитическом виде с символьными переменными a, b, x.
Вычислить определенный интеграл:
dx.
Решение:
>> syms x a b c d
>> int(x/(a+b*x^2),x,c,d)
ans =
1/2*(log(a+d^2*b)-log(a+c^2*b))/b
>> pretty(ans)
2 2
log(a + d b) - log(a + c b)
1/2 --------------------------------
b
В данном случае подинтегральная функция была задана в аналитическом виде с символьными переменными, а пределы интегрирования – также в виде символьных переменных.
Вычислить определенный интеграл:
arcsinxdx.
Решение:
>> syms x
>> int(asin(x),x,0,pi/4)
ans =
1/4*pi*asin(1/4*pi)+1/4*(16-pi^2)^(1/2)-1
Для получения решения в числовой форме надо активизировать с помощью мыши строку ответа и нажать клавишу <Enter>. Будет получен следующий ответ:
ans =
0.32847177096777
Вычислить несобственный интеграл:
xe-xdx.
Решение:
>> syms x
>> int(x*exp(-x),x,0,inf)
ans =
1
Вычисления интегралов с бесконечными пределами с помощью функции int имеют некоторые особенности. Вычислим интеграл
t ne-atdt.
Решение:
>> syms a n t
>> int(t^n*exp(-a*t),t,0,inf)
ans =
int(t^n*exp(-a*t),t = 0 .. inf)
Решение в явном виде не найдено. Предполжим теперь, что переменная n – положительная. Тогда программа будет иметь вид:
>> syms a t
>> n=sym('n','positive');
>> int(t^n*exp(-a*t),t,0,inf)
ans =
1/(a^n)/a*gamma(n)*n
Если n≥0 целое, то gamma(n)×n = n!, и в этом случае t ne-atdt=.
Функция int не позволяет получить неопределенный интеграл от произвольной функции. Например, при вычислении интеграла esinxdx получим следующий результат:
>> syms x
>> int(exp(sin(x)),x)
ans =
int(exp(sin(x)),x)
В некоторых случаях int возвращает выражение для первообразной через специальные функции, например, при вычислении интеграла dx получим
>> syms x
>> int(sin(x)/x,x)
ans =
sinint(x)
Первообразной является так называемый интегральный синус
Si(x) = dt,
информацию о котором можно получить, введя из командной строки doc sinint.
Попробуем теперь вычислить определенные интегралы
esinxdx и dx.
>> syms x
>> I=int(exp(sin(x)),x,0,1)
I =
int(exp(sin(x)),x = 0 .. 1)
>> vpa(ans,15)
ans =
1.63186960841805
>> int(sin(x)/x,x,0,1)
ans =
sinint(1)
>> vpa(ans,15)
ans =
.946083070367183
Для проверки вычислим первый интеграл с помощью функции quad.
>> quad('exp(sin(x))',0,1,1e-13)
ans =
1.63186960841805
Следующий пример относится к вычислению тройного интеграла:
(x2+y2)zdxdydz.
Здесь можно трижды использовать функцию int:
>> syms a x y z
>> int(int(int((x^2+y^2)*z,x,0,a),y,0,a),z,0,a)
ans =
1/3*a^6
Вычислим тройной интеграл
sin(x2+y2+z2)dxdydz,
который не выражается в элементарных функциях (в этом легко убедиться, убрав точку с запятой в операторе S=int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi);).
>> syms a x y z
>> S=int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi);
>> vpa(S,5)
ans =
.28051