1. Математические пакеты расширения
Начиная с этого урока, мы переходим к изучению стандартных пакетов расширения (Standard Add-on Packages), которые встроены в системы Mathematica 3/4. Они не требуют отдельной инсталляции, но перед использованием их средств пакеты надо объявлять. Стандартные пакеты расширений содержат примерно столько же дополнительных средств, сколько их содержится в ядре, — то есть тоже порядка тысячи. Применение пакетов расширения особенно эффективно, если оно производится достаточно опытными пользователями.
Общие замечания по пакетам расширения
Пакеты расширения системы Mathematica (Add-ons) являются наборами файлов с расширением .т, написанными на языке программирования системы и объединенными под именами соответствующих пакетов. Пакеты добавляют в систему ряд функций, которые отсутствуют в ядре системы. Они могут модифицироваться и создаваться пользователями, что обеспечивает легкую адаптацию системы под задачи конкретного пользователя.
Применение пакетов имеет три основные особенности:
- необходимо предварительно объявлять загрузку пакета или отдельных его частей — подпакетов или функций;
- скорость вычислений для функций пакетов несколько ниже, чем для функций ядра;
- модификация функций пакетов пользователем может нарушить программную совместимость, что не позволит работать с ними в стандартной системе Mathematica и затруднит обмен документами.
В системе Mathematica 3 (и особенно в Mathematica 4) проведена тщательная оптимизация ядра, что позволило перенести часть апробированных функций из пакетов расширений в ядро системы и тем самым существенно повысить скорость их выполнения. Однако пакеты расширения по-прежнему относятся к важным средствам дополнения и модернизации системы. Некоторые функции вызываются из пакетов автоматически — они описаны ранее как средства ядра системы Mathematica 4.
Следует отметить, что систематизация пакетов расширения по содержащимся в них функциям не доведена до совершенства. Например, функции регрессии разбросаны по ряду пакетов расширения. По мере возможности этот недостаток в данной книге устранен.
2. Пакет алгебраических функций Algebra
Пакет алгебраических функций Algebra
Пакет расширения Algebra содержит ряд новых функций для работы с неравенствами, ограниченными полями и полиномами. Для доступа сразу ко всем функциям пакета используется команда «Algebra`.
Загрузка отдельных функций показана в примерах использования этого пакета, описанных ниже.
До сих пор мы сталкивались с решениями уравнений, представленных равенствами. Пакет Algebra дает важное дополнение в виде функций, обеспечивающих работу с неравенствами. Прежде всего это функция SemialgebraicCompo-nents [ineqs, vars], которая определят комплект решений неравенств ineqs по переменной vars.
Приведенные ниже примеры иллюстрируют работу данной функции:
Для решения неравенства служит функция InequalitySolve [expr, var], которая решает неравенство ехрг относительно переменной var.
Следующие примеры иллюстрируют применение данной функции:
<<Algebra` InequalitySolve`
InequalitySolve [х (х^2- 5) (х^2- 6) > 0, х]
-sqrt(6) <х<-sqrt(5) | | 0<х<sqrt(6)| | х>7sqrt(6)
InequalitySolve[x^2/Abs[х- 2] >= 0 && 1/х < х + 1, х]
-1/2(1-sqrt(5)<x<0| | 1/2(-1+sqrt(5)<x<2| | x>2
Функции для представления комплексных данных — Relm
Подпакет Relm обеспечивает переназначение функций комплексной переменно!! для более корректной их работы:
Операции в конечных полях — FiniteFields
Поле является алгебраическим понятием, которое может быть определено как множество, имеющее не менее двух элементов, над которыми заданы две бинарные ассоциативные и коммутативные операции — сложения и умножения. Кроме того, для существования поля нужны два особых элемента — нуль 0, задающий правило сложения а + 0 = а, и единица 1 для задания правила умножения а*1 = 1. Определено также понятие противоположного элемента -а, такого что а + (-а) = 0, и обратного элемента а-- 1 , такого что a- 1 а = 1. Поле характеризуется размером р и целым положительным целым d, называемым степенью расширения.
Пакет задает набор функций GF[p] [], GF[p,l] [], GF[p, ] [], GF[p,d] HGF[p,ilist] [elist], действие которых иллюстрируют следующие примеры:
Вряд ли подробное их описание заинтересует большинство читателей. Специалистов по полям не затруднит более детальное знакомство с этими функциями в разделе Add-ons справочной базы данных. Там же можно найти описание ряда других функций, относящихся к теории конечных полей.
Оценка интервалов изоляции корней полиномов — Rootlsolation
Следующие функции подпакета Rootlsotation позволяют оценивать интервалы изоляции для действительных и комплексных корней полиномов:
- CountRoots [poly, ] — возвращает число корней полинома poly от переменной х в комплексном интервале ;
- RealRootsIntervals [poly] — возвращает разделенный интервал изоляции для вещественных корней полинома poly;
- RealRootsIntervals [polyl,poly2. ] — возвращает разделенные интервалы изоляции для вещественных корней нескольких полиномов;
- ComplexRootsIntervals [poly] — возвращает разделенный интервал изоляции для комплексных корней полинома;
- ComplexlRootsIntervals [polyl, poly2. ] — возвращает разделенные интервалы изоляции для комплексных корней нескольких полиномов;
- Contractlnterval [a,n] — возвращает интервал изоляции для числа а с точностью, задаваемой числом знаков результата п.
Применение этих функций поясняют следующие примеры:
Операции с полиномами
Если конечные поля — понятие достаточно экзотическое, то полиномы встреча- ются сплошь и рядом во многих математических и научно-технических расчетах. В пакете расширения Algebra определен ряд новых операций над полиномами. Начнем их рассмотрение с функции PolynomialExtendedGCD:
- PolynomialExtendedGCD [polyl, poly2 ] — возвращает наибольший общий делитель двух полиномов;
- PolynomialExtendedGCD[polyl,poly2,Modulus->p] —возвращает наи- больший общий делитель двух полиномов по модулю р.
Примеры применения этой функции приведены ниже:
Далее следует функция PolynomialPowerMod [polyl, n, (poly2, р> ], которая является существенно ускоренной версией функции PolynomialMod.
- степени ускорения свидетельствует следующий пример:
<<Algebra`PolynomialPowerMod`
Timing[PolynomialPowerMod[1 + х, 200, х^З + x^2 + 1, Prime[4750]]][[1]], Timing [ PolynomialMod [ (1 + x)^200, x^ + х^2 + 1, Prime [4750] ]][[1]]
— возвращает список дифференциальных инвариантов для простых переменных и х;
Применение этих функций поясняют следующие примеры:
<<Calculus`DSolvelntegrals`
Completelntegral[
Derivative[0, 1][u][х, у] == (u[x, у] +
x^2*Derivative[l, 0][u][x, y]^2)/y, u[x,y], ]
Completelntegral[-u[x, у] +
(2 + y)*Derivative[0, 1][u] [x, y] +
x*Derivative[l, 0][u][x, y] + 3*Derivative[l, 0][u][x, y]^2 == 0,
u[x,y], , IntegralConstants->F]
Differentiallnvariants[
,, x]
Дельта-функция Дирака — DiracDelta
В подпакете DiracDelta системы Mathematica 3 задано определение двух полезных функций Дирака:
- UnitStep [х] — возвращает функцию с единичным скачком при х = 0 (дает значение 0 при х < 0 и 1 при х > 1);
- DiracDelta [x] — возвращает дельта-функцию Дирака, которая является импульсом с единичной площадью, бесконечно малой шириной в точке х = 0 и бесконечно большой амплитудой.
Рисунок 11.1 поясняет применение этих функций. Функция UnitStep имеет простую графическую иллюстрацию, тогда как построение графика функции DiracDelta в принципе невозможно — эта функция представляет собой линию бесконечно большой высоты в точке х - 0. Обратите внимание на то, что интеграл от функции Дирака при интегрировании от -°° до +°° равен 1.
Рис. 11.1. Робота с функцией единичного скачка и дельта-функцией Дирака
Обе описанные функции широко применяются при решении задач автоматического регулирования и при математическом моделировании систем и устройств. Поэтому в системе Mathematica 4 они перешли в разряд встроенных функций.
Улучшенное вычисление пределов — Limit
Подпакет Limit не создает новых функций. Он просто переопределяет встроенную функцию Limit, так что ограничимся примерами его применения:
<<Calculus` Limit`
Limit[Е^х^х/ Е^х^(2 х), x->Infinity]
0
Limit [Е^х^х— Е^х^ (2 х) , x->Infinity]
-бесконечность
Limit[E:x ExpIntegralE[2, ArcTan[E^x]- Pi/2] -E^x- x, x->Infinity]
1 - EulerGamma - I л
Limit[Zeta[l+x, v] - 1/x, x->0]
-PolyGamma[0, v] ,
Limit[x^0 PolyGamma[2,x], x->Infinity] .
0
Limit[x^2 PolyGamma[2,x], x->Infinity]
-1
Limit[x^3 PolyGamma[2,x], x->Infinity]
-бесконечность
Работа скорректированной функции наиболее эффективна при вычислении пределов от выражений, содержащих специальные математические функции, и пределов при х, стремящемся к бесконечности.
Рациональная аппроксимация аналитических функций — Fade
Полиномиальная аппроксимация и обычное разложение функций в ряд Тейлора нередко дают слишком большую погрешность. Уменьшение ее возможно при представлении аппроксимирующей функции в виде отношения двух полиномов разной степени. В подпакете Fade определены две функции для рациональной аппроксимации Паде:
- Pade[f, ] — возвращает выражение для аппроксимации Паде функции f(x) в окрестностях точки х0 в виде отношения двух полиномов степеней m и k;
- EconomizedRationalApproximation [f, ] —возвращает выражение для осуществления экономичной рациональной аппроксимации функции f(x) в интервале в виде отношения двух полиномов степеней m и k.
Аппроксимация Паде является расширением полиномиальной аппроксимации, обеспечивающим повышенную точность представления функции. На рис. 11.2 представлен пример выполнения аппроксимации Паде с построением графика исходной функции (темная линия) и аппроксимирующей функции (более светлая линия).
Рис. 11.2. Пример, осуществления аппроксимации Паде
Пример осуществления экономичной рациональной аппроксимации показан на рис. 11.3. Здесь также дана визуализация аппроксимации в виде наложенных друг на друга графиков исходной и аппроксимирующей функций.
Рис. 11.3. Пример осуществления экономичной рациональной аппроксимации
Экономичная рациональная аппроксимация обычно позволяет получить приемлемую погрешность при меньшей степени полиномов числителя и знаменателя аппроксимирующей функции. В ограниченной области эта аппроксимация нередко позволяет получить погрешность менее сотых долей процента (рис. 11.4). На этом рисунке показан график погрешности в виде разности между значениями аппроксимирующей и аппроксимируемой функций.
Рис. 11.4. Пример осуществления экономичной рациональной аппроксимации с построением графика погрешности
Несмотря на обширные возможности выбора средств аппроксимации, все же надо отметить, что они уступают таковым у конкурента системы Mathematica — Maple V R4/R5, где функций для осуществления аппроксимации больше.
Векторный анализ —VectorAnalysis
Подпакет VectorAnalysis содержит множество функций, используемых при выполнении векторного анализа. Здесь надо иметь в виду, что речь идет не о векторах как представителях одномерных массивов, которые рассматривались ранее. В данном случае вектор — это направленный отрезок прямой в пространстве, заданном той или иной системой координат.
Системы координат и их преобразования
Заметная часть функций подпакета VectorAnalysis относится к заданию и преобразованию координат: