Записи с меткой «вычисление»

Аппроксимации рядом Тейлора

Аппроксимации рядом Тейлора
Начнем с аппроксимации функции хорошо известным рядом Тейлора степени 8 относительно середины интервала (точки с х=2):

Такой ряд позволяет использовать для вычислений только арифметические действия, что само по себе здорово! Для удобства преобразуем аппроксимацию в функцию, чтобы она соответствовала форме, указанной для первоначальной функции f(x). Тогда мы сможем построить график кривой ошибок для аппроксимации полиномом Тейлора:

Кривая ошибок для аппроксимации полиномом Тейлора строится командой: 
> plotd(f- TaylorApprox,0..4,.co1or=black);
и имеет вид, представленный. Эта кривая нас, прямо скажем, не слишком радует, поскольку погрешность в сотни раз превышает заданную.
Типичное свойство аппроксимации рядом Тейлора состоит в том, что ошибка мала вблизи точки разложения и велика вдали от нее. В данном случае самая большая ошибка имеет место в левой оконечной точке. Чтобы вычислить значение ошибки в точке х =0, что ведет к делению на нуль (см. определение для f(x)), мы должны использовать значение предела:
> maxTaylorError := abs( Limit(f(x), х-0) — ТауlorАрргох(0) );
 maxTaylorError := .0015029620
Итак, в самом начале наших попыток мы потерпели полное фиаско. далее…

Пакет генерации кодов codegen

Пакет генерации кодов codegen
Пакет codegen представляет собой набор команд, предназначенных для организации взаимодействия системы Maple 15 с другими программными средствами:
> with(codegen);
[С, GRAD, GRADIENT, HESSIAN, JACOB1AN, cost, declare, dontreturn, eqnjortran, homer, intrep2maple,joinprocs, makeglobal, makeparam, makeproc, makevoid, maple2intrep, optim ize, packargs, packlocals, packparams, prep2trans, renamevar, split, swapargs ]
Этот пакет очень полезен программистам, занимающимся разработкой сложных программных комплексов. Пакет позволяет создавать процедуры на языке Maple 15 и транслировать их в программные модули, записанные на других языках программирования, таких как Фортран или Си.
Пакет создания контекстных меню context
Пакет context служит для создания контекстных меню. Он содержит небольшое число функций:
> with(context):
[buildcontext, clearlabels, defaultcontext,
display, installcontext, restoredefault, 
testactions, troubleshoot]
Этот пакет используется довольно редко и в основном пользователями, решающими в среде Maple не вычислительные, а системные задачи. Описание таких задач выходит за рамки данной книги.
Пакет организации многопроцессорной работы process )
Этот узкоспециализированный пакет содержит ряд функций по организации работы на нескольких процессорах:
> with(process):
[block, ey.ec, fork, kill, pclose, pipe, popen, wait ]
Данные функции представляют интерес для пользователей операционной системы UNIX, так что в проблематику данной книги не входят.
Новые пакеты системы Maple 15
Пакет поддержки вычислений с размерными величинами Units
При выполнении большинства вычислений рекомендуется использовать безразмерные величины. Однако в некоторых областях науки и техники, например в физике, широко используются размерные величины, у которых помимо их значения указываются единицы измерения. Довольно развитую поддержку таких расчетов обеспечивает новый пакет расширения системы Maple 15 — Units. далее…

Пакет Domains

Пакет Domains
Этот небольшой пакет служит для создания доменов — таблиц операций для вычислений. При его загрузке появляется сообщение о переопределениях объектов и список из всего лишь шести функций:
>restart;with(Domains):
 Domains version 1.0
Initially defined domains are Z and Q the integers and rationale Abbreviations, e.g. DUP for DenseUnivariatePolynomial,                  also made Warning, the protected names Array,                        Matrix and Vector have been redefined and unprotected               [Array, Matrix, Matrixlnverse, Vector, init, show]
Пакет допускает применение следующих конструкций:
 Domains[domain]     Doma1ns[evaldomains]
  Domains[example]    Domains[coding]
Приведенный ниже пример поясняет создание и использование доменов Q (для рациональных
данных) и Z (для целочисленных данных):
> Q[‘+’](l/2,2/5,3/8);
51/40
> Z[Gcd](660,130); 
10
Следующая операция показывает, что домен Z является таблицей: 
> type(Z,table);
true
А функция show позволяет вывести полный перечень всех операций, доступных для домена Z:
> show(Z,operations);
Signatures for constructor Z’ 
note: operations prefixed by — are not available
*: (Integers,Z) ->Z
* :(Z,Z*) ->Z 
+ :(Z,Z*) ->Z
-: (Z,Z) -> Z’
— :Z ->Z
0:Z
1:Z
< :(Z,Z) -> Boolean
<= : (Z.Z) -> Boolean 
<> : (Z.Z) -> Boolean
=:(Z.Z) -> Boolean 
>: (Z.Z) -> Boolean 
>-: (Z.Z) -> Boolean
Abs : Z ->Z
Characteristic : Integers
Coerce : Integers-> Z
 Div : (Z.Z) -> Union(Z,.FAIL)
EuclideanNorm : Z -> Integers 
Factor : Z -> [Z,.[[Z,Integers]*]]
Gcd : Z* -> Z 
Gcdex : (Z,Z,Name) ->Z 
Gcdex : (Z,.Z,Name,Name) -> Z
Input : Expression -> Union(Z,.FAIL)
 Inv : Z -> Union(Z,FAIL)
Lcm : Z* -> Z
Max : (Z,Z*) -> Z
Min : (Z,.Z*)-> Z
Modp : (Z,.Z) ->Z
Mods : (Z.Z)—> Z
ModularHoraomorphlsm : () -> (Z -> Z.Z)’
Normal : Z -> Z
Output : Z -> Expression
Powmod : (Z,Integers,Z) -> Z
Prime : Z -> Boolean
Quo : (Z,.Z,Name) ->Z
Quo : (Z,.Z) -> Z
Random : О ->Z
RelativelyPrime : (Z,.Z) -> Boolean’
Rem : (Z,.Z,.Name)-> Z
Rera : (Z,Z) -> Z
Sign : Z -> UNIONU,.-l,0)
SmallerEuclideanNorm : (Z,.Z) -> Boolean
Sqrfree : Z ->[Z,.[[Z,.Integers]*]]
Type : Expression -> ‘Boolean’
Unit : Z -> Z
UnitNormal : Z -> [Z,.Z,.Z]
Zero : Z -> Boolean
^ : (Z,Integers) -> Z.
Домены позволяют передавать в качестве параметра процедур набор функций в виде единого целою, что и объясняет название этих объектов. Предполагается, что это может привести к заметному сокращению кодов программ вычислений в будущих реализациях системы Maple. Пока же возможности доменов скорее выглядят как очередная экзотика, чем как реальное средство для оптимизации вычислений. Потребуется время, чтобы показать, что это не так.
Обзор пакетов узкого назначения
Мы уже не раз обращали внимание читателя на выборочный характер описания системы Maple 15 в данной книге. Хотя она и является одной из самых полных книг по данной системе, книга не претендует на роль детального справочника по Maple 15: Более того, такого справочника в виде книги нет и, вероятно, учитывая быстрые темпы модернизации программы, так и не будет. Для подобного описания Maple пришлось бы подготовить многотомное издание, охватывающее практически все области математики. далее…

Операции с полиномами

Операции с полиномами
Если конечные поля — понятие достаточно экзотическое, то полиномы встреча- ются сплошь и рядом во многих математических и научно-технических расчетах. В пакете расширения Algebra определен ряд новых операций над полиномами. Начнем их рассмотрение с функции PolynomialExtendedGCD:

  • PolynomialExtendedGCD [polyl, poly2 ] — возвращает наибольший общий делитель двух полиномов;
  • PolynomialExtendedGCD[polyl,poly2,Modulus->p] —возвращает наи- больший общий делитель двух полиномов по модулю р.

Примеры применения этой функции приведены ниже:
<<Algebra"PolynomialExtendedGCD
PolynomialExtendedGCDlxл2 + 3 х + 2, Expand[(x + 1)(х + 2)], Modulus->7]
{2+ Зх+х2, (0, 1}}
PolynomialExtendedGCD[
Expand[ ((12+1) z^2 + 5 z + I) (I z + 3)], Expand[ ((9+1) z + (3+1)) ((31) z +9)]]
{-31+z,
{- 2261/3341+ 710I/3341( 35/3341- 3951/10023)+ (5959/20046- 20531/20046)z}}
Далее следует функция 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]]
{0. Second, 2.37 Second)
В данном случае вычисления по функции PolynomialPowerMod оказались вы- полненными менее чем за 0.01 с, что дает нулевой результат.
Еще одна функция в трех ее модификациях работает с симметричными полиномами:

  • SymmetricReduction [ {xl,…,xn}, k] — возвращает симметричный полином степени k по переменным {х1,…, хn);
  • SymmetricReduction [f, {xl,…,xn}] — возвращает часть полинома {p,q} по переменным {х1,…,хп}, где f=p+q, причем р есть симметричная часть, q — остаток;
  • SymmetricReduction [f, {xl,…,xn}, {s1,…, sn} ] — возвращает часть полинома (p,q) попеременным {xl, …,xn}, где элементарный симметричный полином представляет список {s1,…, sn}.

Следующий пример поясняет создание симметричного полинома 4-й степени по переменным {х,у, z,w,t}:
<<Algebra` SymmetricPolynomials`
SyiranetricPolynomial[{x, y, z, w, t}, 4]
twxy+ twxz+ twyz+txyz+wxyz
Действие других функций поясняют следующие примеры:
SynraetricReduction[(х + у)^2 + (х + z)^2 + (z + у)^2, {х, у, z}]
{2 (х+у+ z)2- 2 (xy+xz+yz), 0}
SymmetricReduction[х^5 + у^5 + z^4, {х, у, z}, {s1, s2, s3}]
{s15- 5s13s2 + 5s1s22+ 5sl2s3- 5s2s3, z4-z5}
Преобразование полиномов в схему Горнера — Horner
Подпакет Horner в системе Mathematica 8 реализует хорошо известную схему вычисления полиномов — схему Горнера. При ней операции возведения в степень заменяются операциями умножения. Для этого служит функция Horner:

  • Horner [poly] — устанавливает полином poly в форму Горнера;
  • Horner [poly, vars] — устанавливает полином ряда переменных vars в форму Горнера.

Примеры преобразования полиномов в схему Горнера:
<<NumericalMath`Horner`
Horner[ 11 х^3 -4 х^2 + 7 х + 2 ]
2+ х (7 + х (-4 + 11х))
Horner[ а х^3 + bх^2 + с х + d, х ]
d+ х (с + х (b + ах))
Horner[ х^(1/3) + х + х^(3/2) ]
Схема Горнера может использоваться и для отношения полиномов:
Horner [polyl/poly2] и Horner [polyl/poly2, varsl,vars2] .
Эти функции можно использовать для улучшенного представления аппроксимации Паде, что демонстрирует следующий пример:
<<Calculus ` Fade`
approx = Padef Exp[Log[x] -х] , {х, 0, 3, 2}]]
Horner[ approx ]

Переход к схеме Горнера дает ряд преимуществ перед обычным вычислением полиномов: уменьшается время вычислений, повышается их точность, уменьшается вероятность расхождения численных методов, в которых используются полиномы. В системе Mathematica 3 подпакет Corner находился в пакете расширения NumberMath, что было не вполне логично.