Иллюстрированный самоучитель по Maple 6/7

Эффективная оценка рациональных функций

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

Мы можем нормализовать рациональную функцию так, что полином знаменателя будет со старшим коэффициентом, равным 1. Мы можем также заметить, что вычисление рациональной функции степени (m, n) в форме Горнера требует выполнения все m+n сложений, m+n-1 умножений и 1 деления.

Другими словами, общий индекс действия есть:

  • m+n операций умножения/деления;
  • m+n операций сложения/вычитания.

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

  • max(m,n) операций умножения/деления;
  • m+n операций сложения/вычитания.

Например, если m = n, тогда эта новая схема требует выполнения только поло-, вины числа действий умножения/деления по сравнению с предшествующим методом. Для рациональной функции MlnimaxApprox вычисление в форме, выраженной выше, сводится к 9 действиям умножения/деления и 8 действиям сложения/вычитания. Число операций умножения/деления можно сократить до 8, нормализуя знаменатель к форме monic.

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

> MinimaxApprox: = confracform(MinimaxApprox):

> lprint(MinimaxApprox(x));

-0.468857770747е-1+1.07858705749/(х+4.41994843227+16.1901737091/
(х+4.29121842830+70.1948525272/(х-10.2912843004+ 4.77536150167/(х+1.23883665458))))
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.