Опубликован: 27.12.2010 | Уровень: специалист | Доступ: платный
Лекция 1:

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

Лекция 1: 123456789 || Лекция 2 >
Выражения 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 \}
Лекция 1: 123456789 || Лекция 2 >
Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары