Занятие 3
Присвоение
В Mathematica, как и в традиционных языках программирования, можно вводить переменные и присваивать им значения. Для этого в Mathematica используются операторы:
Set (=)-непосредственное присвоение;
SetDelayed (:=)-отложенное присвоение.


До тех пор, пока эти операции используются лишь для присвоения переменным каких-либо определённых значений, разницы между ними практически нет - совершенно всё равно, выполнить присвоение a=10 или a:=10 - результат получится одним и тем же - a приобретёт значение 10. Но если одной переменной присваивается значение другой, то разница становится принципиальной. Для того, чтобы пояснить эту разницу, рассмотрим следующий простой пример.

Введём переменную x и присвоим ей значение 1:
x = 1
1
Теперь введём ещё две переменные f и g, и присвоим им значение , но для f используем непосредственное присвоение:
f=
1
а для g - отложенное
g:=
Сначала это различие никак не будет проявляться - если мы захотим узнать численное значение f и g, то получим одно и то же значение 1:
f
g
1
1
однако разница между f и g сразу же проявится, как только мы изменим значение x:
x = 2;
f
g
1
4
- на f изменение значения x никак не повлияло, оно при присвоении приняло значение 1 и так и осталось, но g изменилось и соответствует теперь уже изменённому значению x.

Таким образом, различие между непосредственным и отложенным присвоениями состоит в следующем: при непосредственном присвоении значение вычисляется в момент присвоения и записывается в переменную, а при отложеном - новая переменная привязывается к старой, и её значение вычисляется при использовании

Особенно наглядным это различие становится, если построить графики f и g в зависимости о x:
Plot[f, {x, 0, 1}]
- Graphics -
- можно видеть, что f не меняется при изменении x, т.е. остаётся равным своему исходному значению 1, тогда как для g получаем:
Plot[g, {x, 0, 1}]
- Graphics -
т. е. для каждой точки графика значение g = вычисляется заново, в соответствии с текущим значением x.

Для того, чтобы отменить присвоения, выполненные для какой-либо переменной, следует выполнить для неё операцию Clear. Так, после выполнения команды
Clear[x, f, g]
x, f и g снова становятся просто буквенными символами, никак не связанными друг с другом
x
f
g
x
f
g
Подстановки
Присвоение, выполненное для какой-нибудь переменной с помощью операций "=" и ":=" действует вплоть до окончания текущей сессии работы с Mathematica, только если не отменяется ещё до этого ещё каким-либо другим способом, например, присвоением или командой Clear. Помимо таких присвоений, называемых ещё глобальными подстановками, в Mathematica есть ещё так называемые локальные подстановки, (или просто подстановки, Rules), которые действуют в пределах лишь одного выражения. Так же как и присвоение, подстановка может быть
непосредственнойRule()
отложенной:RuleDelayed(:>)


Чтобы выполнить некоторую подстановку xy во всех частях какого-либо выражения expr, следует применить к нему функцию ReplaceAll:
RepalceAll[expr, xy] или expr /. xy
Например:
x + y /. x 1
2 x
К одному выражению можно применить сразу несколько подстановок. В этом случае они должны быть представлены в виде списк (List), т. е. перечня в фигурных скобках, элементы которого разделены запятыми:
x + y /. {x 1, y 2}
3
Если подстановки собраны в несколько групп, образующих вложенный список (Nested List), то выражение будет вычислено по отдельности для каждой группы подстановок и результаты будут выведены в форме простого списка:
x + y /. {{x 1, y 2}, {x 10, y 20}}
n! /. {{n 1}, {n 2}, {n 3}}
{3, 30}
{1, 2, 6}
Многие команды Mathematica представляют результат своей работы в форме такого вложенного списка подстановок, например, уже известная вам команда Solve
;
rulelist:=Solve[p == 0, x]
Если теперь применить список подстановок rulelist к исходному выражению p, то получим список, состоящий из нулей, поскольку каждая из подстановок придаёт x значение одного из корней уравнения p==0. Такая операция позволяет легко проверять правильность найденных корней
f = p /. rulelist
Simplify[f]
Если же применить rulelist к самой переменной x, то получим список, состоящий из корней.
rootlist = x /. rulelist
К элементам списка можно обращаться по номеру, как к элементам одномерного массива. Номер элемента записывается в двойных квадратных скобках
root1 = rootlist[[1]]
root2 = rootlist[[2]]
Clear[x,f,p,rulelist,rootlist,root1,root2]
Упражнение 10:
Ознакомбтесь с командой численного решения полиномиальных уравнений NSolve. Найдите с её помощью все корни уравнения
Используя операции с подстановками и списками, как показано выше, выполните следующие операции:
a) Оцение точность решения путём постановки в исходное уравнение;
b) Введите переменные root1, root2, ... и присвойте им значения корней.
Функции пользователя
Как вы уже могли видеть, Mathematica предоставляет пользователю очень большой набор готовых ыункций. Эти функции называются встроенными (built-in functions). Но в дополнение к этому Mathematica даёт пользователю возможность создавать свои функции, называемые внешними или позьзовательскими.

Один из способов задания функции пользователем можно в облем виде представить следующим образом:
  Name[parameter1_, parameter2_, ...]=expression,
или
  Name[parameter1_, parameter2_, ...]:=expression,
т.е. после имени функции в квадратных скобках через запятую перечисляются её формальные параметры, т.е. аргументы, от которых она зависит, причём после каждого параметра ставится знак подчёркивания "_"; затем идёт знак непосредственногоъ или отложенного присвоения ("=" или ":="), и выражение, соответствующее данной функции; это выражение должно зависеть от указанных формальных параметров, причём эти параметры пишутся уже после знака подчёркивания.
Например:
f[x_]=
Здесь x представляет собой формальный параметр функции. При обращении к функции он заменяется на фактический параметр, который может быть числом, переменной или другим выражением:
f[-1/3]
f[0.1]
f[a]
f[a+b]
Вот ещё один пример функции:

g[3, 4]
g[a + b, 2]
Параметры функции могут представлять собой не только числа, переменные или математически выражения, но, также, например, и имена других функций, (обратите внимание, что в данном случае надо обязательно использовать отложенное присвоение):
Norm2[Sin, 0, π]
Norm2[f, 0, 1]
Упражнение 11: Введите в Mathematica формулу Даламбера для общей задачи о колебаниях бесконечной струны:

Постройте с её помощью решение для следующих частных задач:
a)
b)
c)

Представьте решения графически на интервале -10 < x < 10 для t = 0.1; 1; 10, а также в виде трёхмерного графика на области -2 < x < 2, 0 < t < 2.
В Mathematica можно создавать, в частности, и составные функции, то есть такие, которые в разных областях значения аргумента задаются разныи выражениями. Для этого нужно использовать операцию Conditon (записывается как /;), и обязательно использовать для функции отложенное присвоение:
y[x_]:=x/; x≥0
y[x_]:=0/; x<0
y[2]
y[-2]
Plot[y[x], {x, -1, 1}, PlotStyle RGBColor[1, 0, 0]]
Упражнение 12: Постройте в Mathematica общее решение задачи о колебаниях полубесконечной струны:

Постройте с её помощью решение для следующей частной задачи:
a)

Представьте решение графически, как в предыдущем упражнении:
в виде двумерного графика для 0 < x < 10, при t = 0.1; 0.5; 1;
в виде трёхмерного графика для 0 < x < 10, 0 < t < 1.

На главную страницу - Предыдущее - Следующее - Скачать (9930 байт)
Сайт по математической физике Webmaster: Μερλιν
Все вопросы и предолжения просим направлять сюда.
(C) 2001 Никита Киприянов, Дмитрий Дорофеев

Используются технологии uCoz