Главная страница

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


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница17 из 38
1   ...   13   14   15   16   17   18   19   20   ...   38
Заголовки типов: Integer, Rational, Real, Complex, Symbol, String,
List, etc., etc.

219
Названия доменов: Integers, Reals, Complexes, Rationals, Algebra- ics, Primes, Booleans, Interval, etc.
Общие структурные манипуляции: Simplify, FullSimplify, PowerEx- pand, FunctionExpand, Refine, etc., etc., etc.
Cтруктурные операции с многочленами Collect, Expand, ComplexEx- pand, Decompose, Factor, FactorTerms, etc., etc., etc.
Cтруктурные операции с дробями: Denominator, Numerator, Together,
Apart, ExpandDenominator, ExpandNumerator, ExpandAll, Cancel, etc., etc.,
etc.
Cтруктурные операции в кольце Trig
R
тригонометрических многочле- нов: TrigExpand, TrigFactor, TrigFactorList, TrigReduce,
Изменение формата (format transcription). Многие такие функции имеют имена формата SmthToSmth, ToSmth, FromSmth. Типичными приме- рами таких функций являются TrigToExp, ExpToTrig, etc., etc.
Булевы функции (boolean functions). Будевы функции принима- ют значения в домене Booleans=
{True,False}.
Булевы константы и логические операции (связки), т.е. функции с бу- левыми аргументами и булевыми значениями: True, False, Not, And, Or,
Xor, Implies, LogicalExpand, etc.
Побитовые логические операции: BitNot, BitAnd, BitOr, BitXor.
Кванторы (quantifiers) ForAll, Exists, Resolve.
Предикаты (predicates), которые понимаются как функции одного небулева аргумента с булевыми значениями (разумеется, в математике обычно говорит о предикатах от любого числа аргументов): AtomQ, EvenQ,
IntegerQ, NameQ, NumberQ, NumericQ, OddQ, PrimeQ, StringQ, TrueQ, VectorQ.
Отношения (relations, relational operators): MemberQ, Element,
Equal, Unequal, Same, Unsame, Order, Greater, GreaterEqual, Less, Less-
Equal, etc., etc.
Числовые функции (numeric functions) предназначены как для символьных, так и для численных вычислений. Если их аргументы явля- ются символами или точными числами, они всегда пытаются возвратить точные значения. Однако если их аргументы имеют формат приближен- ных вещественных или комплексных чисел, они работают как соответству- ющие приближенные функции.
Константы E, Pi, Degree, I, GoldenRatio, Infinity, ComplexInfinity,
DirectedInfinity, Indeterminate и случайные числа Random, SeedRandom,
etc., etc., etc.
Предостережение. Тонкость, которая может показаться весьма неожиданной тем,
кто не знаком с компьютерной генерацией (псевдо)случайных чисел, состоит в том, что
Random является точной, а не приближенной функцией!!!
Это сделано для того, что- бы можно было использовать одно и то же случайное число в нескольких различных вычислениях, например в процессе тестирования программ.

220
Представление чисел: DigitCount, IntegerDigits, RealDigits, From-
Digits, MantissaExponent, ContinuedFraction, FromContinuedFraction,
etc.
Численные функции (numerical functions): Abs, Sign, Max, Min,
Round, IntegerPart, Floor, Ceiling, Rationalize, Re, Im, Arg, Conjugate.
Элементарные функции: экспонента и логарифм Exp, Log все основ- ные тригонометрические Cos, Sin, Tan, Cot, обратные тригонометрические,
гиперболические и обратные гиперболические функции.
Специальные функции: в ядре Mathematica и пакетах содержатся определения сотен специальных функций таких, как гипергеометрические и связанные с ними функции, функции Бесселя, ортогональные многочле- ны, интегральные косинус и синус, эллиптические функции и интегралы,
функции Матье, etc., etc., etc., etc., etc., etc. Мы не будем даже пытаться перечислять или описывать эти функции, так как обращение к ним ясно само по себе.
Комбинаторные функции: Factorial, Binomial, Multinomial, Fibo- nacci, BernoulliB, StirlingS1, StirlingS2, PartitionsP, PartitionsQ,
Signature, etc., etc., etc., etc.
Арифметика целых чисел: FactorInteger, IntegerExponent, Mod, Quo- tient, PowerMod, Prime, PrimeQ, GCD, LCM, ExtendedGCD, etc., etc.
Теоретико-числовые функции: EulerPhi, MoebiusMu, PrimePi, Divi- sors, DivisorSigma, JacobiSymbol, CarmichaelLambda, etc., etc., etc.
Приближенные функции (approximate functions) предназначе- ны для численных, а не символьных вычислений. В отличие от числовых функций приближенные функции заведомо используют приближенные ал- горитмы и даже для точных данных никогда не пытаются вычислить точ- ные значения. Название многих приближенных функций начинается с N.
Приближенные вычисления (numerical calculation) и численное ре- шение уравнений (numerical equation solving): N, Chop, NSolve, NRoots,
FindRoot, NSum, NProduct, NIntegrate, NDSolve, etc., etc., etc.
Функции интерполяции (interpolation): Fit, FindFit, Interpola- tion, InterpolatingFunction, ListInterpolation, FunctionInterpola- tion, etc.
Функции численной оптимизации (numerical optimization): NMaxi- mize, NMinimize, FindMaximum, FindMinimum, etc., etc., etc.
Функции статистической обработки (data manipulation functions)
вычисляют все обычные параметры выборок, рассматриваемые в теории вероятностей и математической статистике: Mean, Median, Variance, Quan- tile, StandardDeviation, etc., etc., etc.
Численная обработка списков: Fourier, InverseFourier, ListConvol- ve, ListCorrelate, etc.

221
Функции управления точностью (numerical preсision functions).
Многие из этих функций сами являются точными, но они служат для кон- троля ошибок приближенных вычислений и поэтому включаются в эту ка- тегорию: Precision, Accuracy, SetPrecision, SetAccuracy, PrecisionGo- al, AccuracyGoal, etc., etc., etc.
Команды работы со списками (list and matrix manipulation).
Наиболее характерный для языка Mathematica класс функций. Мы счита- ем, что этот класс относится непосредственно к языку и детально обсуж- даем его в дальнейшем. Кроме того, сюда относятся команды построения таблиц и массивов, операции над векторами и матрицами и другие функ- ции линейной алгебры, а также операции над разреженными векторами и матрицами.
Выделение частей списка Part, Extract.
Вычеркивания Take, Drop, First, Last, Most, Rest, Delete.
Вставки и замены: Insert, ReplacePart, Append, AppendTo, Prepend,
PrependTo.
Выборки: Select, Cases, DeleteCases, Count, Position.
Сортировка списков: Sort, Order, Ordering, OrderedQ, Permutations,
Signature, etc.
Структурные манипуляции со списками Join, Flatten, Partition,
Split, Reverse, RotateLeft, RotateRight, PadLeft, PadRight.
Команды формирования списков: Range, Table, Array.
Команды работы с разреженными списками: SparseArray, Normal, Ar- rayRules, etc.
Форматирующие функции ColumnForm, TableForm, MatrixForm, etc.,
etc.
Теоретико-множественные операции: Union, Intersection, Comple- ment, etc.
Операции над векторами: Dot, Cross, Inner, Outer, Total, etc.
Функции линейной алгебры: LinearSolve, NullSpace, LinearProgram- ming, LatticeReduce, Eigenvalues, Eigenvectors, Eigensystem etc., etc.,
etc.
Матричные функции: Dot, Det, Minors, Tr, Transpose, MatrixPower,
MatrixExp, MatrixRank, etc., etc., etc.
Процедурное программирование (flow control, procedural prog- ramming). Язык Mathematica полностью поддерживает все стили програм- мирования, среди прочего в ней есть все обычные операторы традиционных языков программирования:
Присваивание и чистка (assignements): Set, SetDelayed, Unset, Clear,
ClearAll, Remove, etc.
Подстановки и замены (replacement rules and replacements): Rule,
RuleDelayed, Replace, ReplaceAll, ReplaceRepeated, ReplaceList, etc.

222
Маркировки (tags): TagSet, TagSetDelayed, TagUnset, etc.
Команды организации циклов: Do, For, While, etc.
Управляющие структуры (control structures): GoTo, Label, Conti- nue, Break, etc.
Конструкции локализации переменных (scoping constructs): Block,
Module, With, Begin, End, etc.
Условные операторы (conditionals): If, Which, Switch, etc.
Удерживающие функции (holding functions): Hold, HoldAll, Hold
Form, HoldComplete, HoldFirst, HoldRest, HoldPattern, etc.
Вбрасывающие функции: Return, Throw, Catch, Sow, Reap, etc.
Функциональное программирование (functional programming).
Значительно более характерным для языка Mathematica является функ- циональное программирование, которое приводит к более простым и более эффективным программам. Так как большинство этих конструкций явля- ются специфическими для языка Mathematica и либо отсутствуют в других языках программирования, либо присутствуют там в рудиментарном виде и под другими именами, то в дальнейшем мы все их детально обсуждаем.
Чистые функции (pure functions): Function, Slot, SlotSequence,
etc.
Паттерны (pattern): Pattern, Blank, BlankSequence, BlankNullSe- quence, Condition, Count, etc.
Композиции: Composition, InverseFunction, Identity, ComposeList,
etc.
Итерации: Nest, NestList, FixedPoint, FixedPointList, NestWhile,
NestWhileList, Fold, FoldList, etc.
Применение функций к спискам: Apply, Map, MapAt, MapAll, MapThread,
MapIndexed, Scan, etc.
Протаскивание и распределение действия функций: Thread, Through,
Operate, Inner, Outer, Distribute, etc.
Генерация и форматирование графики и звука. Эти важнейшие функции имеют настолько развитую и сложную систему опций, что мы не будем даже пытаться описать или перечислить эти опции здесь. Кроме того, в ядре и, в особенности, в пакетах определено громадное количе- ство графических элементов возникающих в геометрии, комбинаторике,
теории графов и т.д.
Двумерная графика: Plot, ListPlot, ParametricPlot, etc., etc., etc.
Трехмерная графика: Plot3D, ListPlot3D, ParametricPlot3D, etc.,
etc., etc.
Другие графические форматы: ContourPlot, ListContourPlot, Densi- tyPlot, ListDensityPlot, etc., etc., etc.

223
Графические примитивы: Show, Graphics, Point, Line, Rectangle,
Polygon, Circle, Disk, etc., etc., etc.
Мультипликация: Animate, ShowAnimation, MoviePlot, MoviePlot3D,
etc., etc.
Генерация звука: Play, ListPlay, etc., etc.
Кроме того, в ядре системы Mathematica имплементированы многие сотни (а вместе с пакетами — многие тысячи) других функций, кото- рые либо относятся к специальным предметным областям, либо управляют не работой ядра системы, а, скорее, его взаимодействием с внешним ми- ром (FrontEnd, системой, другими программами, файловой структурой и т.д.) В настоящем тексте мы практически не обсуждаем следующие типы команд, за исключением нескольких абсолютно необходимых:
системные команды;
команды ввода–вывода;
команды работы с файлами;
команды управления ядром;
команды управления записными книжками;
команды редактирования текста;
команды взаимодействия с другими программами (MathLink).
По нашему мнению, только овладев в достаточной степени внутренними ко- мандами, относящимися собственно к языку, пользователь может начинать интересоваться значительно более сложными экстралингвистическими фе- номенами.
§ 4. Функции нескольких аргументов
В этом параграфе мы обсудим, в чем с точки зрения языка Mathema- tica состоит различие между f[x,y], f[x][y] и f[
{x,y}]. Небрежность в формате задания аргументов функций является еще одной типичнейшей причиной ошибок программирования. Дополнительный нюанс здесь состо- ит в том, что, как мы увидим в следующих параграфах, многие функции в Mathematica могут вызываться с различным количеством аргументов. В
этом месте чрезвычайно важно понять извращенную логику программи- стов, которая состоит в том, что функция определяется только тем, что она делает, а с кем она это делает — не имеет никакого значения.
Как всегда, мы начинаем с напоминания того, что понимается под функ- цией нескольких аргументов в математике. Как обычно, рассмотрим отоб- ражение f : X
−→ Y . Предположим, что X ⊆ X
1
× . . . × X
n
. В этом случае значение f ((x
1
, . . . , x
n
)) отображения f на n-ке (x
1
, . . . , x
n
) обычно обозначается просто через f (x
1
, . . . , x
n
), а f рассматривается как функ- ция n аргументов — или, как принято говорить в анализе, функция n
переменных, хотя где здесь переменные и кто они такие, никто не знает.

224
Та операция стирания скобок, которую мы только что произвели, яв- ляется абсолютно недопустимой с точки зрения языка Mathematica. Дело в том, что теперь аргументами всех функций являются выражения. А с этой точки зрения у функции f , значения которой записываются в формате f[x1,...,xn], имеется n различных аргументов x
1
, . . . , x
n
, а вот у функции
f , запись значений которой имеет формат f[
{x1,...,xn}], — всего один,
а именно список (x
1
, . . . , x
n
)!!! Иными словами, теперь стирание второй пары скобок в выражении f ((x, y))
является грубейшей синтаксиче- ской ошибкой, которая, как правилов, приводит к тому, что система отказывается вычислять значение функции f , либо вычисляет совсем не то, что изначально имелось в виду. Иными словами, в языке Mathematica необходимо тщательнейшим образом различать следующие два понятия:
список аргументов (x
1
, . . . , x
n
), который записывается в Mathema- tica как
{x1,...,xn} или, в полной форме, List[x1,...,xn];
последовательность аргументов x
1
, . . . , x
n
, которая записывается в Mathematica как x1,...,xn или, в полной форме, Sequence[x1,...,xn].
Как и для функций одной переменной основной формой представле- ния функций нескольких переменных считается функциональная за- пись, при которой значение функции f на последовательности аргумен- тов x
1
, . . . , x
n
обозначается через f[x1,...,xn]. Однако, кроме того, в
InputForm для этого образа существуют еще префиксная операторная запись f@@x, при помощи оператора @@ называемого Apply. Для выраже- ния значения f[x,y] функции двух аргументов, кроме того, используется инфиксная операторная запись x
fy. Иначе говоря, образ f(x, y)
можно ввести одним из трех следующих эквивалентных способов. Кро- ме того, в иллюстративных целях мы указываем еще и что происходит со списком
{x1,...,xn} под действием рассмотренного нами в § 1 оператора @
Composition и под действием оператора /@ Map. Видно, что эти операторы применяются к функциям одного аргумента и дают результаты радикально отличающиеся от f (x, y).
f[x,y]
функциональная запись f (x, y)
x
f y инфиксная операторная запись f(x, y)
f @@
{x,y}
префиксная операторная запись f (x, y)
f @
{x,y}
префиксная операторная запись f ((x, y))
f /@
{x,y}
префиксная операторная запись (f (x), f (y))
Таким образом, оператор @ Composition применяет функцию f к списку
x с компонентами x
1
, . . . , x
n
, в то время как оператор @@ Apply применяет функцию f к последовательности элементов x
1
, . . . , x
n
— п(р)очувст- вуйте разницу!!! Наконец, оператор /@ Map применяет функцию f к каж- дой компоненте списка x.
Дополнительные переливы смысла появляются вследствие того, что мно- гие функции могут вызываться с различным числом аргументов — даже если забыть про параметры!!! Скажем, операции Plus, Times, And, Or и

225
другие ассоциативные алгебраические операции могут вызываться с лю- бым количеством аргументов. При этом f(x) истолковывается как
x, f (x, y) имеет обычные значения, f (x, y, z) истолковывается индуктивно как f (f (x, y), z) и т.д. Это значит, что напечатав, например, Plus[x,y] или,
что то же самое, x
Plusy или, что то же самое, Plus@@{x,y}, мы вы- звали операцию сложения с двумя аргументами, что естественно, даст нам обычный результат x+y. В то же время, напечатав Plus[
{x,y}] или, что то же самое, Plus@
{x,y} мы вызвали эту функцию с одним аргументом и ответом будет
{x,y}, скорее всего, не совсем то, что имелось в виду.
Еще один способ задания функций нескольких переменных состоит в рассмотрении парциальных функций. Пусть, скажем, f : X
× Y −→ Z
функция двух аргументов. Тогда:
Зафиксировав x ∈ X мы получим функцию f(x, ∗) : Y −→ Z одного аргумента. Ясно, что функция f полностью определяется сопоставлением каждому x
∈ X соответствующей парциальной функции f(x, ∗).
Зафиксировав y ∈ Y мы получим функцию f(∗, y) : X −→ Z одного аргумента. Ясно, что функция f полностью определяется сопоставлением каждому y
∈ Y соответствующей парциальной функции f(∗, y).
В языке Mathematica мы выразили бы эти сопоставления с помощью понятия чистой/анонимной функции следующим образом. Парциальная функция f (x,
) записывается как Function[y,f[x,y]] или f[x,#]@. Точно так же парциальная функция f (
∗, y) записывается как Function[x,f[x,y]]
или f[#,y]@.
Математики имеют обыкновение резюмировать только что сказанное следующей строкой канонических изоморфизмов:
Map(
1   ...   13   14   15   16   17   18   19   20   ...   38


написать администратору сайта