Примеры подготовки пакетов расширений
Наиболее сложным моментом работы с системой 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] = TrueAlgExpQ[_Rational] = TrueAlgExpQ[c_Complex] := AlgExpQ[Re[c]] && AlgExpQ[Im[c]] AlgExpQ[_Symbol] = TrueAlgExpQ[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 trueif expr is an algebraic expression. AlgExpQ [a * x ^ 2 + b * x + c] TrueAlgExpQ[Sqrt[x]] TrueAlgExpQ["x^2+1"] FalseAlgExpQ[1] True AlgExpQ[1.0] False