книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М
.pdfParametricPlot3D [{4 Sin[t],2 Sin[2 t]Sin[u],2 Sin[2 t]Cos[u]}, {t,-Pi/2,Pi/2}, {u,0,2 Pi}, Ticks->None]
Оказывается, совсем не трудно на одном рисунке показать несколько графиков, ранее построенных по отдельности.
Show[%,%%,%%%]
Первое знакомство — калькулятор |
43 |
Несколько фантастическое сооружение, не правда ли? Но раз уж мы построили несколько графиков функций, не пора ли перейти к тому разделу математики, в кото ром изучаются функции?
Анализ
Хотя систему Mathematica и подобные ей называют системами компьютерной ал гебры, обычно в них так или иначе представлены все фундаментальные разделы ма тематики, Возможности системы Mathematica в области математического анализа очень велики, и надо полагать, что Лейбниц, Ньютон и Эйлер были бы счастливы по экспериментировать в области анализа с таким инструментом. Мы же в этой главе ог раничимся простейшими примерами.
Дифференцирование
Дифференцировать в системе Mathematica не просто, а очень просто! В качестве аргументов команды (функции) дифференцирования D[., . ] нужно указать ту функ цию, которую мы намерены продифференцировать, и ту переменную (или перемен ные), по которой (которым) берется производная. Вот как вычисляется производная функции хп
D [хлп,х]
пх‘1+п
Авот так вычисляется частная производная функции sin(xyz) по переменной z.
D[Sin[х у z],z] |
N |
х у Cos[х у z] |
Смешанные частные производные также вычисляются без проблем.
D [Sin [х у z] ,z, у,х, х]
-5 х у2 z2 Cos [х у z]
4 у z Sin [х у z] + х2 у3 z3Sin [х у z]
Это же можно записать иначе.
D[Sin[х у z]f{x,2},y,z] -5 х у2 z2Cos [х у z]
4 у z Sin [х у z] + х2 у3 z3Sin [х у z]
Полный дифференциал вычисляется посредством команды Dt:
Dt[Sin[х у z]]
Cos[x у z] (у z Dt[х]+х z Dt[y]+x у Dt[z])
где Dt [x], Dt [у] и Dt [z] — дифференциалы переменных x, у и z-
Естественно, что команда Dt применяется и для вычисления полных производных функций многих переменных.
Dt[f[Sin[х у z]],х]
Cos [xyz] (у z + х z Dt [у, x] + xyDt[z, x]) f'[Sin [xyz]]
Здесь Dt [у, x] и Dt [z, x] — полные производные переменных у и z по переменной х. Но следующий результат можно назвать правильным лишь формально.
44 |
Гпава 2 |
D[Abs[x],x]/.x->l
Abs'[l]
Тут система Mathematica села в калошу. Она знает, что функция |х| — недиффе ренцируемая в точке х = 0, но фактически отказывается вычислять ее производную даже в тех точках, где она дифференцируема. Так спокойнее!?
Интегрирование
Неопределенные интегралы, или первообразные
Интегрирование в системе Mathematica (как и в жизни) сложнее дифференцирова ния. Впрочем, формально все просто: неопределенный интеграл вычисляют посредством команды Integrate:
Integrate[хЛп,х]
х1+п 1 + п
Заметьте, что здесь не учтен случай п = -1. Конечно же, неберущиеся интегралы не берутся.
1п[51]:=
Integrate[Sin[Sin[х]], х]
Out[51]=
|Sin[Sin[x] ]dx
А вот более сложный пример.
Integrate[1/(1+хЛ4+хЛ9+хЛ11),х)
Log[l + х]
-V RootSum [1 - #1 + #12 - #13 + 2 #14 - 2 #15+ 16
2 #1 6 - 2 #17 + 2 #18 - #19 + #110 &,
(-15 Log [х - #1] +14 Log [х - #1] #1-13 Log [х - #1] #12 + 12 Log [х - #1] #13 - 10 Log [х - #1] #14 + 8 Log[x - #1] #15 - б Log [х - #1] #16+ 4 Log [х - #1] #17 - 2 Log [х - #1] #18 + Log [х - #1] #19) /
( - 1 + 2 #1 - 3 #12 + 8 #13 - 10 #14 + 12 #15 -
14 #16+ 16 #17 - 9 #18 + 10 #19) &]
Для человека это уже не совсем просто. Впрочем, в ранних версиях система Mathematica взять этот интеграл не могла.
Определенные интегралы
Команда Integrate умеет вычислять и определенные интегралы, а для тех, кото рые с ее помощью не берутся, имеется команда Nlntegrate, позволяющая вычислять определенные интегралы приближенно. Рассмотрим пример.
Integrate[ЗхЛ2, {х,0,1}] 1
Первое знакомство — калькулятор |
45 |
В необходимых случаях выполняются проверки.
Integrate[хАп, {х,0,1}]
If [Re[n] > -1, ' Integrate [xn,
{x, 0, 1}', Assumptions ->Re[n] < —1]]
Как видите, система Mathematica рассмотрела даже случаи комплексного п. Но есть ведь неберущиеся интегралы... Система не отступает даже перед ними.
Integrate[Sin[Sin[х]],{х,0,Pi}]
кStruveH[0,1]
Вданном случае система Mathematica выразила значение интеграла через констан ту и значение специальной функции. Но можно, конечно, вычислить и приближенное значение интеграла.
NIntegrate[Sin[Sin[х]],{х,0,Pi}]
1.78649
Повторные интегралы
Конечно, система Mathematica может вычислять и повторные интегралы.
Integrate[хА2+уА2,{х,0,1},{у,-Sqrt[1-хА2],Sqrt[1-хА2]}]
л_
4
И
In te g ra te [1, {х,-1,1}, {у, -S q rt [1-хА2] , Sqrt [1-хА2] } ]
к
Суммы
Для вычисления сумм в системе Mathematica имеется команда Sum. Вот как вы-
числяется, |
например, |
г—'10 X* |
|
|||
|
— • |
|
||||
Sum[xAi / i |
!/{ i / 1,10}] |
|
||||
X2 |
|
X3 |
X4 |
|
X5 |
X6 |
х + ^ |
+ |
6 |
+ 24 + |
120 + 720 + |
||
X7 |
|
|
X8 |
|
X9 |
хю |
5040 |
+ |
40320 + |
362880 |
+ 3628800 |
А теперь рассмотрим вычисление двойной суммы У*_,У* x'yJ ИЛ '
Зиш[хЛ1 y /' j / ( i ! * j !),{i,1,3},{j,1,4)]
x2 у x3 у х у2 |
х2 у2 х3 у2 |
|
|||
х у + 2 + 6 + 2 + 4 + - 1 Г " + |
у4 |
||||
X у3 |
X2 у3 |
X3у3 |
X у4 X2 у4 |
X3 |
|
б + |
12 |
+ ~36~ + ~24~ + “ 48“ |
+ ~TW |
46 |
Гпава 2 |
Разложение в ряд Тейлора
Вот как система Mathematica разлагает функцию sin в ряд Тейлора.
Series[Sin[х],{х,0,10}]
х - Х + |
5 Ж + |
Чтобы отбросить остаточный член,'можно воспользоваться командой Normal.
Normal[%]
х3 |
х5 |
х7 |
х9 |
|
Х ~ Т |
+ 120 |
' 5040 |
+ 3628 80 |
|
Конечно, все это можно сделать сразу. |
||||
Normal[Series[Sin[x],{x,0,ll}]] |
|
|||
х3 |
х5 |
х7 |
х9 |
х11 |
х " Т |
+ 120 |
" 5040 |
+ 362880 |
" 39916800 |
А теперь построим графики синуса и пяти его разложений по формуле Тейлора.
Plot[Evaluate[{Sin [х] ,
Normal[Series[Sin[x],[x,0,l)]],
Normal[Series[Sin[x],{x,0,3}]],
Normal[Series[Sin[x],{x,0,5}]],
Normal[Series[Sin[x],{x,0,7}]],
Normal[Series[Sin[x],{x,0,9}]]}] ,{x, -2Pi, 2Pi}];
Вычисление пределов
Система Mathematica |
может |
вычислять |
пределы — замечательные и не очень. |
||||
~ |
|
„ |
|
sin* |
|
|
|
Вот как вычисляется замечательный предел |
Inti----- . |
|
|
|
|||
|
|
|
,-.0 |
д; |
|
|
|
Limit[Sin[х]/х,х->0] |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
,Т |
л |
в выражение |
Sin* |
система, как и положено, |
„ |
зару- |
|
Но при попытке подставить 0 |
----- |
|
*
гается”:
Первое знакомство — калькулятор |
47 |
Sin[x]/x /.x->0
Power::infу
Infinite expression — encountered. More...
co::indet Indeterminate expression
0 Complexlnfinity encountered. More...
Indeterminate
Однако при других значениях х значение выражения будет вычислено без проблем.
Sin[x]/x /.х->1 Sin [1]
Sin[x]/x /.х->2 Pi
О
А вот как вычисляется еще один замечательный предел.
Limit[(1+1/х)Лх, x->Infinity]
Е
Limit[(1+1/х)лх,x->-Infinity]
Е
Однако при вычислении пределов нужно проявлять осторожность. Чтобы разо браться, в чем тут дело, рассмотрим следующий (по существу, тривиальный) пример:
1
\\тех а
х *а
Предела (двустороннего) здесь не существует, но
Limit[ЕЛ (1/(х-а)),х->а]
Таким образом, в данном случае система Mathematica под видом двустороннего предела пытается подсунуть односторонний предел. Честно говоря, это несколько обескураживает и довольно досадно, поскольку с вычислением односторонних преде лов система Mathematica в данном примере справляется без труда.
Limit[ЕЛ (1/(х-а)),х->а, Direction->l]
О
Limit [Ел (1/ (х-а),) ,х->а, Direction->-l ]
Дело в том, что в некоторых случаях система Mathematica ограничивается односто ронними (например, левосторонними, когда переменное приближается слева, т.е. воз растает, или правосторонними, когда переменное приближается справа, т.е. уменьшает ся) пределами, а для правосторонних пределов нужно указывать Directions-1. Но разве это хорошо?!
В предыдущих версиях (2.2) были проблемы с пределом
lim0N •
К счастью, уже в версии 3.0 этот недостаток был устранен.
Limit[Abs[х],х->0]
0
Более того, система Mathematica может вычислить даже следующие пределы.
48 |
Гпава 2 |
L im it[ (A bs[a+dx]-A bs[a]) /dx, dx->0]/ . a-> l 1
L im it[ (A bs[a+dx]-A bs[a]) /dx, dx->0]/ . a -> -l -1
Списки и линейная алгебра
В линейной алгебре часто рассматриваются объекты, сконструированные из других объектов. Вектор, например, часто представляется в виде списка чисел (являющихся его координатами в некотором базисе). Матрицы — это прямоугольные таблицы, в каждой клетке которых находится элемент некоторого кольца. Тензоры же являются просто многомерными таблицами. Как же такие составные объекты представляются в системе Mathematica? Оказывается, что для конструирования составных объектов произвольной сложности в системе Mathematica используются списки. Именно их мы и рассмотрим сейчас.
Списки
Список — это заключенная в фигурные скобки произвольная последовательность объ ектов, в которой объекты отделяются друг от друга запятыми. Именно списки использу ются для конструирования составных объектов. Иными словами, все составные объекты являются списками, причем конструкция объекта отражается в конструкции списка. Самый простой список — линейный. Строка (или столбец) представляется в виде линей ного списка. Матрица, являющаяся списком строк (или столбцов), представляется в виде линейного списка линейных списков. Конечно же, с помощью списков можно строить и более сложно устроенные объекты, такие как деревья или различные разно видности графов.
Векторы
Из всего многообразия составных объектов линейной алгебры проще всего устрое ны векторы. Поэтому не удивительно, что именно они представляются самым про стым видом списков — линейными списками. Фактически вектор представляется как список своих координат. Вот как, например, представляется стандартный базис в R*: el = {1, 0, 0}; е2 = {0, 1, 0}; еЗ = {0, 0, 1}. А вот так представляется вектор и = {а,Ь,с} с координатами и = {а,Ь,с}: и = {а,Ь,с}. Давайте разложим этот вектор по стандартному базису и посмотрим, что получится.
e l= { l,0 ,0 } ;e2 = { 0 ,l,0 } ;e3 = { 0 ,0 , 1};и={а,Ь, с}; v=a*el+b*e2+ с*ёЗ
(а,Ь,с}
Как видите, мы записали разложение вектора и = {а,Ь,с} по стандартному бази су и, выполнив сложение трех векторов (проекций вектора и = {а,Ь,с} на оси коор динат), получили вектор v = {a,b,c}. (Как и следовало ожидать, вектор v = и.) Как видим, операции над векторами обозначаются естественным образом. Давайте теперь вычислим скалярное произведение векторов v и и.
иV
а2 + Ь2 + с2
Естественно, это скалярный квадрат вектора и. Теперь давайте вычислим скаляр ное произведение вектора и и единичного орта еЗ.
и.еЗ
с
Как и следовало ожидать, оно равно соответствующей координате вектора и.
Первое знакомство — калькулятор |
49 |
Матрицы
В системе Mathematica матрицы представляются в виде списков строк, т.е. в виде списков списков. Вот пример задания матрицы.
Матрица задается как список списков.
ml= {{1, 1, 1, |
1}, {а, Ь, с, d}, {аЛ2, Ъл2, сл2, dA2}} |
|||
{{1, |
1, |
1, |
1}, |
|
{а, |
Ь, |
с, |
d}, |
{a2, b2, с2, d2}} |
Конечно, привычнее ее видеть как матрицу. |
||||
MatrixForm |
[ml] |
|
||
i |
1 |
1 |
1 |
|
a |
b |
e |
d |
|
ka2 |
b2 |
c2 |
d2 , |
Действия с матрицами и векторами задаются естественным образом. Умножим, например, матрицу на вектор.
ml |
{-1, |
0, 1, |
1} |
{1, |
-a |
+ c + d, |
- a 2 + c2 + d2} |
А вот как можно умножить матрицу ml на скаляр t.
t* ml |
|
{{t, t , |
t , t} , ( a t , b t , c t , d t} , |
{a2 t, |
b2 t , c2 t , d2 t } } |
Для квадратной матрицы Mathematica позволяет найти определитель, а также об ратную матрицу (если, конечно, матрица обратима, т.е. имеет ненулевой определи тель), собственные значения и векторы.
Пусть |
|
|
|
m2= {{1, |
1, |
1}, {2, 3, 4}, {4, 9, 16}} |
|
{ { 1 ,1 ,1 } /(2 ,3 ,4 },{4 ,9 ,1 6 }} |
|||
MatrixForm |
[%] |
||
1 |
i |
1 |
\ |
2 |
3 |
4 |
|
k4 |
9 |
16 , |
|
Найдем определитель |
|||
D et[m2] |
|
|
|
2 |
|
|
|
Поскольку он ненулевой, можем найти обратную матрицу. |
|||
m3= Inverse |
[m2]; |
||
MatrixForm |
[%] |
||
- 8 |
6 |
- 1 |
|
Произведение матрицы на ее обратную должно быть единичной матрицей. Давайте проверим.
50 |
Глава 2 |
MatrixForm |
[m3 |
m2] |
1 0 ° |
|
|
01 0
,0 0 1 ;
Так и есть!
Однако обратите внимание: произведение матриц обозначается точкой.
Дело в том, что произведение m3 * |
m2 тоже имеет смысл, но это поэлементное про |
|||
изведение списков, а не произведение матриц! Убедимся в этом. |
||||
m3 * m2 |
|
|
|
|
{ { 6 , |
- у |
, |
у } , { - 1 6 , 18, - 4 } , |
{12, - Ц - , 8}} |
MatrixForm |
[%] |
|
||
( в |
|
2 |
± |
|
|
|
2 |
|
|
- 1 6 |
18 |
- 4 |
|
Собственные значения и векторы находятся без особых сложностей.
Eigenvalues |
[m2] |
|
{Root [-2 |
+ 25 |
#1 - 20 #12 + #13 &, 3] , |
Root [-2 |
+ 25 |
#1 - 20 #12+ #13 &, 2] , |
Root [-2 |
+ 25 |
#1 - 20 #12 + #13 &, 1] } |
Eigenvectors |
[m2] |
t:о 1тс
{{уу - ууRoot [-2 4 25 #1 - 20 #12 4 #13 &, 3] +
ур Root [-2 4 25 #1 - 20 #12 4 #13 &, З]2,
4 уу Root [-2 + 25 #1 - 20 #12 4 #13 &, 3] -
-J J Root [-2 4 25 #1 - 20 #12 4 #13 &, З]2, l},
fifi |
1 7 S |
{уу - ууRoot [-2 4 25 #1 - 20 #12 4 #13 &, 2] +
ур Root [-2 4 25 #1 - 20 #124 #13 S, 2] 2,
- уу 4 уу Root [-2 4 25 #1 - 20 #12 4 #13 &, 2] -
Y j- Root [-2 4 25 #1 - 20 #124 #13 &, 2] 2, 1},
{-|у - -уу- Root [-2 4 25 #1 - 20 #12 4 #13 &, 1] 4
Root [-2 4 25 #1 - 20 #12 4 #13 &, I]2,
- уу 4 уу Root [-2 4 25 #1 - 20 #12 4 #13 &, 1] -
у у Root [-2 4 25 #1 - 20 #12 4 #13 s, I]2, 1}}
Да, пока не совсем понятно... Но не огорчайтесь, при необходимости собственные числа и собственные векторы можно найти приближенно. Вот как найти ответ с ма шинной точностью.
Eigenvalues [N [m2]]
Eigenvectors [N [m2]]
Первое знакомство — калькулятор |
51 |
{18.6664,1.24769,0.0858742} {{-0.0690302,-0.255061,-0.964458},{-0.503592,
- 0 . 6 7 0 0 7 4 , 0 . 5 4 5 3 4 } , { 0 . 5 1 9 8 0 9 , - 0 . 7 9 2 9 7 , 0 . 3 1 7 7 9 9 } }
Но все же, что же это такое Root? Оказывается, Root[f, к] — это &-й корень алгебраического уравнения f [#1 ] = 0. (Таким образом, f — полином.) Так что, сис тема Mathematica умеет решать уравнения?! Оказывается, да!
Уравнения
Система Mathematica классно решает разнообразные уравнения и их системы.
В системе Mathematica знак равенства (=) в уравнениях представляется посредством двойного знака равенства (==). Вот как можно решить уравнение дг3 + х - 2 = 0.
Solve[хЛ3+ х - 2 == 0]
{{х->1}, {х -> -i- (-1-i У7)},
{ х ^ j ( - 1 + 1 V 7 ) } }
Обратите внимание на мнимую единицу в записи двух корней. Как видите, был най ден не только вещественный корень, но и комплексные корни. Система Mathematica находит все (вещественные и комплексные) решения алгебраических уравнений сте пени не выше 4, притом не только с числовыми коэффициентами, но и с параметром.
Solve [х 4 + а* х - 2 == |
0, х] |
|
|
|
|
|
2_ |
|
|
|
|
1/3 |
|
|
(9а2 Уз+ V2048 + 27 а4) |
|
||||
|
11/3 |
|
21/з 32/3 |
|
|
|
(9 а2 + Уз V2048 + 27 а4 |
|
|
|
|
||
8 ("Г )1/3 |
(9 а2 +Уз V2048 + 27 а4 )1/3 |
|||||
|
11/3 |
|
2 ! / 3 |
3 2/3 |
- (2а) |
/ |
t (9а2 + Уз V2048 + 27a4 |
|
|
|
|||
8(f)1'3 |
|
(9 а2 + л/З У2048 + )27а4 )1/3 |
||||
|
1/3 |
|
|
21/3 32/3 |
|
|
Vi (9 а2 +УзУ2048 + 27а4) |
|
|
ш |
|
||
2 \ 1/3 |
|
|
|
|
i 1/3 |
|
8(1) |
1/3 |
(9а2 +V3 У2048 + 27а4 |
||||
|
2 1/з 3 2/з |
|
|
|||
t (9 а2 + Уз V2048 + 27 а4 ) |
|
|
|
|
||
8 (у) 1/3_________ |
(9+ Уа2з V2048 + 27 а4 1/3) |
|
||||
(9 а2 + л/З V2048 + 27 а4 )1/3 |
|
- (2 а) |
||||
21/3 32/3 |
/ |
|||||
8(1)*'= |
|
|
|
|
, 1 / 3 |
|
|
(9а2+Уз У2048 + 27а4 |
|||||
(9 а2 + VI V2048 + 27 а4 )1/3 + |
21/3 32/3 |
|||||
|
|
|
|
|
л ; |
|
|
|
|
|
|
1/3 |
|
8 (у)1/3_________(9а2+ Уз V2048 + 27 а4) |
||||||
{Х_>"4 |
|
|
|
|
21/J32/3 |
|
2V( (9 а2 + У"3 V2048 +27 а4 )1/3 + |
||||||
8 ("§")1/3 |
|
|
|
|
, 1 / 3 |
|
(9 а2+ УЗ V2048 +27 а4 |
|
|||||
|
|
|
2 1/ 3 |
3 2/3 |
+ (2 а) |
|
2 V [ (9 а2 + Уз У 2048 + 27 а4)1/3 |
|
1/3 |
/ |
|||
8 ( | ) 1/3 |
|
|
|
|
|
|
1/3 |
(9 а2 + Уз V2048 + 27 а4) |
|||||
|
+ |
21/3 32/3 |
|
|||
л / !,“ (9а2 +УЗ У2048 + 27 а4 ) |
|
|
Ш |
52 |
Г f7aea 2 |