Записи с меткой «символьных»

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

Функции компьютерной алгебры
 
Системы компьютерной алгебры имеют несколько характерных для них функций, выполняющих достаточно сложные преобразования выражений. Эти функции имеют вполне установившиеся названия (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.

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

далее…

Основные формы записи выражений

Основные формы записи выражений
Возможны четыре основные формы записи выражений:

  • f [х, у] — стандартная форма для f [х, у];
  • f @ х — префиксная форма для f [ х ];
  • х / / f — постфиксная форма для f [ х ];
  • х ~ f ~ у — инфиксная форма для f [ х, у ].

Далее приведены примеры применения этих форм.

Ввод (In)

Вывод (Out)

F[x_] = 2*х^2

2X 2

F[a]

2a 2

a//F

2 a 2

f [x_, y_] = х^ 2 + у^2

y 2 +x 2

f[a,b]

a 2 +b 2

a-f-b

a 2 + b 2

Можно использовать ту или иную форму выражений в зависимости от класса решаемых математических задач.
Части выражений и работа с ними
Сложные выражения состоят из частей, которые могут интерпретироваться различным образом.

Тип части

Зависимость

Пример

Function

От аргументов или параметров

Ехр[х], f [х,у]

Command

От аргументов или параметров

Expand [ (х-1) ^2]

Operator

От операндов

x + y+z, a = b

Head

От элементов

{a,b,c}

Object type

От контекста

RGBColor [r,g,b]

Работа с частями выражений напоминает работу со списками. Для выделения любой заданной части выражения используются функция Part или двойные квадратные скобки;

  • Part [expr, n] или expr [ [n] ] — выделяет п-ю часть выражения, начиная с начала;
  • expr [ [-n] ] — выделяет п-ю часть выражения, начиная с конца;
  • expr [ [nl,n2,…] ] — выделяет части выражения и показывает их в форме дерева;
  • expr [[{nl, n2,…}]] — дает комбинацию нескольких частей выражения. Приведем примеры использования этих средств.

Ввод (In)

Вывод (Out)

f :=а + b*х^2 + с*х^3

 

Part[f, 3]

ex 3

Part[f, 2]

bx 2

f[[1]]

a

f[[3]]

ex 3

f[[-1]]

ex 3

Нередко выражения рассматриваются как возможные значения переменных. В этом случае используются операторы присваивания переменным заданных значений. Mathematica имеет два типа присваивания — с помощью символов «: =» и с помощью символа «=». Они различаются временем вычисления выражения, следующего за этими символами. Знак «: =» используется для задержки присваивания до вычисления правой части, например:
f[x_] := % + 2 х
Вывода здесь нет. Продолжим наш эксперимент: 1 + у^2
1 + y2
g[х_] = % + 2 х
1 + 2 х + у2
Теперь вывод есть, так как % (ссылка на предыдущий результат) определена в виде выражения 1 + у^2 и при задании [х_] использован оператор немедленного присваивания. далее…

Компьютерная алгебра

Компьютерная алгебра

  • Работа с выражениями
  • Выделения и подстановки в функциях
  • Рекурсивные функции
  • Инверсные функции
  • Задание математических отношений
  • Упрощение выражений
  • Раскрытие и расширение выражений
  • Функции преобразования тригонометрических выражений
  • Основные операции над полиномами
  • Функции для расширенных операций с выражениями

Математические выражения — основа описания алгоритмов вычислений. Фактически, вся символьная математика основана на тех или иных видах преобразований выражений. Такие преобразования и описаны в данном уроке.
Работа с выражениями
 
Одним из важнейших понятий системы Mathematica является математическое выражение, или просто выражение — ехрг (от английского слова expression). Работа с математическими выражениями в символьном виде — основа основ символьной математики.
Выражение может быть представлено в общепринятом виде (как математическая формула или ее часть) с помощью операторов, например, а* (х + у + z) или х ^ у, оно может задавать и некоторую функцию f [х, у,…] или их комбинацию. Наряду с такой формой существует так называемая полная форма представления выражений, при которой основные арифметические операции задаются не операторами, а только соответствующими функциями. Ее примеры даны ниже.

Выражение ехрг

Полная форма ехрг

Комментарий

х + у + z

Plus [х, у, z]

Сложение

х у z

Times [x, у, z]

Умножение

х^n

Power [x,n]

Возведение в степень

{a,b,c}

List [a,b, c]

Создание списка

a->b

Rule [a,b]

Подстановка

a=b

Set [a,b]

Присваивание

Для вывода выражения ехрг в полной форме используется функция FullForm [ехрг ]. Примеры перевода выражений в полную форму:
1+х^2+(у+г)^2+2
3 + х2 + (y+z)2
FullForm[%]
Plus[3, Power[x, 2], Power[Plus[у, z] , 2]]
Integrate[a*Sin[b*x]*Exp[-c*x],x]
a [(be-cxCos[bx])/{-ib + c) (ib + c)-( ce+cxSin[bx]) \(-ib + c) (ib + c) ]
FullForm[%]
Times[a, Plus[Times[-1, b, Power[Plus[Times[Complex[0, -1], b], c] , -1], Power[Plus[Times[Complex[0, 1], b], c] , -1], Power[E, Times[-l, c, x] ] , Cos[Times[b, x] ] ] , Times[-1, c, Power[Plus[Times[Complex[0, -1], b] , c], -1] , Power[Plus[Times[Complex[0, 1] , b], c] , -1] , Power[E, Times[-1, c, x] ] , Sin[Times[b, x]]]]]
Для определения типа выражения служит функция Head [ехрr ]. Применительно к числовым выражениям она возвращает тип результата, как показано в приводимых ниже примерах.

Ввод (In)

Вывод (Out)

1+2+3

6

Head[%]

Integer

Head[123/12345]

Rational

Head[2*0.25]

Real

Следующие примеры поясняют действие функции Head для символьных выражений:

  • Head[f [x,y, z] — возвращает f;
  • Head[a+b+c] — возвращает Plus;
  • Head[x ^ n] — возвращает Power;
  • Head[ {a, b, с} ] — возвращает List.

Другая пара примеров показывает применение Head в списках с разнородными выражениями:
{Head[l + 2], Head[аЬ] , Head[ 5/7], Headfl + 3i], Head[e2]}
{Integer, Times, Rational, Complex, Power}
Head/@{l, 1/3, 2.1, 2 + 3i, x, f [x] , {1, 2, 3}, a+b, a/b}
{Integer, Rational, Real, Complex, Symbol, f, List, Plus, Times}

Обратите внимание на второй пример — в нем функция Head применяется к каждому выражению списка, что дает более компактную запись.

Вставка текстовой области

Вставка текстовой области
Для вставки строки текстовой области служит операция Paragraph. Она создает строку без приглашения >, в которую можно вводить текст. Единственным отличием этой команды от команды Text является то, что она вставляет новую строку, не меняя статуса имеющихся строк. При вводе длинных текстов число строк ввода автоматически увеличивается.
Вставка кнопки секции
Команда Section служит для установки кнопки, указывающей начало секции и служащей для открытия/закрытия секции. далее…