Практикум по компьютерной геометрии

Первое знакомство с пакетом Mathematica

Разбить на страницы
Показывать лекцию целиком

В пакет $$Mathematica$$ встроено подробное описание ($$Help$$). Чтобы в него попасть, нажмите $$\fbox{\text{F1}}$$ или войдите через меню $$\tt \text{Help/Documentation Center}$$.

После запуска программы на экране появляется несколько независимых окон. Вдоль верхней части экрана расположено меню. Слева - рабочее окно. Можно открыть много рабочих окон, выполнив в меню команду $$\text{File/New/Notebook(.nb)}$$. Как видно из названия команды, рабочее окно называется $$\text{Notebook}$$.

Если в рабочее окно ввести произвольный символ, то этот символ отобразится в окне, а справа появится вертикальная скобка, ограничивающая текущее рабочее поле. При дальнейшем вводе новые символы будут также отображаться в рабочем поле. Если произойдет переход на следующую строку, правая скобка расширится. Эта скобка указывает на независимую область, в которой можно расположить команды языка $$Mathematica$$ и одновременно их выполнить. Область, ограниченная скобкой, называется клеткой ($$\text{Cell}$$). Если стать на последней строке клетки и нажать на стрелочку вниз, или же стать на первой строке клетки и нажать на стрелочку вверх, то курсор превратится в горизонтальную линию, расположенную рядом с клеткой. Если опять ввести символ, то появится новая клетка, в которую также можно вводить текст. Кроме того, переходить от клетки к клетки, а также позиционировать курсор между клетками можно с помощью мышки.

В клетки можно вводить произвольные выражения ($$\text{Expression}$$) и вычислять ($$\text{Evaluate}$$) их. Для вычисления нужно, находясь внутри клетки, выполнить команду $$\fbox{\text{Shift}} + \fbox{\text{Enter}}$$ (здесь и всюду ниже знак + обозначает одновременное нажатие клавиш). Поместите курсор внутрь следующей клетки, в которой написано $$\tt 2+2$$, и выполните $$\fbox{\text{Shift}} + \fbox{\text{Enter}}.$$

$$ In[1]:=2 + 2 \\ Out[1] = 4$$

После выполнения команды $$\fbox{\text{Shift}} + \fbox{\text{Enter}}$$ слева от выражения появится $$\text{In[1]}$$, нумерующее последовательно выполняющиеся команды. Кроме того, возникнет еще одна клетка с результатом, который будет помечен $$\text{Out[1]}$$. Заметим, что клетка ввода и вывода объединены в одну большую клетку. Вы можете манипулировать результатом многими способами. Один из них - использование символа $$\text{\tt \%}$$, которому присвоен результат последней выполненной команды; последовательности $$\text{\tt \%\%}$$ - результат выполнения предпоследней команды; $$\text{\tt \%\%\%}$$ - предпредпоследней и т.д., а также $$\text{\tt \%n}$$ - результат выполнения команды с номером $$n$$.

Основные операции пакета Mathematica

Объекты, которыми оперирует $$Mathematica$$:

  • числа ($$\text{Numbers}$$), например, $$\text{\tt 5, 2/3, 2.35}$$ ;
  • символы ($$\text{Symbols}$$), например, $$\text{\tt x, abc5}$$ ;
  • строки ($$\text{Strings}$$ ), например, $$\text{\tt "это - строка"\ }$$;
  • выражения ($$\text{Expressions}$$), например, $$\text{\tt (x + 2)/(y - 2.3)}$$.
  • Замечание

    Имеется несколько способов визуализации одного и того же выражения, например,

    $$ \tt (1+2.-5.77*3.8)/((3.2-0.1)\^\,\!(1/2)+6\^\,\!2) \\ \\ \tt (1+2.-5.77 3.8)/(Sqrt[3.2-0.1]+6\^\,\!2) \\ \\ Times[ \\ \phantom{Tim}Plus[1, 2., Times[-1, Times[5.77, 3.8]]], \\ \phantom{Tim}Power[Plus[Power[Plus[3.2, -0.1], Times[1, Power[2, -1]]], \\ \phantom{Tim}\phantom{Power[Plus[}Power[6, 2]], -1]]$$

    В последнем случае $$\text{\tt Times[x,y]}$$ обозначает произведение $$x$$ и $$y$$, $$\text{\tt Plus[x,y]}$$ - их сумму, а $$\text{\tt Power[x,y] - x}$$ в степени $$y$$.

    Три типа визуализации выражений

    Cтаньте в клетку, вид которой хотите изменить, и выполните соответствующую команду:

    $$\text{\tt InputForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{i})}$$:

    $$\tt In[2]:= (1 + 2. - 5.77*3.8) / (Sqrt[3.2 - 0.1] + 6 \^\,\! 2) \\ \\ \tt Out[2] =-0.501209$$

    $$\text{StandardForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{n})}$$:

    $$\tt In[3]:=$\frac{1+2.-5.77 \times 3.8}{\sqrt{3.2-0.1}+6^2}$\\ \\ \tt Out[3]=-0.501209$$

    $$\text{TraditionalForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{t})}$$:

    $$\tt In[4]:=$\frac{1+2.-5.77 \times 3.8}{\sqrt{3.2-0.1}+6^2}$\\ \\ \tt Out[4]=-0.501209$$

    Ввод с клавиатуры в StandardForm

    Выражения в $$\text{StandardForm}$$ можно получать сразу. Для этого следует использовать или $$\text{\fbox{Ctrl}}$$ + клавиша, $$\text{\fbox{Esc}}$$ -команда- $$\text{\fbox{Esc}}$$, или вспомогательные панели $$\text{Palettes}$$. Например, $$\text{\fbox{Ctrl}+\fbox{/}}$$ - дробь $$\frac ab$$, $$\text{\fbox{Ctrl}+\fbox{2}}$$ - радикал $$\sqrt x$$, $$\text{\fbox{Ctrl}+\fbox{\^\,\!}}$$ - верхний индекс, как у $$x^2$$, $$\text{\fbox{Ctrl}+\fbox{\phantom{C}\!\!\!\!\!\_\,\!\!}}$$ - нижний индекс, как у $$x_2$$.

    Далее, $$\text{\fbox{Esc} pi \fbox{Esc}}$$ - число $$\pi$$, $$\text{\fbox{Esc} ee \fbox{Esc}}$$ - число $$е$$, $$\text{\fbox{Esc} ii \fbox{Esc}}$$ - мнимая единица $$i$$, $$\text{\fbox{Esc} int \fbox{Esc}}$$ - интеграл $$\int$$, $$\text{\fbox{Esc} sum \fbox{Esc}}$$ - сумма $$\sum$$, $$\text{\fbox{Esc} a \fbox{Esc}}$$ - альфа $$\alpha$$, $$\text{\fbox{Esc} g \fbox{Esc}}$$ - гамма $$\gamma$$...

    Все выражения являются композицией атомарных объектов-выражений (чисел, символов и строк) и выражений вида f[x,y,...]

    Выражение

    $$ \tt In[5]:=(1 + 2. - 5.77*3.8)/((3.2 - 0.1)\^\,\!(1/2) + 6\^\,\!2) \\ \\ \tt Out[5]=-0.501209$$

    в действительности имеет вид

    $$ \tt In[6]:=Times[Plus[1,2.', Times[-1, Times[5.77', 3.8']]], \\ \phantom{In[6]:=T}Power[ \\ \phantom{In[6]:=T}\phantom{P}Plus[Power[Plus[3.2',-0.1'], Times[1, Power[2,-1]]], \\ \phantom{In[6]:=T}\phantom{PP}Power[6, 2]], -1]] \\ \\ \tt Out[6]=-0.501209$$

    Основная работа пакета Mathematica - вычисление (Evaluation) выражений

    Чтобы вычислить выражение, поместите курсор внутрь содержащей его клетки и выполните команду $$\text{\fbox{Shift} + \fbox{Enter}}$$:

    $$\tt In[7]:=(1 + 2. - 5.77*3.8)/((3.2 - 0.1)\^\,\!(1/2) + 6\^\,\!2) \\ \\ Out[7]=-0.501209$$

    Арифметические операции $$\text{\tt (+, -, *, /, \^\,\!)}$$; знак $$\text{\tt *}$$ можно не писать (вместо него - пробел, который $$Mathematica$$ в некоторых случаях автоматически заменяет соответствующим значком):

    $$\tt In[8]:=ab2 \times 3cd+xy-2z \\ \\ Out[8]=6abcd+xy-2 z$$

    Mathematica различает строчные (маленькие) и прописные (заглавные, большие) буквы

    Встроенные функции и символы всегда начинаются с прописной буквы, поэтому пользовательские символы и выражения рекомендуется начинать со строчных букв.

    Примеры встроенных символов:

    $$\tt In[9]:= Pi \\ \phantom{In[9]:= }E \\ \phantom{In[9]:= }I \\ \\ Out[9]= $\pi$ \\ \\ \tt Out[10]= $e$ \\ \\ Out[11]= $i$$$

    Чтобы вывести соответствующее десятичное представление для выражения $$\text{\tt expr}$$, нужно выполнить команду $$\text{\tt N[expr]}$$ или $$\text{\tt N[expr,n]}$$, где $$n$$ - число цифр в десятичном представлении, например:

    $$\tt In[12]:=N[Pi] \\ \phantom{In[12]:=}N[Pi,10] \\ \phantom{In[12]:=}N[100Pi, 10] \\ \phantom{In[12]:=}N[E] \\ \phantom{In[12]:=}N[I] \\ \\ Out[12]=3.14159 \\ \\ Out[13]=3.141592654 \\ \\ Out[14]=314.1592654 \\ \\ Out[15]=2.71828 \\ \\ Out[16]=0.+1.i$$

    Присвоение значений командой Set или "=" (создание правила замены символа на присвоенное значение) и снятие присвоений командой Unset или "=."

    $$\tt In[17]:=x=2 \\ \\ Out[17]=2 \\ \\ In[18]:= x \\ \\ Out[18]=2 \\ \\ In[19]:=x=. \\ \\ In[20]:= x \\ \\ Out[20]=x$$

    Встроенным символам значения переприсвоить нельзя:

    $$\tt In[21]:=Pi=10 \\ \\ \phantom{In[21]:}Set::wrsym: Symbol $\pi$ is Protected.>> \\ \\ Out[21]=10 \\ \\ In[22]:=Pi \\ \phantom{In[22]:=}N[Pi] \\ \\ Out[22]=$\pi$ \\ \\ Out[23]=3.14159 \\ \\ In[24]:=Pi=. \\ \\ \phantom{In[21]:}Unset::wrsym:Symbol $\pi$ is Protected.>> \\ \\ Out[24]=\$Failed \\ \\ In[25]:=Pi \\ \phantom{In[25]:=}N[Pi] \\ \\ Out[25]=$\pi$ \\ \\ Out[26]=3.14159$$

    Выражения f[a,b,...]

    Встроенные:

    $$\tt In[27]:=Sin[$\pi$/2] \\ \\ Out[27]=1$$

    Создание выражений:

    $$\tt In[28]:=f[x\_]:=x^2 \\ \\ In[29]:=\!f[2] \\ \phantom{In[29]:=}f[a] \\ \phantom{In[29]:=}f[Sin [x]]+f[Cos[x]] \\ \\ Out[29]=4 \\ \\ Out[30]=a^2 \\ \\ Out[31]=Cos[x]^2+Sin[x]^2$$

    Значок $$\text{:=}$$ называется $$\text{SetDelayed}$$. Он отличается от значка $$\text{=}$$, который называется $$\text{Set}$$, тем, как осуществляется вычисление присвоенного выражения. $$\text{Set}$$ вычисляет правую часть $$\text{rhs}$$ формулы $$\text{lhs = rhs}$$ еще до присвоения и результат присваивает левой части $$\text{lhs}$$; $$\text{SetDelayed}$$ присваивает левой части $$\text{lhs}$$ невычисленную правую часть $$\text{rhs}$$, и при каждом вычислении левой части присвоенная правая часть вычисляется заново с использованием текущих значений связанных с $$\text{rhs}$$ объектов.

    Для примера используем функцию $$\text{Random[ ]}$$, которая выдает случайное вещественное число в пределах между 0 и 1. В первом примере перед присвоением вычисляется некоторое случайное число и результат присваивается переменной $$z$$, поэтому при каждом появлении $$z$$ заменяется на одно и то же присвоенное число. Во втором примере $$z$$ присваивается неотработанная функция $$\text{Random[ ]}$$, и при каждом появлении $$z$$ эта функция вычисляется каждый раз заново, чем и объясняются разные результаты вычисления $$z$$.

    $$\tt In[32]:=z=Random[] \\ \phantom{In[32]:=}\,z \\ \phantom{In[32]:=}\,z \\ \\ Out[32]=0.871538 \\ \\ Out[33]=0.871538 \\ \\ Out[34]=0.871538 \\ \\ In[35]:=z:=Random[] \\ \phantom{In[35]:=}\,z \\ \phantom{In[35]:=}\,z \\ \\ Out[36]=0.877299 \\ \\ Out[37]=0.620971 \\ \\ In[38]:=z=.$$

    Еще один пример:

    $$\tt In[39]:=y=2 \\ \\ Out[39]=2 \\ \\ In[40]:=f[y_]=y^3 \\ \\ Out[40]=8 \\ \\ In[41]:=g[y_]:=y^3 \\ \\ In[42]:=f[w] \\ \phantom{In[42]:=}\,g[w] \\ \\ Out[42]=8 \\ \\ Out[43]=w^3 \\ \\ In[44]:=y=.$$

    Чтобы очистить сделанное присвоение вида f[x_] = rhs или f[x_] := rhs, выполните команду Clear[f]

    $$\tt In[45]=Clear[f] \\ \phantom{In[45]=}\,Clear[g] \\ \\ In[47]:=f[x] \\ \phantom{In[47]:=}\,g[x] \\ \\ Out[47]=f[x] \\ \\ Out[48]=g[x] $$

    Для одновременной очистки нескольких присвоений, сделанных для $$f, g, \dots$$, можно использовать $$\text{\tt Clear[f, g, \ldots]}$$:

    $$\tt In[49]:=f[x\_]:=x^2 \\ \phantom{In[49]:=}\,g[x\_]:x^3 \\ \phantom{In[49]:=}\,f[x] \\ \phantom{In[49]:=}\,g[x] \\ \\ Out[51]=x^2 \\ \\ Out[52]=x^3 \\ \\ In[53]:=Clear[f,g] \\ \phantom{In[53]:=}\,f[x] \\ \phantom{In[53]:=}\,g[x] \\ \\ Out[54]=f[x] \\ \\ Out[55]=g[x]$$

    Некоторые другие способы записи выражений f[x]

    $$\tt In[56]:=f[x\_]:=x^2 \\ \phantom{In[56]:=}\,g[x\_, y\_]:=xy^2 $$

    В приведенных ниже первых трех примерах вычисляется значение функции $$f$$ на переменной $$x = 2$$ ; в четвертом примере вычисляется значение функции $$g$$ на переменных $$x = 2$$ и $$y = 3$$.

    $$\tt In[56]:=f[2] (*Standard форма*) \\ \phantom{In[56]:=}\,f@2 (*Prefix форма*) \\ \phantom{In[56]:=}\,2//f (* Postfix форма*) \\ \phantom{In[56]:=}\,2 \sim g \sim 3 (* Infix форма*) \\ \\ Out[58]=4 \\ \\ Out[59]=4 \\ \\ Out[60]=4 \\ \\ Out[61]=18 \\ \\ In[62]:= Clear[f,g]$$

    Задание функции непосредственно, без присвоения и имени (безымянные функции, pure functions)

    В приводимых ниже примерах значок $$\text{\#}$$ используется для обозначения единственной переменной задаваемой функции, значки $$\text{\#1, \#2, \ldots}$$.- соответственно первая, вторая и т. д. переменные для функции многих переменных; значок $$\text{\tt \}$$ ставится после описания функции и обозначает, что стоящее слева от него выражение надо рассматривать как определение функции, а все вместе с ним - как саму функцию.

    $$\tt In[63]:= (\#^2+2) \ [x] \\ \\ Out[63]=2+x^2 \\ \\ In[64]:= (\#1^2 +\#2^4) \ [x,y] \\ \\ Out[64]=x^2+y^4 \\ \\ In[65]:= f=(\#^2+2) \ \\ \\ Out[65]=\#1^2+2 \ \\ \\ In[66]:= f[x] \\ \\ Out[66]=2+x^2 \\ \\ In[67]:= Clear[f] $$

    Подавление вывода результата и расположение команд внутри одной клетки

    Если после команды ставится точка с запятой $$\text{;}$$, то вывод результата не происходит:

    $$\tt In[68] = 2 + 2 \\ \\ Out[68]=4 \\ \\ In[69]:= 2+2;$$

    На одной строке можно писать сразу несколько команд, разделяя их $$\text{;}$$ (выводы результатов этих команд производиться не будут); можно писать одну команду сразу на нескольких строках:

    $$\tt In[70]:=f[x\_]:=x^2; g[x\_, y\_]:=x^2+y^3; h[x\_, y\_]:= \\ \phantom{In[70]:=f}3xy; \\ \\ In[71]:=f[a] \\ \phantom{In[71]:=}\;g[b,c] \\ \phantom{In[71]:=}\;h[d,e] \\ \\ Out[71]=a^2 \\ \\ Out[72]= b^2+c^3 \\ \\ Out[73]=3de \\ \\ In[74]:= Clear[f,g,h]$$

    Списки List[x,y,...] или {x,y,...}

    $$\tt In[75]:= \{x,\{a,b\},z\} \\ \\ Out[75]=\{x, \{a,b\}, z\}$$

    Доступ к элементам списка (команда Part или [[ ...]])

    $$\tt In[76]:=\{x, \{a,b\}, z\} [[3]] \\ \phantom{In[76]:=}\;Part[\{x, \{a,b\}, z\}, 3] \\ \\ Out[76]=z \\ \\ Out[77]=z \\ \\ In[78]:= \{x, \{a,b\},z\} [[2,1]] \\ \phantom{In[78]:=}\;Part[\{x, \{a,b\},z\},2,1] \\ \\ Out[78]=a \\ \\ Out[79]=a \\ \\ In[80]:= \{x,\{a,b\},z\} [[\{1,3,1,2,3,3\}]] \\ \\ Out[80]=\{x,z,x,\{a,b\},z,z\} \\ \\ In[81]:=\{1,2,3,4,5,6,7\}[[2;;5]] \\ \\ Out[81]=\{2,3,4,5\}$$

    Вместо скобок [[ и ]] удобно использовать [[ и ]]

    Они получаются набором $$\text{\fbox{Esc} [[ \fbox{Esc}}$$ и $$\text{\fbox{Esc} ]] \fbox{Esc}}$$ соответственно:

    $$\tt In[82]:= \{x,\{a,b\},z\}[\![3]\!] \\ \\ Out[82]=z$$

    Арифметические операции над списками - покомпонентные

    $$\tt In[83]:= \{1,2,3\}+\{x,y,z\} \\ \\ Out[83]=\{1+x, 2+y, 3+z\} \\ \\ In[84]:= \{1,2,3\}x\} \\ \\ Out[84]=\{x, 2x, 3x\} \\ \\ In[85]:= \{1,2,3\}\{x,y,z\} \\ \\ Out[85]=\{x,2y, 3z\} \\ \\ In[86]:= \{1,2,3\}/\{x,y,z\}\} \\ \\ Out[86]=\left \{\frac 1x, \frac 2y, \frac 3z \right \} $$

    Специальные операции над списками

    $$\tt In[87]:=\{1,2,3\} . \{x,y,z\} \\ \\ Out[87]=x+2y+3z \\ \\ In[88]:= \{\{a,b\},\{c,d\}\} . \{x,y\} \\ \\ Out[88]=\{ax+by, cx+dy\}$$

    Список $$\text{\{\{a, b\}, \{c, d\}\}}$$ представляет собой матрицу и может быть визуализирован в привычной форме $$\begin{pmatrix} ab\\ cd \end{pmatrix}$$ с использованием палетки ($$\text{Palette}$$):

    $$\tt In[89]:= \begin{pmatrix} ab\\ cd \end{pmatrix} \cdot \{x,y\}}\\ \\ Out[89]=\{ax+by, cx+dy\}\\ \\ In[90]:= \begin{pmatrix} ab\\ cd \end{pmatrix} \cdot \begin{pmatrix} xy\\ zt \end{pmatrix}}\\ \\ Out[90]=\{\{ax+bz, bt+ay\}, \{cx+dz, dt + cy\}\} $$

    Чтобы вывести список в матричной форме, можно использовать команду $$MatrixForm$$

    $$\tt In[91]:= \begin{pmatrix} ab\\ cd \end{pmatrix}. \begin{pmatrix} xy\\ zt \end{pmatrix}// MatrixForm\\ \\ Out[91]=\begin{pmatrix} ax+bzbt+ay\\ cx+dzdt+cy \end{pmatrix} $$

    Применение функций к спискам

    Функция $$\text{Sin}$$, примененная к списку, вычисляется на каждом элементе списка (функции, обладающие таким свойством, называются $$\text{Listable}$$):

    $$\tt In[92] := Sin[\{l, 2, 3, 4, 5\}] \\ \\ Out[92] = \{Sin [1] , Sin[2], Sin[3], Sin[4], Sin[5]\}$$

    Не всякая функция является $$Listable$$:

    $$\tt In[93]:= f [\{1, 2, 3, 4, 5\}] \\ \\ Out[93] = f [\{1, 2, 3, 4, 5\}]$$

    Чтобы применить функцию $$f$$, не являющуюся $$\text{Listable}$$, к списку $$\text{list}$$, можно воспользоваться командой $$\text{Map[f, list]}$$:

    $$\tt In[94]: = Map[f,\{1, 2, 3, 4, 5\}] Out[94]=\{f [1], f[2], f[3], f[4], f[5]\}$$

    Функцию $$f$$ удобно задавать непосредственно внутри команды $$\text{Map}$$, не присваивая ей имени:

    $$\tt In[95]:= Map[\#^2 \, \{1, 2, 3, 4, 5\}] \\ \\ Out[95] = \{1, 4, 9, 16, 25\}$$

    Чтобы применить функцию $$f$$ нескольких переменных к набору списков, нужна команда $$\text{\tt MapThread[f, \{list1, list2, \ldots \}]}$$:

    $$\tt In[96]:= MapThread[\#1^2 - \#2^3 , \{\{1, 2, 3\}, \{x, у, z\}\} \\ \\ Out[96] = \{1 - x^3, 4-y^3, 9-z^3\}$$

    Создание списков

    Следующая команда задает список от 1 до 17 с шагом 2:

    $$\tt In[97]:= Table[k, \{k, 1, 17, 2\}] \\ \\ Out[97]=\{1, 3, 5, 7, 9, 11, 13, 15, 17\}$$

    Следующая команда задает матрицу из трех строк ($$i$$ - номер строки) длины 5 (элементы строки нумеруются $$j$$), в которой $$(i, j)$$-й элемент имеет вид $$i + j$$:

    $$\tt In[98]:= Table [i + j, \{i, 1, 3\}, \{j, 1, 5\}] \\ \\ Out[98] =\{\{2, 3, 4, 5, 6\}, \{3, 4, 5, 6, 7\}, \{4, 5, 6, 7, 8\}\}$$

    Следующая команда создает список натуральных чисел от 1 до 5:

    $$\tt In[99]: = Range [5] \\ \\ Out[99] = {1, 2, 3, 4, 5}$$

    Следующая команда объединяет списки:

    $$\tt In[100]:=Join[ \{ 1, 2, 3\} , \{ 3, 4, 5\} ] \\ \phantom{In[100]:=}\,\{1, 2, 3\} \sim Join \sim \{ 3, 4, 5\} \\ \\ Out[100]=\{ 1, 2, 3, 3, 4, 5\} \\ \\ Out[101]= \{ 1, 2, 3, 3, 4, 5\} $$

    Следующая команда объединяет подсписки в единый список (убирает внутренние фигурные скобки):

    $$\tt In[102]:= \begin{pmatrix} 12\\ 34 \end{pmatrix}}\\ \phantom{In[102]:=}\,Flatten \begin{matrix} \left [ \begin{pmatrix} 12\\ 34 \end{pmatrix} \right ]} \end{matrix} \\ \\ Out[102]=\{\{1,2\}, \{3,4\}\} \\ \\ Out[103]=\{1,2,3,4\}$$

    Следующая функция создает список из последовательных непересекающихся подсписков длины 3:

    $$\tt In[104]:= Partition[\{a,b,c,d,e,f,g\},3] \\ \\ Out[104]=\{\{a,b,c\}, \{d,e,f\}\} \\ \\ In[105]:=m=\{\{1,2,3\}, \{4,5,6\}, \{7,8,9\}\}; \\ \phantom{In[105]:=}\;m// MatrixForm \\ \phantom{In[105]:=}\;Transpose[m] // MatrixForm \\ \\ Out[106]=\begin{pmatrix} 123\\ 456\\ 789 \end{pmatrix}\\ \\ Out[107]=\begin{pmatrix} 147\\ 258\\ 369 \end{pmatrix}$$

    Некоторые графические возможности

    $$\tt In[108]:=Plot [Sin [x], \{ x, -4\pi, 4\pi \}]$$ $$\tt In[109]:= Plot3D[x\^\,\!2 - у\^\,\!2, \{х,-1,1\},\{у, -1, 1\}] \\ \\$$ $$\tt In[110]:= ParametricPlot[\{Cos[t], Sin[t] Cos [t] \}, \{t, 0, 2\pi \}]$$ $$\tt In[111]:= ParametricPlot3D[\{ 8 Cos[t] , 8 Sin[t], t\} , \{ t, 0, 6\pi \}]$$ $$\tt In[112]:=ParametricPlot3D [\{ Cos [u] , Sin[u] Cos [v] , Cos [v] \}, \\ \phantom{In[112]:=P}\!\{u,0,2\pi\}, \{v,0,2\pi\}]$$

    Визуализация зависимости от параметра

    Катеноид (минимальная поверхность вращения):

    $$\tt In[113]:=ParametricPlot3D[\{Cosh[u] Cos[v], Cosh[u] Sin[v], u\}, \\ \phantom{In[113]:=P}\{u,-1,1\}, \{v,0,2\pi\}]$$

    Геликоид (минимальная линейчатая поверхность):

    $$\tt In[114]:=ParametricPlot3D[\{Sinh[u] Sin[v], -Sinh[u] Cos[v], v\}, \\ \phantom{In[114]:=P}\!\{u,-1,1\}, \{v, 0, 2\pi\}]$$

    Изгибание катеноида в геликоид (здесь $$\text{PlotRange}$$ описывает отрезки изменения координат $$(x, у, z)$$ точек поверхности; $$\text{Mesh}$$ - координатная сетка на поверхности, в данном случае $$\text{Mesh} $\to$ \text{None}$$ означает, что сетка отсутствует; $$\text{PlotPoints}$$ - количество точек на каждой координатной кривой: чем больше точек, тем более гладко выглядит поверхность, хотя прорисовка замедляется; $$\alpha$$ - параметр изгибания).

    $$\tt In[115]:= \\ \\ \phantom{In}Manipulate[ \\ \phantom{\phantom{In}M}ParametricPlot3D[Cos[$\alpha$] \{Cosh[u] Cos[v], Cosh[u] Sin[v], u\}+ \\ \phantom{\phantom{\phantom{In}M}Pa}Sin[$\alpha$] \{Sinh[u] Sin[v], - Sinh[u] Cos[v], v\}, \{u, -1, 1\}, \\ \phantom{\phantom{\phantom{In}M}P}\{v, 0, 2$\pi$\}, \\ \phantom{\phantom{\phantom{In}M}P}PlotRange $\to$ \{\{-1.6, 1.6\}, \{-1.6, 1.6\}, \{-1, 6.5\}\}, Mesh $\to$ None, \\ \phantom{\phantom{\phantom{In}M}P}PlotPoints $\to$ 30, ImageSize $\to$ 200], \\ \phantom{\phantom{In}M}\{$\alpha$, 0, $\frac{\pi}{2}$\}]$$

    Алгебра и анализ

    Дифференцирование и интегрирование

    $$\tt In[116]:=f[x\_] := $x^2$\tt\;Sin[x] \\ \phantom{In[116]:=}D[f[x],x] \\ \phantom{In[116]:=}f'[x] \\ \phantom{In[116]:=}Integrate[f[x],x] \\ \phantom{In[116]:=}$\int$ f[x] dx \\ \phantom{In[116]:=}Integrate[$x^2$, \{x, a, b\}] \\ \phantom{In[116]:=}$\int_a^b x^2$ dx \\ \\ Out[117]=$x^2$ Cos[x]+2x Sin [x] \\ \\ Out[118]=$x^2$ Cos[x]+2x Sin [x] \\ \\ Out[119]=-(-2+$x^2$) Cos[x] + 2x Sin[x] \\ \\ Out[120]=-(-2+$x^2$) Cos[x] + 2x Sin[x] \\ \\ Out[121]=$-\frac{a^3}{3} + \frac{b^3}{3}$ \\ \\ Out[122]=$-\frac{a^3}{3} + \frac{b^3}{3}$$$

    Численное интегрирование

    $$\tt In[123]:=NIntegrate [Sin[Cos[x]], \{x,1,2\}] \\ \phantom{In[123]:=}$\int_1^2$\tt Sin[Cos[x]] dx \\ \phantom{In[123]:=}N[$\int_1^2$ Sin[Cos[x]] dx] \\ \\ Out[123]=0.652202 \\ \\ Out[124]=$\int_1^2$ Sin[Cos[x]] dx \\ \\ Out[125]=0.0652202 $$

    Замена фрагментов выражения expr по правилам rules (ReplaceAll): expr /. Rules

    Значок $$"\to"$$ получается последовательным набором - и > или с использованием палетки $$\text{BasicMathInput}$$.

    $$\tt In[126]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, у, z} /. x $\to$ b\} \\ \\ \tt Out[126]= \{Cos[b], $b^2 + z^3, y, z$\} \\ \\ In[127]:= \{Cos[x], x\^\,\!2 + x\^\,\!3, у, z\} /. Cos $\to$ Sin \\ \\ \tt Out[127]= \{Sin[x], $x^2 + z^3, y, z$\} \\ \\ In[128]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. z $\to$ \{a, b\} \\ \\ \tt Out[l28]= \{Cos[x], $\{a^3+x^2, b^3+x^2\}, y, \{a, b\}$\} \\ \\ ln[129]:= \{Cos[x], х\^\,\!2 + z\^\,\!3, у, z\} /. \{x $\to$ a, у $\to$ b\} \\ \\ \tt Out[129]= \{Cos[a], $a^2 + z^3, b, z$\} \\ \\ In[130]:= \{Cos[x], х\^\,\!2 + z\^\,\!3, у, z\} /. \{\{x $\to$ a\} , \{y $\to$ b\}\} \\ \\ \tt Out[130]= \{\{Cos[a], $a^2 + z^3, y, z$\}, \{cos[x], $x^2 + z^3, b, z$\}\} \\ \\ In[131]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. \{x $\to$ a, a $\to$ b\} \\ \\ \tt 0ut[131]= \{Cos[a], $a^2 + z^3, y, z$\} \\ \\ In[132]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. x $\to$ a /. a $\to$ b \\ \\ \tt Out[132]= \{Cos[b], $b^2 + z^3, y, z$\}$$

    Значок $$": \to"$$ получается последовательным набором $$\text{:}$$ и $$\text{>}$$ или с использованием палетки $$\text{BasicMathInput}$$. В отличие от $$\text{lhs} $\to$ \text{rhs}$$, которое сначала вычисляет $$\text{rhs}$$, а потом заменяет на результат вычислений все вхождения $$\text{lhs}$$, правило $$\text{lhs} $\to$ \text{rhs}$$ вычисляет $$\text{rhs}$$ отдельно для каждого вхождения $$\text{lhs}$$:

    $$\tt In[133]:={x, х, х} /. x $\to$ Random[] \\ \phantom{In[133]:=}{х, х, х} /. х :$\to$ Random[] \\ \\ Out[133]={0.209741, 0.209741, 0.209741} \\ \\ Out[134]={0.0161126, 0.191289, 0.729859}$$

    Равенства и неравенства

    Значки $$==$$, $$\geq$$ и $$\leq$$ получаются последовательным набором $$==,>=$$ и $$<=$$ соответственно или с использованием палетки $$\text{BasicMathInput}$$.

    $$\tt In[135]:=x == 2 \\ \phantom{In[135]:=}x > 3 \\ \phantom{In[135]:=}x $\geq$ 3 \\ \phantom{In[135]:=}(x $\geq$ 3 \\ x $\leq$ 6)||(x == 8) \\ \\ Out[135]=x == 2 \\ \\ Out[136]=x > 3 \\ \\ Out[137]=x $\geq$ 3 \\ \\ Out[138]=[x $\geq$ 3 \\ x $\leq$ 6) || x == 8$$

    Решение уравнений и неравенств

    $$\tt In[139]:= res=Solve[ax^2+bx+c= =0, x]}\\ \\ Out[139]=\{\{x \to \frac{-b-\sqrt{b^2-4ac}}{2a}\}, \{x \to \frac{-b+\sqrt{b^2-4ac}}{2a}\}\\ \\ In[140]:= x/.res[\![1]\!]}\\ \\ Out[140]=\frac{-b-\sqrt{b^2-4ac}}{2a}\\ \\ In[141]:= Solve[\{x^2-y-4= =0, y+3x= =2\}, \{x,y\}]}\\ \\ Out[141]=\{\{y \to \frac12 (13-3 \sqrt{33}), x \to \frac12 (-3+\sqrt{33})\},\\ \phantom{Out[141]=\{}\{y \to \frac12 (13+3 \sqrt{33}, x \to \frac12 (-3- \sqrt{33})\}\} \\ \\ In[142]:= Reduce[ax^2+bx+c==0,x]}\\ \\ Out[142]=\left( a \ne 0 \ \ \left( x==\frac{-b-\sqrt{b^2-4ac}}{2a}\|x==\frac{-b+\sqrt{b^2-4ac}}{2a} \right) \right)\|\\ \phantom{Out[142]=\left(}(a==0 \ \ b \ne 0 \ \ x==-\fraccb)\|(c==0 \ \ b==0 \ \ a==0) \\ \\ In[143]:= Reduce[-1 \le x+y \le 1 \ \ x^2+y^2==2, \{x,y\}]}\\ \\ Out[143]=(\frac12 (-1-\sqrt3) \le x \le \frac12 (1- \sqrt3) \ \ y==\sqrt{2-x^2})\|\\ \phantom{Out[143]=(}(\frac12 (-1+\sqrt3) \le x \le \frac12 (1+\sqrt3) \\ y==-\sqrt{2-x^2}) \\ \\ In[144]:= Clear[res]}\\ $$

    Решение дифференциальных уравнений

    $$\tt In[145]:=res=DSolve[x''[t]-x'[t]==2, x[t],t] \\ \\ Out[145]=\{\{x[t] $\to$ -2t + $e^t$ C[1]+C[2]\}\} \\ \\ In[146]:=f[t\_]=x[t]/.res[[1]] /. \{C[1] $\to$ 1, C[2] $\to$ 0\} \\ \\ Out[146]=$e^t$ - 2t \\ \\ In[147]:=Plot[f[t], {t, -1,1}]$$ $$\tt In[148]:= Clear[f, res]$$

    Численное решение дифференциальных уравнений

    Кроме самого уравнения, нужно задать начальные условия и область изменения переменной:

    $$\tt In[149]:=\\ \phantom{In}res=NDSolve[{x''[t]-Sin[x'[t]]==2, x[0]==1, x'[0]==2}, \\ \phantom{\phantom{In}re}x,\{t,0,1\}] \\ \\ Out[149]=\{\{x $\to$ InterpolatingFunction[\{\{0.,1.\}\}, <>]\}\} \\ \\ In[150]:=f=x /. res[\![1]\!] \\ \\ Out[150]=InterpolatingFunction[\{\{0.,1.\}\}, <>] \\ \\ In[151]:=f[0] \\ \phantom{In[151]:=}f'[0] \\ \\ Out[151]=1. \\ \\ Out[152]=2. \\ \\ In[153]:= Plot[f[s],{s,0,1}]$$ $$\tt n[154]:= Clear[res,f]$$

    Преобразование выражений, упрощение

    $$\tt In[155]:=$(x+y)^5$ \\ \\ Out[155]=$(x+y)^5$ \\ \\ In[156]:=$(x+y)^5$ //Expand \\ \\ Out[156]=$x^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$ \\ \\ In[157]:=$\frac1x + \frac{x-2}{x^2+3}$ \\ \\ Out[157]=$\frac1x +\frac{-2+x}{3+x^2}$ \\ \\ In[158]:=$\frac1x + \frac{x-2}{x^2+3}$ //Together \\ \\ Out[158]=$\frac{3-2x+2x^2}{x(3+x^2)}$ \\ \\ In[159]:=$8x^2-6x^2+x^4-2x^2y+x^3y-8y^3+6xy^3-x^2y^3+2y^4-xy^4$ // Factor \\ \\ Out[159]=$(-2+x)(-4+x+y)(x^2-y^3)$ \\ \\ In[160]:=Sin$[x]^2$+Cos$[x]^2$ \\ \\ Out[160]=Cos$[x]^2$+Sin$[x]^2$ \\ \\ In[161]:=Sin$[x]^2$+Cos$[x]^2$ //Simplify \\ \\ Out[161]=1 $$

    Программирование

    Булевы операции

  • $$\text{\tt And[]}$$, или $$\text{\tt \\}$$, или $$\wedge$$ (набрать $$\text{\fbox{Esc} \\ \fbox{Esc}}$$),
  • $$\text{\tt Or[]}$$, или $$\|$$, или $$\vee$$ (набрать $$\text{\fbox{Esc}\|\fbox{Esc}}$$),
  • $$\text{\tt Not[]}$$, или $$!$$, или $$\neg$$ (набрать $$\text{\fbox{Esc}!\fbox{Esc}}$$),
  • $$\text{\tt Equal[]}$$ или $$==$$,
  • $$Unequal[ ]$$ или $$!=$$,
  • $$\ldots$$
  • $$\text{\tt True, False}$$,
  • $$\text{\tt >, >=, <, <=.}$$
  • $$\tt In[162]:= 2 > 1 \\ $\pi$ > 3 \\ \\ Out[162]=True \\ \\ In[163]:= 1 > 2 \|\; $\pi$ > 3 \\ \\ Out[163]=True \\ \\ In[164]:= !x > 1 \\ \\ Out[164]=x $\le$ 1 \\ \\ In[164]:= 2+2==4 \\ \\ Out[165]=True \\ \\ In[166]:= 1 $\ne$ 2 \\ \\ Out[166]=True$$

    Условные операторы

    Оператор If[condition, t, f] или If[condition, t, f, u]

    Если условие дает $$\text{\tt True}$$, то выполняется часть $$\text{\tt t}$$, если условие дает $$\text{\tt False}$$, то выполняется часть $$\text{\tt f}$$, если условие не дает ни $$\text{\tt True}$$, ни $$\text{\tt False}$$, то выполняется часть $$\text{u}$$:

    $$\tt In[167]:=abs[x\_ ]:=If[x < 0, -x,x] \\ \phantom{In[167]:=}Map[abs,\{1,0,-1,y\}] \\ \\ Out[168]=\{1,0,1,If[y < 0, -y,y]\} \\ \\ In[169]:= \\ \phantom{In}abs1[x\_]:=If[x >0,-x,x,"значение не сравнимо с нулем"] \\ \phantom{In}Map[abs1,{1,0,-1,y}] \\ \\ Out[170]={1,0,1, значение сравнимо с нулем}$$

    Оператор Which[test1, value1, test2, value2, ...]

    Последовательно выполняет тесты, возвращая значение $$\text{\tt value}$$ для первого теста, дающего $$\text{\tt True}$$:

    $$\tt In[171]:= a=2; Which[a==1,x,a==2,b,a==2,c] \\ \\ Out[171]=b $$

    Присвоение при условии lhs := rhs /; test

    Присвоение происходит только в случае, если тест дает $$\text{\tt True (Condition[])}$$:

    $$\tt In[172]:=f[x\_{-}]:=$\sqrt{x}$ /;x $\ge$ 0 \\ \\ In[173]:=Map[f,{4,-4}] \\ \\ Out[173]={2,f[-4]}$$

    Операторы цикла и контроля

  • Оператор $$\text{\tt Do[expr, \{i, imax\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ между $$\text{\tt 1}$$ и $$\text{\tt imax}$$;
  • Оператор $$\text{\tt Do[expr, \{i, imin, imax, di\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ между $$\text{\tt imin}$$ и $$\text{\tt imax}$$ с шагом $$\text{\tt di}$$;
  • Оператор $$\text{\tt Do[expr, \{i, list\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ из списка $$\text{\tt list}$$;
  • Оператор $$\text{\tt Do[expr, \{i, \{n\}\}]}$$ выполняет $$\text{\tt expr}$$ в количестве $$\text{\tt n}$$ раз
  • В приводимом ниже примере команда $$\text{\tt Print}$$ выводит результат на экран:

    $$\tt In[174]:=Do[res=$i^2$; Print[res],\{I,3\}} \\ \\ \tt \phantom{In[174]:}1 \\ \\ \phantom{In[174]:}4 \\ \\ \phantom{In[174]:}9 \\ \\ \tt In[175]:=t=x;Do[t=1/(1+kt), \{k,2,6,2\}];t \\ \\ Out[175]=$\cfrac{1}{1+\cfrac{6}{1+\cfrac{4}{1+2x}}}$ \\ \\ In[176]:=Do[Print[$i^2$],\{i, \{3, 6, 8\}\}] \\ \\ \phantom{In[176]:}9 \\ \\ \phantom{In[176]:}36 \\ \\ \phantom{In[176]:}64 \\ \\ In[177]:=t-x;Do[t=1/(1+t),\{3\}];t \\ \\ Out[177]=$\cfrac{1}{1+\cfrac{1}{1+\cfrac{1}{1+x}}$$$

    Вложенные циклы Do[expr, i1, ..., i2, ..., ...]

    $$\tt In[178]:=Do[Print[{i,j}],{i, 4},{j, i-1}] \\ \\ \phantom{In[178]:}{2,1} \\ \\ \phantom{In[178]:}{3,1} \\ \\ \phantom{In[178]:}{3,2} \\ \\ \phantom{In[178]:}{4,1} \\ \\ \phantom{In[178]:}{4,2} \\ \\ \phantom{In[178]:}{4,3} $$

    Оператор While[test, body] выполняет body до тех пор, пока test дает True

    Здесь $$\text{\tt n++}$$ означает увеличение $$\text{\tt n}$$ на единичку; равносильно $$\text{\tt n = n + 1}$$:

    $$\tt In[179]:=n=1; m=1; While[n $\le$ 5, m=mn; n++; Print[m]] \\ \\ \phantom{In[179]}1 \\ \\ \phantom{In[179]}2 \\ \\ \phantom{In[179]}6 \\ \\ \phantom{In[179]}24 \\ \\ \phantom{In[179]}120 $$

    Оператор For[start, test, incr, body] выполняет start, затем последовательно выполняет body и incr до тех пор, пока test дает True:

    $$\tt In[180]:= For[i=1; t=x, i\^\,\!2 < 10, i++, t=t\^\,\!3+I; Print[t]]} \\ \\ \phantom{In[180]}$1+x^3$ \\ \\ \phantom{In[180]}$2+\left(1+x^3\right)^3$ \\ \\ \phantom{In[180]}$3+\left(2+\left(1+x^3\right)^3\right)^3$$$
  • $$\text{\tt Break[]}$$ выходит из ближайшего цикла;
  • $$\text{\tt Continue[]}$$ переходит к следующему шагу в текущем цикле;
  • $$\text{\tt Return[expr]}$$ возвращает значение $$\text{\tt expr}$$, выходя при этом из всех процедур и циклов функции;
  • $$\text{\tt Goto[name]}$$ переходит к элементу $$\text{\tt Label[name]}$$ в текущей процедуре (в примере оператор $$\text{\tt t *= k}$$ равносилен $$\text{\tt t = t*k}$$):
  • $$\tt In[181]:=t=1;Do[t*=k; Print[t]; If[t > 19, Break[]],{k,10}] \\ \\ \phantom{In[181]:}1 \\ \\ \phantom{In[181]:}2 \\ \\ \phantom{In[181]:}6 \\ \\ \phantom{In[181]:}24$$

    В следующем примере $$\text{\tt PrimeQ[n]}$$ дает $$\text{\tt True}$$, если $$\text{\tt n}$$ - простое число:

    $$\tt In[182]:=Do[If[!PrimeQ[k], Continue[], Print[k]],{k, 15}] \\ \\ \phantom{In[182]:}2 \\ \\ \phantom{In[182]:}3 \\ \\ \phantom{In[182]:}5 \\ \\ \phantom{In[182]:}7 \\ \\ \phantom{In[182]:}11 \\ \\ \phantom{In[182]:}13 \\ \\ In[183]:=f[x\_]:=(If[x < 0, Return[-$x^2$]]; $x^2$) \\ \phantom{In[183]:=}Plot[f[x], {x, -1,1}]$$ $$\tt In[185]:=x=2; Label[start]; Print[x];x+=2;\\ \phantom{In[185]:=}If[x < 8, Goto[start]] \\ \\ \phantom{In[185]:}2 \phantom{In[185]:}4 \phantom{In[185]:}6 In[186]:= Clear[abs, abs1,a,res,I,m,n,t,f,x]$$

    Последовательности команд. Локализация переменных

    Как при определении выражений, так и в полях, отведенных для аргументов, можно писать не одно выражение, а последовательности выражений. Ниже приведены правила написания таких последовательностей

  • Выражения последовательности разделяются точкой с запятой ";".
  • Если после последнего выражения нет ";" , то результат вычисления этого последнего выражения выводится (например, в случае, когда последовательность введена в том месте, где должен стоять аргумент, значение присваивается аргументу). Если после последнего выражения стоит ";", то результат не выводится.
  • При задании последовательности выражений, которую нужно присвоить некоторому выражению, или при задании безымянных функций эта последовательность берется в круглые скобки:
  • $$\tt In[187]:=For[ \\ \phantom{In[187]:=F}i=1; j=1, \\ \phantom{In[187]:=F}i+j $\le$ 10, \\ \phantom{In[187]:=F}i++, \\ \phantom{In[187]:=F}If[PrimeQ[i] \\ PrimeQ[j] \\ i $\le$ j, Primt[\{I,j\}]]; \\ \phantom{In[187]:=F}If[j < 9 \\ i+j==10, j++; i=1] \\ \phantom{In[187]:=}] \\ \\ \phantom{In[187]:}\{2,2\} \\ \\ \phantom{In[187]:}\{2,3\} \\ \\ \phantom{In[187]:}\{3,3\} \\ \\ \phantom{In[187]:}\{2,5\} \\ \\ \phantom{In[187]:}\{3,5\} \\ \\ \phantom{In[187]:}\{5,5\} \\ \\ \phantom{In[187]:}\{2,7\} \\ \\ \phantom{In[187]:}\{3,7\}$$ $$ In[188]:=f[y\_] := (If[y > 0, x="+"]; If[y < 0, x="\--"]; \\ \phantom{In[188]:=f[}If[y==0, x="!"];x) \\ \phantom{In[188]:=f}f[2] \\ \\ Out[189]=+ \\ \\ In[190]:=g[y\_] := (If[y > 0, x="+"]; If[y < 0, x="\--"]; \\ \phantom{In[190]:=g[}If[y==0, x="!"];x;) \\ \phantom{In[190]:=}g[2] \\ \\ In[192]:= \\ \phantom{In}Map[(If[\# > 0, x="+"]; If[\# < 0,x"\--"]; If[\#==0,x="!"]; \\ \phantom{In[192]}x)\,\{1,-1,0\}] \\ \\ Out[192]=\{+,-,!\} \\ \\ In[193]:= \\ \phantom{In}Map[(If[\#>0,x="+"]; If[\# < 0,x"\--"]; If[\#==0,x="!"]; \\ \phantom{In[193]}x;)\ \{1,-1,0\}] \\ \\ Out[193]=\{Null, Null, Null\} \\ \\ In[194]:= Clear[I,j,x,f,g]$$

    В выражении $$\text{\tt Module[x,y, ..., expr]}$$ переменные $$\text{\tt x, y, ..}$$. локальны, т. е. определены лишь внутри этой конструкции. При этом значения одноименных переменных, определенных снаружи, не используются при вычислении модуля, в то время как значения неодноименных наружных переменных используются.

    Из приведенного примера видно, что внутренняя переменная $$\text{\tt x}$$ на самом деле имеет другое имя:

    $$\tt In[195]:=x=1; \\ \phantom{In[195]:=}y=2; \\ \phantom{In[195]:=}z=3; \\ \phantom{In[195]:=}Module[{x},x] \\ \phantom{In[195]:=}Module[{x}, x=5;z=6;xy] \\ \phantom{In[195]:=}x \\ \phantom{In[195]:=}z \\ \\ Out[198]=x\$1424 \\ \\ Out[199]=10 \\ \\ Out[200]=1 \\ \\ Out[201]=6$$

    Локальным переменным можно присваивать начальные значения прямо в месте их декларации, т. е. $$\text{\tt Module[\{x = x0, y = y0, z, \ldots\}, expr]}$$ ($$\text{\tt AxesOrigin}$$ в команде $$\text{\tt Plot}$$ задает координаты точки, через которую проводятся координатные оси):

    $$\tt In[202]:=\!f[x0\_]:= \\ \phantom{In[202]:=f[}Module[\{x=x0, y=5, z\}, z=y-x; If[z \ge 0,5,x] \\ \phantom{In[202]:=f[}]; \\ \phantom{In[202]:=}Plot[f[x],\{x,0,10\}, AxesOrigin \to \{0,0\}]$$

    Выражение $$\text{\tt Block[x, y, ..., expr]}$$ вычисляется со значениями переменных $$\text{\tt x, y, ...}$$, заданных внутри блока. При этом значения одноименных переменных, определенных снаружи, используются при вычислении модуля, если они не были переопределены в блоке. Переопределенные в блоке переменные $$\text{\tt x, y, ...}$$ при выходе из блока восстанавливают свое предыдущее значение:

    $$\tt In[204]:=x=2; \\ \phantom{In[204]:=}Block[{x},x] \\ \phantom{In[204]:=}Block[{x=5},x] \\ \phantom{In[204]:=}x \\ \\ Out[205]=2 \\ \\ Out[206]=5 \\ \\ Out[207]=2 \\ \\ In[208]:= Clear[x,y,z,f]$$

    Упражнения

    Задачи взяты из книги А. С. Мищенко, Ю. П. Соловьева, А. Т. Фоменко, "Сборник задач по дифференциальной геометрии и топологии" [5].

    (2.1) Точка $$M$$ равномерно движется по прямой $$ON$$, равномерно вращающейся вокруг точки $$O$$. Составить уравнение траектории точки $$M$$ (спираль Архимеда).

    Решение. Пусть $$O$$ - начало координат. Если $$\varphi_0$$ - начальный угол между прямой $$ON$$ и положительным направлением оси абсцисс, а $$\omega$$ - угловая скорость вращения прямой $$ON$$ вокруг $$O$$, то в момент времени $$t$$ угол $$\varphi_t$$ между $$ON$$ и осью абсцисс изменяется линейно и записывается в виде

    $$\tt In[209]:= $\varphi$ [t\_]:=$\varphi$ 0+ $\omega$ t$$

    Если начальное расстояние от $$M$$ до $$O$$ равно $$r_0$$, а точка $$O$$ движется по $$ON$$ со скоростью $$v$$, то в момент времени $$t$$ расстояние $$r[t]$$ между $$M$$ и $$O$$ равно

    $$\tt In[210]:= r[t\_]:=r0+vt;$$

    Таким образом, координаты точки $$M$$ в момент времени $$t$$ равны

    $$\tt In[211]:= $\gamma$[t\_]:=r[t] \{Cos[$\varphi$[t]], Sin[$\varphi$[t]]\} \\ \\ In[212]:= $\gamma$[t] \\ \\ Out[212]=\{(r0+tv)Cos[$\varphi$0+t$\omega$], (r0+tv)Sin[$\varphi$0+t$\omega$]\}$$

    Изобразим траекторию, фиксировав некоторые значения параметров:

    $$\tt In[213]:=ParametricPlot[$\gamma$[t] /. \{$\varphi$0 $\to$ 0, r0 $\to$ 1, $\omega$ $\to$ 5, v $\to$ 1\}, \\ \phantom{In[213]:=P}\{t, 0, 10\}]$$ $$\tt In[214]: Clear[$\varphi$, $\gamma$, r]$$

    (2.19) Под каким углом пересекаются кривые $$x^2=4y$$ и $$y=\frac{8}{x^2+4}$$?

    Решение. Найдем точки пересечения кривых:

    $$\tt In[215]:=res=Solve$\left[\left\{x^{2}==4y, y== \frac{8}{x^2+4)\right\},\{x,y\}\right]$ \\ \\ Out[215]=$\left\{\left\{y \to -2, x \to -2i \sqrt{2}\right\}\right.$, \\ \\ \phantom{Out[215]= }$\left.\left\{y \to -2, x \to 2i \sqrt{2}\right\}, \{y \to 1, x \to -2\}, \{y\to 1, x\to 2\} \right\}$$$

    Так как кривые вещественные, подходят лишь третье и четвертое решения. Так как кривые инвариантны при замене $$x$$ на $$-x$$, углы пересечения в обеих точках одинаковы, поэтому достаточно вычислить угол лишь, скажем, для четвертого решения. Заметим, что обе кривые являются графиками функций параметра $$x$$, поэтому они могут быть параметризованы $$x$$. Имеем (функция $$\text{\tt Norm[v]}$$, которую мы используем ниже, равна евклидовой длине вектора $$v$$ )

    $$ \text{In[216]:=}\gamma 1[x\_]:=\left\{x, \frac{x^2}{4}\right\}; \gamma 2[x\_]:=\left\{x, \frac{8}{x^2+4}\right\};\\ \phantom{\text{In[216]:=}}v1:=\gamma 1'[x]\text{ /. res}[\![4]\!]; v2:=\gamma 2'[x]\text{ /. res}[\![4]\!];\\ \phantom{\text{In[216]:=}}\varphi=\text{ArcCos} \left[\frac{v1.v2}{\text{Norm}[v1]\text{Norm}[v2]}\right] \\ \\ \text{Out[218]=ArcCos}\left[\frac{1}{\sqrt{10}}\right] $$

    Изобразим эти кривые:

    $$ \text{In[219]:=Plot}\left[\left\{\frac{x^2}{4}, \frac{8}{x^2+4}\right\}, \{x,0,3\}\right] $$ $$\tt In[220]:=Clear[$\gamma$1, $\gamma$2, v1, v2, res, $\varphi$]$$

    (2.22) Вокруг оси $$Oz$$ вращается окружность $$x = a + b cos[v], z =b sin[v] (0 < b < a)$$. Составить уравнение поверхности вращения.

    Решение. Если точку с координатами $${a+b cos[v], 0, b sin[v]}$$ повернуть на угол $$\varphi$$ вокруг оси $$Oz$$, то у полученной точки будут координаты

    $$\tt In[221]:=r[$\varphi$\_, v\_] := \{(a+b Cos[v])Cos[$\varphi$], (a+bCos[v])Sin[$\varphi$], \\ \phantom{In[221]:=r[$\varphi$}b Sin[v]\};$$

    Нарисуем эту поверхность (являющуюся, очевидно, тором) при следующих значениях параметров: $$a = 4, b = 2$$ при изменении $$\varphi$$ и $$v$$ в пределах от 0 до $$2 \pi$$.

    $$\tt In[222]:=ParametricPlot3D[r[$\varphi$, v]/. \{a $\to$ 4, b $\to$ 2\}, \{$\varphi$, 0, 2$\pi$ \}, \\ \phantom{In[222]:=P}\{v, 0, 2 $\pi$\}]$$

    Изобразим зависимость тора от параметров (здесь $$\text{\pp \{\{aa, 4\}, 1, 6\}}$$ означает, что параметр $$aa$$ может меняться в пределах между 1 и 6, причем начальное его значение равно 4; аналогично для параметра $$bb$$ ):

    $$\tt In[223]:= \\ \\ \phantom{In}Module[\{r,a,b\}, \\ \phantom{InM}r[$\varphi$\_, v\_] := \{(a+bCos[v])Cos[$\varphi$], (a+bCos[v])Sin[$\varphi$], \\ \phantom{InMod}bSin[v]\}; \\ \phantom{InM}Manipulate[ParametricPlot3D[r[$\varphi$, v] /. \{a$\to$aa, b$\to$bb\}, \\ \phantom{InMod}\{$\varphi$, 0, 2$\pi$\}, \{v, 0, 2$\pi$\}, Mesh$\to$None, PlotPoints$\to$30, \\ \phantom{InMod}PlotRange$\to$\{\{-12,12\}, \{-12, 12\}, \{-6,6\}\}, ImageSize$\to$300], \\ \phantom{InMo}\{\{aa, 4\}1,6\}, \{\{bb,2\},1,6\}] \\ \phantom{In}]$$ $$\tt In[224]:=Clear[r]$$

    (4.1) Вычислить кривизну следующих кривых: б) $$y = a ch(x/a)$$.

    Решение 1. В качестве параметра выберем $$x$$, тогда

    $$\tt In[225]:=$\gamma$[x\_] := \{x, a Cosh$\left[\frac{x}{a}\right]$\}; $$

    Найдем натуральный параметр:

    $$ \text{In[226]:=}f[x\_]=\int \sqrt{\gamma '[x]. \gamma '[x]} dx}\\ \\ \text{Out[226]=}a \sqrt{Cosh\left[\frac xa\right]^2} Tanh\left[\frac xa\right]\\ \\ \text{In[227]:=}f[x\_]=\text{Simplify}\left[\int \sqrt{\gamma '[x].\gamma '[x]} dx\right]\\ \\ \text{Out[227]=}a\sqrt{Cosh\left[\frac xa\right]^2} Tanh\left[\frac xa\right]$$

    В качестве второго параметра команды $$\tt Simplify$$ можно указать предположения, которые помогут упростить выражение:

    $$ \text{In[228]:=}f[x\_]=\text{Simplify}\left[\int\sqrt{\gamma '[x]. \gamma '[x]} dx, \text{ Cosh}\left[\frac xa\right] \ge 0\right] \\ \\ \text{Out[228]=}a Sinh\left[\frac xa\right]$$

    Выразим $$x$$ через натуральный параметр $$s$$:

    $$\tt In[229]:=g[s\_]=InverseFunction[f][s] \\ \\ Out[229]=$f^{(-1)} [s]$$$

    Заменим параметр на натуральный:

    $$ \text{In[230]:=}\gamma 1[s\_]=\gamma [x] /. x \to g[s] \\ \\ \text{Out[230]=}\left\{f^{(-1)}[s], a Cosh\left[\frac{f^{(-1)}[s]}{a}\right]\right\} \\ \\ \text{In[231]:=}k[s\_]=\sqrt{\gamma 1''[s].\gamma 1''[s]} \text{// Simplify} \\ \\ \text{Out[231]=}\sqrt{\frac{Sech\left[\frac{f^{-1}[s]}{a}\right]^4}{a^2}}$$

    Выразим $$x$$ через натуральный параметр $$s$$ (другой способ):

    $$\tt In[232]:=res=Solve[s == f[x], x] \\ \\ \\ \phantom{In[232]}Solve::ifun: \\ \phantom{In[232]:=}Inverse functions are being used by Solve, so some solutions may not be found; \\ \phantom{In[232]:=res=S}Use Reduce for complete solution information.>> \\ \\ Out[232]=$\left\{\left\{x \to a ArcSinh\left[\frac sa\right]\right\}\right\}$ \\ \\ In[233]:= $\gamma$1[s\_]=$\gamma$[x] /. res[\![1]\!] \\ \\ Out[233]=$\{a ArcSinh[\frac sa], a \sqrt{1+\frac {s^2}{a^2}}\}$ \\ \\ In[234]:=k[s\_]=$\sqrt{\gamma 1''[s].\gamma 1''[s]$ \\ \\ Out[234]=$\sqrt{\frac{s^2}{a^4+\left(1+\frac{s^2}{a^2}\right)^3}+\left(-\frac{s^2}{a^3\left(1+\frac{s^2}{a^2}\right)^{\frac 32}}+\frac{1}{a \sqrt{1+\frac{s^2}{a^2}}}\right)^2}$ \\ \\ In[235]:= k[s\_]=Simplify$\left[\sqrt{\gamma 1''[s]. \gamma 1''[s]}\right]$ \\ \\ Out[235]=$\sqrt{\frac{a^2}{(a^2+s^2)^2}}$ \\ \\ In[236]:=k[s\_]=Simplify$\left[\sqrt{\gamma 1''[s]. \gamma1''[s]}, \left\{a>0, a^2+s^2>0\right\}\right]$ \\ \\ Out[236]=$\frac{a}{a^2+s^2}$$$

    Решение 2. Вновь в качестве параметра выберем $$x$$ и воспользуемся формулой кривизны произвольно параметризованной кривой. Имеем

    $$ \text{In[237]:=}\gamma[x\_]=\left\{x, a Cosh\left[\frac xa\right]\right\}; \\ \phantom{\text{In[237]:=}}k[x\_]=\frac{Abs[Det[\{\gamma '[x], \gamma ''[x]\}]]}{Norm[\gamma '[x]]^3} \\ \\ \text{Out[238]=}\frac{Abs\left[\frac{Cosh\left[\frac xa\right]}{a}\right]}{(1+Abs\left[Sinh\left[\frac xa\right]\right]^2\right)^{\frac 32}} \\ \\ \text{In[239]:=} \\ \phantom{In}k[x\_]=Simplify\left[Abs[Det[\{\gamma'[x], \gamma''[x]\}]]/Norm[\gamma'[x]]^3,\right.\\ \phantom{In[23}\left.\left\{Sinh\left[\frac xa\right] \ge 0, Cosh\left[\frac xa\right] \ge 0, a \ge 0\right\}\right]} \\ \\ \text{Out[239]=}\frac{Sech\left[\frac xa\right]^2}{a}$$

    Проверим, что получился тот же результат:

    $$\tt In[240]:=k[x] /. res[\![1]\!] //Simplify} \\ \\ Out[240]=$\frac{a}{a^2+s^2}$ \\ \\ In[241]:=$\gamma[x]$ \\ \\ Out[241]=$\left\{x, a Cosh\left[\frac xa\right]\right\}$$ $$\tt In[242]:= \\ \\ \phantom{In}Module[\{$\gamma$, k, a\}, \\ \\ \phantom{InM}$\gamma$[x\_] := $\left\{$x, a Cosh$\left.\left[\frac xa\right]\right\}$; k[x\_] := $\frac{\text{Sech}\left[\frac xa\right]^2}{a}$; \\ \phantom{InM}Manipulate[\{ \\ \phantom{InMMa}ParametricPlot[$\gamma$[x] /. a$\to$aa, \{ x, -1, 1\}, \\ \phantom{InMMaP}AspectRatio$\to$Automatic, Plotrange$\to$\{\{-1,1\}, \{-0.1,3.5\}\}, \\ \phantom{InMMap}ImageSize$\to$100], \\ \phantom{InMMa}Plot[k[x] /. a$\to$aa, \{x, -1, 1\}, AspectRatio$\to$Automatic, \\ \phantom{InMMap}PlotRange$\to$\{\{-1, 1\}, \{-0.1, 3.5\}\}, ImageSize$\to$100] \\ \phantom{InMM}\}, \\ \phantom{InMM}\{\{aa, 0.36\}, 0.3, 3\}] \\ \phantom{In}]$$ $$\tt In[243]:= Clear[$\gamma$, a, $\gamma$1, f, g, res, k]$$

    (4.22) Найти параметрические уравнения кривых, зная их натуральные уравнения (здесь $$R = 1/k$$ ): a) $$R = as$$.

    Решение 1. Имеем

    $$ \text{In[244]:=} k[s\_]\; :=\; \frac{1}{as}; \\ \\ \text{In[245]:=} \alpha [s\_]=\int k[s]ds}\\ \\ \text{Out[245]=} \frac{\text{Log}[s]}{a}\\ \\ \text{In[246]:=} x[s\_]=\int\text{Cos}[\alpha [s]] ds\\ \phantom{\text{In[246]:=}} y[s\_]=\int\text{Sin}[\alpha [s]] ds}\\ \\ \text{Out[246]=} \frac{as\left(a\text{Cos}\left[\frac{\text{Log} [s]}{a}\right] + \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\\ \\ \text{Out[247]=} \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\\ \\ \text{In[248]:=} \{x[s],\; y[s]\} \\ \\ \text{Out[248]=} \left\{\frac{as\left(a\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+\text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}, \; \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a\text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\right\}$$

    Изобразим полученные кривые для параметра $$s$$ в пределах от 0.1 до 20 и изучим их зависимость от параметра $$a$$, изменяющегося в пределах от 0.05 до 1 с начальным значением 0.5:

    $$ \text{In[249]:=} \\ \phantom{\text{In}}\text{Module}[\{x,y,a\}, \\ \phantom{\text{InM}}x[s\_]:=\frac{as\left(a \text{Cos} \left[ frac{\text{Log}[s]}{a}\right] + \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2};\\ \phantom{\text{InM}}y[s\_]:=\frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}; \\ \phantom{\text{InM}}\text{Manipulate}[\text{ParametricPlot}[\{x[s], y[s]\}\text{ /. } a\to aa, \\ \phantom{\text{InMMa}}\{s,0.1,20\},\text{PlotRange} \to \{\{-3, 3\}, \{-3,3\}\}, \text{ImageSize}\to 250], \\ \phantom{\text{InMM}}\{\{aa, 0.5\}, 0.05,1\}] \\ \phantom{\text{In}}]$$ $$ \text{In[250]:=Clear}[k, \alpha, x,y]\}$$

    Решение 2. Вместо явного интегрирования решим систему дифференциальных уравнений:

    $$ \text{In[251]:=} \\ \phantom{\text{In}}\text{res}=\text{DSolve}\left[\left\{\alpha'[s]==\frac{1}{as}, x'[s]==\text{Cos}[\alpha [s]], y'[s]==\text{Sin}[\alpha [s]]\right\}\right., \\ \phantom{\text{In[251]}}\left.\{\alpha [s], x[s], y[s]\}, s\right] \\ \\ \text{Out[251]=}\{\{\alpha [s] \to C[1]+\frac{\text{Log}[s]}{a},\\ \phantom{\text{Out[251]=}\{\{}x[s] \to C[2]+\frac{as\left(a \text{Cos}\left[C[1] + \frac{Log[s]}{a}\right]+\text{Sin}[C[1]+\frac{\text{Log}[s]}{a}]\right)}{1+a^2},\\ \phantom{\text{Out[251]=}\{\{}y[s] \to C[3]+\frac{as\left(-\text{Cos}\left[C[1]+\frac{\text{Log}[s]}{a}\right]+a \text{Sin}\left[C[1]+\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\}\} $$

    Задав начальные значения констант равными нулю, получим (сравните с предыдущим результатом)

    $$ \text{In[252]:=\{x[s], y[s]\} /. res[\![1]\!] /. \{C[1]}\to\text{0, C[2]} \to \text{0, C[3]} \to \text{0\} // Simplify} \\ \\ \text{Out[252]=}\left\{\frac{as\left(a \text{Cos}\left[\frac{\text{Log}[s]}{a}\right] + \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}, \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\right\}\\ \\ \text{In[253]:=Clear[k, } \alpha\text{, x, y, res]}$$

    Важное замечание. Численная реализация Решения 2 работает даже тогда, когда $$Mathematica$$ не может посчитать интегралы. Проиллюстрируем это на примере:

    $$\tt In[254]:=k[s\_]=se^s;$$

    Первый способ:

    $$\tt In[255]:=$\alpha$[s\_]=$\int$k[s] ds \\ \\ Out[255]=$e^s$ (-1+s) \\ \\ In[256]:=x[s\_]=$\int$Cos[$\alpha$[s]] ds \\ \phantom{In[256]:=}y[s\_]=$\int$Sin[$\alpha$[s]] ds \\ \\ Out[256]=$\int$Cos[$e^s$(-1+s)] ds \\ \\ Out[257]=$\int$Sin[$e^s$(-1+s)] ds \\ \\ In[258]:=ParametricPlot[\{x[s], y[s]\}, \{s, 0.1, 1\}] \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.1'.>> \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.10001836734693878'.>> \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.10001836734693878'.>> \\ \\ \\ \phantom{In}General::stop : Further output of Integrate::ilib will be suppressed during this calculation.>>$$ $$\tt In[259]:=Clear[k, $\alpha$, x, y]$$

    Второй способ:

    $$\tt In[260]:= \\ \\ \phantom{In}k[s\_]:=s$e^s$; \\ \phantom{In}res= \\ \phantom{Inr}NDSolve[\{$\alpha$'[s]==k[s], x'[s]==Cos[$\alpha$[s]], y'[s]==Sin[$\alpha$[s]], \\ \phantom{InrND}$\alpha$[0]==0, x[0]==0, y[0]==0\}, \{$\alpha$[s], x[s], y[s]\}, \{s,0,1\}]\} \\ \\ Out[261]=\{\{$\alpha$[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s], \\ \phantom{Out[261]=\{\{}x[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s], \\ \phantom{Out[261]=\{\{}y[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s]\}\} \\ \\ In[262]:=$\gamma$[s\_]=\{x[s], y[s]\} /. res[\![1]\!] // Simplify \\ \\ Out[262]=\{InterpolatingFunction[\{\{0., 1.\}\}<>][s], \\ \phantom{Out[262]=\{}InterpolatingFunction[\{\{0., 1.\}\},<>][s]\} \\ \\ In[263]:=ParametricPlot[$\gamma$[s], \{s, 0, 1\}]$$ $$\tt In[264]:=Clear[k, $\gamma$]$$

    Построить пространственную кривую с кривизной $$k[t] = 1 + sin[t]^2$$ и кручением $$и[t] = cos[t]$$.

    $$\tt In[265]:=\\ \\ \phantom{In}k[t\_]=1+Sin$[t]^2$; k[t\_] = Cos[t]; $\gamma$[t\_] := \{x[t], y[t], z[t]\}; \\ \phantom{In}eq[$\xi$\_, $\eta$\_]:=Table[$\xi$[\![i]\!]==$\eta$[\![i]\!], \{i,3\}]; \\ \phantom{In}v[t\_]=\{v1[t], v2[t], v3[t]\}; \\ \phantom{In}n[t\_]=\{n1[t], n2[t], n3[t]\}; \\ \phantom{In}b[t\_]=\{b1[t], b2[t], b3[t]\};\\ \\ In[269]:= \phantom{In}frenet=eq[$\gamma$'[t], v[t]]$\sim$Join$\sim$eq[v'[t], k[t]n[t]]$\sim$Join$\sim$ \\ \phantom{Infr}eq[n'[t], -k[t]v[t] + $\kappa$[t]b[t]]$\sim$Join$\sim$ eq[b'[t], -$\kappa$[t]n[t]] \\ \\$$ $$\tt Out[269]=\{x'[t] == v1[t], y'[t] == v2[t], \\ \phantom{Out[269]=\{}z'[t] == v3[t], v1'[t] == n1[t] (1+Sin[t]^{2}), \\ \tt \phantom{Out[269]=}v2'[t] == n2[t] (1+Sin[t]^{2}), v3'[t] == n3[t] (1+Sin[t]^{2}), \\ \phantom{Out[269]=}n1'[t] == b1[t] Cos[t] + (-1-Sin[t]^{2}) v1[t], \\ \phantom{Out[269]=}n2'[t] == b2[t] Cos[t] + (-1-Sin[t]^{2}) v2[t], \\ \phantom{Out[269]=}n3'[t] == b3[t] Cos[t] + (-1-Sin[t]^{2}) v3[t], \\ \phantom{Out[269]=}b1'[t] == -Cos[t] n1[t], \\ \phantom{Out[269]=}b2'[t] == -Cos[t] n2[t], b3'[t] == -Cos[t] n3[t]\} $$ $$\tt In[270]:= \\ \\ \phantom{In}res=NDSolve[frenet$\sim$Join$\sim$eq[$\gamma$[0], \{0,0,0\}]$\sim$Join$\sim$ \\ \phantom{Inres}eq[v[0], \{1,0,0\}] $\sim$Join$\sim$eq[n[0], \{0,1,0\}$\sim$Join$\sim$ \phantom{Inres}eq[b[0], \{0,0,1\}], $\gamma$[t]$\sim$Join$\sim$v[t]$\sim$Join$\sim$n[t]$\sim$Join$\sim$b[t], \\ \phantom{Inre}\{t,0,100\}] $$ $$\tt Out[270]=\{\{x[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}y[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}z[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t]\}\} $$ $$\tt In[271]:= \\ \phantom{In[271]:=}Manipulate[ParametricPlot3D[$\gamma$[t] /. Res[\![1]\!], \{t,0,aa\}, \\ \phantom{In[271]:=Ma}PlotRange$\to$\{\{-1,1\}, \{0,2\}, \{-1,1\}\}, \\ \phantom{In[271]:=Ma}PlotPoints$\to$Round[$\frac{10}{11}$aa+$\frac{100}{11}$], ImageSize$\to$250], \\ \phantom{In[271]:=M}\{\{aa, 44\}, 1, 100\}]$$
    Страницы:

    В пакет $$Mathematica$$ встроено подробное описание ($$Help$$). Чтобы в него попасть, нажмите $$\fbox{\text{F1}}$$ или войдите через меню $$\tt \text{Help/Documentation Center}$$.

    После запуска программы на экране появляется несколько независимых окон. Вдоль верхней части экрана расположено меню. Слева - рабочее окно. Можно открыть много рабочих окон, выполнив в меню команду $$\text{File/New/Notebook(.nb)}$$. Как видно из названия команды, рабочее окно называется $$\text{Notebook}$$.

    Если в рабочее окно ввести произвольный символ, то этот символ отобразится в окне, а справа появится вертикальная скобка, ограничивающая текущее рабочее поле. При дальнейшем вводе новые символы будут также отображаться в рабочем поле. Если произойдет переход на следующую строку, правая скобка расширится. Эта скобка указывает на независимую область, в которой можно расположить команды языка $$Mathematica$$ и одновременно их выполнить. Область, ограниченная скобкой, называется клеткой ($$\text{Cell}$$). Если стать на последней строке клетки и нажать на стрелочку вниз, или же стать на первой строке клетки и нажать на стрелочку вверх, то курсор превратится в горизонтальную линию, расположенную рядом с клеткой. Если опять ввести символ, то появится новая клетка, в которую также можно вводить текст. Кроме того, переходить от клетки к клетки, а также позиционировать курсор между клетками можно с помощью мышки.

    В клетки можно вводить произвольные выражения ($$\text{Expression}$$) и вычислять ($$\text{Evaluate}$$) их. Для вычисления нужно, находясь внутри клетки, выполнить команду $$\fbox{\text{Shift}} + \fbox{\text{Enter}}$$ (здесь и всюду ниже знак + обозначает одновременное нажатие клавиш). Поместите курсор внутрь следующей клетки, в которой написано $$\tt 2+2$$, и выполните $$\fbox{\text{Shift}} + \fbox{\text{Enter}}.$$

    $$ In[1]:=2 + 2 \\ Out[1] = 4$$

    После выполнения команды $$\fbox{\text{Shift}} + \fbox{\text{Enter}}$$ слева от выражения появится $$\text{In[1]}$$, нумерующее последовательно выполняющиеся команды. Кроме того, возникнет еще одна клетка с результатом, который будет помечен $$\text{Out[1]}$$. Заметим, что клетка ввода и вывода объединены в одну большую клетку. Вы можете манипулировать результатом многими способами. Один из них - использование символа $$\text{\tt \%}$$, которому присвоен результат последней выполненной команды; последовательности $$\text{\tt \%\%}$$ - результат выполнения предпоследней команды; $$\text{\tt \%\%\%}$$ - предпредпоследней и т.д., а также $$\text{\tt \%n}$$ - результат выполнения команды с номером $$n$$.

    Основные операции пакета Mathematica

    Объекты, которыми оперирует $$Mathematica$$:

  • числа ($$\text{Numbers}$$), например, $$\text{\tt 5, 2/3, 2.35}$$ ;
  • символы ($$\text{Symbols}$$), например, $$\text{\tt x, abc5}$$ ;
  • строки ($$\text{Strings}$$ ), например, $$\text{\tt "это - строка"\ }$$;
  • выражения ($$\text{Expressions}$$), например, $$\text{\tt (x + 2)/(y - 2.3)}$$.
  • Замечание

    Имеется несколько способов визуализации одного и того же выражения, например,

    $$ \tt (1+2.-5.77*3.8)/((3.2-0.1)\^\,\!(1/2)+6\^\,\!2) \\ \\ \tt (1+2.-5.77 3.8)/(Sqrt[3.2-0.1]+6\^\,\!2) \\ \\ Times[ \\ \phantom{Tim}Plus[1, 2., Times[-1, Times[5.77, 3.8]]], \\ \phantom{Tim}Power[Plus[Power[Plus[3.2, -0.1], Times[1, Power[2, -1]]], \\ \phantom{Tim}\phantom{Power[Plus[}Power[6, 2]], -1]]$$

    В последнем случае $$\text{\tt Times[x,y]}$$ обозначает произведение $$x$$ и $$y$$, $$\text{\tt Plus[x,y]}$$ - их сумму, а $$\text{\tt Power[x,y] - x}$$ в степени $$y$$.

    Три типа визуализации выражений

    Cтаньте в клетку, вид которой хотите изменить, и выполните соответствующую команду:

    $$\text{\tt InputForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{i})}$$:

    $$\tt In[2]:= (1 + 2. - 5.77*3.8) / (Sqrt[3.2 - 0.1] + 6 \^\,\! 2) \\ \\ \tt Out[2] =-0.501209$$

    $$\text{StandardForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{n})}$$:

    $$\tt In[3]:=$\frac{1+2.-5.77 \times 3.8}{\sqrt{3.2-0.1}+6^2}$\\ \\ \tt Out[3]=-0.501209$$

    $$\text{TraditionalForm (\fbox{Ctrl}+\fbox{Shift}+\fbox{t})}$$:

    $$\tt In[4]:=$\frac{1+2.-5.77 \times 3.8}{\sqrt{3.2-0.1}+6^2}$\\ \\ \tt Out[4]=-0.501209$$

    Ввод с клавиатуры в StandardForm

    Выражения в $$\text{StandardForm}$$ можно получать сразу. Для этого следует использовать или $$\text{\fbox{Ctrl}}$$ + клавиша, $$\text{\fbox{Esc}}$$ -команда- $$\text{\fbox{Esc}}$$, или вспомогательные панели $$\text{Palettes}$$. Например, $$\text{\fbox{Ctrl}+\fbox{/}}$$ - дробь $$\frac ab$$, $$\text{\fbox{Ctrl}+\fbox{2}}$$ - радикал $$\sqrt x$$, $$\text{\fbox{Ctrl}+\fbox{\^\,\!}}$$ - верхний индекс, как у $$x^2$$, $$\text{\fbox{Ctrl}+\fbox{\phantom{C}\!\!\!\!\!\_\,\!\!}}$$ - нижний индекс, как у $$x_2$$.

    Далее, $$\text{\fbox{Esc} pi \fbox{Esc}}$$ - число $$\pi$$, $$\text{\fbox{Esc} ee \fbox{Esc}}$$ - число $$е$$, $$\text{\fbox{Esc} ii \fbox{Esc}}$$ - мнимая единица $$i$$, $$\text{\fbox{Esc} int \fbox{Esc}}$$ - интеграл $$\int$$, $$\text{\fbox{Esc} sum \fbox{Esc}}$$ - сумма $$\sum$$, $$\text{\fbox{Esc} a \fbox{Esc}}$$ - альфа $$\alpha$$, $$\text{\fbox{Esc} g \fbox{Esc}}$$ - гамма $$\gamma$$...

    Все выражения являются композицией атомарных объектов-выражений (чисел, символов и строк) и выражений вида f[x,y,...]

    Выражение

    $$ \tt In[5]:=(1 + 2. - 5.77*3.8)/((3.2 - 0.1)\^\,\!(1/2) + 6\^\,\!2) \\ \\ \tt Out[5]=-0.501209$$

    в действительности имеет вид

    $$ \tt In[6]:=Times[Plus[1,2.', Times[-1, Times[5.77', 3.8']]], \\ \phantom{In[6]:=T}Power[ \\ \phantom{In[6]:=T}\phantom{P}Plus[Power[Plus[3.2',-0.1'], Times[1, Power[2,-1]]], \\ \phantom{In[6]:=T}\phantom{PP}Power[6, 2]], -1]] \\ \\ \tt Out[6]=-0.501209$$

    Основная работа пакета Mathematica - вычисление (Evaluation) выражений

    Чтобы вычислить выражение, поместите курсор внутрь содержащей его клетки и выполните команду $$\text{\fbox{Shift} + \fbox{Enter}}$$:

    $$\tt In[7]:=(1 + 2. - 5.77*3.8)/((3.2 - 0.1)\^\,\!(1/2) + 6\^\,\!2) \\ \\ Out[7]=-0.501209$$

    Арифметические операции $$\text{\tt (+, -, *, /, \^\,\!)}$$; знак $$\text{\tt *}$$ можно не писать (вместо него - пробел, который $$Mathematica$$ в некоторых случаях автоматически заменяет соответствующим значком):

    $$\tt In[8]:=ab2 \times 3cd+xy-2z \\ \\ Out[8]=6abcd+xy-2 z$$

    Mathematica различает строчные (маленькие) и прописные (заглавные, большие) буквы

    Встроенные функции и символы всегда начинаются с прописной буквы, поэтому пользовательские символы и выражения рекомендуется начинать со строчных букв.

    Примеры встроенных символов:

    $$\tt In[9]:= Pi \\ \phantom{In[9]:= }E \\ \phantom{In[9]:= }I \\ \\ Out[9]= $\pi$ \\ \\ \tt Out[10]= $e$ \\ \\ Out[11]= $i$$$

    Чтобы вывести соответствующее десятичное представление для выражения $$\text{\tt expr}$$, нужно выполнить команду $$\text{\tt N[expr]}$$ или $$\text{\tt N[expr,n]}$$, где $$n$$ - число цифр в десятичном представлении, например:

    $$\tt In[12]:=N[Pi] \\ \phantom{In[12]:=}N[Pi,10] \\ \phantom{In[12]:=}N[100Pi, 10] \\ \phantom{In[12]:=}N[E] \\ \phantom{In[12]:=}N[I] \\ \\ Out[12]=3.14159 \\ \\ Out[13]=3.141592654 \\ \\ Out[14]=314.1592654 \\ \\ Out[15]=2.71828 \\ \\ Out[16]=0.+1.i$$

    Присвоение значений командой Set или "=" (создание правила замены символа на присвоенное значение) и снятие присвоений командой Unset или "=."

    $$\tt In[17]:=x=2 \\ \\ Out[17]=2 \\ \\ In[18]:= x \\ \\ Out[18]=2 \\ \\ In[19]:=x=. \\ \\ In[20]:= x \\ \\ Out[20]=x$$

    Встроенным символам значения переприсвоить нельзя:

    $$\tt In[21]:=Pi=10 \\ \\ \phantom{In[21]:}Set::wrsym: Symbol $\pi$ is Protected.>> \\ \\ Out[21]=10 \\ \\ In[22]:=Pi \\ \phantom{In[22]:=}N[Pi] \\ \\ Out[22]=$\pi$ \\ \\ Out[23]=3.14159 \\ \\ In[24]:=Pi=. \\ \\ \phantom{In[21]:}Unset::wrsym:Symbol $\pi$ is Protected.>> \\ \\ Out[24]=\$Failed \\ \\ In[25]:=Pi \\ \phantom{In[25]:=}N[Pi] \\ \\ Out[25]=$\pi$ \\ \\ Out[26]=3.14159$$

    Выражения f[a,b,...]

    Встроенные:

    $$\tt In[27]:=Sin[$\pi$/2] \\ \\ Out[27]=1$$

    Создание выражений:

    $$\tt In[28]:=f[x\_]:=x^2 \\ \\ In[29]:=\!f[2] \\ \phantom{In[29]:=}f[a] \\ \phantom{In[29]:=}f[Sin [x]]+f[Cos[x]] \\ \\ Out[29]=4 \\ \\ Out[30]=a^2 \\ \\ Out[31]=Cos[x]^2+Sin[x]^2$$

    Значок $$\text{:=}$$ называется $$\text{SetDelayed}$$. Он отличается от значка $$\text{=}$$, который называется $$\text{Set}$$, тем, как осуществляется вычисление присвоенного выражения. $$\text{Set}$$ вычисляет правую часть $$\text{rhs}$$ формулы $$\text{lhs = rhs}$$ еще до присвоения и результат присваивает левой части $$\text{lhs}$$; $$\text{SetDelayed}$$ присваивает левой части $$\text{lhs}$$ невычисленную правую часть $$\text{rhs}$$, и при каждом вычислении левой части присвоенная правая часть вычисляется заново с использованием текущих значений связанных с $$\text{rhs}$$ объектов.

    Для примера используем функцию $$\text{Random[ ]}$$, которая выдает случайное вещественное число в пределах между 0 и 1. В первом примере перед присвоением вычисляется некоторое случайное число и результат присваивается переменной $$z$$, поэтому при каждом появлении $$z$$ заменяется на одно и то же присвоенное число. Во втором примере $$z$$ присваивается неотработанная функция $$\text{Random[ ]}$$, и при каждом появлении $$z$$ эта функция вычисляется каждый раз заново, чем и объясняются разные результаты вычисления $$z$$.

    $$\tt In[32]:=z=Random[] \\ \phantom{In[32]:=}\,z \\ \phantom{In[32]:=}\,z \\ \\ Out[32]=0.871538 \\ \\ Out[33]=0.871538 \\ \\ Out[34]=0.871538 \\ \\ In[35]:=z:=Random[] \\ \phantom{In[35]:=}\,z \\ \phantom{In[35]:=}\,z \\ \\ Out[36]=0.877299 \\ \\ Out[37]=0.620971 \\ \\ In[38]:=z=.$$

    Еще один пример:

    $$\tt In[39]:=y=2 \\ \\ Out[39]=2 \\ \\ In[40]:=f[y_]=y^3 \\ \\ Out[40]=8 \\ \\ In[41]:=g[y_]:=y^3 \\ \\ In[42]:=f[w] \\ \phantom{In[42]:=}\,g[w] \\ \\ Out[42]=8 \\ \\ Out[43]=w^3 \\ \\ In[44]:=y=.$$

    Чтобы очистить сделанное присвоение вида f[x_] = rhs или f[x_] := rhs, выполните команду Clear[f]

    $$\tt In[45]=Clear[f] \\ \phantom{In[45]=}\,Clear[g] \\ \\ In[47]:=f[x] \\ \phantom{In[47]:=}\,g[x] \\ \\ Out[47]=f[x] \\ \\ Out[48]=g[x] $$

    Для одновременной очистки нескольких присвоений, сделанных для $$f, g, \dots$$, можно использовать $$\text{\tt Clear[f, g, \ldots]}$$:

    $$\tt In[49]:=f[x\_]:=x^2 \\ \phantom{In[49]:=}\,g[x\_]:x^3 \\ \phantom{In[49]:=}\,f[x] \\ \phantom{In[49]:=}\,g[x] \\ \\ Out[51]=x^2 \\ \\ Out[52]=x^3 \\ \\ In[53]:=Clear[f,g] \\ \phantom{In[53]:=}\,f[x] \\ \phantom{In[53]:=}\,g[x] \\ \\ Out[54]=f[x] \\ \\ Out[55]=g[x]$$

    Некоторые другие способы записи выражений f[x]

    $$\tt In[56]:=f[x\_]:=x^2 \\ \phantom{In[56]:=}\,g[x\_, y\_]:=xy^2 $$

    В приведенных ниже первых трех примерах вычисляется значение функции $$f$$ на переменной $$x = 2$$ ; в четвертом примере вычисляется значение функции $$g$$ на переменных $$x = 2$$ и $$y = 3$$.

    $$\tt In[56]:=f[2] (*Standard форма*) \\ \phantom{In[56]:=}\,f@2 (*Prefix форма*) \\ \phantom{In[56]:=}\,2//f (* Postfix форма*) \\ \phantom{In[56]:=}\,2 \sim g \sim 3 (* Infix форма*) \\ \\ Out[58]=4 \\ \\ Out[59]=4 \\ \\ Out[60]=4 \\ \\ Out[61]=18 \\ \\ In[62]:= Clear[f,g]$$

    Задание функции непосредственно, без присвоения и имени (безымянные функции, pure functions)

    В приводимых ниже примерах значок $$\text{\#}$$ используется для обозначения единственной переменной задаваемой функции, значки $$\text{\#1, \#2, \ldots}$$.- соответственно первая, вторая и т. д. переменные для функции многих переменных; значок $$\text{\tt \}$$ ставится после описания функции и обозначает, что стоящее слева от него выражение надо рассматривать как определение функции, а все вместе с ним - как саму функцию.

    $$\tt In[63]:= (\#^2+2) \ [x] \\ \\ Out[63]=2+x^2 \\ \\ In[64]:= (\#1^2 +\#2^4) \ [x,y] \\ \\ Out[64]=x^2+y^4 \\ \\ In[65]:= f=(\#^2+2) \ \\ \\ Out[65]=\#1^2+2 \ \\ \\ In[66]:= f[x] \\ \\ Out[66]=2+x^2 \\ \\ In[67]:= Clear[f] $$

    Подавление вывода результата и расположение команд внутри одной клетки

    Если после команды ставится точка с запятой $$\text{;}$$, то вывод результата не происходит:

    $$\tt In[68] = 2 + 2 \\ \\ Out[68]=4 \\ \\ In[69]:= 2+2;$$

    На одной строке можно писать сразу несколько команд, разделяя их $$\text{;}$$ (выводы результатов этих команд производиться не будут); можно писать одну команду сразу на нескольких строках:

    $$\tt In[70]:=f[x\_]:=x^2; g[x\_, y\_]:=x^2+y^3; h[x\_, y\_]:= \\ \phantom{In[70]:=f}3xy; \\ \\ In[71]:=f[a] \\ \phantom{In[71]:=}\;g[b,c] \\ \phantom{In[71]:=}\;h[d,e] \\ \\ Out[71]=a^2 \\ \\ Out[72]= b^2+c^3 \\ \\ Out[73]=3de \\ \\ In[74]:= Clear[f,g,h]$$

    Списки List[x,y,...] или {x,y,...}

    $$\tt In[75]:= \{x,\{a,b\},z\} \\ \\ Out[75]=\{x, \{a,b\}, z\}$$

    Доступ к элементам списка (команда Part или [[ ...]])

    $$\tt In[76]:=\{x, \{a,b\}, z\} [[3]] \\ \phantom{In[76]:=}\;Part[\{x, \{a,b\}, z\}, 3] \\ \\ Out[76]=z \\ \\ Out[77]=z \\ \\ In[78]:= \{x, \{a,b\},z\} [[2,1]] \\ \phantom{In[78]:=}\;Part[\{x, \{a,b\},z\},2,1] \\ \\ Out[78]=a \\ \\ Out[79]=a \\ \\ In[80]:= \{x,\{a,b\},z\} [[\{1,3,1,2,3,3\}]] \\ \\ Out[80]=\{x,z,x,\{a,b\},z,z\} \\ \\ In[81]:=\{1,2,3,4,5,6,7\}[[2;;5]] \\ \\ Out[81]=\{2,3,4,5\}$$

    Вместо скобок [[ и ]] удобно использовать [[ и ]]

    Они получаются набором $$\text{\fbox{Esc} [[ \fbox{Esc}}$$ и $$\text{\fbox{Esc} ]] \fbox{Esc}}$$ соответственно:

    $$\tt In[82]:= \{x,\{a,b\},z\}[\![3]\!] \\ \\ Out[82]=z$$

    Арифметические операции над списками - покомпонентные

    $$\tt In[83]:= \{1,2,3\}+\{x,y,z\} \\ \\ Out[83]=\{1+x, 2+y, 3+z\} \\ \\ In[84]:= \{1,2,3\}x\} \\ \\ Out[84]=\{x, 2x, 3x\} \\ \\ In[85]:= \{1,2,3\}\{x,y,z\} \\ \\ Out[85]=\{x,2y, 3z\} \\ \\ In[86]:= \{1,2,3\}/\{x,y,z\}\} \\ \\ Out[86]=\left \{\frac 1x, \frac 2y, \frac 3z \right \} $$

    Специальные операции над списками

    $$\tt In[87]:=\{1,2,3\} . \{x,y,z\} \\ \\ Out[87]=x+2y+3z \\ \\ In[88]:= \{\{a,b\},\{c,d\}\} . \{x,y\} \\ \\ Out[88]=\{ax+by, cx+dy\}$$

    Список $$\text{\{\{a, b\}, \{c, d\}\}}$$ представляет собой матрицу и может быть визуализирован в привычной форме $$\begin{pmatrix} ab\\ cd \end{pmatrix}$$ с использованием палетки ($$\text{Palette}$$):

    $$\tt In[89]:= \begin{pmatrix} ab\\ cd \end{pmatrix} \cdot \{x,y\}}\\ \\ Out[89]=\{ax+by, cx+dy\}\\ \\ In[90]:= \begin{pmatrix} ab\\ cd \end{pmatrix} \cdot \begin{pmatrix} xy\\ zt \end{pmatrix}}\\ \\ Out[90]=\{\{ax+bz, bt+ay\}, \{cx+dz, dt + cy\}\} $$

    Чтобы вывести список в матричной форме, можно использовать команду $$MatrixForm$$

    $$\tt In[91]:= \begin{pmatrix} ab\\ cd \end{pmatrix}. \begin{pmatrix} xy\\ zt \end{pmatrix}// MatrixForm\\ \\ Out[91]=\begin{pmatrix} ax+bzbt+ay\\ cx+dzdt+cy \end{pmatrix} $$

    Применение функций к спискам

    Функция $$\text{Sin}$$, примененная к списку, вычисляется на каждом элементе списка (функции, обладающие таким свойством, называются $$\text{Listable}$$):

    $$\tt In[92] := Sin[\{l, 2, 3, 4, 5\}] \\ \\ Out[92] = \{Sin [1] , Sin[2], Sin[3], Sin[4], Sin[5]\}$$

    Не всякая функция является $$Listable$$:

    $$\tt In[93]:= f [\{1, 2, 3, 4, 5\}] \\ \\ Out[93] = f [\{1, 2, 3, 4, 5\}]$$

    Чтобы применить функцию $$f$$, не являющуюся $$\text{Listable}$$, к списку $$\text{list}$$, можно воспользоваться командой $$\text{Map[f, list]}$$:

    $$\tt In[94]: = Map[f,\{1, 2, 3, 4, 5\}] Out[94]=\{f [1], f[2], f[3], f[4], f[5]\}$$

    Функцию $$f$$ удобно задавать непосредственно внутри команды $$\text{Map}$$, не присваивая ей имени:

    $$\tt In[95]:= Map[\#^2 \, \{1, 2, 3, 4, 5\}] \\ \\ Out[95] = \{1, 4, 9, 16, 25\}$$

    Чтобы применить функцию $$f$$ нескольких переменных к набору списков, нужна команда $$\text{\tt MapThread[f, \{list1, list2, \ldots \}]}$$:

    $$\tt In[96]:= MapThread[\#1^2 - \#2^3 , \{\{1, 2, 3\}, \{x, у, z\}\} \\ \\ Out[96] = \{1 - x^3, 4-y^3, 9-z^3\}$$

    Создание списков

    Следующая команда задает список от 1 до 17 с шагом 2:

    $$\tt In[97]:= Table[k, \{k, 1, 17, 2\}] \\ \\ Out[97]=\{1, 3, 5, 7, 9, 11, 13, 15, 17\}$$

    Следующая команда задает матрицу из трех строк ($$i$$ - номер строки) длины 5 (элементы строки нумеруются $$j$$), в которой $$(i, j)$$-й элемент имеет вид $$i + j$$:

    $$\tt In[98]:= Table [i + j, \{i, 1, 3\}, \{j, 1, 5\}] \\ \\ Out[98] =\{\{2, 3, 4, 5, 6\}, \{3, 4, 5, 6, 7\}, \{4, 5, 6, 7, 8\}\}$$

    Следующая команда создает список натуральных чисел от 1 до 5:

    $$\tt In[99]: = Range [5] \\ \\ Out[99] = {1, 2, 3, 4, 5}$$

    Следующая команда объединяет списки:

    $$\tt In[100]:=Join[ \{ 1, 2, 3\} , \{ 3, 4, 5\} ] \\ \phantom{In[100]:=}\,\{1, 2, 3\} \sim Join \sim \{ 3, 4, 5\} \\ \\ Out[100]=\{ 1, 2, 3, 3, 4, 5\} \\ \\ Out[101]= \{ 1, 2, 3, 3, 4, 5\} $$

    Следующая команда объединяет подсписки в единый список (убирает внутренние фигурные скобки):

    $$\tt In[102]:= \begin{pmatrix} 12\\ 34 \end{pmatrix}}\\ \phantom{In[102]:=}\,Flatten \begin{matrix} \left [ \begin{pmatrix} 12\\ 34 \end{pmatrix} \right ]} \end{matrix} \\ \\ Out[102]=\{\{1,2\}, \{3,4\}\} \\ \\ Out[103]=\{1,2,3,4\}$$

    Следующая функция создает список из последовательных непересекающихся подсписков длины 3:

    $$\tt In[104]:= Partition[\{a,b,c,d,e,f,g\},3] \\ \\ Out[104]=\{\{a,b,c\}, \{d,e,f\}\} \\ \\ In[105]:=m=\{\{1,2,3\}, \{4,5,6\}, \{7,8,9\}\}; \\ \phantom{In[105]:=}\;m// MatrixForm \\ \phantom{In[105]:=}\;Transpose[m] // MatrixForm \\ \\ Out[106]=\begin{pmatrix} 123\\ 456\\ 789 \end{pmatrix}\\ \\ Out[107]=\begin{pmatrix} 147\\ 258\\ 369 \end{pmatrix}$$

    Некоторые графические возможности

    $$\tt In[108]:=Plot [Sin [x], \{ x, -4\pi, 4\pi \}]$$ $$\tt In[109]:= Plot3D[x\^\,\!2 - у\^\,\!2, \{х,-1,1\},\{у, -1, 1\}] \\ \\$$ $$\tt In[110]:= ParametricPlot[\{Cos[t], Sin[t] Cos [t] \}, \{t, 0, 2\pi \}]$$ $$\tt In[111]:= ParametricPlot3D[\{ 8 Cos[t] , 8 Sin[t], t\} , \{ t, 0, 6\pi \}]$$ $$\tt In[112]:=ParametricPlot3D [\{ Cos [u] , Sin[u] Cos [v] , Cos [v] \}, \\ \phantom{In[112]:=P}\!\{u,0,2\pi\}, \{v,0,2\pi\}]$$

    Визуализация зависимости от параметра

    Катеноид (минимальная поверхность вращения):

    $$\tt In[113]:=ParametricPlot3D[\{Cosh[u] Cos[v], Cosh[u] Sin[v], u\}, \\ \phantom{In[113]:=P}\{u,-1,1\}, \{v,0,2\pi\}]$$

    Геликоид (минимальная линейчатая поверхность):

    $$\tt In[114]:=ParametricPlot3D[\{Sinh[u] Sin[v], -Sinh[u] Cos[v], v\}, \\ \phantom{In[114]:=P}\!\{u,-1,1\}, \{v, 0, 2\pi\}]$$

    Изгибание катеноида в геликоид (здесь $$\text{PlotRange}$$ описывает отрезки изменения координат $$(x, у, z)$$ точек поверхности; $$\text{Mesh}$$ - координатная сетка на поверхности, в данном случае $$\text{Mesh} $\to$ \text{None}$$ означает, что сетка отсутствует; $$\text{PlotPoints}$$ - количество точек на каждой координатной кривой: чем больше точек, тем более гладко выглядит поверхность, хотя прорисовка замедляется; $$\alpha$$ - параметр изгибания).

    $$\tt In[115]:= \\ \\ \phantom{In}Manipulate[ \\ \phantom{\phantom{In}M}ParametricPlot3D[Cos[$\alpha$] \{Cosh[u] Cos[v], Cosh[u] Sin[v], u\}+ \\ \phantom{\phantom{\phantom{In}M}Pa}Sin[$\alpha$] \{Sinh[u] Sin[v], - Sinh[u] Cos[v], v\}, \{u, -1, 1\}, \\ \phantom{\phantom{\phantom{In}M}P}\{v, 0, 2$\pi$\}, \\ \phantom{\phantom{\phantom{In}M}P}PlotRange $\to$ \{\{-1.6, 1.6\}, \{-1.6, 1.6\}, \{-1, 6.5\}\}, Mesh $\to$ None, \\ \phantom{\phantom{\phantom{In}M}P}PlotPoints $\to$ 30, ImageSize $\to$ 200], \\ \phantom{\phantom{In}M}\{$\alpha$, 0, $\frac{\pi}{2}$\}]$$

    Алгебра и анализ

    Дифференцирование и интегрирование

    $$\tt In[116]:=f[x\_] := $x^2$\tt\;Sin[x] \\ \phantom{In[116]:=}D[f[x],x] \\ \phantom{In[116]:=}f'[x] \\ \phantom{In[116]:=}Integrate[f[x],x] \\ \phantom{In[116]:=}$\int$ f[x] dx \\ \phantom{In[116]:=}Integrate[$x^2$, \{x, a, b\}] \\ \phantom{In[116]:=}$\int_a^b x^2$ dx \\ \\ Out[117]=$x^2$ Cos[x]+2x Sin [x] \\ \\ Out[118]=$x^2$ Cos[x]+2x Sin [x] \\ \\ Out[119]=-(-2+$x^2$) Cos[x] + 2x Sin[x] \\ \\ Out[120]=-(-2+$x^2$) Cos[x] + 2x Sin[x] \\ \\ Out[121]=$-\frac{a^3}{3} + \frac{b^3}{3}$ \\ \\ Out[122]=$-\frac{a^3}{3} + \frac{b^3}{3}$$$

    Численное интегрирование

    $$\tt In[123]:=NIntegrate [Sin[Cos[x]], \{x,1,2\}] \\ \phantom{In[123]:=}$\int_1^2$\tt Sin[Cos[x]] dx \\ \phantom{In[123]:=}N[$\int_1^2$ Sin[Cos[x]] dx] \\ \\ Out[123]=0.652202 \\ \\ Out[124]=$\int_1^2$ Sin[Cos[x]] dx \\ \\ Out[125]=0.0652202 $$

    Замена фрагментов выражения expr по правилам rules (ReplaceAll): expr /. Rules

    Значок $$"\to"$$ получается последовательным набором - и > или с использованием палетки $$\text{BasicMathInput}$$.

    $$\tt In[126]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, у, z} /. x $\to$ b\} \\ \\ \tt Out[126]= \{Cos[b], $b^2 + z^3, y, z$\} \\ \\ In[127]:= \{Cos[x], x\^\,\!2 + x\^\,\!3, у, z\} /. Cos $\to$ Sin \\ \\ \tt Out[127]= \{Sin[x], $x^2 + z^3, y, z$\} \\ \\ In[128]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. z $\to$ \{a, b\} \\ \\ \tt Out[l28]= \{Cos[x], $\{a^3+x^2, b^3+x^2\}, y, \{a, b\}$\} \\ \\ ln[129]:= \{Cos[x], х\^\,\!2 + z\^\,\!3, у, z\} /. \{x $\to$ a, у $\to$ b\} \\ \\ \tt Out[129]= \{Cos[a], $a^2 + z^3, b, z$\} \\ \\ In[130]:= \{Cos[x], х\^\,\!2 + z\^\,\!3, у, z\} /. \{\{x $\to$ a\} , \{y $\to$ b\}\} \\ \\ \tt Out[130]= \{\{Cos[a], $a^2 + z^3, y, z$\}, \{cos[x], $x^2 + z^3, b, z$\}\} \\ \\ In[131]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. \{x $\to$ a, a $\to$ b\} \\ \\ \tt 0ut[131]= \{Cos[a], $a^2 + z^3, y, z$\} \\ \\ In[132]:= \{Cos[x], x\^\,\!2 + z\^\,\!3, y, z\} /. x $\to$ a /. a $\to$ b \\ \\ \tt Out[132]= \{Cos[b], $b^2 + z^3, y, z$\}$$

    Значок $$": \to"$$ получается последовательным набором $$\text{:}$$ и $$\text{>}$$ или с использованием палетки $$\text{BasicMathInput}$$. В отличие от $$\text{lhs} $\to$ \text{rhs}$$, которое сначала вычисляет $$\text{rhs}$$, а потом заменяет на результат вычислений все вхождения $$\text{lhs}$$, правило $$\text{lhs} $\to$ \text{rhs}$$ вычисляет $$\text{rhs}$$ отдельно для каждого вхождения $$\text{lhs}$$:

    $$\tt In[133]:={x, х, х} /. x $\to$ Random[] \\ \phantom{In[133]:=}{х, х, х} /. х :$\to$ Random[] \\ \\ Out[133]={0.209741, 0.209741, 0.209741} \\ \\ Out[134]={0.0161126, 0.191289, 0.729859}$$

    Равенства и неравенства

    Значки $$==$$, $$\geq$$ и $$\leq$$ получаются последовательным набором $$==,>=$$ и $$<=$$ соответственно или с использованием палетки $$\text{BasicMathInput}$$.

    $$\tt In[135]:=x == 2 \\ \phantom{In[135]:=}x > 3 \\ \phantom{In[135]:=}x $\geq$ 3 \\ \phantom{In[135]:=}(x $\geq$ 3 \\ x $\leq$ 6)||(x == 8) \\ \\ Out[135]=x == 2 \\ \\ Out[136]=x > 3 \\ \\ Out[137]=x $\geq$ 3 \\ \\ Out[138]=[x $\geq$ 3 \\ x $\leq$ 6) || x == 8$$

    Решение уравнений и неравенств

    $$\tt In[139]:= res=Solve[ax^2+bx+c= =0, x]}\\ \\ Out[139]=\{\{x \to \frac{-b-\sqrt{b^2-4ac}}{2a}\}, \{x \to \frac{-b+\sqrt{b^2-4ac}}{2a}\}\\ \\ In[140]:= x/.res[\![1]\!]}\\ \\ Out[140]=\frac{-b-\sqrt{b^2-4ac}}{2a}\\ \\ In[141]:= Solve[\{x^2-y-4= =0, y+3x= =2\}, \{x,y\}]}\\ \\ Out[141]=\{\{y \to \frac12 (13-3 \sqrt{33}), x \to \frac12 (-3+\sqrt{33})\},\\ \phantom{Out[141]=\{}\{y \to \frac12 (13+3 \sqrt{33}, x \to \frac12 (-3- \sqrt{33})\}\} \\ \\ In[142]:= Reduce[ax^2+bx+c==0,x]}\\ \\ Out[142]=\left( a \ne 0 \ \ \left( x==\frac{-b-\sqrt{b^2-4ac}}{2a}\|x==\frac{-b+\sqrt{b^2-4ac}}{2a} \right) \right)\|\\ \phantom{Out[142]=\left(}(a==0 \ \ b \ne 0 \ \ x==-\fraccb)\|(c==0 \ \ b==0 \ \ a==0) \\ \\ In[143]:= Reduce[-1 \le x+y \le 1 \ \ x^2+y^2==2, \{x,y\}]}\\ \\ Out[143]=(\frac12 (-1-\sqrt3) \le x \le \frac12 (1- \sqrt3) \ \ y==\sqrt{2-x^2})\|\\ \phantom{Out[143]=(}(\frac12 (-1+\sqrt3) \le x \le \frac12 (1+\sqrt3) \\ y==-\sqrt{2-x^2}) \\ \\ In[144]:= Clear[res]}\\ $$

    Решение дифференциальных уравнений

    $$\tt In[145]:=res=DSolve[x''[t]-x'[t]==2, x[t],t] \\ \\ Out[145]=\{\{x[t] $\to$ -2t + $e^t$ C[1]+C[2]\}\} \\ \\ In[146]:=f[t\_]=x[t]/.res[[1]] /. \{C[1] $\to$ 1, C[2] $\to$ 0\} \\ \\ Out[146]=$e^t$ - 2t \\ \\ In[147]:=Plot[f[t], {t, -1,1}]$$ $$\tt In[148]:= Clear[f, res]$$

    Численное решение дифференциальных уравнений

    Кроме самого уравнения, нужно задать начальные условия и область изменения переменной:

    $$\tt In[149]:=\\ \phantom{In}res=NDSolve[{x''[t]-Sin[x'[t]]==2, x[0]==1, x'[0]==2}, \\ \phantom{\phantom{In}re}x,\{t,0,1\}] \\ \\ Out[149]=\{\{x $\to$ InterpolatingFunction[\{\{0.,1.\}\}, <>]\}\} \\ \\ In[150]:=f=x /. res[\![1]\!] \\ \\ Out[150]=InterpolatingFunction[\{\{0.,1.\}\}, <>] \\ \\ In[151]:=f[0] \\ \phantom{In[151]:=}f'[0] \\ \\ Out[151]=1. \\ \\ Out[152]=2. \\ \\ In[153]:= Plot[f[s],{s,0,1}]$$ $$\tt n[154]:= Clear[res,f]$$

    Преобразование выражений, упрощение

    $$\tt In[155]:=$(x+y)^5$ \\ \\ Out[155]=$(x+y)^5$ \\ \\ In[156]:=$(x+y)^5$ //Expand \\ \\ Out[156]=$x^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$ \\ \\ In[157]:=$\frac1x + \frac{x-2}{x^2+3}$ \\ \\ Out[157]=$\frac1x +\frac{-2+x}{3+x^2}$ \\ \\ In[158]:=$\frac1x + \frac{x-2}{x^2+3}$ //Together \\ \\ Out[158]=$\frac{3-2x+2x^2}{x(3+x^2)}$ \\ \\ In[159]:=$8x^2-6x^2+x^4-2x^2y+x^3y-8y^3+6xy^3-x^2y^3+2y^4-xy^4$ // Factor \\ \\ Out[159]=$(-2+x)(-4+x+y)(x^2-y^3)$ \\ \\ In[160]:=Sin$[x]^2$+Cos$[x]^2$ \\ \\ Out[160]=Cos$[x]^2$+Sin$[x]^2$ \\ \\ In[161]:=Sin$[x]^2$+Cos$[x]^2$ //Simplify \\ \\ Out[161]=1 $$

    Программирование

    Булевы операции

  • $$\text{\tt And[]}$$, или $$\text{\tt \\}$$, или $$\wedge$$ (набрать $$\text{\fbox{Esc} \\ \fbox{Esc}}$$),
  • $$\text{\tt Or[]}$$, или $$\|$$, или $$\vee$$ (набрать $$\text{\fbox{Esc}\|\fbox{Esc}}$$),
  • $$\text{\tt Not[]}$$, или $$!$$, или $$\neg$$ (набрать $$\text{\fbox{Esc}!\fbox{Esc}}$$),
  • $$\text{\tt Equal[]}$$ или $$==$$,
  • $$Unequal[ ]$$ или $$!=$$,
  • $$\ldots$$
  • $$\text{\tt True, False}$$,
  • $$\text{\tt >, >=, <, <=.}$$
  • $$\tt In[162]:= 2 > 1 \\ $\pi$ > 3 \\ \\ Out[162]=True \\ \\ In[163]:= 1 > 2 \|\; $\pi$ > 3 \\ \\ Out[163]=True \\ \\ In[164]:= !x > 1 \\ \\ Out[164]=x $\le$ 1 \\ \\ In[164]:= 2+2==4 \\ \\ Out[165]=True \\ \\ In[166]:= 1 $\ne$ 2 \\ \\ Out[166]=True$$

    Условные операторы

    Оператор If[condition, t, f] или If[condition, t, f, u]

    Если условие дает $$\text{\tt True}$$, то выполняется часть $$\text{\tt t}$$, если условие дает $$\text{\tt False}$$, то выполняется часть $$\text{\tt f}$$, если условие не дает ни $$\text{\tt True}$$, ни $$\text{\tt False}$$, то выполняется часть $$\text{u}$$:

    $$\tt In[167]:=abs[x\_ ]:=If[x < 0, -x,x] \\ \phantom{In[167]:=}Map[abs,\{1,0,-1,y\}] \\ \\ Out[168]=\{1,0,1,If[y < 0, -y,y]\} \\ \\ In[169]:= \\ \phantom{In}abs1[x\_]:=If[x >0,-x,x,"значение не сравнимо с нулем"] \\ \phantom{In}Map[abs1,{1,0,-1,y}] \\ \\ Out[170]={1,0,1, значение сравнимо с нулем}$$

    Оператор Which[test1, value1, test2, value2, ...]

    Последовательно выполняет тесты, возвращая значение $$\text{\tt value}$$ для первого теста, дающего $$\text{\tt True}$$:

    $$\tt In[171]:= a=2; Which[a==1,x,a==2,b,a==2,c] \\ \\ Out[171]=b $$

    Присвоение при условии lhs := rhs /; test

    Присвоение происходит только в случае, если тест дает $$\text{\tt True (Condition[])}$$:

    $$\tt In[172]:=f[x\_{-}]:=$\sqrt{x}$ /;x $\ge$ 0 \\ \\ In[173]:=Map[f,{4,-4}] \\ \\ Out[173]={2,f[-4]}$$

    Операторы цикла и контроля

  • Оператор $$\text{\tt Do[expr, \{i, imax\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ между $$\text{\tt 1}$$ и $$\text{\tt imax}$$;
  • Оператор $$\text{\tt Do[expr, \{i, imin, imax, di\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ между $$\text{\tt imin}$$ и $$\text{\tt imax}$$ с шагом $$\text{\tt di}$$;
  • Оператор $$\text{\tt Do[expr, \{i, list\}]}$$ выполняет $$\text{\tt expr}$$ для всех $$\text{\tt i}$$ из списка $$\text{\tt list}$$;
  • Оператор $$\text{\tt Do[expr, \{i, \{n\}\}]}$$ выполняет $$\text{\tt expr}$$ в количестве $$\text{\tt n}$$ раз
  • В приводимом ниже примере команда $$\text{\tt Print}$$ выводит результат на экран:

    $$\tt In[174]:=Do[res=$i^2$; Print[res],\{I,3\}} \\ \\ \tt \phantom{In[174]:}1 \\ \\ \phantom{In[174]:}4 \\ \\ \phantom{In[174]:}9 \\ \\ \tt In[175]:=t=x;Do[t=1/(1+kt), \{k,2,6,2\}];t \\ \\ Out[175]=$\cfrac{1}{1+\cfrac{6}{1+\cfrac{4}{1+2x}}}$ \\ \\ In[176]:=Do[Print[$i^2$],\{i, \{3, 6, 8\}\}] \\ \\ \phantom{In[176]:}9 \\ \\ \phantom{In[176]:}36 \\ \\ \phantom{In[176]:}64 \\ \\ In[177]:=t-x;Do[t=1/(1+t),\{3\}];t \\ \\ Out[177]=$\cfrac{1}{1+\cfrac{1}{1+\cfrac{1}{1+x}}$$$

    Вложенные циклы Do[expr, i1, ..., i2, ..., ...]

    $$\tt In[178]:=Do[Print[{i,j}],{i, 4},{j, i-1}] \\ \\ \phantom{In[178]:}{2,1} \\ \\ \phantom{In[178]:}{3,1} \\ \\ \phantom{In[178]:}{3,2} \\ \\ \phantom{In[178]:}{4,1} \\ \\ \phantom{In[178]:}{4,2} \\ \\ \phantom{In[178]:}{4,3} $$

    Оператор While[test, body] выполняет body до тех пор, пока test дает True

    Здесь $$\text{\tt n++}$$ означает увеличение $$\text{\tt n}$$ на единичку; равносильно $$\text{\tt n = n + 1}$$:

    $$\tt In[179]:=n=1; m=1; While[n $\le$ 5, m=mn; n++; Print[m]] \\ \\ \phantom{In[179]}1 \\ \\ \phantom{In[179]}2 \\ \\ \phantom{In[179]}6 \\ \\ \phantom{In[179]}24 \\ \\ \phantom{In[179]}120 $$

    Оператор For[start, test, incr, body] выполняет start, затем последовательно выполняет body и incr до тех пор, пока test дает True:

    $$\tt In[180]:= For[i=1; t=x, i\^\,\!2 < 10, i++, t=t\^\,\!3+I; Print[t]]} \\ \\ \phantom{In[180]}$1+x^3$ \\ \\ \phantom{In[180]}$2+\left(1+x^3\right)^3$ \\ \\ \phantom{In[180]}$3+\left(2+\left(1+x^3\right)^3\right)^3$$$
  • $$\text{\tt Break[]}$$ выходит из ближайшего цикла;
  • $$\text{\tt Continue[]}$$ переходит к следующему шагу в текущем цикле;
  • $$\text{\tt Return[expr]}$$ возвращает значение $$\text{\tt expr}$$, выходя при этом из всех процедур и циклов функции;
  • $$\text{\tt Goto[name]}$$ переходит к элементу $$\text{\tt Label[name]}$$ в текущей процедуре (в примере оператор $$\text{\tt t *= k}$$ равносилен $$\text{\tt t = t*k}$$):
  • $$\tt In[181]:=t=1;Do[t*=k; Print[t]; If[t > 19, Break[]],{k,10}] \\ \\ \phantom{In[181]:}1 \\ \\ \phantom{In[181]:}2 \\ \\ \phantom{In[181]:}6 \\ \\ \phantom{In[181]:}24$$

    В следующем примере $$\text{\tt PrimeQ[n]}$$ дает $$\text{\tt True}$$, если $$\text{\tt n}$$ - простое число:

    $$\tt In[182]:=Do[If[!PrimeQ[k], Continue[], Print[k]],{k, 15}] \\ \\ \phantom{In[182]:}2 \\ \\ \phantom{In[182]:}3 \\ \\ \phantom{In[182]:}5 \\ \\ \phantom{In[182]:}7 \\ \\ \phantom{In[182]:}11 \\ \\ \phantom{In[182]:}13 \\ \\ In[183]:=f[x\_]:=(If[x < 0, Return[-$x^2$]]; $x^2$) \\ \phantom{In[183]:=}Plot[f[x], {x, -1,1}]$$ $$\tt In[185]:=x=2; Label[start]; Print[x];x+=2;\\ \phantom{In[185]:=}If[x < 8, Goto[start]] \\ \\ \phantom{In[185]:}2 \phantom{In[185]:}4 \phantom{In[185]:}6 In[186]:= Clear[abs, abs1,a,res,I,m,n,t,f,x]$$

    Последовательности команд. Локализация переменных

    Как при определении выражений, так и в полях, отведенных для аргументов, можно писать не одно выражение, а последовательности выражений. Ниже приведены правила написания таких последовательностей

  • Выражения последовательности разделяются точкой с запятой ";".
  • Если после последнего выражения нет ";" , то результат вычисления этого последнего выражения выводится (например, в случае, когда последовательность введена в том месте, где должен стоять аргумент, значение присваивается аргументу). Если после последнего выражения стоит ";", то результат не выводится.
  • При задании последовательности выражений, которую нужно присвоить некоторому выражению, или при задании безымянных функций эта последовательность берется в круглые скобки:
  • $$\tt In[187]:=For[ \\ \phantom{In[187]:=F}i=1; j=1, \\ \phantom{In[187]:=F}i+j $\le$ 10, \\ \phantom{In[187]:=F}i++, \\ \phantom{In[187]:=F}If[PrimeQ[i] \\ PrimeQ[j] \\ i $\le$ j, Primt[\{I,j\}]]; \\ \phantom{In[187]:=F}If[j < 9 \\ i+j==10, j++; i=1] \\ \phantom{In[187]:=}] \\ \\ \phantom{In[187]:}\{2,2\} \\ \\ \phantom{In[187]:}\{2,3\} \\ \\ \phantom{In[187]:}\{3,3\} \\ \\ \phantom{In[187]:}\{2,5\} \\ \\ \phantom{In[187]:}\{3,5\} \\ \\ \phantom{In[187]:}\{5,5\} \\ \\ \phantom{In[187]:}\{2,7\} \\ \\ \phantom{In[187]:}\{3,7\}$$ $$ In[188]:=f[y\_] := (If[y > 0, x="+"]; If[y < 0, x="\--"]; \\ \phantom{In[188]:=f[}If[y==0, x="!"];x) \\ \phantom{In[188]:=f}f[2] \\ \\ Out[189]=+ \\ \\ In[190]:=g[y\_] := (If[y > 0, x="+"]; If[y < 0, x="\--"]; \\ \phantom{In[190]:=g[}If[y==0, x="!"];x;) \\ \phantom{In[190]:=}g[2] \\ \\ In[192]:= \\ \phantom{In}Map[(If[\# > 0, x="+"]; If[\# < 0,x"\--"]; If[\#==0,x="!"]; \\ \phantom{In[192]}x)\,\{1,-1,0\}] \\ \\ Out[192]=\{+,-,!\} \\ \\ In[193]:= \\ \phantom{In}Map[(If[\#>0,x="+"]; If[\# < 0,x"\--"]; If[\#==0,x="!"]; \\ \phantom{In[193]}x;)\ \{1,-1,0\}] \\ \\ Out[193]=\{Null, Null, Null\} \\ \\ In[194]:= Clear[I,j,x,f,g]$$

    В выражении $$\text{\tt Module[x,y, ..., expr]}$$ переменные $$\text{\tt x, y, ..}$$. локальны, т. е. определены лишь внутри этой конструкции. При этом значения одноименных переменных, определенных снаружи, не используются при вычислении модуля, в то время как значения неодноименных наружных переменных используются.

    Из приведенного примера видно, что внутренняя переменная $$\text{\tt x}$$ на самом деле имеет другое имя:

    $$\tt In[195]:=x=1; \\ \phantom{In[195]:=}y=2; \\ \phantom{In[195]:=}z=3; \\ \phantom{In[195]:=}Module[{x},x] \\ \phantom{In[195]:=}Module[{x}, x=5;z=6;xy] \\ \phantom{In[195]:=}x \\ \phantom{In[195]:=}z \\ \\ Out[198]=x\$1424 \\ \\ Out[199]=10 \\ \\ Out[200]=1 \\ \\ Out[201]=6$$

    Локальным переменным можно присваивать начальные значения прямо в месте их декларации, т. е. $$\text{\tt Module[\{x = x0, y = y0, z, \ldots\}, expr]}$$ ($$\text{\tt AxesOrigin}$$ в команде $$\text{\tt Plot}$$ задает координаты точки, через которую проводятся координатные оси):

    $$\tt In[202]:=\!f[x0\_]:= \\ \phantom{In[202]:=f[}Module[\{x=x0, y=5, z\}, z=y-x; If[z \ge 0,5,x] \\ \phantom{In[202]:=f[}]; \\ \phantom{In[202]:=}Plot[f[x],\{x,0,10\}, AxesOrigin \to \{0,0\}]$$

    Выражение $$\text{\tt Block[x, y, ..., expr]}$$ вычисляется со значениями переменных $$\text{\tt x, y, ...}$$, заданных внутри блока. При этом значения одноименных переменных, определенных снаружи, используются при вычислении модуля, если они не были переопределены в блоке. Переопределенные в блоке переменные $$\text{\tt x, y, ...}$$ при выходе из блока восстанавливают свое предыдущее значение:

    $$\tt In[204]:=x=2; \\ \phantom{In[204]:=}Block[{x},x] \\ \phantom{In[204]:=}Block[{x=5},x] \\ \phantom{In[204]:=}x \\ \\ Out[205]=2 \\ \\ Out[206]=5 \\ \\ Out[207]=2 \\ \\ In[208]:= Clear[x,y,z,f]$$

    Упражнения

    Задачи взяты из книги А. С. Мищенко, Ю. П. Соловьева, А. Т. Фоменко, "Сборник задач по дифференциальной геометрии и топологии" [5].

    (2.1) Точка $$M$$ равномерно движется по прямой $$ON$$, равномерно вращающейся вокруг точки $$O$$. Составить уравнение траектории точки $$M$$ (спираль Архимеда).

    Решение. Пусть $$O$$ - начало координат. Если $$\varphi_0$$ - начальный угол между прямой $$ON$$ и положительным направлением оси абсцисс, а $$\omega$$ - угловая скорость вращения прямой $$ON$$ вокруг $$O$$, то в момент времени $$t$$ угол $$\varphi_t$$ между $$ON$$ и осью абсцисс изменяется линейно и записывается в виде

    $$\tt In[209]:= $\varphi$ [t\_]:=$\varphi$ 0+ $\omega$ t$$

    Если начальное расстояние от $$M$$ до $$O$$ равно $$r_0$$, а точка $$O$$ движется по $$ON$$ со скоростью $$v$$, то в момент времени $$t$$ расстояние $$r[t]$$ между $$M$$ и $$O$$ равно

    $$\tt In[210]:= r[t\_]:=r0+vt;$$

    Таким образом, координаты точки $$M$$ в момент времени $$t$$ равны

    $$\tt In[211]:= $\gamma$[t\_]:=r[t] \{Cos[$\varphi$[t]], Sin[$\varphi$[t]]\} \\ \\ In[212]:= $\gamma$[t] \\ \\ Out[212]=\{(r0+tv)Cos[$\varphi$0+t$\omega$], (r0+tv)Sin[$\varphi$0+t$\omega$]\}$$

    Изобразим траекторию, фиксировав некоторые значения параметров:

    $$\tt In[213]:=ParametricPlot[$\gamma$[t] /. \{$\varphi$0 $\to$ 0, r0 $\to$ 1, $\omega$ $\to$ 5, v $\to$ 1\}, \\ \phantom{In[213]:=P}\{t, 0, 10\}]$$ $$\tt In[214]: Clear[$\varphi$, $\gamma$, r]$$

    (2.19) Под каким углом пересекаются кривые $$x^2=4y$$ и $$y=\frac{8}{x^2+4}$$?

    Решение. Найдем точки пересечения кривых:

    $$\tt In[215]:=res=Solve$\left[\left\{x^{2}==4y, y== \frac{8}{x^2+4)\right\},\{x,y\}\right]$ \\ \\ Out[215]=$\left\{\left\{y \to -2, x \to -2i \sqrt{2}\right\}\right.$, \\ \\ \phantom{Out[215]= }$\left.\left\{y \to -2, x \to 2i \sqrt{2}\right\}, \{y \to 1, x \to -2\}, \{y\to 1, x\to 2\} \right\}$$$

    Так как кривые вещественные, подходят лишь третье и четвертое решения. Так как кривые инвариантны при замене $$x$$ на $$-x$$, углы пересечения в обеих точках одинаковы, поэтому достаточно вычислить угол лишь, скажем, для четвертого решения. Заметим, что обе кривые являются графиками функций параметра $$x$$, поэтому они могут быть параметризованы $$x$$. Имеем (функция $$\text{\tt Norm[v]}$$, которую мы используем ниже, равна евклидовой длине вектора $$v$$ )

    $$ \text{In[216]:=}\gamma 1[x\_]:=\left\{x, \frac{x^2}{4}\right\}; \gamma 2[x\_]:=\left\{x, \frac{8}{x^2+4}\right\};\\ \phantom{\text{In[216]:=}}v1:=\gamma 1'[x]\text{ /. res}[\![4]\!]; v2:=\gamma 2'[x]\text{ /. res}[\![4]\!];\\ \phantom{\text{In[216]:=}}\varphi=\text{ArcCos} \left[\frac{v1.v2}{\text{Norm}[v1]\text{Norm}[v2]}\right] \\ \\ \text{Out[218]=ArcCos}\left[\frac{1}{\sqrt{10}}\right] $$

    Изобразим эти кривые:

    $$ \text{In[219]:=Plot}\left[\left\{\frac{x^2}{4}, \frac{8}{x^2+4}\right\}, \{x,0,3\}\right] $$ $$\tt In[220]:=Clear[$\gamma$1, $\gamma$2, v1, v2, res, $\varphi$]$$

    (2.22) Вокруг оси $$Oz$$ вращается окружность $$x = a + b cos[v], z =b sin[v] (0 < b < a)$$. Составить уравнение поверхности вращения.

    Решение. Если точку с координатами $${a+b cos[v], 0, b sin[v]}$$ повернуть на угол $$\varphi$$ вокруг оси $$Oz$$, то у полученной точки будут координаты

    $$\tt In[221]:=r[$\varphi$\_, v\_] := \{(a+b Cos[v])Cos[$\varphi$], (a+bCos[v])Sin[$\varphi$], \\ \phantom{In[221]:=r[$\varphi$}b Sin[v]\};$$

    Нарисуем эту поверхность (являющуюся, очевидно, тором) при следующих значениях параметров: $$a = 4, b = 2$$ при изменении $$\varphi$$ и $$v$$ в пределах от 0 до $$2 \pi$$.

    $$\tt In[222]:=ParametricPlot3D[r[$\varphi$, v]/. \{a $\to$ 4, b $\to$ 2\}, \{$\varphi$, 0, 2$\pi$ \}, \\ \phantom{In[222]:=P}\{v, 0, 2 $\pi$\}]$$

    Изобразим зависимость тора от параметров (здесь $$\text{\pp \{\{aa, 4\}, 1, 6\}}$$ означает, что параметр $$aa$$ может меняться в пределах между 1 и 6, причем начальное его значение равно 4; аналогично для параметра $$bb$$ ):

    $$\tt In[223]:= \\ \\ \phantom{In}Module[\{r,a,b\}, \\ \phantom{InM}r[$\varphi$\_, v\_] := \{(a+bCos[v])Cos[$\varphi$], (a+bCos[v])Sin[$\varphi$], \\ \phantom{InMod}bSin[v]\}; \\ \phantom{InM}Manipulate[ParametricPlot3D[r[$\varphi$, v] /. \{a$\to$aa, b$\to$bb\}, \\ \phantom{InMod}\{$\varphi$, 0, 2$\pi$\}, \{v, 0, 2$\pi$\}, Mesh$\to$None, PlotPoints$\to$30, \\ \phantom{InMod}PlotRange$\to$\{\{-12,12\}, \{-12, 12\}, \{-6,6\}\}, ImageSize$\to$300], \\ \phantom{InMo}\{\{aa, 4\}1,6\}, \{\{bb,2\},1,6\}] \\ \phantom{In}]$$ $$\tt In[224]:=Clear[r]$$

    (4.1) Вычислить кривизну следующих кривых: б) $$y = a ch(x/a)$$.

    Решение 1. В качестве параметра выберем $$x$$, тогда

    $$\tt In[225]:=$\gamma$[x\_] := \{x, a Cosh$\left[\frac{x}{a}\right]$\}; $$

    Найдем натуральный параметр:

    $$ \text{In[226]:=}f[x\_]=\int \sqrt{\gamma '[x]. \gamma '[x]} dx}\\ \\ \text{Out[226]=}a \sqrt{Cosh\left[\frac xa\right]^2} Tanh\left[\frac xa\right]\\ \\ \text{In[227]:=}f[x\_]=\text{Simplify}\left[\int \sqrt{\gamma '[x].\gamma '[x]} dx\right]\\ \\ \text{Out[227]=}a\sqrt{Cosh\left[\frac xa\right]^2} Tanh\left[\frac xa\right]$$

    В качестве второго параметра команды $$\tt Simplify$$ можно указать предположения, которые помогут упростить выражение:

    $$ \text{In[228]:=}f[x\_]=\text{Simplify}\left[\int\sqrt{\gamma '[x]. \gamma '[x]} dx, \text{ Cosh}\left[\frac xa\right] \ge 0\right] \\ \\ \text{Out[228]=}a Sinh\left[\frac xa\right]$$

    Выразим $$x$$ через натуральный параметр $$s$$:

    $$\tt In[229]:=g[s\_]=InverseFunction[f][s] \\ \\ Out[229]=$f^{(-1)} [s]$$$

    Заменим параметр на натуральный:

    $$ \text{In[230]:=}\gamma 1[s\_]=\gamma [x] /. x \to g[s] \\ \\ \text{Out[230]=}\left\{f^{(-1)}[s], a Cosh\left[\frac{f^{(-1)}[s]}{a}\right]\right\} \\ \\ \text{In[231]:=}k[s\_]=\sqrt{\gamma 1''[s].\gamma 1''[s]} \text{// Simplify} \\ \\ \text{Out[231]=}\sqrt{\frac{Sech\left[\frac{f^{-1}[s]}{a}\right]^4}{a^2}}$$

    Выразим $$x$$ через натуральный параметр $$s$$ (другой способ):

    $$\tt In[232]:=res=Solve[s == f[x], x] \\ \\ \\ \phantom{In[232]}Solve::ifun: \\ \phantom{In[232]:=}Inverse functions are being used by Solve, so some solutions may not be found; \\ \phantom{In[232]:=res=S}Use Reduce for complete solution information.>> \\ \\ Out[232]=$\left\{\left\{x \to a ArcSinh\left[\frac sa\right]\right\}\right\}$ \\ \\ In[233]:= $\gamma$1[s\_]=$\gamma$[x] /. res[\![1]\!] \\ \\ Out[233]=$\{a ArcSinh[\frac sa], a \sqrt{1+\frac {s^2}{a^2}}\}$ \\ \\ In[234]:=k[s\_]=$\sqrt{\gamma 1''[s].\gamma 1''[s]$ \\ \\ Out[234]=$\sqrt{\frac{s^2}{a^4+\left(1+\frac{s^2}{a^2}\right)^3}+\left(-\frac{s^2}{a^3\left(1+\frac{s^2}{a^2}\right)^{\frac 32}}+\frac{1}{a \sqrt{1+\frac{s^2}{a^2}}}\right)^2}$ \\ \\ In[235]:= k[s\_]=Simplify$\left[\sqrt{\gamma 1''[s]. \gamma 1''[s]}\right]$ \\ \\ Out[235]=$\sqrt{\frac{a^2}{(a^2+s^2)^2}}$ \\ \\ In[236]:=k[s\_]=Simplify$\left[\sqrt{\gamma 1''[s]. \gamma1''[s]}, \left\{a>0, a^2+s^2>0\right\}\right]$ \\ \\ Out[236]=$\frac{a}{a^2+s^2}$$$

    Решение 2. Вновь в качестве параметра выберем $$x$$ и воспользуемся формулой кривизны произвольно параметризованной кривой. Имеем

    $$ \text{In[237]:=}\gamma[x\_]=\left\{x, a Cosh\left[\frac xa\right]\right\}; \\ \phantom{\text{In[237]:=}}k[x\_]=\frac{Abs[Det[\{\gamma '[x], \gamma ''[x]\}]]}{Norm[\gamma '[x]]^3} \\ \\ \text{Out[238]=}\frac{Abs\left[\frac{Cosh\left[\frac xa\right]}{a}\right]}{(1+Abs\left[Sinh\left[\frac xa\right]\right]^2\right)^{\frac 32}} \\ \\ \text{In[239]:=} \\ \phantom{In}k[x\_]=Simplify\left[Abs[Det[\{\gamma'[x], \gamma''[x]\}]]/Norm[\gamma'[x]]^3,\right.\\ \phantom{In[23}\left.\left\{Sinh\left[\frac xa\right] \ge 0, Cosh\left[\frac xa\right] \ge 0, a \ge 0\right\}\right]} \\ \\ \text{Out[239]=}\frac{Sech\left[\frac xa\right]^2}{a}$$

    Проверим, что получился тот же результат:

    $$\tt In[240]:=k[x] /. res[\![1]\!] //Simplify} \\ \\ Out[240]=$\frac{a}{a^2+s^2}$ \\ \\ In[241]:=$\gamma[x]$ \\ \\ Out[241]=$\left\{x, a Cosh\left[\frac xa\right]\right\}$$ $$\tt In[242]:= \\ \\ \phantom{In}Module[\{$\gamma$, k, a\}, \\ \\ \phantom{InM}$\gamma$[x\_] := $\left\{$x, a Cosh$\left.\left[\frac xa\right]\right\}$; k[x\_] := $\frac{\text{Sech}\left[\frac xa\right]^2}{a}$; \\ \phantom{InM}Manipulate[\{ \\ \phantom{InMMa}ParametricPlot[$\gamma$[x] /. a$\to$aa, \{ x, -1, 1\}, \\ \phantom{InMMaP}AspectRatio$\to$Automatic, Plotrange$\to$\{\{-1,1\}, \{-0.1,3.5\}\}, \\ \phantom{InMMap}ImageSize$\to$100], \\ \phantom{InMMa}Plot[k[x] /. a$\to$aa, \{x, -1, 1\}, AspectRatio$\to$Automatic, \\ \phantom{InMMap}PlotRange$\to$\{\{-1, 1\}, \{-0.1, 3.5\}\}, ImageSize$\to$100] \\ \phantom{InMM}\}, \\ \phantom{InMM}\{\{aa, 0.36\}, 0.3, 3\}] \\ \phantom{In}]$$ $$\tt In[243]:= Clear[$\gamma$, a, $\gamma$1, f, g, res, k]$$

    (4.22) Найти параметрические уравнения кривых, зная их натуральные уравнения (здесь $$R = 1/k$$ ): a) $$R = as$$.

    Решение 1. Имеем

    $$ \text{In[244]:=} k[s\_]\; :=\; \frac{1}{as}; \\ \\ \text{In[245]:=} \alpha [s\_]=\int k[s]ds}\\ \\ \text{Out[245]=} \frac{\text{Log}[s]}{a}\\ \\ \text{In[246]:=} x[s\_]=\int\text{Cos}[\alpha [s]] ds\\ \phantom{\text{In[246]:=}} y[s\_]=\int\text{Sin}[\alpha [s]] ds}\\ \\ \text{Out[246]=} \frac{as\left(a\text{Cos}\left[\frac{\text{Log} [s]}{a}\right] + \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\\ \\ \text{Out[247]=} \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\\ \\ \text{In[248]:=} \{x[s],\; y[s]\} \\ \\ \text{Out[248]=} \left\{\frac{as\left(a\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+\text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}, \; \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a\text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\right\}$$

    Изобразим полученные кривые для параметра $$s$$ в пределах от 0.1 до 20 и изучим их зависимость от параметра $$a$$, изменяющегося в пределах от 0.05 до 1 с начальным значением 0.5:

    $$ \text{In[249]:=} \\ \phantom{\text{In}}\text{Module}[\{x,y,a\}, \\ \phantom{\text{InM}}x[s\_]:=\frac{as\left(a \text{Cos} \left[ frac{\text{Log}[s]}{a}\right] + \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2};\\ \phantom{\text{InM}}y[s\_]:=\frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}; \\ \phantom{\text{InM}}\text{Manipulate}[\text{ParametricPlot}[\{x[s], y[s]\}\text{ /. } a\to aa, \\ \phantom{\text{InMMa}}\{s,0.1,20\},\text{PlotRange} \to \{\{-3, 3\}, \{-3,3\}\}, \text{ImageSize}\to 250], \\ \phantom{\text{InMM}}\{\{aa, 0.5\}, 0.05,1\}] \\ \phantom{\text{In}}]$$ $$ \text{In[250]:=Clear}[k, \alpha, x,y]\}$$

    Решение 2. Вместо явного интегрирования решим систему дифференциальных уравнений:

    $$ \text{In[251]:=} \\ \phantom{\text{In}}\text{res}=\text{DSolve}\left[\left\{\alpha'[s]==\frac{1}{as}, x'[s]==\text{Cos}[\alpha [s]], y'[s]==\text{Sin}[\alpha [s]]\right\}\right., \\ \phantom{\text{In[251]}}\left.\{\alpha [s], x[s], y[s]\}, s\right] \\ \\ \text{Out[251]=}\{\{\alpha [s] \to C[1]+\frac{\text{Log}[s]}{a},\\ \phantom{\text{Out[251]=}\{\{}x[s] \to C[2]+\frac{as\left(a \text{Cos}\left[C[1] + \frac{Log[s]}{a}\right]+\text{Sin}[C[1]+\frac{\text{Log}[s]}{a}]\right)}{1+a^2},\\ \phantom{\text{Out[251]=}\{\{}y[s] \to C[3]+\frac{as\left(-\text{Cos}\left[C[1]+\frac{\text{Log}[s]}{a}\right]+a \text{Sin}\left[C[1]+\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\}\} $$

    Задав начальные значения констант равными нулю, получим (сравните с предыдущим результатом)

    $$ \text{In[252]:=\{x[s], y[s]\} /. res[\![1]\!] /. \{C[1]}\to\text{0, C[2]} \to \text{0, C[3]} \to \text{0\} // Simplify} \\ \\ \text{Out[252]=}\left\{\frac{as\left(a \text{Cos}\left[\frac{\text{Log}[s]}{a}\right] + \text{Sin}\left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}, \frac{as\left(-\text{Cos}\left[\frac{\text{Log}[s]}{a}\right]+a \text{Sin} \left[\frac{\text{Log}[s]}{a}\right]\right)}{1+a^2}\right\}\\ \\ \text{In[253]:=Clear[k, } \alpha\text{, x, y, res]}$$

    Важное замечание. Численная реализация Решения 2 работает даже тогда, когда $$Mathematica$$ не может посчитать интегралы. Проиллюстрируем это на примере:

    $$\tt In[254]:=k[s\_]=se^s;$$

    Первый способ:

    $$\tt In[255]:=$\alpha$[s\_]=$\int$k[s] ds \\ \\ Out[255]=$e^s$ (-1+s) \\ \\ In[256]:=x[s\_]=$\int$Cos[$\alpha$[s]] ds \\ \phantom{In[256]:=}y[s\_]=$\int$Sin[$\alpha$[s]] ds \\ \\ Out[256]=$\int$Cos[$e^s$(-1+s)] ds \\ \\ Out[257]=$\int$Sin[$e^s$(-1+s)] ds \\ \\ In[258]:=ParametricPlot[\{x[s], y[s]\}, \{s, 0.1, 1\}] \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.1'.>> \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.10001836734693878'.>> \\ \\ Integrate::ilim : Invalid integration variable or limit(s) in 0.10001836734693878'.>> \\ \\ \\ \phantom{In}General::stop : Further output of Integrate::ilib will be suppressed during this calculation.>>$$ $$\tt In[259]:=Clear[k, $\alpha$, x, y]$$

    Второй способ:

    $$\tt In[260]:= \\ \\ \phantom{In}k[s\_]:=s$e^s$; \\ \phantom{In}res= \\ \phantom{Inr}NDSolve[\{$\alpha$'[s]==k[s], x'[s]==Cos[$\alpha$[s]], y'[s]==Sin[$\alpha$[s]], \\ \phantom{InrND}$\alpha$[0]==0, x[0]==0, y[0]==0\}, \{$\alpha$[s], x[s], y[s]\}, \{s,0,1\}]\} \\ \\ Out[261]=\{\{$\alpha$[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s], \\ \phantom{Out[261]=\{\{}x[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s], \\ \phantom{Out[261]=\{\{}y[s]$\to$InterpolatingFunction[\{\{0., 1.\}\}, <>][s]\}\} \\ \\ In[262]:=$\gamma$[s\_]=\{x[s], y[s]\} /. res[\![1]\!] // Simplify \\ \\ Out[262]=\{InterpolatingFunction[\{\{0., 1.\}\}<>][s], \\ \phantom{Out[262]=\{}InterpolatingFunction[\{\{0., 1.\}\},<>][s]\} \\ \\ In[263]:=ParametricPlot[$\gamma$[s], \{s, 0, 1\}]$$ $$\tt In[264]:=Clear[k, $\gamma$]$$

    Построить пространственную кривую с кривизной $$k[t] = 1 + sin[t]^2$$ и кручением $$и[t] = cos[t]$$.

    $$\tt In[265]:=\\ \\ \phantom{In}k[t\_]=1+Sin$[t]^2$; k[t\_] = Cos[t]; $\gamma$[t\_] := \{x[t], y[t], z[t]\}; \\ \phantom{In}eq[$\xi$\_, $\eta$\_]:=Table[$\xi$[\![i]\!]==$\eta$[\![i]\!], \{i,3\}]; \\ \phantom{In}v[t\_]=\{v1[t], v2[t], v3[t]\}; \\ \phantom{In}n[t\_]=\{n1[t], n2[t], n3[t]\}; \\ \phantom{In}b[t\_]=\{b1[t], b2[t], b3[t]\};\\ \\ In[269]:= \phantom{In}frenet=eq[$\gamma$'[t], v[t]]$\sim$Join$\sim$eq[v'[t], k[t]n[t]]$\sim$Join$\sim$ \\ \phantom{Infr}eq[n'[t], -k[t]v[t] + $\kappa$[t]b[t]]$\sim$Join$\sim$ eq[b'[t], -$\kappa$[t]n[t]] \\ \\$$ $$\tt Out[269]=\{x'[t] == v1[t], y'[t] == v2[t], \\ \phantom{Out[269]=\{}z'[t] == v3[t], v1'[t] == n1[t] (1+Sin[t]^{2}), \\ \tt \phantom{Out[269]=}v2'[t] == n2[t] (1+Sin[t]^{2}), v3'[t] == n3[t] (1+Sin[t]^{2}), \\ \phantom{Out[269]=}n1'[t] == b1[t] Cos[t] + (-1-Sin[t]^{2}) v1[t], \\ \phantom{Out[269]=}n2'[t] == b2[t] Cos[t] + (-1-Sin[t]^{2}) v2[t], \\ \phantom{Out[269]=}n3'[t] == b3[t] Cos[t] + (-1-Sin[t]^{2}) v3[t], \\ \phantom{Out[269]=}b1'[t] == -Cos[t] n1[t], \\ \phantom{Out[269]=}b2'[t] == -Cos[t] n2[t], b3'[t] == -Cos[t] n3[t]\} $$ $$\tt In[270]:= \\ \\ \phantom{In}res=NDSolve[frenet$\sim$Join$\sim$eq[$\gamma$[0], \{0,0,0\}]$\sim$Join$\sim$ \\ \phantom{Inres}eq[v[0], \{1,0,0\}] $\sim$Join$\sim$eq[n[0], \{0,1,0\}$\sim$Join$\sim$ \phantom{Inres}eq[b[0], \{0,0,1\}], $\gamma$[t]$\sim$Join$\sim$v[t]$\sim$Join$\sim$n[t]$\sim$Join$\sim$b[t], \\ \phantom{Inre}\{t,0,100\}] $$ $$\tt Out[270]=\{\{x[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}y[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}z[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}v3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}n3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b1[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b2[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t], \\ \phantom{Out[270]=\{\{}b3[t]$\to$InterpolatingFunction[\{\{0., 100.\}\}, <>][t]\}\} $$ $$\tt In[271]:= \\ \phantom{In[271]:=}Manipulate[ParametricPlot3D[$\gamma$[t] /. Res[\![1]\!], \{t,0,aa\}, \\ \phantom{In[271]:=Ma}PlotRange$\to$\{\{-1,1\}, \{0,2\}, \{-1,1\}\}, \\ \phantom{In[271]:=Ma}PlotPoints$\to$Round[$\frac{10}{11}$aa+$\frac{100}{11}$], ImageSize$\to$250], \\ \phantom{In[271]:=M}\{\{aa, 44\}, 1, 100\}]$$
    Вернуться к учебному плану