Символьные операции математического анализа

Вычисления производных

Для вычисления в символьном виде производных от выражения S служит функция diff, записываемая в формате diff (S, ' v') или diff (S, sym ('v') ) . Она возвращает символьное значение первой (п=1) производной от символьного выражения или массива символьных выражений s по переменной v. Эта функция возвращает

с-// ч dS

S (v) = —.

av

  • • diff (S,n) — возвращает n-ю (n — целое число) производную от символьного выражения или массива символьных выражений S по переменной v.
  • • diff(S,'v’,n) и diff(S,n,'v') — возвращает n-ю производную S по переменной v, то есть значение

Примеры:

» x=sym('х');y=sym('у');

» diff(xAy)

ans =

хАу*у/х

>> diff(хАу,х)

ans =

хлу*у/х

>> simplify(ans)

ans =

хл(y-1)*y

>> diff(sin(y*x),x,3)

ans =

-cos (y*x)*yA3

>> diff([xA3 sin(x) exp(x)],x) ans =

[ 3*хл2, cos (x), exp(x)]

Вычисления интегралов

В практической работе часто возникает необходимость вычисления неопределенных и определенных интегралов вида

h

I = [f(x)dx и / =

а

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

  • • int(S) — возвращает символьное значение неопределенного интеграла от символьного выражения или массива символьных выражений s по переменной, которая автоматически определяется функцией findsym. Если s — скаляр или матрица, то вычисляется интеграл по переменной ' х'.
  • • int (S, v) — возвращает неопределенный интеграл от s по переменной v.
  • • int (S,a,b) — возвращает определенный интеграл от S с пределами интегрирования от а до Ь, причем пределы интегрирования могут быть как символьными, так и числовыми.
  • • int (S, v, а,Ь) — возвращает определенный интеграл от S по переменной v с пределами от а до ь.

Примеры применения этой функции приводятся ниже:

>> x=sym ( 'х');

» int(хЛ2,х)

ans =

1/3*хлЗ

>> int(sin(х)л3,х)

ans =

-l/3*sin(х)A2*cos(х)-2/3*cos(х)

» int(log (2*х),х)

ans =

log (2*х)*х-х

>> int((хл2-2)/(хлЗ-1),х,1,2)

ans =

-inf

» int( (хл2-2)/(хлЗ-1),х,2,5)

ans =

  • -2/3*log (2)+2/3*log (31)+2/3*Зл(1/2)*atan (11/3*Зл (1/2))-. . .
  • 2/3*log(7)-2/3*Зл(1/2)*atan (5/3*Зл (1/2))

>> int([xA3 sin(x) exp(x)],x) ans =

[ 1/4*хл4, -cos (x), exp(x)]

С помощью функции int можно вычислять имеющие аналитическое решение сложные интегралы, например с бесконечными пределами (или одним из пределов), а также кратные интегралы. Ниже представлен пример вычисления одного из таких интегралов:

J xe~xdx.

о

>> syms а х у z

>> int(х*ехр(-х),х,0,inf) ans =

1

Аппарат точной арифметики позволяет вычислять определенные интегралы, в вычислении которых существуют трудности из-за вычислений больших чисел. К примеру, интеграл

1

J х20 exp(-x)Jx о часто дает нулевое значение вместо 0,01835... MATLAB, правда, честно сообщает, что такой интеграл он вычислить не в состоянии из-за отсутствия соответствующего метода:

>> int(exp(1)Л20*ехр (-х),х,0,1)

??? No appropriate methods for function int.

Попробуем выяснить, в чем тут дело. Вычислим для этого неопределенный интеграл

20 exp(-x)Jx,

используя функцию int, но в символьном виде:

>> syms х

» int (хЛ20*ехр(—х),х)

ans =

  • Л20*ехр (—х)-20*хл19*ехр (-х)-380*хл18*ехр (-х) -
  • 6840*хл17*ехр(-х)-116280*хл16*ехр(-х)-1860480*хл15*ехр(-х) -
  • 27907200*хл14*ехр(-х)-390700800*хл13*ехр(-х)-
  • 5079110400*хл12*ехр(-х)-60949324800*хл11*ехр(-х) -
  • 670442572800*хл10*ехр(-х)-6704425728000*хл9*ехр(-х)-
  • 60339831552000*хл8*ехр(-х)-482718652416000*хл7*ехр(-х) -
  • 3379030566912000*хл6*ехр(-х)-20274183401472000*хл5*ехр(-х) -
  • 101370917007360000*хл4*ехр(-х)-4 054 83 66802 94 4 00 00*хлЗ*ехр (-х)-1216451004088320000*хл2*ехр(-х)-2432902008176640000*х*ехр (-х)-2432902008176640000*ехр (-х)

Нетрудно заметить, что интеграл представлен рядом экспонент с большими множителями перед ними. При обычной точности вычислений погрешности велики и приводят к нулевому результату из-за вычитания больших близких чисел в условиях ограничения разрядности. Но MATLAB с пакетом Symbolic Math благополучно выдает точное и приближенное значение нашего интеграла:

» a=int(хЛ20*ехр(-х),х,0,1)

а =

-6613313319248080001*ехр(-1)+2432902008176640000

» double(а)

ans =

0.0184

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

0 0 0

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

» syms х у z а

>> int(int(int((хЛ2+уЛ2)*z,x,0, a), у,0,a),z,0,a)

ans =

1/3*ал6

Итак, один из приведенных примеров вычисляет интеграл с бесконечным верхним пределом, другой — довольно «каверзный» интеграл, а третий — тройной интеграл.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ ОРИГИНАЛ   След >