Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М

.pdf
Скачиваний:
1
Добавлен:
19.11.2023
Размер:
33.75 Mб
Скачать

ParametricPlot3D [{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