Чтение онлайн

на главную

Жанры

Maple 9.5/10 в математике, физике и образовании

Дьяконов Владимир Павлович

Шрифт:

Воспользуемся ранее описанными возможностями пакета numapprox, для чего, прежде всего, подключим его:

> restart:with(numapprox):

Будем искать приемлемую аппроксимацию для следующей, отнюдь не простой, тестовой функции:

> f := х -> int(1/GAMMA(t), t=0..x ) / х^2;

> plot(f,0..4,color=black);

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

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

Рис. 5.24. График аппроксимируемой функции

Итак, вычисление f(х) по ее интегральному представлению совершенно не эффективно. Наша цель состоит в разработке процедуры вычислений, которая дала бы 6 точных цифр результата в интервале [0..4] и требовала, по возможности, наименьшего числа арифметических операций для каждого вычисления. Втайне не вредно помечтать о том, чтобы после аппроксимации время вычислений уменьшилось бы хотя бы в несколько раз. Что получится на деле, вы увидите чуть позже. А пока войдем в дебри аппроксимации.

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

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

> s := map(evalf, taylor(f(x), х=2, 9));

s := 0.4065945998 - 0.1565945998(x-2) + 0.00209790791(х-2)2 + 0.01762626393(х-2)3– 0.006207547150(x-2)4 + 0.00057335662(x-2)5 + 0.00024331163(x-2)6– 0.00010010534(x-2)7 + 0.00001414211(х-2)8 + O((x-2)9)

> TaylorApprox := convert(s, polynom):

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

> TaylorApprox := unapplу(TaylorApprox, х);

TaylorApprox := x→0.7197837994 - 0.1565945998x + 0.00209790791(x-2)2 + 0.01762626393(x-2)3– 0.006207547150(x-2)4 + 0.00057335662(x-2)5 + 0.00024331162(x-2)6– 0.00010010534(x-2)7 + 0.0000141421(x-2)8

Кривая ошибок для аппроксимации полиномом Тейлора строится командой

> plot(f - TaylorApprox, 0..4, color=black);

и имеет вид, представленный на рис. 5.25. Эта кривая нас, прямо скажем, не слишком радует, поскольку погрешность в сотни раз превышает заданную.

Рис. 5.25. Кривая погрешности при аппроксимации рядом Тейлора

Типичное свойство аппроксимации рядом Тейлора состоит в том, что ошибка мала вблизи точки разложения и велика вдали от нее. В данном случае, самая большая ошибка имеет место в левой оконечной точке. Чтобы вычислить значение ошибки в точке х=0, что ведет к делению на нуль (см. определение для f(х)), мы должны использовать значение предела:

> maxTaylorError := abs(limit(f(x), х=0) - TaylorApprox(0));

maxTaylorError := 0.0015029608

Итак, в самом начале наших попыток мы потерпели полное фиаско, получив совершенно неприемлемое значение погрешности в сотни раз больше заданной. Но отчаиваться не стоит, ибо, как говорят, «даже у хорошей хозяйки первый блин — комом».

5.10.3. Паде-аппроксимация

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

> Digits := 12:

> s := map(evalf, taylor(f(x), x=2, 9)):

> PadeApprox := pade(s, x=2, [4,4]);

PadeApprox := (0.341034792604 + 0.0327799035348x - 0.00612783638188(x-2)2 + 0.00452991113636(x-2)3– 0.000431506338862(x-2)4)/( 0.068484906786 + 0.465757546607x+ 0.159149610837(x-2)2 + 0.0266813683828(x-2)3 + 0.00346967791444(x-2)4)

> PadeApprox := unapply(PadeApprox, x):

Кривая ошибки для интервала [0,4] строится командой

> plot(f - PadeApprox, 0..4,color=black);

и имеет вид, показанный на рис. 5.26.

Рис. 5.26. Кривая погрешности при Паде-аппроксимации степени (4.4)

Как и при аппроксимации рядом Тейлора, ошибка здесь мала вблизи точки разложения и велика вдали от нее. Мы снова видим из графика, что для указанной функции, самая большая ошибка — в левой оконечной точке. Однако, максимальная ошибка в Паде-аппроксимации уже на порядок меньше, чем при аппроксимации полиномом Тейлора:

> maxPadeError := abs(limit(f(x), x=0) - PadeApprox(0));

maxPadeError:=0.000353777322

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

5.10.4. Аппроксимация полиномами Чебышева

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

Разложим функцию f(x) на [0,4] в ряд Чебышева с точностью 1*10– 8. Это означает, что все члены с коэффициентами меньше, чем эта величина, будут опущены. Такая точность обеспечивается полиномом 13 степени:

> evalf(limit(f(x), х=0));

.500000000000

> fproc := proc(x) if x=0 then 0.5 else evalf(f(x)) fi end:

> ChebApprox := chebyshev(fproc, x=0..4, 1E-8);

Можно проверить для этого примера, что кривая ошибки при аппроксимации рядом Чебышева колеблется. Поскольку ряд Чебышева был оборван на члене степени 8 (как и полином ряда Тейлора), то максимальная ошибка оказалась все еще больше заданной.

Поделиться:
Популярные книги

Соль этого лета

Рам Янка
1. Самбисты
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Соль этого лета

Ну, здравствуй, перестройка!

Иванов Дмитрий
4. Девяностые
Фантастика:
попаданцы
альтернативная история
6.83
рейтинг книги
Ну, здравствуй, перестройка!

Золушка вне правил

Шах Ольга
Любовные романы:
любовно-фантастические романы
6.83
рейтинг книги
Золушка вне правил

Я – Орк

Лисицин Евгений
1. Я — Орк
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я – Орк

Последний попаданец 12: финал часть 2

Зубов Константин
12. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 12: финал часть 2

Раб и солдат

Greko
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Раб и солдат

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Деспот

Шагаева Наталья
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Деспот

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Шатун. Лесной гамбит

Трофимов Ерофей
2. Шатун
Фантастика:
боевая фантастика
7.43
рейтинг книги
Шатун. Лесной гамбит

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности