Компьютерная математика Maple

         

Урок 9.

Анализ функций и полиномов.

Анализ функций

Поиск экстремумов функций

Важным разделом математики является исследование аналитических функций. Оно обычно заключается в определении координат особых точек функции и ее значений в этих точках, а также в выяснении особенностей функции, таких как наличие точек разрыва, асимптот, точек перегибов, разрывов и т. д. К сожалению, пока нет средств, сразу выявляющих все особенности функций, поскольку даже средства, решающие частные задачи анализа функций, довольно сложны и специфичны. Достаточно отметить проблему поиска экстремумов функций (особенно функций нескольких переменных). Поэтому функции приходится анализировать индивидуально.

С помощью функции fsolve легко находятся значения независимой переменной


х функций вида f(x), при которых f(x)=0  (корни этого уравнения). При этом данная функция позволяет (в отличие от функции solve) изолировать корни функции f(x) указанием примерного интервала их существования. Ряд функций служит для вычисления экстремумов, максимумов и минимумов функций, а также для определения их непрерывности. Одна из таких функций, extrema, позволяет найти экстремумы выражения ехрr (как максимумы, так и минимумы) при ограничениях constcs и переменных vans, по которым ищется экстремум: extrema(expr. constrs) extrema(expr, constrs, vars) extrematexpr, constrs, vans, V)

Ограничения contrs и переменные vars могут задаваться одиночными объектами или списками ряда ограничений и переменных. Найденные координаты точки экстремума присваиваются переменной 's'. При отсутствии ограничений в виде равенств или неравенств вместо них записывается пустой список {}. Эта функция в предшествующих версиях Maple находилась в стандартной библиотеке и вызывалась командой readlib(extrema). Но в Maple 7 ее можно использовать без предварительного объявления. В этом убеждают приведенные ниже примеры:

Как видно из приведенных примеров, функция extrema возвращает как значения экстремумов, так и значения аргументов, при которых экстремумы наблюдаются.

Для проверки оптимизационных алгоритмов существует ряд тестовых функций. Одна из таких функций — функция двух переменных Розенброка. В представленном ниже примере она задана как rf(x.y):

Как нетрудно заметить, минимум этой функции при значениях х =у = 1, равный О, функцией extrema не обнаружен. Однако это не недостаток данной функции, а просто неудачное ее применение. Функция Розенброка имеет минимум значения, и для его обнаружения надо использовать функцию minimize, описанную ниже.

ПРИМЕЧАНИЕ

 Функция extrema дает неплохие результаты при поиске экстремумов простых аналитических функций, не имеющих особенностей. Однако при анализе сложных функций, содержащих функции со сравнением аргумента (например, abs(x), signum(x) и др.), функция extrema часто отказывается работать и просто повторяет запись обращения к ней.

Поиск минимумов и максимумов аналитических функций

Часто нужно найти минимум или максимум заданной функции. Для поиска минимумов и максимумов выражений (функций) ехрr служат функции стандартной библиотеки:

minimize(expr, optl, opt2, .... optn)

  maximize(expr, optl. opt2. .... optn)

Эти функции могут разыскивать максимумы и минимумы для функций как одной, так и нескольких переменных. С помощью опций optl, opt2,..., optn можно указывать дополнительные данные для поиска. Например, параметр `infinity` означает, что поиск минимума или максимума выполняется по всей числовой оси, а параметр location (или locatiorrtrue) дает расширенный вывод результатов поиска — выдается не только значение минимума (или максимума), но и значения переменных в этой точке.

Примеры применения функции minimize приведены ниже:

Приведем подобные примеры и для функции поиска максимума — maximize:

Обратите внимание на то, что в предпоследнем примере Maple 7 явно «оскандалилась» и вместо максимума функции sin(x)/x, равного 1 при х=0, выдал результат в виде бесконечности. Другими словами, система обнаружила, что в данном случае ей незнакомо понятие предела sin(x)/x  при х—>0. Эта ситуация кажется более чем странной, если учесть, что в этом примере Maple 6 давал правильный результат.

Применим функцию minimize для поиска минимума функции Розенброка. Рисунок 9.1 показывает, что minimize прекрасно справляется с данной задачей. На рис. 9.1 представлено также построение функции Розенброка, хорошо иллюстрирующее ее особенности.

Рис. 9.1. Поиск минимума функции Розенброка и построение ее графика

Трудность поиска минимума функции Розенброка связана с ее характерными особенностями. Из рис. 9.1 видно, что эта функция представляет собой поверхность типа «глубокого оврага с почти плоским дном», в котором и расположена точка минимума. Такая особенность этой функции существенно затрудняет поиск минимума. То, что система Maple 7 справляется с данной тестовой функцией, вовсе не означает, что трудности в поиске минимума или максимума других функций остаются позади.


Анализ функций на непрерывность

Для исследования функций на непрерывность Maple 7 имеет функцию iscont, записываемую в ряде форм:

iscont(expr. х - а .. Ь)

iscont(expr. х = а .. b, 'closed')

iscont(expr. х - а .. b, 'open')

Она позволяет исследовать выражение ехрr, заданное в виде зависимости от переменной х, на непрерывность. Если выражение непрерывно, возвращается логическое значение true, иначе — false. Возможен также результат типа FAIL. Параметр 'closed1 показывает, что конечные точки должны также проверяться, а указанный по умолчанию параметр 'open' — что они не должны проверяться.

Работу функции iscont иллюстрируют следующие примеры: 

> iscont(l/x^2,x=-l..l);

false

> iscont(l/x^2.x=-l..l,'closed');

false

> iscont(l/x,x-0..1);

true > iscont(l/x,x=0..1.'closed'); ,

false ,--v > iscont(l/(x+a).x=-l..l);

FAIL

Рекомендуется внимательно присмотреться к результатам этих примеров и опробовать свои собственные примеры.


Определение точек нарушения непрерывности

Функции, не имеющие непрерывности, доставляют много хлопот. Поэтому важным представляется анализ функций на непрерывность. В Maple 7 функция discont(f,х) позволяет определить точки, в которых нарушается непрерывность функции f(x). Она вычисляет все точки в пределах изменениях от -? до +?. Результаты вычислений могут содержать особые экстра переменные с именами вида _Zn- и _NNn-. В частности, они позволяют оценить периодические нарушения непрерывности функций.

Примеры применения функции discont приведены ниже:

> discont(l/(x-2).x);

{2}

 > discont(l/((x-l)*(x-2)*(x-3)).x):

{1,2,3} 

> discont(GAMMA(x/2),x):

{-2_NN1~}

Весьма рекомендуется наряду с применением данной функции просмотреть график анализируемой функции.

ПРИМЕЧАНИЕ 

 В ряде примеров в выводе используются специальные переменные вида _NameN~, где Name — имя переменной иN— ее текущий номер. После выполнения команды restart отсчет N начинается с 1. Если вывод с такими переменными уже применялся, то их текущие номера могут казаться произвольными. Специальные переменные часто используются для упрощения выводимых выражений.


Нахождение сингулярных точек функции

Многие операции, такие как интегрирование и дифференцирование, чувствительны к особенностям функций, в частности к их разрывам и особым точкам. Функция singular (ехрr, vars) позволяет найти особые (сингулярные) точки выражения ехрг, в которых она испытывает разрывы. Дополнительно в числе параметров может указываться необязательный список переменных.

Примеры применения этой функции приведены ниже:


Вычисление асимптотических и иных разложений

Важным достоинством системы Maple является наличие в ней ряда функций, позволяющих выполнять детальный анализ функций. К такому анализу относится вычисление асимптотических разложений функций, которые представляются в виде рядов (не обязательно с целыми показателями степени). Для этого используется следующая функция:

asympt(f.x)     asympt(f,x,n).

Здесь f — функция переменной х или алгебраическое выражение; х — имя переменной, по которой производится разложение; n — положительное целое число (порядок разложения, по умолчанию равный 6). Ниже представлены примеры применения этой функции:


Пример анализа сложной функции

Ниже мы рассмотрим типичный анализ достаточно «сложной» функции, имеющей в интересующем нас интервале изменения аргумента х от -4 до 4, нули, максимумы и минимумы. Определение функции f(x), ее графики и график производной dF(x)/dx даны на рис. 9.2. Этот рисунок является началом полного документа, описываемого далее, i

Функция F(x) на первый взгляд имеет не совсем обычное поведение вблизи начала координат (точки с х =у = 0). Для выяснения такого поведения разумно построить график функции при малых х и у. Он также представлен на рис. 9.2 (нижний график) и наглядно показывает, что экстремум вблизи точки (0, 0) является обычным минимумом, немного смещенным вниз и влево от начала координат. Теперь перейдем к анализу функции F(x). Для поиска нулей функции (точек пересечения оси х) удобно использовать функцию f sol ve, поскольку она позволяет задавать область изменениях, внутри которой находится корень. Как видно из приведенных ниже примеров, анализ корней F(x) не вызвал никаких трудностей, и все корни были уточнены сразу: Поиск нулей функции 

> fsolve(F(x),x,-2...-l):

-1.462069476 > fso1ve(F(x),x,-.01..0.01);

0. 

> fsolve(F(x).x.-.05..0);

-.02566109292 

> fsolve(F(x),x,1..2);

1.710986355 

> fsolve(F(x),x,2.5..3):

2.714104921

Нетрудно заметить, что функция имеет два очень близких (но различных) корня прих, близких к нулю.

Анализ функции на непрерывность, наличие ее нарушений и сингулярных точек реализуется следующим образом:

Анализ функции на непрерывность, наличие ее нарушений и наличие сингулярных точек

a

б

в

Рис. 9.2. Задание функции F(x) и построение графиков функции и ее производной

Этот анализ не выявляет у заданной функции каких-либо особенностей. Однако это не является поводом для благодушия — попытка найти экстремумы F(x) с помощью функции extrema и минимумы с помощью функции minimize завершаются полным крахом:

Неудачный поиск экстремумов и минимумов функции 

>extrema(F(x).{},x, 's');s;

>minimize(F(x),x=-.l...l);

minimize (.05x + xe (-|x|) * sm(2x),x = -.1 .. 1)

>minimize(F(x),x=-2.5..:2);S

minimize (.05x + xe(-|x|) sin(2*),*'=-2.5 ..-2)

Приходится признать, что в данном случае система Maple 7 ведет себя далеко не самым лучшим образом. Чтобы довести анализ F(x) до конца, придется вспомнить, что у функции без особенностей максимумы и минимумы наблюдаются в точках, где производная меняет знак и проходит Через нулевое значение. Таким образом, мы можем найти минимумы и максимумы по критерию равенства производной нулю. В данном случае это приводит к успеху:

Поиск минимумов по критерию равенства нулю производной

 > fso1ve(d1ff(F(x),x)=0,x,-.5...5);

-.01274428224 

>xm:=%;

хт:= -.0003165288799 

>[F(xm),F(xnn-.001),F(xm-.001)]:

[-.00001562612637, .00003510718293, -.00006236451216]

>fsolve(diff(F(x),x)-0.x,-2.5..-2);

-2.271212360 ' 

>fso1ve(diff(F(x),x)=0,x.2..2.5):

2.175344371 

Неудачный поиск максимума 

>maximize(F(x) ,x--l.. - .5);

maximize(.05х + хе (-|x|) * sin(2x),x = -l .. -.5) 

Поиск максимумов по критерию равенства нулю производной 

>fso1ve(diff(F(x).x),x,-l..-.5);

-.8094838517

 >fso1ve(diff(F(x),x),x..5..2):

.8602002115 

>fsolve(diff(F(x),x),x.-4..-3);

-3.629879137

>fsolve(diff(F(x),x).x,3..4); 

3.899664536

Итак, все основные особые точки данной функции (нули, минимумы и максимумы) найдены, хотя и не без трудностей и не всегда с применением специально предназначенных для такого поиска функций. В уроке 12 будет описана процедура, которая автоматизирует процесс анализа не очень сложных функций и обеспечивает его наглядную визуализацию.


Функции из отдельных кусков

Создание функций из отдельных кусков

Для создания функций, составленных из отдельных кусков, Maple 7 располагает интересной функцией:

piecewise(cond_l,f_l. cond_2,f_2. .... cond_n,f_n. f_otherwise)

где f_i — выражение, cond_i — логическое выражение, f_otherwise — необязательное дополнительное выражение. В зависимости от того или иного условия эта функция позволяет формировать соответствующую аналитическую зависимость. К кусочным функциям (подчас в скрытой форме) приводят функции с элементами сравнения аргумента, например abs, signum, max и др. Поэтому в Maple 7 введен достаточно мощный аппарат обработки и преобразований таких функций по частям.


Простые примеры применения функции piecewise

Рисунок 9.3 показывает задание функции f(x), содержащей три характерных участка. По определенной через функцию пользователя зависимости f(x) можно, как обычно, построить ее график.

Рис. 9.3. Пример задания и применения функции, составленной из отдельных кусков

Важно отметить, что созданная с помощью функции piecewise зависимость может участвовать в различных преобразованиях. Например, на рис. 9.3 показано, что она легко дифференцируется и можно построить график производной этой функции. При этом каждая часть функции обрабатывается отдельно.


Работа с функциями piecewise

С функциями типа piecewise можно работать, как с обычными функциями. При этом необходимые операции и преобразования осуществляются для каждой из частей функции и возвращаются в наглядной форме.

Ниже приведен пример задания функции f в аналитической форме:

Для выявления характера функции воспользуемся функцией convert и создадим объект g в виде кусочной функции:

Выполним дифференцирование и интегрирование функции:

Как нетрудно заметить, результаты получены также в виде кусочных функций. Можно продолжить работу с функцией f и выполнить ее разложение в степенной ряд: 

> series(f, х);

-1+.Х + О(x6)

Чтобы убрать член с остаточной погрешностью, можно выполнить эту операцию следующим образом:

> series(g, x);

-1 + х

Обратите внимание на то, что поскольку разложение в ряд ищется (по умолчанию) в окрестности точки х=0, то при этом используется тот кусок функции, в котором расположена эта точка. Читатель может продолжить работу с кусочными функциями и далее.


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

Определение полиномов

К числу наиболее известных и изученных аналитических функций относятся степенные многочлены — полиномы. Графики полиномов описывают огромное разнообразие кривых на плоскости. Кроме того, возможны рациональные полиномиальные выражения в виде отношения полиномов. Таким образом, круг объектов, которые могут быть представлены полиномами, достаточно обширен, и полиномиальные преобразования широко используются на практике, в частности, для приближенного представления других функций.

Под полиномом в системе Maple 7 понимается сумма выражений с целыми степенями. Многочлен для ряда переменных —многомерный полином. К одномерным полиномам относятся степенной многочлен:

а также отдельная переменная х и константа. Большое достоинство полиномов состоит в том, что они дают единообразное представление многих зависимостей и для своего вычисления требуют только арифметических операций (их число значительно сокращается при использовании хорошо известной схемы Горнера). Производные от полиномов и интегралы с подынтегральными функциями-полиномами легко вычисляются и имеют простой вид. Есть и достаточно простые алгоритмы для вычисления всех (в том числе комплексных) корней полиномов на заданном промежутке.


Выделение коэффициентов полиномов

Для выделения коэффициентов полиномов в Maple 7 служат следующие функции:

  coeff(p, х) — возвращает коэффициент при х полинома р;   coeff(p.x.n) — возвращает коэффициент для члена со степенью n полинома р;   coeff(p.x^n) — возвращает коэффициенты при х^n полинома р;  coeffs(p, х, 't') — возвращает коэффициенты полинома нескольких переменных, относящиеся к переменной х (или списку переменных) с опцией ' t', задающей имя переменной;  collect(p,x) — возвращает полином, объединяя коэффициенты при степенях переменной х.

Ниже даны примеры применения этих функций:

 ПРИМЕЧАНИЕ 

Следует обратить внимание на то, что при выполнении операции collect в прежних версиях Maple довольно часто возникала фатальная ошибка. Как видно из приведенных примеров, в Maple 7 такой ошибки уже не возникает.


Оценка коэффициентов полинома по степеням

Полином может быть неполным, то есть не содержать членов со степенями ниже некоторой. Функция lcoeff возвращает старший, а функция tcoeff — младший коэффициент полинома нескольких переменных. Эти функции задаются в виде:

lcoeff(p)                tcoeff(p)

Icoeff(p. x)             tcoeff(p, x)

Icoeff(p. x. 't')        tcoeff(p, x. 't')

Функции Icoeff и tcoef f возвращают старший (младший) коэффициент полинома р относительно переменной х или ряда переменных при многомерном полиноме. Если х не определено, Icoeff (tcoeff) вычисляет старший (младший) коэффициент относительно всех переменных полинома р. Если третий аргумент t определен, то это имя назначено старшему (младшему) члену р. Если х — единственное неизвестное и d — степень р по х, то lcoeff(p, x) эквивалентно coef f (p. x, d). Если х — список или множество неизвестных, lcoeff (tcoef f) вычисляет старший (младший) коэффициент р, причем р рассматривается как полином многих переменных. Имейте в виду, что р должен быть разложен по степеням неизвестного х до вызова функций lcoeff или tcoef f.

Приведем примеры применения функций lcoeff, tcoef f и coeffs:


Оценка степеней полинома

Функция degree возвращает высшую степень полинома, а  ldegree — низшую степень. Эти функции задаются следующим образом: 

degree(a.x)                 ldegree(a.x)

Функции degree и ldegree используются, чтобы определить высшую и низшую степени полинома от неизвестного (неизвестных) х, которое чаще всего является единственным, но может быть списком или множеством неизвестных. Полином может иметь отрицательные целые показатели степеней при х. Таким образом, degree и ldegree могут возвратить отрицательное или положительное целое число. Если выражение не является полиномом от х данным параметром, то возвращается FAIL.

Чтобы degree и  ldegree возвратили точный результат, полином обязательно должен быть сгруппирован по степеням х. Например, для выражения (х + 1) (х+ 2) - х2 функция degree не обнаружит аннулирование старшего члена и неправильно возвратит результат 2. Во избежание этой проблемы перед вызовом degree следует применять к полиному функции collect или expand. Если х — множество неизвестных, degree/ ldegree вычисляет полную степень. Если х — список неизвестных, degree/ldegree вычисляет векторную степень. Векторная степень определяется следующим образом:

degree(p.[]) =0

degree(p.[xl.x2,...]) =degree(p.xl) degree(lcoeff(p.xl),[x2....])

Полная степень тогда определяется следующим образом:

degree(p.{xl....,xn}) - maximum degree(p.{xl....xn})

или

degree(p,{xl....,xn}) = degree(p.[xl,....xn])

Обращаем внимание на то, что векторная степень зависит от порядка перечисления неизвестных, а полная степень не зависит.

Примеры применения функций degree и ldegree:


Разложение полинома на множители

Для контроля того, имеет ли полином несокращаемые множители, может использоваться функция irredik(p) и ее вариант в инертной форме Ireduc(p.K), где К — RootOf-выражение. Ниже приведены примеры применения этих тестовых функций:


Разложение полинома по степеням

Для разложения полинома р по степеням служат инертные функции AFactor(р) и AFactors(p). Полином может быть представлен в виде зависимости от одной или нескольких переменных.

Функция Afactor(p) выполняет полную факторизацию (разложение) полинома р от нескольких переменных с коэффициентами в виде алгебраических чисел над полем комплексных чисел. При этом справедливо отношение evala(AFactor(p) )=factor(p,complex). Таким образом, эта функция является, по существу, избыточной.

В случае одномерного полинома полное разложение на множители является разложением на линейные множители. Функция AFactors аналогична функции Afactor, но создает структуру данных формы [u,[[f[l],e[l]],....[f[n],e[n]]]] так, что p=u*f[l]xe[l]*...*f[n]^e[n], где каждый f[i] — неприводимый полином.

Ниже даны примеры применения функции Afactor:

Нетрудно заметить, что разложение полинома на множители позволяет оценить наличие у него корней. Однако для этого удобнее воспользоваться специальными функциями, рассмотренными ниже.


Вычисление корней полинома

Для вычисления действительных и комплексных корней полиномов служит уже известная нам функция solve(p.x), возвращающая список корней полинома р одной переменной. Кроме того, имеются следующие функции для вычисления корней полиномов:

roots(p) ,            roots(p. К) , 

roots(p. x),          roots(p. x. К)

Эти функции вычисляют точные корни в рациональной или алгебраической области чисел. Корни возвращаются в виде [ [rl.ml], .... [rn.mn] ], где ri — это

корень полинома, a mi — порядковый номер полинома. С действиями этих функций можно разобраться с помощью приведенных ниже примеров:


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

С полиномами могут выполняться различные операции. Прежде всего отметим некоторые функции, которые относятся к одному полиному:

 psqrt(p) — возвращает квадрат полинома;  proot(p.n) — возвращает n -ю степень полинома;  realroot(p) — возвращает интервал, в котором находятся действительные корни полинома;  randpolyCvars, eqns) — возвращает случайный полином по переменным vans (список) с максимальной степенью eqns;  discrim(p,var) — вычисление дискриминанта полинома по переменной var;  Primitive(a) mod p — проверка полинома на примитивность (возвращает true, если полином примитивен).

Действие этих функций достаточно очевидно, поэтому ограничимся приведением примеров их использования:

Обратите внимание на то, что для использования некоторых из приведенных функций необходим вызов их из стандартной библиотеки. Для функции randpoly приведенные результаты случайны, так что, скорее всего, их повторение невозможно.

С полиномами можно выполнять обычные операции, используя для этого соответствующие операторы:

В целом надо отметить, что аппарат действий с полиномами в Maple 7 хорошо развит и позволяет выполнять с ними практически любые математические операции. В частности, можно вычислять производные от полиномов и интегралы, у которых полиномы являются подынтегральными функциями:


Операции над степенными многочленами с отрицательными степенями

Хотя в подавляющем большинстве случаев используются степенные многочлены (полиномы) с положительными степенями, Maple 7 не накладывает особых ограничений и на многочлены с отрицательными степенями. Например, можно задать такой степенной многочлен:

Нетрудно показать, что с ним можно выполнять различные операции:

ПРИМЕЧАНИЕ

 Maple 7 не накладывает ограничений на применение степенных многочленов (полиномов) с отрицательными степенями. Однако свойства таких полиномов заметно отличаются от свойств полиномов с положительными степенями, поэтому при применении первых надо проявлять известную осторожность.


Интерполяция и аппроксимация функциональных зависимостей

Интерполяция, экстраполяция и аппроксимация

Вычисление многих функций, особенно специальных, требует больших затрат времени. Поэтому до сих пор широко применяются таблицы таких функций. Достаточно отметить знаменитые на весь мир таблицы в книге «Справочник по специальным функциям с формулами, графиками и таблицами» под редакцией М. Абрамовица и И. Стиган [59].

Если некоторая зависимость у(х) представлена рядом табличных отсчетов y(x), то интерполяцией принято называть вычисление значений у(х) при заданном х, расположенном в интервале между отсчетами. За пределами общего интервала определения функции [а,b], то есть при х < а и х > b, вычисление у(х) называют экстраполяцией (или иногда предсказанием значений функции). В данном случае речь идет об одномерной интерполяции, но возможны двумерная интерполяция функций двух переменных z(x, у) и даже многомерная интерполяция для функций многих переменных.

Интерполяция и экстраполяция часто выполняются по некоторой скрытой, но подразумеваемой зависимости. Например, если узловые точки функции соединить отрезками прямых, то будем иметь многоинтервальную линейную интерполяцию данных. Если использовать отрезки параболы, то интерполяция будет параболической. Особое значение имеет многоинтервальная сплайн-интерполяция, области применения которой уже сейчас весьма обширны и непрерывно расширяются. Интерполяция рядом Фурье (набором синусоидальных функций) также достаточно хорошо известна; она эффективна при интерполяции периодических функций.

Аппроксимацией в системах компьютерной математики обычно называют получение приближенных значений какого-либо выражения. Однако под аппроксимацией функций подразумевается получение некоторой конкретной функции, вычисленные значения которой с некоторой точностью аналогичны аппроксимируемой зависимости. Обычно предпочитают найти одну зависимость, приближающую заданный ряд узловых точек. Часто для этого используют степенные многочлены — полиномы.

Здесь мы будем рассматривать такие виды аппроксимации, которые дают точные значения функции у(х) в узловых точках в пределах погрешности вычислений по умолчанию. Если аппроксимирующая зависимость выбирается из условия наименьшей среднеквадратической погрешности в узловых точках (метод наименьших квадратов), то мы имеем регрессию или приближение функций по методу наименьших квадратов.


Аппроксимация аналитически заданных функций

Если функция задана аналитически, то наиболее простым способом нахождения ее аппроксимирующей зависимости является применение функции convert. Это поясняют следующие примеры:

На рис. 9.4 представлен пример полиномиальной аппроксимации хорошо известной статистической функции erfc(x). Для полинома задана максимальная степень 12, но ввиду отсутствия в разложении четных степеней максимальная степень результата оказывается равна 11.

Рис. 9.4. Пример полиномиальной аппроксимации функции erfc(x)

Как видно из приведенного рисунка, в интервале изменениях от -1,5 до 1,5 аппроксимирующее выражение почти повторяет исходную зависимость. Однако затем график аппроксимирующей функции быстро отходит от графика исходной зависимости. При этом он ведет себя иначе даже качественно, никоим образом не показывая асимптотическое поведение, характерное для исходной зависимости.


Полиномиальная интерполяция табличных данных

Если данные некоторой зависимости у(х) заданы векторами X и Y ее дискретных значений, то для получения интерполяционного степенного многочлена достаточно записать многочлен для всех N пар значений yi(xi) при i=1...N (или i =0...N- 1, если индексы отсчетов начинаются с нуля). Полученная при этом система линейных (относительно коэффициентов полинома) уравнений после решения дает коэффициенты аппроксимирующего полинома. Степень полинома на 1 меньше N, а вычисляемые при х значения  у(х) совпадают с табличными (узловыми) в пределах вычислительной погрешности.

На самом деле все это делать не нужно, поскольку Maple 7 имеет реализующую данный алгоритм встроенную функцию interp(X,Y,v) или в инертной форме Interp(X,Y,v).

Переменная v указывает имя переменной интерполяционного полинома. Векторы X и Y должны содержать n + 1 =N координат точек исходной зависимости, где и — степень интерполирующего полинома.

Рисунок 9.5 показывает технику применения полиномиальной аппроксимации на основе функции interp с построением графика исходных точек и аппроксимирующего полинома. Нетрудно заметить, что график полинома проходит точно через исходные точки — они показаны квадратиками.

В этом примере полезно присмотреться к визуализации результатов вычислений и совместному построению графика интерполирующего полинома и исходных точек. В частности, для построения последних использована обычная функция plot, позволяющая выводить на график точки с заданными координатами, причем не только в виде окружностей, но и в виде точек, маленьких крестиков, кружков, квадратов и других фигур. Для выбора типа точек и других параметров графика его надо выделить (установив указатель мыши в поле графика и щелкнув левой кнопкой) и нажать правую кнопку мыши — появится контекстно-зависимое меню с операциями форматирования графика. Это меню показано на рис. 9.5.

Приведем еще несколько примеров использования функции Interp:

Рис. 9.5. Пример осуществления полиномиальной аппроксимации


Сплайн-интерполяция и аппроксимация

Точность полиномиальной аппроксимации катастрофически падает при увеличении степени аппроксимирующих полиномов. От этого недостатка можно избавиться, используя для аппроксимации отрезки полиномов невысокой степени, применяемые для представления части узловых точек. Самым известным методом такой аппроксимации является сплайн-аппроксимация на основе применения отрезков кубических полиномов. При этом аппарат сплайн- аппроксимации позволяет получить полиномы, которые дают в узловых точках непрерывность не только представляемой ими функции, но и ее первых и даже вторых производных.

Наглядно сплайн-функцию можно представить в виде гибкой стальной линейки, закрепленной в узловых точках и плавно изгибающейся. Благодаря указанным свойствам сплайнов они неплохо описывают функции, представленные как небольшим числом узловых точек (благодаря плавности сплайн- кривых), так и функции, представляемые очень большим числом узловых точек (поскольку порядок полиномов от этого числа уже не зависит). Недостатком сплайн- аппроксимации является отсутствие общего выражения для всей кривой. Фактически приходится использовать набор сплайн- функций для различных интервалов между узловыми точками.

Для получения сплайн- интерполяций используется Maple-функция spline (X, Y, var, d).

Здесь X и Y — одномерные векторы одинакового размера, несущие значения координат узловых точек исходной функции (причем в произвольном порядке), var — имя переменной, относительно которой вычисляется сплайн-функция, наконец, необязательный параметр d задает вид сплайна. Он может иметь следующие значения: 1inear — линейная функция, или полином первого порядка, quadratic — квадратичная функция, или полином второго порядка, cubic — полином третьего порядка, quartiс — полином четвертого порядка. Если параметр d опущен, то сплайн-функция будет строиться на основе полиномов третьего порядка (кубические сплайны).

Технику сплайновой аппроксимации наглядно поясняет рис. 9.6. На нем представлено задание векторов узловых точек X и Y и четырех сплайновых функций, по которым построены их графики. Для одной из функций (с линейной интерполяцией между узлами) показан вид сплайновой функции.

Рис. 9.6. Задание сплайновой аппроксимации и построение графиков полученных функций

Как видно из рис. 9.6, сплайновая функция представляет собой кусочную функцию, определяемую на каждом отдельном интервале. При этом на каждом участке такая функция описывается отдельным полиномом соответствующей степени. Функция plot «понимает» такие функции и позволяет без преобразования типов данных  строить их графики. Для работы с кусочными функциями можно использовать функции convert и piecewise.


Прямое и обратное Z-преобразования

Прямое и обратное Z-преобразования функций широко используются при решении задач автоматического управления. Эти преобразования задаются следующими функциями:

 ztrans(f, n, z) — прямое преобразование функции f(n) в f(z);   invztransCf, z, n) — обратное преобразование f(z) в f(n).

Заметим, что прямое Z-преобразование базируется на соотношении ztrans(f (n) ,n,z)= = sum(f(n)/z~n,n=0. .infinity), записанном на Maple-языке. В первых версиях системы Maple Z-преобразования выполнялись средствами библиотеки и требовали вызова командой readlib(ztrans). Но в Maple 7 они включены в ядро системы и предварительного вызова уже не требуют. В этом убеждают следующие примеры:

Родственные Z-преобразованиям интегральные преобразования Лапласа и Фурье реализуются с помощью пакета inttrans (интегральные преобразования).


Что нового мы узнали?

В этом уроке мы научились:

 Выполнять поиск экстремумов функций.

 Осуществлять поиск минимумов и максимумов аналитических функций.  Анализировать функции на непрерывность.  Находить сингулярные точки функций.  Вычислять асимптотические и иные разложения.  Анализировать сложные функции.  Работать с кусочными функциями.  Выполнять операции с полиномами.  Интерполировать и аппроксимировать функциональные зависимости.  Вычислять прямые и обратные Z-преобразования.