Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
5.8.2. Разложение функции в ряд Лорана
Для разложения функции f в ряд Лорана с порядком n в окрестности точки x=а (или x=0) служит функция laurent:
laurent(f, х=а, n)
laurent(f, x, n)
Представленный ниже пример иллюстрирует реализацию разложения в ряд Лорана:
> laurent(f(х),х=0,4);
f(0) + D(f)(0)x + ½(D(2)(f)(0)x2 + ⅙(D(3)(f)(0)x3 + O(х4)> laurent(exp(х),х,5);
5.8.3. Паде-аппроксимация аналитических функций
Для аппроксимации аналитических функций одной из лучших является Паде-аппроксимация, при которой заданная функция приближается отношением двух полиномов. Эта аппроксимация способна приблизить даже точки разрыва исходной функции с устремлениями ее значений в бесконечность (при нулях полинома знаменателя. Для осуществления такой аппроксимации используется функция pade:
pade(f, х=а, [m,n])
pade(f, х, [m,n])
Здесь f — аналитическое выражение или функция, x — переменная, относительно которой записывается аппроксимирующая функция, a — координата точки, относительно которой выполняется аппроксимация, m, n — максимальные степени полиномов числителя и знаменателя. Технику аппроксимации Паде непрерывной функции поясняет рис. 5.17.
Рис. 5.17. Аппроксимация Паде для синусоидальной функции
На рис. 5.17 представлена аппроксимация синусоидальной функции, а также построены графики этой функции и аппроксимирующей функции. Под ними дан также график абсолютной погрешности для этого вида аппроксимации. Нетрудно заметить, что уже в интервале [-π, π] погрешность резко возрастает на концах интервала аппроксимации.
Важным достоинством Паде-аппроксимации является возможность довольно точного приближения разрывных функций. Это связано с тем, что нули знаменателя у аппроксимирующего выражения способны приближать разрывы функций, если на заданном интервале аппроксимации число разрывов конечно. На рис. 5.18 представлен пример Паде-аппроксимации функции tan(x) в интервале от -4,5 до 4,5, включающем два разрыва функции.
Рис. 5.18. Аппроксимация Паде для разрывной функции тангенса
Как видно из рис. 5.18, расхождение между функцией тангенса и ее аппроксимирующей функцией едва заметны лишь на краях интервала аппроксимации. Оба разрыва прекрасно приближаются аппроксимирующей функцией и никакого выброса погрешности в точках разрыва нет. Такой характер аппроксимации подтверждается и графиком погрешности, которая лишь на концах интервала аппроксимации [-4.0, 4.0] достигает значений 0,01 (около 1%).
5.8.4. Паде-аппроксимация с полиномами Чебышева
Для многих аналитических зависимостей хорошие результаты дает аппроксимация полиномами Чебышева. При ней более оптимальным является выбор узлов аппроксимации, что ведет к уменьшению погрешности аппроксимации.
В общем случае применяется Паде-аппроксимация, характерная представлением аппроксимирующей функции в виде отношения полиномов Чебышева. Она реализуется функциями chebpade:
chebpade(f, x=a..b, [m,n])
chebpade(f, x, [m,n])
chebpade(f, a..b, [m,n])
Здесь a..b задает отрезок аппроксимации, m и n — максимальные степени числителя и знаменателя полиномов Чебышева. Приведенный ниже пример показывает аппроксимацию Паде полиномами Чебышева для функции f=cos(x):
> Digits:=10:chebpade(cos(x),x=0..1,5);
0.8235847380 T(0, 2x-1) - 0.2322993716 T(1, 2 x-1) - 0.05371511462 T(2, 2x-1) + 0.002458235267 T(3, 2 х-1) + 0.0002821190574 T(4, 2x-1) - 0.7722229156-5 T(5, 2x-1)> chebpade(cos(x),x=0..1,[2,3]);
(0.8162435876 T(0, 2x-1) - 0.1852356296 T(1, 2x-1) - 0.05170917481 T(2, 2x-1))/(T(0, 2x-1) + 0.06067214549 T(1, 2x-1) + 0.01097466398 T(2, 2x-1) + 0.0005311640964 T(3, 2 x-1))5.8.5. Наилучшая минимаксная аппроксимация
Минимаксная аппроксимация отличается от Паде-аппроксимации минимизацией максимальной абсолютной погрешности во всем интервале аппроксимации. Она использует алгоритм Ремеза (см. ниже) и реализуется следующей функцией:
minimax(f, x=a..b, [m,n], w, 'maxerror')
minimax(f, a..b, [m,n], w, 'maxerror')
Здесь, помимо уже отмеченных параметров, w — процедура или выражение, maxerror — переменная, которой приписывается значение minimax-нормы. Ниже дан пример аппроксимации функции cos(x) в интервале [-3, 3]:
> minimax(cos(х),х=-3..3,[2,3],1,'minmax');
> minimax;
.046216056015.8.6. Наилучшая минимаксная аппроксимация по алгоритму Ремеза
Для получения наилучшей полиномиальной аппроксимации используется алгоритм Ремеза, который реализует следующая функция:
remez(w, f, a, b, m, n, crit, 'maxerror')
Здесь w — процедура, представляющая функцию w(x) > 0 в интервале [a, b], f — процедура, представляющая аппроксимируемую функцию f(х), а и b — числа, задающие интервал аппроксимации [a, b], m и n — степени числителя и знаменателя аппроксимирующей функции, crit — массив, индексированный от 1 до m + n + 2 и представляющий набор оценок в критических точках (то есть точек максимума/минимума кривых погрешности), maxerror — имя переменной, которой присваивается минимаксная норма w abs(f-r).
Следующий пример иллюстрирует применение данной функции для аппроксимации функции erf(x):
> Digits:=12:w:=proc(х) 1.0 end;
w:= proc(x) 1.0 end proc> f:=proc(x) evalf(erf(x)) end;
f: = proc(x) evalf (erf (x)) end proc> crit:=array(1..7, [0, .1,.25,.5,.75,.9,1.]);
crit := [0, .1, .25, .5, .75, .9, 1.]> remez(w,f,0,1,5,0,crit,'maxerror');
x→0.0000221268863 + (1.12678937620 + (0.018447321509 + (-0.453446232421 + (0.141246775527 + 0.00966355213050 x) x) x) x) x> maxerror;
0.00002212688944635.8.7. Другие функции пакета numapprox
Отметим назначение других функций пакета numapprox:
chebdeg(p) — возвращает степень полинома Чебышева р;
chebmult(p, q) — умножение полиномов Чебышева p и q;
chebsort(e) — сортирует элементы ряда Чебышева;
confracform(r) — преобразует рациональное выражение r в цепную дробь;
confracform(r, х) — преобразует рациональное выражение r в цепную дробь с независимой переменной х;
hornerform(r) — преобразует рациональное выражение r в форму Горнера;
hornerform(r, х) — преобразует рациональное выражение r в форму Горнера с независимой переменной х;
infnorm(f, x=a…b, 'xmax') — возвращает L-бесконечную норму функции на отрезке х[а, b];
infnorm(f, a…b, "xmax") — возвращает L-бесконечную норму функции на отрезке [а, b].
Действие этих функций очевидно и читатель может самостоятельно опробовать их в работе.
5.9. Пакет приближения кривых CurveFitting
5.9.1. Общая характеристика пакета Curve Fitting
Появившийся еще в Maple 7 пакет приближения кривых CurveFitting весьма полезен тем, кто занимается столь распространенной задачей, как приближение кривых. Он содержит ряд функций:
> with(CurveFitting);
[BSpline, BSplineCurve, Interactive, LeastSquares, PolynomialInterpolation, RationalInterpolation, Spline, ThieleInterpolation]Доступ к функциям пакета возможен с помощью конструкций:
CurveFitting[function](arguments) function(arguments)
Число функций пакета невелико и все они описаны ниже.
5.9.2. Функция вычисления В-сплайнов Bsline
Функция BSpline(k, v, opt) служит для вычисления В-сплайнов. В отличии от обычных сплайнов, у которых точками стыковки сплайн-функций являются узловые точки, В-сплайны позволяют получить стыковку в произвольно заданных точках. Указанная функция имеет следующие параметры: k — порядок сплайна (целое число), v — имя и opt — параметр в виде knots=knotlist, где knotlist — список из k+1 элементов алгебраического типа. Используя функцию CurveFitting[BSplineCurve] можно строить кривые В-сплайнов. Примеры применения этой функции представлены ниже:
> BSpline(3, х);
> BSpline(2, х, knots=[0,a,2]);
Как нетрудно заметить из этих примеров, функция Bspline возвращает результат в виде кусочных функций типа piecewise.
5.9.3. Функция построения B-сплайновых кривых BsplineCurve
Функция BsplineCurve служит для построения кривых B-сплайнов. Она может использоваться в формах:
BSplineCurve(xydata, v, opts)
BSplineCurve(xdata, ydata, v, opts)
Здесь:
xydata — список, массив или матрица точек в форме [[х1,у1],[х2,у2],…,[хn,уn]];
xdata — список, массив или вектор значений независимой переменной [х1,х2,…,хn];
ydata — список, массив или вектор значений зависимой переменной в форме [у1,у2,…,уn];
v — имя независимой переменной;
opts — не обязательный параметр в форме одного или более выражений вида order=k или knots=knotlist.
Примеры применения функции BSplineCurve с порядком, заданным по умолчанию и с третьим порядком (кубический B-сплайн), представлены на рис. 5.19.
Следует отметить, что при малом числе точек стыковки аппроксимация B-сплайнами дает невысокую точность, что хорошо видно из рис. 5.19.