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

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


Скачать 4.43 Mb.
НазваниеНастоящий учебник посвящен системе Mathematica прикладному пакету компьютерной алгебры, при помощи которого можно решать любые задачи, в которых в той или иной форме встречается математика
АнкорМатематика
Дата11.05.2022
Размер4.43 Mb.
Формат файлаpdf
Имя файла106-108.pdf
ТипУчебник
#521834
страница16 из 38
1   ...   12   13   14   15   16   17   18   19   ...   38
§ 1. Функциональная и операторная запись функций
Для каждой функции дается: 1) краткое изложение ее сущности,
2) сокращенное определение одним словом, 3) условный знак ее.
(Введение знаков позволит впоследствии сравнить построение ска- зок схематически). Вслед за этим следуют примеры. Примеры большей частью далеко не исчерпывают нашего материала. Они даны лишь как образцы.
В.Я.Пропп, Морфология волшебной сказки
В обычном математическом словоупотреблении, по крайней мере в боль- шинстве элементарных учебных текстов, слово функция используется как синоним термина отображение. Иными словами, считается, что функция
F задается тройкой F = (X, Y, f ) или, в обычных обозначениях f : X
−→
Y . При этом X является областью определения функции F , Y — об- ластью значений, а f состоит в сопоставлении каждому элемента x
множества X единственного элемента y множества Y , обозначаемого f (x)
и называемого образом элемента x под действием f . Для обозначения то- го, что x переходит в y под действием f , используется специальная стрелка
x
7→ f(x). Запись образа x под действием f как f(x) c явным заключением аргумента в скобки называется функциональной, кроме нее для образа
x под действием f часто употребляются операторные записи f x и xf ,
индексная запись f
x
и некоторые другие более специальные нотации, ис- пользующие особые символы, указывающие на применение функции, под- черкивающие симметрию между функцией и аргументом, etc. Например, в теории групп и теории Галуа чрезвычайно часто используется экспонен- циальная запись x
f
, в линейной алгебре и функциональном анализе —
копуляционная запись
hf, xi и т.д.
До Кантора, Дедекинда и Пеано считалось, что функция задается фор- мулой или законом, но начиная с конца XIX века надолго восторжество- вала чисто экстенсиональная точка зрения, согласно которой f отождеств- ляется с графиком Γ(f ) =
{(x, f(x)) | x ∈ X}. Как правило в математи- ческих текстах допускается вольность речи, состоящая в обозначении F и
f одной и той же буквой: функция f . Тем не менее, математики твердо придерживаются того принципа, что область определения и область значений входят в определение функции. Иными словами, для того,
чтобы две функции f : X
−→ Y и g : U −→ V были равны, необходимо,
чтобы X = U , Y = V и f (x) = g(x) для всех x
∈ X. Мы не обсуждаем здесь абсурдную методистскую терминологию, при которой областью значений функции называется ее образ f (X) =
{f(x) | x ∈ X}. Множество всех отображений из X в Y обычно обозначается через Map(X, Y ) или Y
X
Однако даже в самой математике в некоторых случаях удобно исклю- чить область значений из определения функции. Получающийся при этом объект называется семейством. Иными словами, для того, чтобы два се- мейства f : X
−→ Y и g : U −→ V были равны, необходимо, чтобы X = U
и f (x) = g(x) для всех x
∈ X. В этом случае, конечно, f(x) = g(x) ∈ Y ∩ V ,
но не утверждается, что Y = V . Таким образом, семейство представляется

214
функцией, но является не функцией, а классом эквивалентности функций относительно отношения эквивалентности, забывающего область значений.
В упомянутом выше школьном понимании функция определяется именно как семейство! Для семейств в математике обычно используется индексная запись, аргументы называются индексами, а образ x под действием f обо- значается через f
x
или f
x
, или еще как-нибудь в таком духе. Семействами являются векторы, матрицы и много других важнейших объектов.
Компьютерная алгебра делает следующий шаг в том же направлении и исключает из понятия равенства функций не только область значений, но и область определения. Вернее, наподобие того, как это делается в школьной математике для вещественных функций, системы компьютерной алгебры считают, что у каждой функции имеется естественная область опре- деления, а именно множество всех выражений, для которых имеют смысл все функции, которые входят в определение функции f , определения всех фигурирующих в ее определении функций, etc. Иными словами, функция понимается как правило, алгоритм или инструкция, которая перерабаты- вает ввод в вывод, а откуда именно берется ввод, не конкретизируется. Две функции считаются равными, если они всегда перерабатывают один и тот же вход в один и тот же выход.
Комментарий. Разумеется, такая установка становится возможной только потому,
что Computer Science имеет дело исключительно с конечными объектами. В контексте бесконечных множеств подобная точка зрения невозможна просто по той причине, что совокупность всех объектов, над которыми можно произвести какую-то операцию, как правило, не является множеством. Тем самым, попытка сравнивать функции игнори- руя их область определения сразу порождает словесные артефакты и языковые ошибки известные как “теоретико-множественные парадоксы”.
В языке Mathematica основной формой представления функций во всех случаях считается функциональная запись. При этом образ элемен- та x под действием функции f обозначается через f[x]. Однако, кроме того, в InputForm для этого образа существуют еще и две операторных записи, префиксная f@x и постфиксная x//f. В дальнейшем мы узнаем,
что к тому же образу можно обратиться, вызывая его через конструкции чистой/анонимной функции. Разумеется, для случая, когда у исполь- зуемой функции уже есть имя — здесь, например, это имя "f" — эти кон- струкции не только не содержат ничего нового, но и являются более гро- моздкими, чем описанные ранее. Однако позже мы увидим, что они дают нам инструмент поразительной силы, позволяющий обращаться по име- ни к любой функции, не давая ей имени!!! Иначе говоря, образ f(x)
можно ввести одним из пяти следующих эквивалентных способов:
f[x]
функциональная запись f (x)
f @ x префиксная операторная запись f (x)
x // f постфиксная операторная запись f (x)
Function[z,f[z]][x]
запись f (x) как значения чистой функции f[#]&[x]
запись f (x) как значения анонимной функции

215
Следует иметь в виду, что с внутренней точки зрения операторные запи- си функций являются чисто лингвистическими конструкциями, идиомами используемыми в качестве сокращений функциональной записи, которая является единственной внутренней формой:
Sin[x]===Sin@x===(x//Sin)===Function[z,Sin[z]][x]===Sin[#]&[x].
В этой формуле сразу бросается в глаза то, что (x // Sin) заключено в скобки, а Sin @ x — нет. Это связано со следующим:
Постфиксная форма // имеет весьма низкий приоритет, более низкий, чем все арифметические и логические операции. В большинстве случаев функция, примененная при помощи // будет применяться ко всему выражению в целом. Например, x+y//f интерпретируется как f[x+y], а не x+f[y]. Для того, чтобы получить x+f[y], нужно напечатать x+(y//f).
Префиксная форма @ имеет чрезвычайно высокий приоритет,
более высокий, чем все арифметические операции и большинство других операций. Как правило функция f примененная при помощи @ будет при- меняться к первому символу, а не ко всему выражению в целом. Так, на- пример, f@x*y будет интерпретировано как f[x]*y, а вовсе не как f[x*y].
Для того, чтобы получить f[x*y], нужно напечатать f@(x*y).
Низкий приоритет постфиксной операторной формы задания функции яв- ляется ее достоинством, а не недостатком. Мы, например, часто пользуемся постфиксной формой для просмотра или форматирования вывода. Дело в том, что напечатав в конце ввода // MatrixForm, // TableForm, или что- нибудь в таком духе, Вы можете post factum применить эти команды ко всему предшествующему вводу, без необходимости возвращаться к его на- чалу и ставить скобки. В то же время, за исключением обозначения ком- позиции, где она действительно чрезвычайно полезна, префиксная форма
@ используется только в некоторых очень специальных ситуациях.
Пояснение. Высокий приоритет @ связан с тем, что его использование в указанном смысле вторично. Основное значение этого оператора состоит в том, чтобы служить в качестве сокращения для композиции функций Composition.
А именно, функ- ция Composition[f,g] представляет собой композицию функций f
◦ g. По определению
(f
◦g)(x) = f(g(x)) — читается образ x под действием композиции функций g и f, именно в таком порядке!!!. Полная запись значения (f
◦g)(x) с использованием функции Compo- sition должна выглядеть следующим образом: Composition[f,g][x]. Ясно, однако, что это все равно будет переработано во внутреннию форму f[g[x]] и поэтому продвинутые пользователи пишут просто f@g@x, без всяких там скобок. С другой стороны, операция
ассоциативна и обладает тем свойством, что композиция одной функции есть сама эта функция. Иными словами, Composition обладает атрибутами Flat и OneIdentity. В
частности, это значит, что значение f (x) можно записать еще и так : Composition[f][x].
Так вот, f@x как раз и является сокращением этой записи.
Как мы узнаем в следующих параграфах, все символы, кроме букв, цифр и $, и многие сочетания двух или трех символов интерпретируются Mathe- matica как операторы. Однако не для всех из них заданы алгоритм вы- числения или трансформационные правила. Это сделано для того, что- бы пользователь мог ввести операторные сокращения для наиболее часто встречающихся определенных им функций.

216
§ 2. Специфика функций компьютерной алгебры
Everything is a function.
Steven Wolfram
Многие языки программирования проводят строгие формальные раз- личия между функциями, операциями, операторами, командами, проце- дурами, типами или классами объектов и т.д. В свою очередь, скажем,
операции столь же жестко подразделяются на арифметические операции,
отношения, логические операции и т.д. Язык Mathematica переносит все подобные различия из области синтаксиса в область интерпретации. С
лингвистической и, тем более с внутренней точки зрения любые преобра- зования объектов или формы их записи, любые модификации их значений или приписывания им свойств, любые группировки, любые контрольные и управляющие структуры, любые инструкции и предписания по дальнейшей работе системы, любые форматирования выражений, управление вводом и выводом, и пр., и пр., и пр. рассматриваются языком Mathematica как функции — или, что то же самое, как команды.
С принципиальной точки зрения понятие функции в компьютерной ал- гебре постижимо разумом и гораздо ближе к общематематическому пони- манию, чем понятие функции в традиционных языках программирования.
В то же время имеется немало прагматических моментов, которые от- личают использование функций в языке Mathematica:
Прежде всего, нужно понимать, что функции компьютерной ал- гебры работают не с объектами, а с выражениями. Это значит,
что даже если два выражения являются просто двумя именами или дву- мя различными формами записи имени одного и того же математического объекта, (как, скажем, (x + 1)
2
и x
2
+ 2
∗ x + 1 в кольце многочленов),
то переписывание выражения из одной формы в другую рассматривается как нетривиальная функция!!! При стандартных установках ядра такое переписывание отнюдь не происходит автоматически, а производится при помощи специальных структурных команд.
Для вычислений чрезвычайно важным является понимание того, что одна и та же функция или команда может вести себя различ- ным образом: дефолтные установки опций, используемые алгоритмы и т.д. могут меняться в зависимости от того, к какому типу объектов она при- меняется. Например, большинство числовых функций работают абсолютно по разному, в соответствии с тем, являются ли их аргументы точными це- лыми, рациональными или гауссовыми числами (с которыми производятся обычные безошибочные вычисления, основанные на модулярной арифмети- ке и пр.); точными алгебраическими числами (такими как Sqrt[2], Gold- enRatio, вычисления с которыми производятся при помощи чрезвычайно тонких алгебраических алгоритмов основанных на методах теории Галуа и алгебраической геометрии), точными вещественными или комплексными числами (такими как E, Pi, Cos[1] или 2*Pi*I — такие числа трактуют- ся как символы и обрабатываются полиномиальными алгоритмами) или,

217
наконец, приближенными вещественными или комплексными числами
(для которых числовые функции по умолчанию используют все прелести округления, абсолютные и относительные погрешности и пр.)
Одна и та же функция может вызываться с разным количе- ством аргументов — в некоторых случаях с любым количеством аргу- ментов или вообще без аргументов. Например, ассоциативные арифмети- ческие операции, логические связки, команды List и Sequence и многие другие функции могут вызываться с любым конечным количеством аргу- ментов. В то же время многие другие функции (большинство числовых функций, многие предикаты и отношения, команды построения списков,
структурные команды, управляющие структуры и т.д.) могут вызываться только со строго определенным количеством аргументов (обычно одним,
двумя, тремя или четырьмя) строго определенных форматов и вызов их с любым другим количеством аргументов или с аргументами нештатных форматов рассматривается как синтаксическая ошибка.
Разные аргументы функций имеют абсолютно различный ста- тус. Простейшим из таких различий является различие между собственно аргументами, присутствие которых при любом вызове функции обязатель- но, и параметрами, некоторые из которых могут быть опущены. Кроме того, как мы узнаем в
§ 5, некоторые аргументы — в исключительных случаях, например, для команд построения графики два–три десятка ар- гументов!!! — (опции и атрибуты) и вовсе скрыты от начинающего поль- зователя.
Самым мощным — но и самым трудным для понимания и грамотного использования, по крайней мере для того, кто не знаком с λ-исчислением и не программировал в Lisp!! — инструментом программирования в язы- ках Maple и Mathematica являются чистые функции pure functions, у которых нет не только области определения, не только области значений,
не только собственного имени, но даже аргументов (если быть совсем точ- ным,
их аргументы не имеют имен, а являются просто щелями, в кото- рые можно засунуть что угодно!!) В чистой функции от функции остается только правило, по которому аргументу сопоставляется его образ. Чи- стые функции позволяют ссылаться по имени на функции, у которых нет обычных имен!!
§ 3. Основные классы функций языка Mathematica
В этой главе мы перечислим функции действующих лиц в том порядке, в каком это диктуется самой сказкой.
В.Я.Пропп, Морфология волшебной сказки
Сейчас мы просто перечислим основные типы функций,
в соответ- ствии с их интерпретацией, а не синтаксисом!!! Наша классифика- ция в основном следует классификации функций в разделе Built-in Func- tions встроенной помощи, хотя мы не всегда перечисляем функции в том

218
же порядке. Некоторые из этих функций детально обсуждаются в сле- дующих параграфах, в то время как некоторые другие относятся к пред- метной области, а не к языку. Поскольку между классами функций нет ярких языковых контрастов, некоторые функции описываются в несколь- ких подразделах (например, как структурные манипуляции и как числовые функции!)
Алгебраические и символьные вычисления (algebraic computa- tion). Это одна из самых многочисленных и важных групп функций, ко- торые покрывают практически всю школьную математику, значительную часть вузовской программы высшей математики и некоторые более специ- альные темы.
Арифметические операции: Plus, Minus, Subtract, Times, Divide, Po- wer, Sqrt, NonCommutativeMultiply, etc.
Итерационные операции Sum, Product, etc.
Функции, связанные с многочленами: PolynomialQ, Variables, Expand,
Coefficient, CoefficientList, CoefficientArrays, Exponent, etc.
Предостережение. В языке Mathematica такие функции, как Coefficient, Variables,
а также арифметические функции в кольце многочленов называются полиномиальными функциями. Мы избегаем это название, так как в русском — да и в английском!!! —
языке выражение полиномиальная функция устойчиво используется для отображения
K
−→ K, c 7→ f(c), где f ∈ K[x] фиксированный многочлен.
Арифметика многочленов: Factor, FactorList, PolynomialQuotient,
PolynomialRemainder, PolynomialGCD, PolynomialLCM, PolynomialMod, Po- lynomialReduce, Resultant, GroebnerBasis, etc., etc., etc.
Решение уравнений (equation solving): Solve, Roots, Root, RootSum,
ToRadicals, Reduce, RootReduce, Eliminate, SolveAlways, ToRules, etc.,
etc.
Символьное дифференцирование и интегрирование (symbolic calcu- lus): Limit, D, Dt, Derivative, Integrate, Series, O, DSolve, Residue,
Maximize, Minimize, etc., etc.
Символьные интегральные преобразования (integral transforms):
FourierTransform, InverseFourierTransform, LaplaceTransform, Inver- seLaplaceTransform, etc., etc., etc., etc.
Структурные манипуляции (expression manipulation). Большая часть описанных здесь `функций' не являются функциями в математиче- ском смысле, так как они состоят либо в определении структуры выраже- ния, либо в переписывании одной формы представления объекта в другую.
Однако с точки зрения Mathematica это один из важнейших классов функ- ций.
Форма выражений и выделение их частей: FullForm, TreeForm, Head,
Part, Level, Length, Depth, etc., etc.
1   ...   12   13   14   15   16   17   18   19   ...   38


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