Преобразование многочлена. Преобразование многочленов с помощью формул сокращенного умножения

Многочленом называют сумму одночленов. Если все члены многочлена записать в стандартном виде (см. п. 51) и выполнить приведение подобных членов, то получится многочлен стандартного вида.

Всякое целое выражение можно преобразовать в многочлен стандартного вида - в этом состоит цель преобразований (упрощений) целых выражений.

Рассмотрим примеры, в которых целое выражение нужно привести к стандартному виду многочлена.

Решение. Сначала приведем к стандартному виду члены многочлена. Получим После приведения подобных членов получим многочлен стандартного вида

Решение. Если перед скобками стоит знак «плюс, то скобки можно опустить, сохранив знаки всех слагаемых, заключенных в скобки. Воспользовавшись этим правилом раскрытия скобок, получим:

Решение. Если перед скобками стоит зиак «минус», то скобки можно опустить, изменив знаки всех слагаемых» заключенных в скобки. Воспользовавшись этим правилом паскрытия скобок, получим:

Решение. Произведение одночлена и многочлена согласно распределительному закону равно сумме произведений этого одночлена и каждого члена многочлена. Получаем

Решение. Имеем

Решение. Имеем

Осталось привести подобные члены (они подчеркнуты). Получим:

53. Формулы сокращенного умножения.

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

Эти тождества называют формулами сокращенного умножения,

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

Пример 1. .

Решение. Воспользовавшись формулой (1), получим:

Пример 2. .

Решение.

Пример 3. .

Решение. Воспользовавшись формулой (3), получим:

Пример 4.

Решение. Воспользовавшись формулой (4), получим:

54. Разложение многочленов на множители.

Иногда можно преобразовать многочлен в произведение нескольких сомножителей - многочленов или одпочленов. Такое тождественное преобразование называется разложением многочлена на множители. В этом случае говорят, что многочлен делится на каждый из этих множителей.

Рассмотрим некоторые способы разложения многочленов на множители,

1) Вынесение общего множителя за скобку. Это преобразование является непосредственным следствием распределительного закона (для наглядности нужно лишь переписать этот закон «справа налево»):

Пример 1. Разложить на множители многочлен

Решение. .

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

2) Использование формул сокращенного умножения. Формулы (1) - (7) из п. 53, будучи прочитанными «справа налево, во многих случаях оказываются полезными для разложения многочленов на множители.

Пример 2. Разложить на множители .

Решение. Имеем . Применив формулу (1) (разность квадратов), получим . Применив

теперь формулы (4) и (5) (сумма кубов, разность кубов), получим:

Пример 3. .

Решение. Сначала вынесем за скобку общий множитель. Для этого найдем наибольший общий делитель коэффициентов 4, 16, 16 и наименьшие показатели степеней, с которыми переменные а и b входят в составляющие данный многочлен одночлены. Получим:

3) Способ группировки. Он основан на том, что переместительный и сочетательный законы сложения позволяют группировать члены многочлена различными способами. Иногда удается такая группировка, что после вынесения за скобки общих множителей в каждой группе в скобках остается однн и тот же многочлен, который в свою очередь как общий множитель может быть вынесен за скобки. Рассмотрим примеры разложения многочлена на множители.

Пример 4. .

Решение. Произведем группировку следующим образом:

В первой группе вынесем за скобку общий множитель во второй - общий множитель 5. Получим Теперь многочлен как общий множитель вынесем за скобку: Таким образом, получаем:

Пример 5.

Решение. .

Пример 6.

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

Пример 7.

Решение. Прибавим и отнимем одночлен Получим

55. Многочлены от одной переменной.

Многочлен , где a, b - числа переменная, называется многочленом первой степени; многочлен где а, b, с - числа переменная, называется многочленом второй степени или квадратным трехчленом; многочлен где а, b, с, d - числа переменная называется многочленом третьей степени.

Вообще если о, переменная, то многочлен

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

Например, многочлен пятой степени, в котором старший член, 1 - свободный член многочлена.

Корнем многочлена называют такое значение при котором многочлен обращается в нуль. Например, число 2 является корнем многочлена так как

Добрый вечер.
Этот пост посвящён быстрому преобразованию Фурье. Будут рассмотрены прямое и обратное преобразования (в комплексных числах). В следующей части я планирую рассмотреть их применения в некоторых задачах олимпиадного программирования (в частности, одна задача про «похожесть» строк), а также рассказать про реализацию преобразования в целых числах.
БПФ - это алгоритм, вычисляющий значения многочлена степени n =2 k в некоторых n точках за время O (n ⋅logn ) («наивный» метод выполняет ту же задачу за время O (n 2 )). За то же время можно выполнить и обратное преобразование. Так как складывать, вычитать и умножать массивы чисел гораздо легче, чем многочлены (особенно умножать), БПФ часто применяется для ускорения вычислений с многочленами и длинными числами.

Определения и способы применения

Для начала давайте определимся, что такое многочлен:
P (x )=a 0 +x a 1 +x 2 a 2 +x 3 a 3 +... +x n -1 a n -1

Комплексные числа

Если Вы знакомы с комплексными числами, то можете пропустить этот пункт, в противном случае, вот краткое определение:
x =a +i b , где i 2 =-1
Здесь a называется вещественной (Real ) частью, а b - мнимой (Imaginary ). В этих числах, как нетрудно заметить, можно извлекать корень из отрицательных (да и вообще любых) чисел - это очень удобно при работе с многочленам - как следует из основной теоремы алгебры, у каждого многочлена степени n имеется ровно n комплексных корней (с учётом кратности).
Также их очень удобно представлять в виде точек на плоскости:

Еще одним замечательным свойством комплексных чисел является то, что их можно представить в виде x =(cosα+i sinα)r , где α - полярный угол «числа» (называется аргументом ), а r - расстояние от нуля до него (модуль ). А при умножении двух чисел:
a =(cosα+i ⋅sinα)r a
b =(cosβ+i ⋅sinβ)r b
a b =(cosα+i ⋅sinα)(cosβ+i ⋅sinβ)r a r b
a b =(cosα⋅cosβ-sinα⋅sinβ+i (sinα⋅cosβ+cosβ⋅sinα))r a r b
a b =(cos(α+β)+i ⋅sin(α+β))r a r b
Их модули перемножаются, а аргументы складываются.

Комплексные корни из 1

Теперь давайте поймём, как выглядят комплексные корни n -ой степени из 1 . Пусть x n =1 , тогда его модуль, очевидно, равен единице, а n ⋅argx =2 πk , где k - целое. Это обозначает, что после n умножений числа на самого себя (т.е. возведения в n -ю степень) его аргумент станет «кратен» 2 π (360 градусам).
Вспомним формулу числа, если известен аргумент и модуль, получаем:
α=2 π⋅x /n , где 0 x
ω i =cosα+i ⋅sinα
Т.е. если порисовать, то мы получим просто точки на окружности через равные промежутки:

Прошу заметить три вещи, которыми мы будем активно пользоваться (без них ничего не получится):
ω a ⋅ω b =ω (a +b )modn
ω 0 1 2 +... n -1 =0
ω 0 n /2 2 n /2 4 n /2 =... =1 (при чётном n )
Из-за этих свойств именно в этих точках мы и будем считать значение многочлена. Разумеется, результаты необязательно будут вещественными, поэтому в программе потребуется работать с комплексными числами.

Почему сумма корней - ноль

Доказательство очень простое: пусть φ=ω 0 1 +... . Домножим обе части на ω 1 (!= 1). Т.к. ω i ⋅ω 1 i +1 , то φ⋅ω 1 1 2 +... n -1 0 . От перестановки слагаемых сумма не меняется, поэтому φ=φ⋅ω 1 , соответственно φ⋅(ω 1 -1 )=0 . Т.к. ω 1 != 1, то φ=0 .

Как работает

Будем считать, что наш многочлен имеет степень n =2 k . Если нет, дополним старшие коэффициенты нулями до ближайшей степени двойки.
Основная идея БПФ очень проста:
Пусть:
A (x )=a 0 +x a 2 +x 2 a 4 +... +x n /2 -1 a n -2 (четные коэффициэнты P )
B (x )=a 1 +x a 3 +x 2 a 5 +... +x n /2 -1 a n -1 (нечётные коэффициенты P ).
Тогда P (x )=A (x 2 )+x B (x 2 ).
Теперь применим принцип «разделяй и властвуй»: чтобы посчитать значения P в n точках (ω 0 1 ,... ), посчитаем значения A и B рекурсивно в n /2 точках (ω 0 2 ,... ). Теперь значение P i ) восстановить достаточно просто:
P i )=A 2 i )+ω i B 2 i )
Если обозначить за ξ i 2 i точки, в которых мы считаем значения многочлена степени n /2 , формула преобразится:
P i )=A i )+ω i B i )
Её уже можно загонять в программу, не забыв что i принимает значения от 0 до n -1 , а ξ i определено лишь от 0 до n /2 -1 . Вывод - надо будет взять i по модулю n /2 .
Время работы выражается рекуррентной формулой T (n )=O (n )+2 T (n /2 ). Это довольно известное соотношение и оно раскрывается в O (n ⋅log 2 n ) (грубо говоря, глубина рекурсии - log 2 n уровней, на каждом уровне суммарно по всем вызовам выполняется O (n ) операций).

Напишем что-нибудь

Вот пример неэффективной рекурсивной реализации БПФ:
Slow FFT
#include #include using namespace std; typedef complex cd; // STL-ное комплексное число. Нам нужен double, ведь мы работает с sin и cos typedef vector vcd; vcd fft(const vcd &as) { // Возвращает вектор значений в корнях из 1 int n = as.size(); // Когда-то же надо прекратить рекурсию? if (n == 1) return vcd(1, as); vcd w(n); // Считаем корни for (int i = 0; i < n; i++) { double alpha = 2 * M_PI * i / n; w[i] = cd(cos(alpha), sin(alpha)); } // Считаем коэффициенты A и B vcd A(n / 2), B(n / 2); for (int i = 0; i < n / 2; i++) { A[i] = as; B[i] = as; } vcd Av = fft(A); vcd Bv = fft(B); vcd res(n); for (int i = 0; i < n; i++) res[i] = Av + w[i] * Bv; return res; }
Можете добавить ввод-вывод и проверить правильность своей реализации. Для многочлена P (x )=4 +3 x +2 x 2 +x 3 +0 x 4 +0 x 5 +0 x 6 +0 x 7 значения должны получиться такими:
P (w 0 )=(1 0 .0 0 0 ,0 .0 0 0 )
P (w 1 )=(5 .4 1 4 ,4 .8 2 8 )
P (w 2 )=(2 .0 0 0 ,2 .0 0 0 )
P (w 3 )=(2 .5 8 6 ,0 .8 2 8 )
P (w 4 )=(2 .0 0 0 ,0 .0 0 0 )
P (w 5 )=(2 .5 8 6 ,-0 .8 2 8 )
P (w 6 )=(2 .0 0 0 ,-2 .0 0 0 )
P (w 7 )=(5 .4 1 4 ,-4 .8 2 8 )
Если это так - можете засекать время рекурсивного и наивного метода на больших тестах.
У меня на многочлене степени 2 12 эта реализация работает 62 мс, наивная - 1800 мс. Разница налицо.

Избавляемся от рекурсии

Для того, чтобы сделать процедуру нерекурсивной, придётся подумать. Легче всего, как мне кажется, провести аналогию с MergeSort (сортировка слиянием) и нарисовать картинку, на которой показаны все рекурсивные вызовы:


Как мы видим, можно сделать один массив, заполнить его изначально значениями fft(a 0 ), fft(a 4 ), fft(a 2 ), ... . Как несложно понять, номера a i - это «развёрнутые» в двоичном представлении числа 0 ,1 ,2 ,3 ,... . Например, 1 1 0 =0 0 1 2 ,4 1 0 =1 0 0 2 или 6 =1 1 0 2 ,3 =0 1 1 2 . Понять это можно следующим образом: при спуске на нижний уровень рекурсии у нас определяется еще один младший бит (с конца). А при «нормальной» нумерации бит определяется с начала. Поэтому нужно «развернуть» число. Это можно сделать «в лоб» за O (n ⋅log 2 n ), а можно динамическим программированием за O (n ) по следующему алгоритму:
  1. Пробежимся циклом от 0 до n -1
  2. Будем хранить и динамически пересчитывать номер старшего единичного бита числа. Он меняется, только когда текущее число - степень двойки: увеличивается на 1.
  3. Когда мы знаем старший бит числа, перевернуть всё число не составляет труда: «отрезаем» старший бит (XOR), переворачиваем остаток (уже посчитанное значение) и добавляем «отрезанную» единицу
Теперь придумаем алгоритм, позволяющий нам из «ступеньки» получить ступеньку повыше. Хранить все значения с предыдущего шага мы будем в одном массиве. Как хорошо видно на рисунке, надо обрабатывать данные блоками по k , причём вначале k =1 , а потом с каждым шагом увеличивается вдвое. Мы обрабатываем два блока длиной k и получаем на выходе один блок длиной 2 k . Давайте на примере разберём, как это делалось рекурсивно, вспомним формулу из начала статьи и повторим:

Аргументами процедуры для слияния двух блоков будут два vector"а (естесственно, по ссылке, исходный и результат), номер стартового элемента первого блока (второй идёт сразу после) и длина блоков. Можно было бы конечно сделать и iterator"ами - для большей STL"ности, но мы ведь всё равно будем переносить эту процедуру внутрь основной для краткости.
Объединение блоков
void fft_merge(const vcd &src, vcd &dest, int start, int len) { int p1 = start; // Позиция в первом блоке int en1 = start + len; // Конец первого блока int p2 = start + len; // Позиция во втором блоке int en2 = star + len * 2; // Конец второго блока int pdest = start; // Текущая позиция в результатирующем массиве int nlen = len * 2; // Длина нового блока for (int i = 0; i < nlen; i++) { double alpha = 2 * M_PI * i / nlen; cd w = cd(cos(alpha), sin(alpha)); // Текущий корень dest = src + w * src; if (++p1 >= en1) p1 = start; if (++p2 >= en2) p2 = start + len; } }
И основная процедура преобразования:
<< k) < n) k++; vi rev(n); rev = 0; int high1 = -1; for (int i = 1; i < n; i++) { if ((i & (i - 1)) == 0) // Проверка на степень двойки. Если i ей является, то i-1 будет состоять из кучи единиц. high1++; rev[i] = rev; // Переворачиваем остаток rev[i] |= (1 << (k - high1 - 1)); // Добавляем старший бит } vcd cur(n); for (int i = 0; i < n; i++) cur[i] = as]; for (int len = 1; len < n; len <<= 1) { vcd ncur(n); for (int i = 0; i < n; i += len * 2) fft_merge(cur, ncur, i, len); cur.swap(ncur); } return cur; }

Оптимизация

На многочлене степени 2 1 6 рекурсия работает 640 мс, без рекурсии - 500. Улучшение есть, но программу можно сделать еще быстрее. Воспользуемся тем свойством, что ω i =-ω i +n /2 . Значит, можно не считать два раза корень и a i ⋅ω j - синус, косинус и умножение комплексных чисел очень затратные операции.
fft_merge()
for (int i = 0; i < len; i++) { double alpha = 2 * M_PI * i / nlen; cd w = cd(cos(alpha), sin(alpha)); // Текущий корень cd val = w * src; dest = src + val; dest = src - val; pdest++; if (++p1 >= en1) p1 = start; if (++p2 >= en2) p2 = start + len; }
Перехо с такой оптимизацией называется «преобразованием бабочки». Программа стала работать 260 мс. Для закрепления успеха давайте предподсчитаем все корни из 1 и запишем их в массив:
fft_merge()
int rstep = roots.size() / nlen; // Шаг в массиве с корнями for (int i = 0; i < len; i++) { cd w = roots; cd val = w * src;
fft()
roots = vcd(n); for (int i = 0; i < n; i++) { double alpha = 2 * M_PI * i / n; roots[i] = cd(cos(alpha), sin(alpha)); }
Теперь скорость работы - 78 мс. Оптимизация в 8 раз по сравнению с первой реализацией!

Оптимизация по коду

На данный момент весь код преобразования занимает порядка 55 строк. Не сотню, но это достаточно много - можно короче. Дляначала избавимся от кучи лишних переменных и операций в fft_merge :
void fft_merge(const vcd &src, vcd &dest, int start, int len) { int p1 = start; //int en1 = start + len; // Не используется, см. конец цикла int p2 = start + len; //int en2 = start + len * 2; // Аналогично int pdest = start; //int nlen = len * 2; // Используется только в следующей строчке //int rstep = roots.size() / nlen; int rstep = roots.size() / (len * 2); for (int i = 0; i < len; i++) { //cd w = roots; // Также используется только в следующей строчке //cd val = w * src; cd val = roots * src; dest = src + val; dest = src - val; pdest++, p1++, p2++; //if (++p1 >= en1) p1 = start; // Так как у нас теперь цикл не до 2len, а только до len, переполнения быть не может //if (++p2 >= en2) p2 = start + len; // Убираем } }
Теперь можно переместить цикл из fft_merge в основную процедуру (также можно убрать p2 , поскольку p2=p1+len - у меня это также дало небольшой выигрыш по времени. Что любопытно, если убрать p1=pdest , то у меня лично выигрыш по времени убивается):
fft()
for (int len = 1; len < n; len <<= 1) { vcd ncur(n); int rstep = roots.size() / (len * 2); for (int pdest = 0; pdest < n;) { int p1 = pdest; for (int i = 0; i < len; i++) { cd val = roots * cur; ncur = cur + val; ncur = cur - val; pdest++, p1++; } pdest += len; } cur.swap(ncur); }
Как видите, само преобразование занимает не так много - 17 строк. Всё остальное - предподсчёт корней и разворот чисел. Если Вы готовы сэкономить код в обмен на время работы (O (n ⋅log 2 n ) вместо O (n )), можете заменить 13 строк разворота чисел на следующие шесть:
В начале процедуры fft()
vcd cur(n); for (int i = 0; i < n; i++) { int ri = 0; for (int i2 = 0; i2 < k; i2++) // Перебираем биты от младших к старшим ri = (ri << 1) | !!(i & (1 << i2)); // И приписываем в конец числа cur[i] = as; }
В результате теперь код выглядит так:
vcd fft(const vcd &as) { int n = as.size(); int k = 0; // Длина n в битах while ((1 << k) < n) k++; vector rev(n); rev = 0; int high1 = -1; for (int i = 1; i < n; i++) { if ((i & (i - 1)) == 0) // Проверка на степень двойки. Если i ей является, то i-1 будет состоять из кучи единиц. high1++; rev[i] = rev; // Переворачиваем остаток rev[i] |= (1 << (k - high1 - 1)); // Добавляем старший бит } vcd roots(n); for (int i = 0; i < n; i++) { double alpha = 2 * M_PI * i / n; roots[i] = cd(cos(alpha), sin(alpha)); } vcd cur(n); for (int i = 0; i < n; i++) cur[i] = as]; for (int len = 1; len < n; len <<= 1) { vcd ncur(n); int rstep = roots.size() / (len * 2); for (int pdest = 0; pdest < n;) { int p1 = pdest; for (int i = 0; i < len; i++) { cd val = roots * cur; ncur = cur + val; ncur = cur - val; pdest++, p1++; } pdest += len; } cur.swap(ncur); } return cur; }

Обратное преобразование

Получить значения многочлена в точках - это, конечно, хорошо, но преобразование Фурье умеет больше - по этим значениям построить сам многочлен, причём за то же самое время! Оказывается, что если применить преобразование Фурье к массиву значений, как к коэффициентам многочлена, потом разделить результат на n и перевернуть отрезок с 1 до n -1 (нумерация с 0 ), то мы получим коэффициенты исходного многочлена.
Код тут предельно простой - всё уже написано. Думаю, Вы справитесь.

Доказательство

Пусть мы применяем обратное преобразование к многочлену P (x ) с коэффициентами v i (исходный многочлен имел коэффициенты a i ):
v i =a 0 i a 1 2 i a 2 3 i a +...
Посмотрим на результат преобразования:
b i =v 0 i v 1 2 i v 2 3 i v 3 +...
Подставим значения v j (помним, что ω a ω b a +b m o d n :

Теперь давайте докажем один замечательный факт: при x 0 , ω 0 x 2 x +... +ω (n -1 )x =0 .
Доказывается аналогично тому, что сумма корней - ноль: обозначим за φ сумму, домножим обе части на ω x и посмотрим, что получилось.
Теперь применим этот факт к вычислению значения b i . Заметим, что все строки, кроме одной, в которой содержится a n -i , обнулятся.

Таким образом:

b i =a n -i ⋅(ω 0 0 0 0 +... )

b i =a n -i n

Что и требовалось доказать.

Применение

Вообще говоря, о применении я уже чуть-чуть говорил в начале статьи. В частности, теперь перемножение многочленов можно выполнять следующим образом:
Быстрое перемножение многочленов
vcd a, b; // Многочлены // Чтение многочленов vcd a_vals = fft(a); vcd b_vals = fft(b); vcd c_vals(a_vals.size()); for (int i = 0; i < a_vals.size(); i++) c_vals[i] = a_vals[i] * b_vals[i]; vcd c = fft_rev(c_vals); // Вывод ответа
Легко заметить, что время работы этой программы - O (n ⋅log 2 n ) и самые трудоёмкие операции - преобразования Фурье. Также можно заметить, что если нам требуется вычислить более сложное выражение с двумя многочленами, то по-прежнему можно выполнять лишь три приобразования - сложение и вычитание также будут работать за линейное время. К сожалению, с делением не всё так просто, поскольку многочлен может случайно принять значение 0 в какой-нибудь из точек. UPD2: не забудьте, что степень произведения двух многочленов степени n будет равна 2n , поэтому при вводе следует добавить «лишние» нулевые старшие коэффициенты.
Если представить число в десятичной (или более) системе счисления, как многочлен с коэффициентами - цифрами, то умножение длинных чисел также можно выполнять очень быстро.
И, напоследок, задача, которую я разберу в следующем посте: у вас есть две строки одинаковой длины порядка 1 0 5 из букв A, T, G, C. Требуется найти такой циклический сдвиг одной из строк, чтобы совпало максимальное количество символов. Очевидно наивное решение за O (n 2 ), но есть решение при помощи БПФ.
Удачи!

UPD: Выложил код целиком на

Среди различных выражений, которые рассматриваются в алгебре, важное место занимают суммы одночленов. Приведем примеры таких выражений:
\(5a^4 - 2a^3 + 0,3a^2 - 4,6a + 8 \)
\(xy^3 - 5x^2y + 9x^3 - 7y^2 + 6x + 5y - 2 \)

Сумму одночленов называют многочленом. Слагаемые в многочлене называют членами многочлена. Одночлены также относят к многочленам, считая одночлен многочленом, состоящим из одного члена.

Например, многочлен
\(8b^5 - 2b \cdot 7b^4 + 3b^2 - 8b + 0,25b \cdot (-12)b + 16 \)
можно упростить.

Представим все слагаемые в виде одночленов стандартного вида:
\(8b^5 - 2b \cdot 7b^4 + 3b^2 - 8b + 0,25b \cdot (-12)b + 16 = \)
\(= 8b^5 - 14b^5 + 3b^2 -8b -3b^2 + 16 \)

Приведем в полученном многочлене подобные члены:
\(8b^5 -14b^5 +3b^2 -8b -3b^2 + 16 = -6b^5 -8b + 16 \)
Получился многочлен, все члены которого являются одночленами стандартного вида, причем среди них нет подобных. Такие многочлены называют многочленами стандартного вида .

За степень многочлена стандартного вида принимают наибольшую из степеней его членов. Так, двучлен \(12a^2b - 7b \) имеет третью степень, а трехчлен \(2b^2 -7b + 6 \) - вторую.

Обычно члены многочленов стандартного вида, содержащих одну переменную, располагают в порядке убывания показателей ее степени. Например:
\(5x - 18x^3 + 1 + x^5 = x^5 - 18x^3 + 5x + 1 \)

Сумму нескольких многочленов можно преобразовать (упростить) в многочлен стандартного вида.

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

Если перед скобками ставится знак «+», то члены, заключаемые в скобки, записываются с теми же знаками.

Если перед скобками ставится знак «-», то члены, заключаемые в скобки, записываются с противоположными знаками.

Преобразование (упрощение) произведения одночлена и многочлена

С помощью распределительного свойства умножения можно преобразовать (упростить) в многочлен произведение одночлена и многочлена. Например:
\(9a^2b(7a^2 - 5ab - 4b^2) = \)
\(= 9a^2b \cdot 7a^2 + 9a^2b \cdot (-5ab) + 9a^2b \cdot (-4b^2) = \)
\(= 63a^4b - 45a^3b^2 - 36a^2b^3 \)

Произведение одночлена и многочлена тождественно равно сумме произведений этого одночлена и каждого из членов многочлена.

Этот результат обычно формулируют в виде правила.

Чтобы умножить одночлен на многочлен, надо умножить этот одночлен на каждый из членов многочлена.

Мы уже неоднократно использовали это правило для умножения на сумму.

Произведение многочленов. Преобразование (упрощение) произведения двух многочленов

Вообще, произведение двух многочленов тождественно равно сумме произведении каждого члена одного многочлена и каждого члена другого.

Обычно пользуются следующим правилом.

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

Формулы сокращенного умножения. Квадраты суммы, разности и разность квадратов

С некоторыми выражениями в алгебраических преобразованиях приходится иметь дело чаще, чем с другими. Пожалуй, наиболее часто встречаются выражения \((a + b)^2, \; (a - b)^2 \) и \(a^2 - b^2 \), т. е. квадрат суммы, квадрат разности и разность квадратов. Вы заметили, что названия указанных выражений как бы не закончены, так, например, \((a + b)^2 \) - это, конечно, не просто квадрат суммы, а квадрат суммы а и b. Однако квадрат суммы а и b встречается не так уж часто, как правило, вместо букв а и b в нем оказываются различные, иногда довольно сложные выражения.

Выражения \((a + b)^2, \; (a - b)^2 \) нетрудно преобразовать (упростить) в многочлены стандартного вида, собственно, вы уже встречались с таким заданием при умножении многочленов:
\((a + b)^2 = (a + b)(a + b) = a^2 + ab + ba + b^2 = \)
\(= a^2 + 2ab + b^2 \)

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

\((a + b)^2 = a^2 + b^2 + 2ab \) - квадрат суммы равен сумме квадратов и удвоенного произведения.

\((a - b)^2 = a^2 + b^2 - 2ab \) - квадрат разности равен сумме квадратов без удвоенного произведения.

\(a^2 - b^2 = (a - b)(a + b) \) - разность квадратов равна произведению разности на сумму.

Эти три тождества позволяют в преобразованиях заменять свои левые части правыми и обратно - правые части левыми. Самое трудное при этом - увидеть соответствующие выражения и понять, чем в них заменены переменные а и b. Рассмотрим несколько примеров использования формул сокращенного умножения.

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

Определение и примеры целых выражений

Определение 1

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

Исходя из определения, имеем, что примеры целых выражений: 7 , 0 , − 12 , 7 11 , 2 , 73 , - 3 5 6 и так далее, причем переменные вида a , b , p , q , x , z считают за целые выражения. После их преобразования сумм, разностей, произведений выражения примут вид

x + 1 , 5 · y 3 · 2 · 3 · 7 − 2 · y − 3 , 3 − x · y · z 4 , - 6 7 , 5 · (2 · x + 3 · y 2) 2 − - (1 − x) · (1 + x) · (1 + x 2)

Если в выражении имеется деление на число, отличное от нуля вида x: 5 + 8: 2: 4 или (x + y) : 6 , тогда деление может обозначаться при помощи дробной черты, как x + 3 5 - 3 , 2 · x + 2 . При рассмотрении выражений вида x: 5 + 5: x или 4 + a 2 + 2 · a - 6 a + b + 2 · c видно, что такие выражения не могут быть целыми, так как в первом имеется деление на переменную x , а во втором на выражение с переменной.

Многочлен и одночлен являются целыми выражениями, с которыми встречаемся в школе при работе с рациональными числами. Иначе говоря, целые выражения не включают в себя записи иррациональных дробей. Другое название – это целые иррациональные выражения.

Какие преобразования целых выражений возможны?

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

Пример 1

Раскрыть скобки и привести подобные слагаемые в 2 · (a 3 + 3 · a · b − 2 · a) − 2 · a 3 − (5 · a · b − 6 · a + b) .

Решение

Для начала необходимо применить правило раскрытия скобок. Получим выражение вида 2 · (a 3 + 3 · a · b − 2 · a) − 2 · a 3 − (5 · a · b − 6 · a + b) = = 2 · a 3 + 2 · 3 · a · b + 2 · (− 2 · a) − 2 · a 3 − 5 · a · b + 6 · a − b = = 2 · a 3 + 6 · a · b − 4 · a − 2 · a 3 − 5 · a · b + 6 · a − b

После чего можем привести подобные слагаемые:

2 · a 3 + 6 · a · b − 4 · a − 2 · a 3 − 5 · a · b + 6 · a − b = = (2 · a 3 − 2 · a 3) + (6 · a · b − 5 · a · b) + (− 4 · a + 6 · a) − b = = 0 + a · b + 2 · a − b = a · b + 2 · a − b .

После их приведения получаем многочлен вида a · b + 2 · a − b .

Ответ : 2 · (a 3 + 3 · a · b − 2 · a) − 2 · a 3 − (5 · a · b − 6 · a + b) = a · b + 2 · a − b .

Пример 2

Произвести преобразования (x - 1) : 2 3 + 2 · (x 2 + 1) : 3: 7 .

Решение

Имеющееся деление можно заменять умножением, но на обратное число. Тогда необходимо выполнить преобразования, после которых выражение примет вид (x - 1) · 3 2 + 2 · (x 2 + 1) · 1 3 · 1 7 . Теперь следует заняться приведением подобных слагаемых. Получим, что

(x - 1) · 3 2 + 2 · (x 2 + 1) · 1 3 · 1 7 = 3 2 · (x - 1) + 2 21 · x 2 + 1 = = 3 2 · x - 3 2 + 2 21 · x 2 + 2 21 = 2 21 · x 2 + 3 2 · x - 59 42 = 2 21 · x 2 + 1 1 2 · x - 1 17 42

Ответ : (x - 1) : 2 3 + 2 · (x 2 + 1) : 3: 7 = 2 21 · x 2 + 1 1 2 · x - 1 17 42 .

Пример 3

Представить выражение 6 · x 2 · y + 18 · x · y − 6 · y − (x 2 + 3 · x − 1) · (x 3 + 4 · x) в виде произведения.

Решение

Рассмотрев выражение, видно, что первые три слагаемые имеют общий множитель вида 6 · y , который следует вынести за скобки во время преобразования. Тогда получим, что 6 · x 2 · y + 18 · x · y − 6 · y − (x 2 + 3 · x − 1) · (x 3 + 4 · x) = = 6 · y · (x 2 + 3 · x − 1) − (x 2 + 3 · x − 1) · (x 3 + 4 · x)

Видно, что получили разность двух выражений вида 6 · y · (x 2 + 3 · x − 1) и (x 2 + 3 · x − 1) · (x 3 + 4 · x) с общим множителем x 2 + 3 · x − 1 , который необходимо вынести за скобки. Получим, что

6 · y · (x 2 + 3 · x − 1) − (x 2 + 3 · x − 1) · (x 3 + 4 · x) = = (x 2 + 3 · x − 1) · (6 · y − (x 3 + 4 · x))

Раскрыв скобки, имеем выражение вида (x 2 + 3 · x − 1) · (6 · y − x 3 − 4 · x) , которое необходимо было найти по условию.

Ответ: 6 · x 2 · y + 18 · x · y − 6 · y − (x 2 + 3 · x − 1) · (x 3 + 4 · x) = = (x 2 + 3 · x − 1) · (6 · y − x 3 − 4 · x)

Тождественные преобразования требуют строгое выполнение порядка действий.

Пример 4

Преобразовать выражение (3 · 2 − 6 2: 9) 3 · (x 2) 4 + 4 · x: 8 .

Решение

Вы первую очередь выполняются действия в скобках. Тогда имеем, что 3 · 2 − 6 2: 9 = 3 · 2 − 3 6: 9 = 6 − 4 = 2 . После преобразований выражение принимает вид 2 3 · (x 2) 4 + 4 · x: 8 . Известно, что 2 3 = 8 и (x 2) 4 = x 2 · 4 = x 8 , тогда можно прийти к выражению вида 8 · x 8 + 4 · x: 8 . Второе слагаемое требует замены деления на умножение из 4 · x: 8 . Сгруппировав множители, получаем, что

8 · x 8 + 4 · x: 8 = 8 · x 8 + 4 · x · 1 8 = 8 · x 8 + 4 · 1 8 · x = 8 · x 8 + 1 2 · x

Ответ: (3 · 2 − 6 2: 9) 3 · (x 2) 4 + 4 · x: 8 = 8 · x 8 + 1 2 · x .

Преобразование в многочлен

Большинство случаев преобразования целых выражений – это представление в виде многочлена. Любое выражение можно представить в виде многочлена.Любое выражение может быть рассмотрено как многочлены, соединенные арифметическими знаками. Любое действие над многочленами в итоге дает многочлен.

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

Пример 5

Представить в виде многочлена 2 · (2 · x 3 − 1) + (2 · x − 1) 2 · (3 − x) + (4 · x − x · (15 · x + 1)) .

Решение

В данном выражение начать преобразования с выражения вида 4 · x − x · (15 · x + 1) , причем по правилу в начале выполнив умножение или деление, после чего сложение или вычитание. Умножим – x на 15 · x + 1 , тогда получим 4 · x − x · (15 · x + 1) = 4 · x − 15 · x 2 − x = (4 · x − x) − 15 · x 2 = 3 · x − 15 · x 2 . Заданное выражение примет вид 2 · (2 · x 3 − 1) + (2 · x − 1) 2 · (3 − x) + (3 · x − 15 · x 2) .

Далее необходимо произвести возведение во 2 степень многочлена 2 · x − 1 , получим выражение вида (2 · x − 1) 2 = (2 · x − 1) · (2 · x − 1) = 4 · x 2 + 2 · x · (− 1) − 1 · 2 · x − 1 · (− 1) = = 4 · x 2 − 4 · x + 1

Теперь можно перейти к виду 2 · (2 · x 3 − 1) + (4 · x 2 − 4 · x + 1) · (3 − x) + (3 · x − 15 · x 2) .

Разберем умножение. Видно, что 2 · (2 · x 3 − 1) = 4 · x 3 − 2 и (4 · x 2 − 4 · x + 1) · (3 − x) = 12 · x 2 − 4 · x 3 − 12 · x + 4 · x 2 + 3 − x = = 16 · x 2 − 4 · x 3 − 13 · x + 3

тогда можно сделать переход к выражению вида (4 · x 3 − 2) + (16 · x 2 − 4 · x 3 − 13 · x + 3) + (3 · x − 15 · x 2) .

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

(4 · x 3 − 2) + (16 · x 2 − 4 · x 3 − 13 · x + 3) + (3 · x − 15 · x 2) = = 4 · x 3 − 2 + 16 · x 2 − 4 · x 3 − 13 · x + 3 + 3 · x − 15 · x 2 = = (4 · x 3 − 4 · x 3) + (16 · x 2 − 15 · x 2) + (− 13 · x + 3 · x) + (− 2 + 3) = = 0 + x 2 − 10 · x + 1 = x 2 − 10 · x + 1 .

Отсюда следует, что исходное выражение имеет вид x 2 − 10 · x + 1 .

Ответ: 2 · (2 · x 3 − 1) + (2 · x − 1) 2 · (3 − x) + (4 · x − x · (15 · x + 1)) = x 2 − 10 · x + 1 .

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

Пример 6

Преобразовать 4 · (2 · m + n) 2 + (m − 2 · n) · (m + 2 · n) .

Решение

Из формулы квадрата получим, что (2 · m + n) 2 = (2 · m) 2 + 2 · (2 · m) · n + n 2 = 4 · m 2 + 4 · m · n + n 2 , тогда произведение (m − 2 · n) · (m + 2 · n) равняется разности квадратов m и 2 · n , таким образом, равняется m 2 − 4 · n 2 . Получим, что исходное выражение примет вид 4 · (2 · m + n) 2 + (m − 2 · n) · (m + 2 · n) = 4 · (4 · m 2 + 4 · m · n + n 2) + (m 2 − 4 · n 2) = = 16 · m 2 + 16 · m · n + 4 · n 2 + m 2 − 4 · n 2 = 17 · m 2 + 16 · m · n

Ответ: 4 · (2 · m + n) 2 + (m − 2 · n) · (m + 2 · n) = 17 · m 2 + 16 · m · n .

Чтобы преобразование не было слишком длинным, необходимо заданное выражение приводить к стандартному виду.

Пример 7

Упростить выражение вида (2 · a · (− 3) · a 2 · b) · (2 · a + 5 · b 2) + a · b · (a 2 + 1 + a 2) · (6 · a + 15 · b 2) + (5 · a · b · (− 3) · b 2)

Решение

Чаще всего многочлены и одночлены даются не стандартного вида, поэтому приходится выполнять преобразования. Следует преобразовать, чтобы получить выражение вида − 6 · a 3 · b · (2 · a + 5 · b 2) + a · b · (2 · a 2 + 1) · (6 · a + 15 · b 2) − 15 · a · b 3 . Для того чтобы привести подобные, необходимо предварительно произвести умножение по правилам преобразования сложного выражения. Получаем выражение вида

− 6 · a 3 · b · (2 · a + 5 · b 2) + a · b · (2 · a 2 + 1) · (6 · a + 15 · b 2) − 15 · a · b 3 = = − 12 · a 4 · b − 30 · a 3 · b 3 + (2 · a 3 · b + a · b) · (6 · a + 15 · b 2) − 15 · a · b 3 = = − 12 · a 4 · b − 30 · a 3 · b 3 + 12 · a 4 · b + 30 · a 3 · b 3 + 6 · a 2 · b + 15 · a · b 3 − 15 · a · b 3 = = (− 12 · a 4 · b + 12 · a 4 · b) + (− 30 · a 3 · b 3 + 30 · a 3 · b 3) + 6 · a 2 · b + (15 · a · b 3 − 15 · a · b 3) = 6 · a 2 · b

Ответ: (2 · a · (− 3) · a 2 · b) · (2 · a + 5 · b 2) + a · b · (a 2 + 1 + a 2) · (6 · a + 15 · b 2) + + (5 · a · b · (− 3) · b 2) = 6 · a 2 · b

Если вы заметили ошибку в тексте, пожалуйста, выделите её и нажмите Ctrl+Enter

19. Возьмем формулу

мы ее читали так: «разность числе a и b». Мы можем в этой формуле число a заменить нулем; тогда она обратится в

0 – b или просто в –b.

Из нуля вычесть b значит, согласно тому, что мы знаем о вычитании относительных чисел, к нулю приписать число b, взятое с обратным знаком. Поэтому выражение –b должно понимать, как число, обратное по знаку числу b. Если, напр., b = +5, то –b = –5; если b = –4, то –b = +4 и т. п. Если мы напишем выражение +a, то его надо понимать, как число, равное числу a. Если a = +5, то +a = +5; если a = –4, то +a = 4 и т. п.

Поэтому формулу

мы можем понимать, без различия результата, или в смысле

или в смысле

Таким образом мы всегда можем заменять вычитание сложением и всякую разность понимать, как сумму двух чисел:
a – b есть сумма чисел a и (–b)
x – y есть сумма чисел x и (–y)
–a – b есть сумма чисел (–a) и (–b) и т. п.

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

a – b + c + d – e – f,

мы можем теперь, с точки зрения алгебры, понимать только, как сумму, а именно:

a – b + c + d – e – f = (+a) + (–b) + (+c) + (+d) + (–e) + (–f).

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

20. Возьмем какую-нибудь алгебраическую сумму

a – b – c или –3bc² + 2ab – 4a²b и т. п.

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

a – b – c = (+a) + (–b) + (–c)
–abc – 3bc² + 2ab – 4a²b = (–abc) + (–3bc²) + (+2ab) + (–4a²b) и т. п.

Отдельно каждое слагаемое называют именем член многочлена.

Первый многочлен,

состоит из трех членов: (+a), (–b) и (+c).

Второй многочлен,

–abc – 3bc² + 2ab – 4a²b,

состоит из четырех членов: (–abc), (–3bc²), (+2ab) и (–4a²b).

Слагаемые суммы можно переставлять в любом порядке:

–abc – 3bc² + 2ab – 4a²b = (–abc) + (–3bc²) + (+2ab) + (–4a²b) =
= (+2ab) + (–3bc²) + (–4a²b) + (–abc) = 2ab – 3bc² – 4a²b – abc.

Это свойство суммы теперь можно выразить иначе: члены многочлена можно переставлять в любом порядке. Это и сделано выше для многочлена –abc – 3bc² + 2ab – 4a²b, притом так, что впереди теперь оказался член (+2ab). Это позволило несколько упростить выражение: впереди знак + можно не писать. Конечно, надо подобные перестановки делать сразу, не заключая предварительно (как выше) каждое слагаемое в скобки.

Еще пример:

1 – 3a + 2a² – a³ + 3a 4 = 3a 4 – a³ + 2a² – 3a + 1.

Первый член этого многочлена был первоначально (+1) – знак + подразумевался перед единицею; когда мы переносим этот член на другое, кроме первого, место (выше мы перенесли его на последнее место), то уже этот знак + пропускать нельзя.

Мы можем заметить, что в предыдущем примере мы перестановкою членов многочлена достигли некоторого порядка: на первом месте стоит член с буквою a в 4-ой степени, на следующем – член с буквою a в 3-ей степени, потом идет член с буквою a во 2-ой степени, потом – a в 1-ой степени и, наконец, член, где буквы a вовсе нет.

Подобное расположение членов многочлена выражают словами «многочлен расположен по нисходящим степеням буквы a».

Вот еще примеры подобного расположения:

3x 5 – 2ax 3 + b (по нисходящим степеням буквы x)
a 4 – a 3 b + a 2 b 2 – ab 3 + b 4 (по нисходящим степеням буквы a)
3ab 5 – 4a 3 b 3 + 5a 4 b 2 – 2a 6 (по нисходящим степеням буквы b)
4x 4 – 3x 3 + 2x 3 (по нисходящим степеням буквы x).

Употребляют часто и обратное «по восходящим степеням» расположение, при котором степень избранной буквы постепенно повышается, причем в 1-м члене или вовсе этой буквы нет, или она имеет здесь наименьшую степень сравнительно с другими членами. О втором из предыдущих примеров мы могли бы сказать, что здесь многочлен расположен по восходящим степеням буквы b. Вот примеры:
3 – 2a + 3a 2 – 4a 3 (по восходящим степеням буквы a );
–x + x 2 – 3x 3 – 4x 4 (по восходящим степеням буквы х );
ax 2 – bx 3 + cx 5 – dx 6 (по восходящим степеням буквы x );
a 3 – 2ab + b 2 (по восходящим степеням буквы b или по нисходящим степеням буквы a);
3x 5 – 4yx 4 – 5y 3 x 2 – 6y 4 x (по нисходящим степеням буквы x или по восходящим степеням буквы y ).

21. Многочлен о двух членах называется двучленом (напр., 3a + 2b), о трех членах – трехчленом (напр., 2a² – 3ab + 4b²) и т. д. Возможно говорить о сумму из одного слагаемого (другое слагаемое равно нулю), или о многочлене об одном члене. Тогда уже, конечно, название «многочлен» неуместно и употребляется название «одночлен». Каждый член любого многочлена, взятый в отдельности, является одночленом. Вот примеры простейших одночленов:

2; –3a; a²; 4x³; –5x4; ab; ab²; –3abc; и т. д.

Почти все одночлены из выше написанных являются произведениями двух или более множителей, причем у большинства из них имеются и числовой множитель и буквенные. Напр., в одночлене –3abc имеется числовой множитель –3 и буквенные множители a, b и c; в одночлене 4x³ имеется числовой множитель +4 (знак + подразумевается) и буквенный множитель x³ и т. д. Если бы мы написали одночлен с несколькими числовыми множителями (а также и с буквенными), вроде следующего

,

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

,

эти числовые множители перемножить – получим

–4a²bc² (точки, знаки умножения пропускаем).

Принято также, в громадном большинстве случаев, числовой множитель писать впереди. Пишут:

4a, а не a 4
–3a²b, а не a²(–3)b

Числовой множитель одночлена называется коэффициентом.

Если в одночлене не написан числовой множитель, например, ab, то можно всегда его подразумевать. В самом деле

a = (+1) ∙ a; ab = (+1)ab;
–a = (–1) ∙ a; a³ = (–1) ∙ a³ и т. п.

Итак, у одночленов a², ab, ab² подразумевается, у каждого, коэффициент 1 (точнее: +1). Если напишем одночлены –ab, –a², –ab² и т. п., то у них должно подразумевать коэффициент –1.

22. Более сложные примеры многочленов и одночленов.

(a + b)² + 3(a – b)² … эта формула выражает сумму двух слагаемых: первым является квадрат суммы чисел a и b, а вторым – произведение числа 3 на квадрат разности тех же чисел. Поэтому эту формулу должно признать двучленом: первый член есть (a + b)² и второй 3(a – b)². Если взять выражение (a + b)² отдельно, то в силу предыдущего, его надо считать одночленом, причем его коэффициент = +1.

a(b – 1) – b(a – 1) – (a – 1)(b – 1) … должно признать за трехчлен (сумма трех слагаемых): первый член есть a(b – 1) и его коэффициент = +1, второй член –b(a – 1), его коэффициент = –1, третий член –(a – 1)(b – 1), его коэффициент = – 1.

Иногда искусственно уменьшают число членов многочлена. Так трехчлен

можно, например, рассматривать за двухчлен, причем a + b, например, считают за один член (за одно слагаемое). Чтобы это яснее отметить, пользуются скобками:

Тогда у члена (a + b) подразумевается коэффициент +1

[в самом деле (a + b) = (+1)(a + b)].



Последние материалы раздела:

Развитие критического мышления: технологии и методики
Развитие критического мышления: технологии и методики

Критическое мышление – это система суждений, способствующая анализу информации, ее собственной интерпретации, а также обоснованности...

Онлайн обучение профессии Программист 1С
Онлайн обучение профессии Программист 1С

В современном мире цифровых технологий профессия программиста остается одной из самых востребованных и перспективных. Особенно высок спрос на...

Пробный ЕГЭ по русскому языку
Пробный ЕГЭ по русскому языку

Здравствуйте! Уточните, пожалуйста, как верно оформлять подобные предложения с оборотом «Как пишет...» (двоеточие/запятая, кавычки/без,...