Записи с меткой «имеющих»

Функции компьютерной алгебры

Функции компьютерной алгебры
 
Системы компьютерной алгебры имеют несколько характерных для них функций, выполняющих достаточно сложные преобразования выражений. Эти функции имеют вполне установившиеся названия (Simplify, Expand, Collect, Factor и т. д.) и встречаются практически во всех системах символьной математики. Настало время детально познакомиться с ними, что и делается в данном разделе.
Упрощение выражений — функция Simplify
Упрощение математических выражений — одна из самых важных задач символьной математики. Частенько невероятно сложное математическое выражение, пугающее новичков своим грозным видом, является просто нулем или единицей либо сводится к простому выражению после ряда вполне заурядных (хотя, порою, и довольно сложных) преобразований. Качество выполнения операции упрощения во многом определяется мощью ядра математической системы, поскольку зависит от числа заложенных в него функций и правил преобразования выражений.
С точки зрения простоты выражений они делятся на недостаточно простые и достаточно простые выражения. Недостаточно простые выражения таят в себе всевозможные «излишества»: сокращаемые общие члены, лишние переменные и функции, полиномы со степенями, допускающими понижение, и т. д. Это затрудняет качественный анализ выражений и может даже приводить к неоднозначным и даже неверным результатам.
Mathematica всегда старается упростить то или иное выражение, если для этого не требуется каких-либо особых средств. Например, сложные выражения, содержащие элементарные или специальные функции, превращаются в более простые выражения — в том лишь смысле, что они состоят из более простых функций. далее…

Укороченная форма функций

Укороченная форма функций
Из описания указанных функций вытекает, что они наряду с полной формой могут задаваться укороченной формой.

Укороченная форма

Полная форма

f @ ехрг

f [expr]

f @@ ехрг

Apply [f, expr]

f /@ ехрг

Map[f, expr]

f //@ ехрг

MapAll [f, expr]

Смысл укороченных выражений очевиден. Приведем несколько примеров их использования.

Ввод (In)

Вывод (Out)

f@{a, b, с}

f[{a, b, c}]

f@@{a, b, c}

f [a, b, c]

f /@{a, b, c}

{f[a], f[b], f[c]}

f//@{a, b, x}

f[{f[a], f[b], f[x]}]

Укороченная форма функций может оказаться полезной для сокращения записи алгоритмов и программ.
Выделения и подстановки в функциях
Функция Slot[n], или, в укороченной форме, #n, представляет n-й аргумент функции. Это иллюстрируют следующие примеры.

Ввод (In)

Вывод (Out)

(5* Slot [1] + Slot [2] *Slot[3] A 2) &[a, b, с]

5a+bc 2

#1 A #2 S[a, b]

a b

Объект # эквивалентен #1, a #0 — заголовку абстрактной функции. Таким образом, F[#.#2]&F[a,b] эквивалентно F[a,b].
Функция SlotSequence [n], или, в укороченной форме, ##n, где п = 1, 2, …, представляет порядок применения формальных аргументов к абстрактной функции. Таким образом, объект ##n определяет последовательность аргументов, начиная с n-го.

Ввод (In)

Вывод (Out)

(Times[5, ##2] +Times[##2, ##3 A 2]) &[а, b, с]

Sbobc 3

Представленные средства обеспечивают работу с функциями на абстрактном уровне. далее…

Другие манипуляции с выражениями

Другие манипуляции с выражениями
В процессе преобразования выражений с ними возможны и иные манипуляции. Наиболее важные из них выполняются следующими функциями:

  • 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.

Следующие примеры показывают действие этих функций.

далее…