Задание математических отношений
Задание математических отношений
Символьные преобразования- при всей их кажущейся таинственности осуществляются по определенным, хотя и весьма многочисленным, а потому для нас запутанным, правилам. Основные из них давно известны из математики и описаны в многочисленных справочниках и монографиях. Они записаны в ядре системы и вызываются из него при создании условий, необходимых для выполнения того или иного преобразования. Если этих условий нет, исходное выражение просто повторяется. А если обнаружена явная ошибка в преобразованиях, то о ее сути выводится соответствующее сообщение. При ситуациях, лишь близких к ошибочным, выводится предупреждающее сообщение, и вычисления продолжаются.
Однако математика и использующие ее науки непрерывно развиваются. Появляются все новые и новые правила преобразований. Пользователь-математик может пожелать изменить встроенные правила преобразований — например, для создания новых разделов математики, базирующихся на каких-либо новых представлениях. Блестящий пример этого — теория относительности Эйнштейна.
Таким образом, возникает необходимость расширения математических символьных систем и обучения их новым правилам математических преобразований. Система Mathematica имеет и такие возможности. Поясним на простых примерах, как это делается.
В математике можно найти множество примеров математических отношений. Например, хорошо известно такое отношение для логарифма и экспоненциальной функции:
log(exp(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+y
2
|
Итак, наша «новая» закономерность работает. Можно ввести, скажем, и такое известное отношение:
log[x_^n_] :=n*log[x]
Проверим, какие отношения заданы нами для функции log:
?log
Global' log
log[exp[x_] ] : = x
log[x_n-] := n log[x]
Проверим введенные правила, например, так:
5lоg[[1+х]^5]
5lоg[1+х]
Рассмотрим еще пару примеров задания «новых» математических правил. В первом примере задано правило — логарифм произведения равен сумме логарифмов сомножителей:
log[x_*y_] := log[x] +log[y]
Любопытно, что эта закономерность действует при любом числе сомножителей:
log[a*b*c*d*e]
log [a] + log[b] + log[c] + log[d] + log[e]
Второй пример иллюстрирует задание объекта, ассоциированного со списком:
а /: а[х_] +а[у_] :=а[х + у]
а[х] + а[у] +a[z]
а[х+ у+ z]
Введенные здесь обозначения х_, у_ и n_ представляют собой образцы, на место которых могут подставляться произвольные выражения. Позже мы обсудим применение образцов более детально.
Содержание раздела