Занятие 3 |
Присвоение |
В Mathematica, как и в традиционных языках
программирования, можно вводить переменные и присваивать им значения. Для
этого в Mathematica используются операторы:
Set (=) | - | непосредственное присвоение; |
SetDelayed (:=) | - | отложенное присвоение. |
До тех пор, пока эти операции используются лишь для
присвоения переменным каких-либо определённых значений, разницы между ними
практически нет - совершенно всё равно, выполнить присвоение a=10 или a:=10 -
результат получится одним и тем же - a приобретёт значение 10. Но если
одной переменной присваивается значение другой, то разница становится принципиальной.
Для того, чтобы пояснить эту разницу, рассмотрим следующий простой пример.
Введём переменную x и присвоим ей значение 1: |
|
Теперь введём ещё две переменные f и g, и присвоим им
значение , но для f используем непосредственное
присвоение: |
f= |
1 |
|
а для g - отложенное |
g:= |
|
Сначала это различие никак не будет проявляться -
если мы захотим узнать численное значение f и g, то получим одно
и то же значение 1: |
|
однако разница между f и g сразу же проявится,
как только мы изменим значение x: |
|
- на 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. Так, после выполнения команды |
|
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,
то получим список, состоящий из корней. |
|
К элементам списка можно обращаться по номеру, как
к элементам одномерного массива. Номер элемента записывается в двойных квадратных
скобках |
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 представляет собой формальный параметр
функции. При обращении к функции он заменяется на фактический параметр,
который может быть числом, переменной или другим выражением: |
|
Вот ещё один пример функции: |
g[3, 4] g[a + b, 2] |
|
Параметры функции могут представлять собой не только числа,
переменные или математически выражения, но, также, например, и имена других функций,
(обратите внимание, что в данном случае надо обязательно использовать отложенное
присвоение): |
|
Norm2[Sin, 0, π] Norm2[f, 0, 1] |
Упражнение 11: Введите в Mathematica формулу
Даламбера для общей задачи о колебаниях бесконечной струны:
Постройте с её помощью решение для следующих частных задач:
Представьте решения графически на интервале -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.
|
|