Примеры подготовки пакетов расширений
Наиболее сложным моментом работы с системой Mathematica является разработка пакетов расширения профессионального качества. Именно такие пакеты позволяют приспособить всю мощь системы к решению тех задач, которые полезны конкретному пользователю.
Начать работу с системой можно за несколько часов. Реальное ее освоение потребует нескольких месяцев упорной работы. А подготовка серьезных пакетов, решающих достаточно сложные задачи, может занять и несколько лет. Для облегчения этого процесса рассмотрим основные приемы подготовки пакетов расширений. Напоминаем, что пакеты можно готовить как в оболочке системы (их затем следует записать на диск как файлы с расширением.т), так и с помощью.внешних текстовых редакторов.
В этом разделе представлено несколько примеров построения пакетов расширений системы Mathematica (версии не ниже 3.0), взятых из книги [34], а точнее, из примеров этой книги, включенных в справочную базу данных систем Mathematica. Из примеров удалена большая часть текстовых комментариев, сделанных на английском языке.
Пакет проверки выражений на их алгебраичность
Следующий пакет содержит определение функции AlgExpQ [expr], которая позволяет выяснить, является ли выражение ехрг алгебраическим.
(
*
:Title: AlgExp
*
)
(
*
:Context: Pro gra mminglnMathematica4AlgExp4
*
)
BeginPackage[
"ProgramminglnMathematica ' AlgExp '"
]
AlgExpQ::usage
=
"AlgExpQ[expr] returns true if expr is an algebraic expression."
Begin[
"'Private"
] SetAttributes[AlgExpQ, bistable]
AlgExpQ[_Integer]
=
True
AlgExpQ[_Rational]
=
True
AlgExpQ[c_Complex] :
=
AlgExpQ[Re[c]] && AlgExpQ[Im[c]]
AlgExpQ[_Symbol]
=
True
AlgExpQ[a_
+
b_] :
=
AlgExpQ[a] && AlgExpQ[b]
AlgExpQ[a_
*
b_] :
=
AlgExpQ[a] && AlgExpQ[b]
AlgExpQ[a_
^
b_Integer] :
=
AlgExpQ[a]
AlgExpQ[a_
^
b_Rational] :
=
AlgExpQ[a]
AlgExpQ[_]
=
False
End[]
EndPackage[]
Если выражение является алгебраическим, то функция AlgExpQ возвращает логическое значение True, иначе она возвращает значение False:
<
<
mypack\algexp.m
? AlgExpQ
AlgExpQ[expr] returns
true
if
expr is an algebraic expression.
AlgExpQ [a
*
x
^
2
+
b
*
x
+
c]
True
AlgExpQ[Sqrt[x]]
True
AlgExpQ[
"x^2+1"
]
False
AlgExpQ[
1
]
True
AlgExpQ[
1.0
]
False