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

 

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

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

  •  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));

-.468857770747е-1+1.07858705749/(х+4.41994843227+16.1901737091/ (х+4.29121842830+70.1948525272/(х-10.2912843004+ 4.77536150167/(х+1.23883665458))))