После того как запустим систему Mathematica 5, получится примерно то что изображено на рис. 2.1. Большое белое окно слева- блокнот. Именно в него вводится информация, и именно в нем отображаются результаты. Окно в середине - заставка-приветствие и справка. Окно справа - панель для ввода математических символов греческих букв и т.п. После запуска системы Mathematica в блокнот можно вводить информацию.
Если же по каким-либо причинам активным оказалось другое окно, щелкнув в белом рабочем поле, переключитесь на окно ввода системы Mathematica Введите
2+2 и нажмите комбинацию клавиш <Shift+Enter> (т.е. одновременно клавиши <Shift> и <Enter>).
В окне системы вы увидите следующее (рис. 2.2).
In[1]:=2+2
Out[l]=4
Рис. 2.1. Вот что отображается на экране после запуска системы Mathematica
In[2]:= 10!
Out[2]= 3628800
In[3]:= 100!
Out[3]=
9332621544394415268169923885626670049071596826438162146859296389521759
9993229915608941463976156518286253697920827223758251185210916864000000
000000000000000000
Рис. 2.2. Вот что появляется в окне ввода системы Mathematica после вычисления 2+2
Арифметические действия в системе Mathematica обозначаются как обычно: + (сложение), - (вычитание), * (умножение), / (деление),
^ (возведение в степень).
Впрочем, иногда вместо * достаточно набрать пробел. С делением, правда, есть одна закавыка. Вычислим, например,
10/2.
10/2
5
22/7
22/7
22/7.
3.14286
N[Pi]
3.14159
N[Pi,100]
3.14159265358979323846264338327950288419716939937510582097494459230781
6406286208998628034825342117068
N[Е^Pi-Рi^Е, 10]
0.6815349144
В системе Mathematica имеется множество математических функций, их имена вполне естественны, за тем исключением, что имена всех встроенных функций начинаются с прописной буквы. Кроме того, не забывайте, что аргументы функций заключаются в квадратные скобки. Ну, и, конечно же, помните о том, что здесь тригонометрические функции называются так, как к этому привыкли американцы: например, вместо привычного для нас tg (тангенса) в системе Mathematica указывается
Tan. Ниже приведены некоторые примеры — выполните сами те из них, которые сочтете интересными.
Ехр[3]-Е^3
0
N[Exp[3] ,20]-N[Е^3,20]
0. х10-19
N[Log[10,E],100]
0.43429448190325182765112891891660508229439700580366656611445378316586
46492088707747292249493384317483
N [Sin [Pi/180] ,100]
0.0174524064372835128194-1897851631619247225272030713964268361242764059
738420392807004200192679102134691
N[Cos[Pi/180],100]
0.99984769515639123915701155881391485169274031058318593965832071451153
91811033372153972993952881103455
N[2ASqrt[2],100]
2.66514414269022518865029724987313984827421131371465949283597959336492
0446178705954867609180005196417
N[2^(2^(1/2) ),100]
2.66514414269022518865029724987313984827421131371465949283597959336492
0446178705954867609180005196417
х=2^(1/2);N[2^х,100]
2.66514414269022518865029724987313984827421131371465949283597959336492
0446178705954867609180005196417
(-1)^(1/2)
i
Чтобы упростить набор и вычисление выражений, рассмотрим возможности интерфейса (оболочки) системы Mathematica. Чтобы сохранить протокол расчетов (блокнот), из меню Файл (File) выберите пункт Сохранить Как (Save As)
и запишите блокнот в файл, например в файл myl (желательно в своем каталоге). Чтобы повторить какое-либо вычисление, достаточно двойным щелчком установить курсор вставки в соответствующую строку и нажать <Shift+Enter>. Это же можно сделать иначе: установите I-образный курсор на квадратную скобку справа от формулы (курсор при этом изменит свой вид) и щелкните один раз. Скобка "почернеет". Это значит, что вы выделили ячейку, содержащую нужную вам формулу. Теперь выберите в меню системы Mathematica пункт Ядро<=>Вычисление^Вычислить Ячейки. После этого будут вычислены выделенные ячейки. При желании выделенные ячейки можно копировать и размножать обычными для систем с графическим интерфейсом методами (с помощью кнопок или меню). То же самое относится не только к ячейкам целиком, но и к их частям. Эти методы помогают записывать алгебраические выражения.
Давайте посмотрим, как система Mathematica справляется с раскрытием скобок в степенях. Для этого служит функция
Expand.
Упростим предыдущий результат.
Simplify[%]
(а + b + с)5
Factor[а^10 +b^10]
(а2 + b2) (а8-а6b2 + а4b4-а2b6 + b8)
%/. {a->u, b -> v}
(u2 + v2) (u8 - u6 v2 + u4 v4 - u2 v6 + v8)
Система Mathematica богата графическими возможностями. Рассмотрим на примерах построение хотя бы некоторых, наиболее часто встречающихся типов графиков.
Построение графика одной функции, заданной аналитически
Вот как можно построить график функции синус.
Построение графиков нескольких функции, заданных аналитически
Вот как можно построить график нескольких функций.
Построение графика функции, заданной параметрически
Окружность, как известно, не является графиком ни одной однозначной функции. Тем не менее, она может быть задана параметрически. Например, вот так:
Конечно, масштабы по осям здесь разные, и потому окружность изображена как эллипс.
А вот фигура Лиссажу.
И еще одна, на этот раз разомкнутая (хотя концы ее найти не так-то просто!) "фигура Лиссажу".
Построим, например, график поверхности z — sin(x2 у).
А вот параметрически заданный геликоид.
И, наконец, вот еще одно параметрически заданное тело.
Оказывается, совсем не трудно на одном рисунке показать несколько графиков, ранее построенных по отдельности.
Несколько фантастическое сооружение, не правда ли? Но раз уж мы построили несколько графиков функций, не пора ли перейти к тому разделу математики, в котором изучаются функции?
Хотя систему Mathematica и подобные ей называют системами компьютерной алгебры, обычно в них так или иначе представлены все фундаментальные разделы математики. Возможности системы Mathematica в области математического анализа очень велики, и надо полагать, что Лейбниц, Ньютон и Эйлер были бы счастливы поэкспериментировать в области анализа с таким инструментом. Мы же в этой главе ограничимся простейшими примерами.
Дифференцировать в системе Mathematica. не просто, а очень просто! В качестве аргументов команды (функции) дифференцирования D [., . ] нужно указать ту функцию, которую мы намерены продифференцировать, и ту переменную (или переменные), по которой (которым) берется производная. Вот как вычисляется производная функции хn.
D[х^n,х]
nx-1+n
D[Sin[x у z],z]
х у Cos[х у z]
D[Sin[x у z],z,y,x,x]
-5 х у2 z2 Cos [х у z] -
4 у z Sin [х у z] + х2 у3 z3 Sin [х у z]
D[Sin[x у z], {x,2},y,z]
-5 х у2 z2 Cos [х у z] -
4yzSin[xyz]+x2y3z3Sin[xyz]
Dt[Sin[x у z] ]
Cosfx у z](у z Dt[x]+x z Dt[y]+x у Dt[z])
Dt[f[Sin[х у z]],х]
Cos[xyz](yz + xzDt[y, x] +xyDt[z, x] )
f [Sin[xyz]]
D[Abs[x],x]/.x->l
Abs'[l]
Неопределенные интегралы, или первообразные
Интегрирование в системе Mathematica (как и в жизни) сложнее дифференцирования. Впрочем, формально все просто: неопределенный интеграл вычисляют посредством команды Integrate:
Заметьте, что здесь не учтен случай n = -1. Конечно же, неберущиеся интегралы не берутся.
А вот более сложный пример.
Для человека это уже не совсем просто. Впрочем, в ранних версиях система Mathematica взять этот интеграл не могла.
Определенные интегралы
Команда Integrate умеет вычислять и определенные интегралы, а для тех, которые с ее помощью не берутся, имеется команда NIntegrate, позволяющая вычислять определенные интегралы приближенно. Рассмотрим пример.
Integrate[3х^2, {х,0,1}]
1
Integrate[Sin[Sin[x]],{х,0,Pi}]
π StruveH[0,1]
NIntegrate[Sin[Sin[x]] , {х,0,Pi}]
1.78649
Для вычисления сумм в системе Mathematica имеется команда Sum. Вот как вычисляется, например,
А теперь рассмотрим вычисление двойной суммы
Вот как система Mathematica разлагает функцию Sin в ряд Тейлора.
Чтобы отбросить остаточный член, можно воспользоваться командой Normal.
Конечно, все это можно сделать сразу.
А теперь построим графики синуса и пяти его разложений по формуле Тейлора.
Система Mathematica может вычислять пределы — замечательные и не очень.
Но при попытке подставить 0 в выражение
Однако при других значениях х значение выражения будет вычислено без проблем.
А вот как вычисляется еще один замечательный предел.
Однако при вычислении пределов нужно проявлять осторожность. Чтобы разобраться, в чем тут дело, рассмотрим следующий (по существу, тривиальный) пример:
Предела (двустороннего) здесь не существует, но
Таким образом, в данном случае система Mathematica под видом двустороннего предела пытается подсунуть односторонний предел. Честно говоря, это несколько обескураживает и довольно досадно, поскольку с вычислением односторонних пределов система Mathematica в данном примере справляется без труда.
Дело в том, что в некоторых случаях система Mathematica ограничивается односторонними (например, левосторонними, когда переменное приближается слева, т.е. возрастает, или правосторонними, когда переменное приближается справа, т.е. уменьшается) пределами, а для правосторонних пределов нужно указывать Direction->-l. Но разве это хорошо?!
В предыдущих версиях (2.2) были проблемы с пределом
К счастью, уже в версии 3.0 этот недостаток был устранен.
Более того, система Mathematica может вычислить даже следующие пределы.
В линейной алгебре часто рассматриваются объекты, сконструированные из других объектов. Вектор, например, часто представляется в виде списка чисел (являющихся его координатами в некотором базисе). Матрицы — это прямоугольные таблицы, в каждой клетке которых находится элемент некоторого кольца. Тензоры же являются просто многомерными таблицами. Как же такие составные объекты представляются в системе Mathematica? Оказывается, что для конструирования составных объектов произвольной сложности в системе Mathematica используются списки. Именно их мы и рассмотрим сейчас.
Список — это заключенная в фигурные скобки произвольная последовательность объектов, в которой объекты отделяются друг от друга запятыми. Именно списки используются для конструирования составных объектов. Иными словами, все составные объекты являются списками, причем конструкция объекта отражается в конструкции списка. Самый простой список — линейный. Строка (или столбец) представляется в виде линейного списка. Матрица, являющаяся списком строк (или столбцов), представляется в виде линейного списка линейных списков. Конечно же, с помощью списков можно строить и более сложно устроенные объекты, такие как деревья или различные разновидности графов.
Из всего многообразия составных объектов линейной алгебры проще всего устроены векторы. Поэтому не удивительно, что именно они представляются самым простым видом списков — линейными списками. Фактически вектор представляется как список своих координат. Вот как, например, представляется стандартный базис в R3: e1 = {1, 0, 0}; е2 = {0, 1, 0}; е3 = {0, 0, 1}. А вот так представляется вектор u = {а,b,с} с координатами u = {а,b,с}: u = {а,b,с}. Давайте разложим этот вектор по стандартному базису и посмотрим, что получится.
е1={1,0,0}; е2={0,1,0 };е3={0,0,1),u={a,b, с};
v=a*e1+b*e2+ с*е3 (а,b,с)
u.v
а2 + b2 + с2
u.е3
с
В системе Mathematica матрицы представляются в виде списков строк, т.е. в виде списков списков. Вот пример задания матрицы. Матрица задается как список списков.
m1={{1,1,1,1},{а,Ь,с,d},{а^2,b^2,с^2,d^2}}
{{1,1,1,1},
{а,b,с,d}, {а2,b2,с2,d2}}
Det[m2]
2
Система Mathematica классно решает разнообразные уравнения и их системы.
В системе Mathematica знак равенства (=) в уравнениях представляется посредством
двойного знака равенства (= =). Вот как можно решить уравнение х3 + х - 2 = 0.
Обратите внимание на мнимую единицу в записи двух корней. Как видите, был найден не только вещественный корень, но и комплексные корни. Система Mathematica находит все (вещественные и комплексные) решения алгебраических уравнений степени не выше 4, притом не только с числовыми коэффициентами, но и с параметром.
Конечно, ответ несколько громоздкий. Представьте, если бы вам пришлось искать его самостоятельно!
Решения общего алгебраического уравнения степени 5 или выше через радикалы не выражаются, но всегда могут быть найдены численные их значения. Тем не менее система Mathematica пытается найти точное решение. Например, уравнение х5 + х - 2 = 0 система Mathematica решит точно.
А вам слабо? Давайте попробуем решить уравнение х5 + х -7 = 0 .
Да, корни уравнения — это его корни... (И, как видите, их пять, что тоже не особенно информативно, если учесть, что многочлен пятой степени.) В данном случае при необходимости можно решить уравнение численно.
Чтобы решить трансцендентное уравнение, нужно задать начальное приближение к корню. Вот как, например, можно решить уравнение cosx = 2x.
Давайте попробуем решить систему линейных алгебраических уравнений.
А чтобы решить систему трансцендентных уравнений, нужно задать начальные приближения неизвестных.
Система Mathematica умеет решать и дифференциальные уравнения и их системы.
Как видите, решение содержит произвольные постоянные C [1] и С [2]. Можно найти также численное решение задачи Коши для дифференциальных уравнений или их систем.
Правда, решение содержит приближенную функцию (объект InterpolatingFunction). Но этот объект может быть вычислен, как и любой другой объект системы Mathematica. В частности, можно построить график.
Система Mathematica позволяет найти экстремумы функций одной и нескольких переменных. Вот как, например, можно найти локальный минимум функции excosx.
FindMinimum[Exp[x]*Cos[x],(х,0}]
{-0.0670197,{х>-2.35619}}
FindMinimum[Sin[x]*Cos[у],{х,0},{у,0}]
{-1.,{x>-1.5708,y>0.}}
Используя систему Mathematica, нетрудно решить задачи линейного программирования небольшой размерности. Рассмотрим пример.
Правда, если экстремум достигается на границе (а в задачах линейного программирования это случается почти всегда), при использовании функции Maximize выдается предупреждение об этом.
Можно, конечно, пользоваться и функцией ConstrainedMax, но она становится все менее популярной, и система Mathematica предупреждает, что в последующих версиях она может быть удалена.
Впрочем, для решения задачи можно воспользоваться и функцией Nmaximize.
NMaximize[{19x-47y+28z,{x+y+z>0,x+y+z<l,x>0,y>0,z>0}},{x,y,z}]
{28.,{x>0.,y>0.,z>l.}}