Иллюстрированный самоучитель по Mathematica 3/4

Задание математических отношений

Символьные преобразования – при всей их кажущейся таинственности осуществляются по определенным, хотя и весьма многочисленным, а потому для нас запутанным, правилам. Основные из них давно известны из математики и описаны в многочисленных справочниках и монографиях. Они записаны в ядре системы и вызываются из него при создании условий, необходимых для выполнения того или иного преобразования. Если этих условий нет, исходное выражение просто повторяется. А если обнаружена явная ошибка в преобразованиях, то о ее сути выводится соответствующее сообщение. При ситуациях, лишь близких к ошибочным, выводится предупреждающее сообщение, и вычисления продолжаются.

Однако математика и использующие ее науки непрерывно развиваются. Появляются все новые и новые правила преобразований. Пользователь-математик может пожелать изменить встроенные правила преобразований – например, для создания новых разделов математики, базирующихся на каких-либо новых представлениях. Блестящий пример этого – теория относительности Эйнштейна.

Таким образом, возникает необходимость расширения математических символьных систем и обучения их новым правилам математических преобразований. Система Mathematica имеет и такие возможности. Поясним на простых примерах, как это делается.

В математике можно найти множество примеров математических отношений. Например, хорошо известно такое отношение для логарифма и экспоненциальной функции:

log(exp(x)) = x

Не обременяя себя поиском действительно новых закономерностей (порой на это может не хватить жизни, да и везет не каждому ученому), зададим приведенную закономерность для введенных по-новому функций log и ехр. Центральным моментом тут является введение новых имен функций, которые начинаются с малых букв, а не с больших, как у встроенных функций Log и Ехр. Поэтому система воспринимает log и ехр как новые функции.

Итак, вводим "новую" закономерность следующим образом:

log[exp[x_]] := x
General::spelll: Possible spelling error:
new symbol name "log" is similar to existing symbol "Log".
General::spelll: Possible spelling error:
new symbol name "exp" is similar to existing symbol "Exp".

Система на всякий случай сообщает о рискованности эксперимента – символы log и ехр похожи на зарезервированные имена функций Log и Ехр. Проигнорировав это предупреждение, проверим введенную закономерность в работе.

Ввод (In) Вывод (Out)
log [exp [15]] 15
1оg[ехр[у^2+1]] 1+y2

Итак, наша "новая" закономерность работает. Можно ввести, скажем, и такое известное отношение:

log[x_ ^ n_] := n * log[x]

Проверим, какие отношения заданы нами для функции log:

?log
Global log
log[exp[x_]] := x
log[x_n - ] := n log[x]

Проверим введенные правила, например, так:

5log[[1 + x] ^ 5]
5log[1 + x]

Рассмотрим еще пару примеров задания "новых" математических правил. В первом примере задано правило – логарифм произведения равен сумме логарифмов сомножителей:

log[x_ * y_] := log[x] + log[y]

Любопытно, что эта закономерность действует при любом числе сомножителей:

log[a * b * c * d * e]
log[a] + log[b] + log[c] + log[d] + log[e]

Второй пример иллюстрирует задание объекта, ассоциированного со списком:

a /: a[x_] + a[y_] := a[x + y]
a[x] + a[y] + a[z]
a[x + y + z]

Введенные здесь обозначения х_, у_ и n_ представляют собой образцы, на место которых могут подставляться произвольные выражения. Позже мы обсудим применение образцов более детально.

Примечание:
Описанные выше примеры наглядно демонстрируют возможности выполнения так называемого математического программирования, в основе которого лежит задание определенных математических соотношений между математическими понятиями, прежде всего такими, как функции
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.