Массивы
Понижение степени полинома
Если для полинома
n-й степени найден корень
, то можно понизить степень полинома, построив полином
степени
, у которого все корни совпадают с корнями полинома
за исключением того, что у него нет корня
.
Запишем соотношение, связывающее полиномы:

Учитывая соотношение 6.3 о равенстве двух полиномов одной степени, можно выписать
соотношение, связывающее коэффициенты этих полиномов. Эти соотношения нетрудно разрешить относительно неизвестных коэффициентов
. В результате получим:
![]() |
( 6.4) |
Заметьте, неизвестных всего
, а уравнений можно построить -
. Но последнее уравнение
является следствием предыдущих и используется для контроля вычислений.
К новому полиному можно применить тот же процесс - найти его корень и понизить затем степень полинома. Реально понижение степени не намного упрощает задачу отыскания корней, так что чаще всего проще искать корни исходного полинома, изменяя начальные приближения в итерационном процессе или отыскивая различные интервалы, на которых полином меняет свой знак.
Нахождение коэффициентов полинома по его корням
До сих пор рассматривалась задача отыскания корней полинома с заданными коэффициентами. Иногда приходится решать обратную задачу - найти коэффициенты полинома, если известны его корни -
. Полиномов с одинаковыми корнями существует бесчисленное множество. Однако среди них существует единственный полином с коэффициентом
, равным единице. Этот полином называется приведенным, его-то и будем строить. Все остальные полиномы получаются из приведенного полинома умножением всех коэффициентов на произвольное число
, от которого требуется лишь, чтобы оно не было равно нулю. Поэтому для однозначного решения задачи требуется задать n корней и коэффициент при старшем члене полинома. Тогда можно записать следующее равенство:

Для нахождения коэффициентов полинома
воспользуемся, как обычно, соотношением 6.3. Но применить его напрямую сложно. Поэтому воспользуемся процессом, обратным к процессу понижения степени. Построим вначале
- полином первой степени, у которого
является единственным корнем. Затем повысим степень и построим полином второй степени -
, у которого появляется еще один корень -
. Продолжая этот процесс, дойдем до искомого полинома
. При вычислении коэффициентов нового полинома будем использовать коэффициенты уже посчитанного полинома на единицу меньшей степени. Получающиеся в результате соотношения близки к тем, что приведены для случая понижения степени полинома.
Коэффициенты полинома первой степени
выписываются явно:

Коэффициенты полинома k-й степени вычисляются через коэффициенты полинома степени k-1:

Переходя к коэффициентам, получим следующие уравнения:
![]() |
( 6.5) |
В соотношении 6.5 через
обозначены коэффициенты полинома степени
. На самом деле схема безопасна и позволяет считать коэффициенты на том же месте, не требуя дополнительной памяти. Приведу алгоритм вычисления коэффициентов полинома по его корням в виде схемы, приближенной к языку C#.
Дано:
-
- коэффициент при старшем члене полинома
; -
- степень полинома; -
- массив корней полинома
;
Вычислить:
- массив
- массив коэффициентов полинома
.
//Вычисляем коэффициенты полинома первой степени
a[1]= 1; a[0] = -x[0];
//цикл по числу полиномов
for(int k=2;k<=n; k++)
{
//Вычисляем коэффициенты полинома степени k
//Вначале старший коэффициент
a[k]= a[k-1];
//затем остальные коэффициенты, кроме последнего
for(int i=k-1;i>0; i--)
{
a[i] = a[i-1]- a[i]*x[k-1];
}
//теперь младший коэффициент
a[0]= -a[0]*x[k-1];
}
//Последний этап - умножение коэффициентов на an
for(int i=0; i<=n; i++)
a[i] = a[i]*an;Полином Лагранжа
Пусть на плоскости заданы
точка:
. Полиномом Лагранжа
называется полином n-й степени, проходящий через все точки
. Если точки
не образуют возвратов, то такой полином существует и является единственным. Под возвратом понимается ситуация, когда существуют две точки
и
такие, что
.
Как построить такой полином? Лагранж предложил следующий алгоритм. Полином
строится как сумма
полиномов n-й степени:

Каждый из полиномов
, входящих в сумму, строится следующим образом. Корнями полинома
являются все точки
за исключением точки
. Единственность
обеспечивается за счет того, что коэффициент при старшем члене an подбирается так, чтобы полином проходил через точку
. В записи Лагранжа полином
выглядит следующим образом:
![]() |
( 6.6) |
В записи 6.6 в числителе находится приведенный полином, построенный по корням, а
, деленное на знаменатель в формуле 6.6, задает
- старший коэффициент полинома.
Условия, накладываемые на полиномы
, обеспечивают выполнение требований к полиному Лагранжа - сумма полиномов
будет полиномом, проходящим через все заданные точки.
Поскольку алгоритм построения приведенного полинома по его корням уже разобран, то схема построения полинома Лагранжа может выглядеть так:
//Полином Лагранжа определяется как сумма из n+1
//полиномов Pk, для которых известны корни.
for(int k=0; k<=n; k++)
{
//Задание корней для полинома Pk
for(int i =0; i<k; i++)
roots[i] = X[i];
for(int i =k+1; i<=n; i++)
roots[i-1] = X[i];
//Вычисление коэффициентов приведенного полинома по его корням
coefk = CalcCoefFromRoots(roots);
//вычисление An - старшего коэффициента полинома.
An = Y[k] / HornerP(coefk,X[k]);
//Добавление очередного полинома Pk к PL - сумме полиномов
for(int i =0; i<=n; i++)
{
coefL[i]= coefL[i]+An*coefk[i];
}
}В этой схеме:
- X и Y - массивы, задающие декартовы координаты точек, через которые проходит полином Лагранжа,
- n - степень полинома,
-
roots - массив корней приведенного полинома
, - coefk - массив его коэффициентов,
-
An - старший коэффициент полинома, вычисляемый из условия прохождения полинома
через точку с координатами X[k], Y[k], - coefL - массив коэффициентов полинома Лагранжа,
- HornerP - метод, вычисляющий по схеме Горнера значение полинома по его коэффициентам и значению координаты x,
- CalcCoefFromRoots - метод, вычисляющий массив коэффициентов приведенного полинома по его корням.


