Э. Г. Бeлага


Вычисление многочленов — от Ньютона до наших дней





§1. Многочлены — инструмент вычислителя

 

Ну, начнём! Когда мы доберёмся до конца этой истории, будем знать больше, чем теперь.

Г. X. Андерсен


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

Многочлены, действительно, предельно просты: алгебраическая запись

 f (x) = xn + a1xn–1 + a2xn–2 + ... + an–1x + an (1)

является одновременно и формулой для вычисления значений многочлена 1. Хотя выражения типа cos x, 5 x , 10x, log 2 x намного лаконичнее, с вычислительной точки зрения они бессодержательны: для вычисления, скажем чисел cos 17°, 5 2 , 100,13 или log 2 7 нужны специальные приближённые формулы (или таблицы, составленные с помощью тех же формул). Как правило, в таких формулах появляются многочлены: например,

cos x » 1 –  x2

 2! 

  x4

 4! 

 –  x6

 6! 

  x8

 8! 


(ошибка в интервале 0≤x≤π/4 меньше одной десятимиллионной!).

А ведь тригонометрические, степенные и т.п. (элементарные) функции — это самые простые из функций анализа, изучаемых и используемых математиками, физиками, инженерами. Известный математик-вычислитель Р. В. Хемминг в своей книге «Численные методы» (М., «Наука», 1972) пишет: «Поскольку с многочленами легко обращаться, большая часть классического численного анализа основывается на приближении многочленами».

Так как вычислять многочлены приходится часто, то важно научиться делать это как можно проще. Мы расскажем об эволюции методов вычисления значений многочленов с момента зарождения (XVII век). Впрочем, слово «эволюция» здесь не вполне уместно: история этих методов — скорее очень длинный роман с интересной, но краткой завязкой, однообразным действием и неожиданной развязкой.

§2. Схема Горнера

 

По правде говоря, здесь возникает сомнение, или вернее вопрос, которого миновать нельзя, не поставив его и на него не ответив.

А. Данте. Пир (1303 г.)


Общепринятый сейчас способ вычисления многочленов восходит к Ньютону и называется схемой Горнера. Эта универсальная (то есть применимая к любому многочлену) схема предельно проста и изящна. Она получается из формулы (1) вынесением за скобки x всюду, где это возможно:

 f (x) = (...(((x + a1x + a2x + a3)...)·x + an. (2)

Порядок действии при вычислении  f (x) определяется скобками в (2): сначала сложение внутри самой внутренней пары скобок (его результат обозначим через p1), затем умножение и сложение внутри следующей пары скобок (результат p2) и т.д.:
ì  p1 = x + a1;
ï  p2 = p1x + a2;
í  p3 = p2x + a3;
ï  · · · · · · · · · · · · · · · · · ·
î  pn = pn–1x + an,     f (x) = pn;
(3)

всего n–1 умножений и n сложений 2.

Схема Горнера настолько совершенна, что вопрос о возможности её улучшения не возникал два с половиной века и был задан «вслух» впервые лишь в 1954 году! Постановка этого вопроса (ответ на него предполагался отрицательным) имела важные и неожиданные последствия.

§3. Индивидуальные схемы

 

— Вы позволите мне записать эту романтическую историю, сэр? — спросил потрясенный мистер Снодграсс.

— Сколько угодно, сэр, сколько угодно, ещё пятьдесят таких, если они вам по вкусу.

Ч. Диккенс


Уже в курсе школьной алгебры мы встречаемся с примерами многочленов, для которых существуют необычайно экономные схемы; единственный их недостаток — они не универсальны.

Сравнивая разные схемы по числу операций, мы будем объединять операции сложения и вычитания в группу «(+, –)-операций», а гораздо более трудоёмкие операции умножения и деления — в группу «(×, :)-операций»3

Примеры.

(а) Многочлен  f (x) = x2^k можно вычислить за k умножений (а не за 2k по Горнеру):

 p1 = x·x = x2,
 p2 = p1·p1 = x4,   ...,
 pk = pk–1·pk–1,    f (x) = pk.

(б) Многочлен  f (x) = x15 можно вычислить за пять (×, :)-операций, так как  f (x) = x15 = x16 : x = x2^4 : x.

(в) Многочлен  f (x) = xn + xn–1 + ... + x + 1 вычисляется по формуле геометрической прогрессии:  f (x) = (xn+1 – 1) : (x – 1).

(г) Многочлен

 f (x) = xn ( n
1
)  xn–1 + ... +  (n
n–1
)  x + 1;

есть бином Ньютона:  f (x) = (x + 1)n.

Число примеров можно, конечно, увеличить.

 Упражнения 

1. Докажите, что многочлены (а) и (б) не могут быть вычислены быстрее.

2. В «Задачнике «Кванта» № 12 за 1973 год была помещена задача (М240): доказать, что многочлен  f (x) = xn может быть вычислен не более чем за 3/logn + 1 (×, :)-операций (nнатуральное число).

Пользуясь результатом этой задачи, оцените число операций для вычисления многочленов (в) и (г).
 Решение 


3. Постройте экономные схемы для многочленов:
(I)   f (x) = x8 + x6x5 + 2x4x3 + x2x + 1;
(II)   f (x) = xn + 2xn–1 + 3xn–2 + ... + nx + n + 1;
(III) 
 f (x) = x2n ( 2n
2
)  x2n–2 ( 2n
4
)  x2n–4 + ... +  (2n
2n–2
)  x2 + 1;
(IV) 
 f (x) = 1 –  x2

 2! 

  x4

 4! 

 –  x6

 6! 

  x8

 8! 

.

 Решение 


§4. Каждому многочлену — свою схему?

 

Тогда я решил тем же способом разделаться и с остальными медведями.

Э. Распэ. Мюнхаузен среди белых медведей.


А что если для каждого многочлена существует своя схема, гораздо более экономная, чем схема Горнера?

Такие схемы можно было бы искать либо исходя из особенностей отдельного многочлена (искусно комбинируя его коэффициенты), либо сконструировав универсальный метод построения схем, намного более экономных, чем схема Горнера, но, возможно, для некоторых многочленов не наилучших. Недостаток первого подхода в том, что для каждого многочлена придется придумывать свои приёмы, и нет никакой гарантии, что нам это всегда удастся; позже (в §10) мы увидим, что второй путь надёжнее во всех отношениях.

Само собой разумеется, что оба эти метода уместны лишь в тех случаях, когда конкретный многочлен приходится вычислять так часто, что стоит потратить и время, и усилия, чтобы построить для него хорошую схему. Многочлены же «разового пользования» проще вычислять, скажем, по схеме Горнера.

Возможно, подобные рассуждения и привели в 1955 году к открытию универсальной схемы совершенно нового типа для многочлена шестой степени. Мы проиллюстрируем основную идею этой схемы на примере более простой схемы — для многочленов степени 4. Пусть

 f (x) = x4 + ax3 + bx2 + cx + d; (4)

положим

ì   p1 = x(x + A),
í   p2 = (p1 + B)(p1 + x + C) + D,
î  f (x) = p2,
(5)

где A, B, C и D — параметры.

Пример. Многочлен x4 + 3x3 + 6x2 + 3x + 2 можно вычислять по схеме: p1 = x(x + A),  f (x) = (p1 – 1)(p1 + x + 5) + 7, содержащей два умножения (вместо трёх по Горнеру) и пять (вместо четырёх) (+, –)-операций; здесь A=1, B=–1, C=5, D=7.

Выпишем явное выражение для p2(x):

p2(x) = x4 + (2A + 1)·x3 + (A2 + A + B + Cx2 +
+ (AB + B + ACx + BC + D;

приравняв коэффициенты  f (x) и p2(x), выразим параметры, входящие в формулу (5), через коэффициенты (4):

A = (a – 1)/2;
B = cbA + A2(A + 1);
C = bBA(A + 1);
D = dBC.
(6)

Из этих формул ясно, что схема (5) универсальна.

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

§5. Универсальная схема степени n

 

— Я думаю, — сказал глубокомысленно Пятачок, — что если бы Иа встал под деревом, а Пух встал к нему на спину, а я встал на плечи Пуха...

— И если бы спина Иа-Иа неожиданно треснула, то мы бы все здорово посмеялись, — сказал Иа.

А. А. Милн. Винни Пух


В 1958 году была найдена общая универсальная схема с предварительной обработкой коэффициентов. Структура этой схемы для многочлена чётной степени (n=2k) напоминает пирамиду — в основании лежит схема (5) (в её «прочности» мы уже убедились), содержащаяся в схеме степени 6, которая содержится в схеме степени 8 и т.д.:
ì   p1 = x(x + b1),
ï   p2 = (p1 + b2)(p1 + x + b3) + b4,
í   p3 = p2(p1 + b5) + b6,
ï   · · · · · · · · · · · · · · · · · ·
î   pk = pk–1(p1 + b2k–1) + b2k,   f (x) = pk,   k≥2.
(7.k)

схема (7.2) — это и есть схема (5). Результат схемы (7.k) — многочлен pk(x) степени n = 2k; многочлен же нечётной степени n = 2k + 1 можно представить в таком виде:

 f (x) = x(x2k + a1x2k–1 + ... + a2k) + a2k+1; (8)

многочлен в круглых скобках вычисляется по схеме (7.k). В итоге схема содержит k умножений и 2k+1 сложений для многочлена чётной степени n = 2k и k+1 умножений и 2k+2 сложений для многочлена нечётной степени n = 2k + 1 (с учётом (7.k) и (8) ).

 Упражнения 

4. Найдите формулы предварительной обработки коэффициентов, аналогичные формулам (6), для схемы (7.3) вычисления многочленов шестой степени.

5. Докажите индукцией по k≥2 универсальность схемы (7.k).
 Решение 


Начиная с третьей строки, схема (7.k) очень напоминает схему Горнера (3); разница лишь в том, что теперь после каждого умножения степень увеличивается не на единицу, а на два.

Итак, нам удалось уменьшить число умножений по сравнению со схемой Горнера вдвое. Какой ценой? Из решения упражнения 5 видно, что процесс вычисления параметров b1, b2, ..., b2n по коэффициентам a1, a2, ..., a2n очень сложен, — он включает в себя решение серии уравнений с одним неизвестным степени k–1, k–2, ... Это означает, в частности, что при k≥6 (n≥12) формул вычисления параметров нет 4, хотя, разумеется, их значения могут быть найдены приближёнными методами с любой степенью точности.

Здесь возникает ещё одно затруднение, оказавшееся, правда, преодолимым. До сих пор мы не уточняли, значения каких —  действительных  или  комплексных — многочленов мы вычисляем. Схема Горнера применима и в том, и в другом случае, схема же (7.k) преимущественно «комплексная» — действительным коэффициентам могут соответствовать комплексные параметры. Появление комплексных чисел при вычислении действительных многочленов намного увеличивает число арифметических операций 5. К счастью, в 1960 году схему (7.k) небольшим усложнением удалось превратить в действительную; однако полные доказательства в этом случае уже очень непросты.

§6. О схемах вообще...

 

— Минуточку, минуточку — раздались протестующие голоса. — Избегайте, пожалуйста, научных терминов, объясняйте популярно...

— Верно! — подтвердили остальные. — Говорите понятнее... Что такое лес?

Я. Осенка. Загородная прогулка в 2050 году


Пришло время спросить, нет ли схем, более экономных, чем схема (7.k)? Но тогда неизбежен и вопрос — что такое  схема?

Определение. (I). Схема с предварительной обработкой коэффициентов — это последовательность арифметических операций, в которых участвуют переменная x, параметры b1, b2, ..., bm и результаты предшествующих операций. Результат последней операции назовем результатом схемы. (II). Если при некотором наборе значений параметров b1, ..., bm результат схемы есть данный многочлен степени n, то мы скажем, что схема представляет этот многочлен. (III). Если схема представляет многочлен, то процесс вычисления по его коэффициентам соответствующего набора значений параметров назовем предварительной обработкой коэффициентов. (IV). Схема называется универсальной степени n, если она представляет любой многочлен степени n вида (1).

Примеры. 1. Схема (7.k) — универсальная (степени n=2k); то же верно и для схемы Горнера (параметры — сами коэффициенты).

2. Схема p(x) = (xn+1b1)/(xb2) представляет многочлен (в) §3 при b1 = b2 = 1.

 Упражнение 

6. Докажите, что общее число SN схем (всех степеней), содержащих не более N операций, конечно и не превосходит числа 6   [(3N – 1)!/(2N – 1)!]2.
 Решение 


§7. ... И о наилучшей из них, в частности

 

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

Платон


Теперь наш вопрос о наилучших схемах степени n приобрёл точный смысл, и можно дать на него точный ответ: схема из §5 почти наилучшая — любая универсальная схема степени n содержит не менее ½(n–1) (×, :)-операций и не менее n–1 (+, –)-операций.

Справедливость этого утверждения можно вывести из двух важных  свойств  схем:

  1. число m параметров универсальной схемы степени n не меньше числа коэффициентов, то есть mn;
  2. в промежутке между двумя (×, :)-операциями любой (не обязательно универсальной) схемы может появиться  не более двух по-настоящему новых параметров (все остальные будут «лишними»), а между двумя (+, –)-операциями —  не более одного.

Второе свойство стоит сформулировать более строго: если схема содержит r (×, :)-операций (или s (+, –)-операций), то число m параметров либо сразу не больше 2r+1 (соответственно s+1), либо без ущерба для свойств схемы может быть уменьшено до 2r+1 (соответственно, s+1), то есть m ≤ 2r + 1 и ms + 1.

Итак, nm ≤ 2r + 1 и nms + 1, отсюда ½(n – 1) ≤ r и n – 1 ≤ s.

— Но вы совсем забыли о схеме Горнера! — прервёт нас читатель, которому больше по душе классическая ясность схем без предварительной возни с коэффициентами. — Ведь она не зря кажется предельно экономной!

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

А теперь займёмся двумя сформулированными выше свойствами схем, сначала вторым.

§8. Параметры в операциях

  Дама сдавала в багаж
диван,
чемодан,
саквояж,
картину,
корзину,
картонку
и маленькую собачонку.

С. Я. Маршак


Наше определение  схемы  не накладывало никаких ограничений на форму её записи. Мы назовём элементарной запись схемы типа «одна строка — одна операция», когда запоминается (и обозначается своим символом) результат каждой операции схемы;  примеры:  эпиграф (хотя это и не схема, а скорее багажная квитанция), схема для многочлена x2^k (§3) — в ней каждый результат используется больше одного раза и потому нуждается в запоминании.

Не для всех схем элементарная форма записи является единственной: если результат какой-то операции используется лишь однажды, то эту операцию можно сразу включить в ту строку, в которой участвует её результат. (Примеры: каждая строка схемы (3), начиная со второй, включает две операции, а схемы (7.k) — не менее трёх.) Интересно, что схема (7.k) не допускает записи меньше, чем в две строки, так как результат первого умножения используется многократно, а схема (3) — допускает (формула (2) ).

Переходя к доказательству свойства 2), рассмотрим элементарную форму записи схемы и обозначим через q1, ..., qr результаты (×, :)-операций. Перепишем схему в «(×, :)-форме»: «одна строка — одна (×, :)-операция». При этом число (+, –)-операций может заметно возрасти — мы ведь не запоминаем их результаты; но сейчас нас интересует только число (×, :)-операций, а оно остаётся прежним. Первые r строк схемы в «(×, :)-форме» имеют вид

 qj = (Aj ± Bj ± ...) × : (Cj ± Dj ± ...),   1 ≤ jr, (9)

где Aj, Bj, ..., Cj, Dj, ... — это либо bi, либо x, либо qs, где s<j. Если (×, :)-операция из qr не была заключительной операцией исходной схемы, то мы объединим в строку

 qr+1 = A ± B ± ... (10)

все те (+, –)-операции, которые ещё остаётся выполнить. Обозначим теперь через d'j и d"j алгебраические суммы всех параметров bi в левой и правой скобках (9), а через dr+1 в (10) (даже если их кое-где в (9) и (10) нет вовсе). Перепишем теперь (9) и (10), пользуясь новыми параметрами d'j, d"j (1≤jr), dr+1. Полученная схема будет универсальной, и предварительная обработка коэффициентов состоит в вычислении параметров bi для исходной схемы (9), (10), а затем уже параметров d'j, d"j. Новая схема представляет все многочлены, что и исходная, и содержит по два параметра d', d" на каждую (×, :)-операцию плюс, возможно, ещё один параметр dr+1.

Доказательство для (+, –)-операций аналогично; соответствующие построения выполните самостоятельно.

§9. Параметры универсальной схемы

 

Я нарочно заостряю, упрощаю и карикатурю мысль.

В. В. Маяковский. Как писать стихи


«Причина» справедливости неравенства mn для универсальных схем очень проста: если схема степени n универсальна, то есть представляет все многочлены степени n, то каждому такому многочлену должен соответствовать свой набор параметров; поэтому «число» различных наборов параметров должно быть не меньше «числа» разных многочленов.

Однако, пожелай мы придать этому объяснению точный смысл, нам не хватило бы этого номера «Кванта». Удовлетворимся же тем, что разберём  иллюстративный пример.  Пусть n=2,  f (x) = x2 + a1x + a2. Каждый конкретный многочлен можно изобразить точкой на плоскости с координатами a1, a2. Если для схемы m<n=2, то она либо совсем не содержит параметров (m=0), либо содержит один параметр (m=1). В первом случае схема представляет  единственный  многочлен (точка на плоскости), во втором —  семейство  многочленов, которое изобразится на «плоскости многочленов» в виде некоторой  «хорошей»  кривой.

Скажем, схема p = (x + b)(xb) + bx = x2 + bxb2 представляет все многочлены, изображаемые точками параболы (a1 = b, a2 = –b2) или a2 = –a12.

Вся  тонкость  в том, что коэффициенты выражаются через параметры (согласно схеме) арифметическими средствами — поэтому-то наша кривая многочленов, представимых схемой, и будет «нормальной» кривой, содержащей лишь «ничтожную часть» точек плоскости. Возможно, читателям известно, что существуют кривые, которые заполняют всю плоскость (см. книгу Г. Штейнгауза «Математический калейдоскоп», с. 78), так что соответствующие схемы (существование их в принципе невозможно!) представляли бы все многочлены степени 2 и были бы универсальными.

§10. И последний

 

Девочке четырех с половиной лет прочли «Сказку о рыбаке и рыбке».

— Вот глупый старик, — возмутилась она, — просил у рыбки то новый дом, то новое корыто. Попросил бы сразу новую старуху.

К. Чуковский. От двух до пяти


Итак, мы доказали (§§7–9), что достоинства универсальных схем  почти  исчерпаны схемой §5. Но остаётся ещё возможность искать для каждого многочлена свою схему, намного более экономную, чем та, которую можно для него получить, используя (7.k)–(8) или какую-нибудь другую универсальную схему. Правда, девочка из эпиграфа, убеждённая в силе универсальных методов, предостерегает нас от увлечения поисками всё новых и новых сверхэкономных индивидуальных схем для отдельных многочленов (вроде схем §3); сейчас мы покажем бесполезность таких поисков.

Отметим, прежде всего, что индивидуальную схему степени n разумно считать «сверхэкономной», если она содержит «ненормально мало» (по сравнению с универсальными схемами) либо (×, :)-операций, либо (+, –)-операций и если общее число её операций не больше, скажем, 100n  (для сравнения:  общее число операций схемы Горнера равно 2n–1).

Возьмём любую индивидуальную схему для конкретного многочлена степени n и заменим в ней все числа буквами b1, b2, ...; при этом получим схему, удовлетворяющую всем требованиям определения §6.

Пример. Схема многочлена (в) из §3 после замены чисел 1, 1 буквами b1, b2 превращается в схему p(x) = (xn+1b1) : (xb2), представляющую все многочлены вида

 f (x) = xn + axn–1 + a2xn–2 + ... + an–1x + an

(при b1 = an+1, b2 = a) и только их.

После такой замены из всех сверхэкономных индивидуальных схем получится лишь конечное число  разных  схем (см. упражнение 6), каждая из которых представляет, согласно §9, лишь «ничтожную часть» многочленов степени n.

Итак, многочлены, которые могут быть вычислены быстрее, чем за ½(n–1) (×, :)-операций или n–1 (+, –)-операций, — исключение из общего правила. Тем не менее, при построении схемы для конкретного многочлена стóит использовать его особенности, если они бросаются в глаза.


ПРИМЕЧАНИЯ
1.

Чтобы упростить выкладки, мы ограничимся многочленами с единичным коэффициентом при старшем члене (a0 = 1); там, где это будет необходимо, мы поясним, как поступать в общем случае (a0 ≠ 1). назад к тексту

2.

Если a0 ≠ 1, то мы положим p1 = a0x + a1 (число умножений при этом возрастает на единицу). назад к тексту

3.

Читается: «плюс-минус-операции», «умножить-разделить-операции». назад к тексту

4.

Под формулой обычно понимают набор арифметических операций, корней, степеней. Вы, наверное, знаете, что Э.Галуа и Н.Абель, гениальные (и оба очень рано умершие) математики XIX века, доказали, что для нахождения корней многочленов пятой и более высоких степеней таких общих формул не существует (см. «Квант», 1973, № 10, с. 3—12). назад к тексту

5.

Одно «комплексное» сложение — это два «действительных», одно «комплексное» умножение — четыре (!) умножения и два сложения. назад к тексту

6.

Чтобы иметь возможность сравнивать схемы, разумно для обозначения их параметров использовать буквы, например, из последовательности b1, b2, ..., bk, ...; понятно, что тогда схемы, отличающиеся лишь названиями параметров, считаются одинаковыми. назад к тексту



Hosted by uCoz