Другие манипуляции с выражениями
Другие манипуляции с выражениями
В процессе преобразования выражений с ними возможны и иные манипуляции. Наиболее важные из них выполняются следующими функциями:
- Append [expr, elem] — возвращает ехрг с дополнением elem;
- AppendTo [s, elem] — добавляет elem к значению s и присваивает s новое значение;
- Apply [f, expr, levelspec] — возвращает ехрг, замещая заголовки в тех частях ехрг, которые указаны спецификацией уровня levelspec;
- Cancel [expr] — возвращает ехрг с сокращением общих множителей числителя и знаменателя;
- Cases [expr, pattern, levelspec] — возвращает список всех частей выражения expr на уровнях, указанных спецификацией levelspec, которые соответствуют шаблону pattern;
- Chop [expr] — присваивает значение 0 тем приближенным вещественным числам в выражении expr, абсолютные величины которых меньше 10 -10 ;
- Chop [expr, tol ] — присваивает значение 0 тем приближенным вещественным числам в выражении expr, абсолютные величины которых меньше tol;
- Replace [expr, rules] — возвращает expr с подстановкой, заданной правилом или списком правил rules;
- ReplaceAll — используется в виде expr /. rules и возвращает expr с подстановками, заданными правилом или списком правил rules;
- ReplacePart [expr, new, n] — возвращает выражение, в котором п-я часть expr заменена на new;
- ReplacePart [expr, new, {i, j,…}] — заменяет на new часть в позиции {i, j,…};
- ReplacePart [expr, new, {{il, jl,…}, {i2, j 2 ,…},…}] — заменяет на new части в нескольких позициях выражения;
- ReplaceRepeated — применяется в виде expr //. rules и неоднократно выполняет замещения до тех пор, пока expr не перестанет изменяться.
Действие этих функций достаточно очевидно и поясняется следующими примерами.
Ввод (In) |
Вывод (Out) |
Append [a + с, b] |
a+ b+ с |
х = {а, b, с} |
{a, b, c} |
AppendTo [ х , 15 ] |
{a, b, c, 15} |
x |
{a, b, c, 15} |
Apply[f, а А 2 + b ^ 2, 2] |
f[a, 2] +f[b, 2] |
Cancel [(z-1) ^ 2/ (z — 1) ] |
-1 + Z |
Cases[{a, 3.5, 2, 5, "HELLO"}, _Integer] |
{2, 5} |
Exp[N[-лI]] |
-1. — 1. 22461 x 10 -16 I |
Chop[%] |
-1. |
Ехр[N[-лI]] |
-1. — 1. 22461 x10 16 I |
Chop[%, 1*10^-10] |
-1. |
Replace[s ^ 2, s ^ 2 -> a] |
a |
s^2 /. s -> a |
a 2 |
Заинтересованному в таких манипуляциях читателю рекомендуется просмотреть множество примеров, имеющихся в справочной системе Mathematica, и, разумеется, попробовать свои собственные примеры.
Контроль выражении
При создании программного обеспечения на языке Mathematica, а иногда и в ходе диалоговой работы с системой необходим контроль за некоторыми свойствами выражений. Следующие функции обеспечивают такой контроль:
- AtomQ [expr] — возвращает True, если выражение ехрг не может быть разложено на подвыражения и является атомарным, и возвращает False в противном случае;
- FreeQ [expr, form] — возвращает значение True, если в выражении ехрr отсутствует подвыражение, совпадающее с form, в противном случае возвращает False;
- FreeQ[expr, form, levelspec] — тестирует только части выражения на уровнях, указанных levelspec.
Следующие примеры показывают действие этих функций.
Ввод (In) |
Вывод (Out) |
AtomQ [{a |
False |
AtomQ[2+3/4] |
True |
AtomQ [Sin] |
True |
FreeQ[a*x^b,a] |
False |
FreeQ [ a*x ^ b+c , 1 ] |
True |
FreeQ [a*x^b+c, 1,1] |
True |
FreeQ[a*x^b+c,b,2]}] |
True |
Приложение имени функции к выражению или его части
Функции в системе Mathematica характеризуются именем (обобщенно — f) и выражением ехрг, задающим функциональную зависимость. Обычно функция в ответ на обращение к ней возвращает значение выражения — численное или символьное. Однако в системе Mathematica понятие функции значительно расширено, и она может возвращать любой объект, в том числе графический или звуковой. Можно сказать, что входной язык общения с системой Mathematica основан на принципах функционального программирования с применением полных форм представления выражений.
Следующие функции позволяют прикладывать имя функции к выражению или к частям выражения:
- Apply [f, expr] — замещает заголовок выражения ехрг на f;
- Nest [f, expr, n] — возвращает выражение, полученное и-кратным применением f к ехрг;
- Map [f, expr] — применяет f к каждому элементу на первом уровне в ехрr;
- Map[f, expr, levelspec] — применяет f к частям ехрг, указанным с помощью levelspec;
- MapAll [f, expr] — применяет f ко всем частям выражения ехрг.
Приведем примеры действия этих функций.
Ввод (In) |
Вывод (Out) |
Apply [f, {a, b, x}] |
f [a, b, x] |
Nest[f , x, 3] |
f[f[f[x]]] |
s[x_, y_, z_] := x + y + b |
|
N[Apply[s, {1, 2, a}]] |
3. + b |
Map[f, {а, Ь, с}] |
{f[a], f[b], f[c]} |
MapAll [f, a*x + b] |
f[f[b] + f[f[a] f[x]]] |
MapAll [f, {а, Ь, с}] |
f[{f[a], f[b] , f[c]}] |