Рефетека.ру / Математика

Контрольная работа: Методы нахождения корней полиномов

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

СУМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ


КАФЕДРА ИНФОРМАТИКИ


Контрольная работа

ПО ЧИСЛЕННЫМ МЕТОДАМ

на тему:

Методы нахождения корней полиномов”


Сумы - 2007 г.

План


1 Нахождение корней уравнений ()

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

3 Функции произвольного вида

4 Нахождение корней полиномов

Список используемых информационных источников


1 Нахождение корней уравнений ()


Одним из наиболее распространенных методов поиска корней уравнений является метод Ньютона и его модификации. Пусть требуется решить уравнениеМетоды нахождения корней полиномов. Будем считать, что x является решением уравнения. Разложим функцию f(x) в ряд в точке x0 близкой к точке x и ограничимся только первыми двумя членами разложения.


Методы нахождения корней полиномов


Поскольку x – корень уравнения, то Методы нахождения корней полиномов. Следовательно,


Методы нахождения корней полиномов


Таким образом, если нам известно приближенное значение корня уравнения, то полученное уравнение позволяет его уточнить. Понятно, что процесс уточнения можно повторять многократно, до тех пор, пока значение функции не будут отличаться от нуля на величину меньшую, чем заданная точность поиска. Очередное k-е приближение находится по формуле


Методы нахождения корней полиномов


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


Методы нахождения корней полиномов


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


Методы нахождения корней полиномов15


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


Методы нахождения корней полиномов15


В таком виде метод называется методом секущих (secant method). При этом, однако, возникает проблема с вычислением первого приближения. Обычно полагают, что Методы нахождения корней полиномов, то есть первый шаг вычислений проводится с использованием формулы Error: Reference source not found, а все последующие – с использованием формулы Error: Reference source not found. Именно эта вычислительная схема реализована в пакете Mathcad. Используя метод секущих, мы не можем гарантировать, что корень находится между двумя последними приближениями. Можно, однако, для вычисления очередного приближения использовать границы интервала, на котором функция меняет знак. Такой метод называется методом хорд (false position method).

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


Методы нахождения корней полиномов15


Методы нахождения корней полиномов15


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

Поскольку поиск корня заканчивается, когда выполнится условиеМетоды нахождения корней полиномов, то возможно появление ложных корней. Например, для уравнения Методы нахождения корней полиномов ложный корень Методы нахождения корней полиномовпоявится в том случае, если точность поиска задана меньше, чем 0,0001. Увеличивая точность поиска, можно избавиться от ложных корней. Однако не для всех уравнений такой подход работает. Например, для уравнения Методы нахождения корней полиномов, которое, очевидно, не имеет действительных корней, для любой, сколь угодно малой точности найдется значение x, удовлетворяющее критерию окончания поиска. Приведенные примеры показывают, что к результатам компьютерных вычислений всегда нужно относиться критически, анализировать их на правдоподобность. Чтобы избежать "подводных камней" при использовании любого стандартного пакета, реализующего численные методы, нужно иметь хотя бы минимальное представление о том, какой именно численный метод реализован для решения той или иной задачи.

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

В методе Риддера (Ridder’s method) вычисляют значение функции в середине интервала Методы нахождения корней полиномов. Затем ищут экспоненциальную функцию такую, что Методы нахождения корней полиномов Затем применяют метод хорд, используя значения Методы нахождения корней полиномов. Очередное значение вычисляют по формуле


Методы нахождения корней полиномов15


Метод Брента (Brent method) соединяет быстроту метода Риддера и гарантированную сходимость метода деления отрезка пополам. Метод использует обратную квадратичную интерполяцию, то есть ищет x как квадратичную функцию y. На каждом шаге проверяется локализация корня. Формулы метода достаточно громоздки и мы не будем их приводить.

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

Метод Лобачевского, метод приближённого (численного) решения алгебраических уравнений, найденный независимо друг от друга бельгийским математиком Ж. Данделеном, русским математиком Н. И. Лобачевским (в 1834 в наиболее совершенной форме) и швейцарским математиком К. Греффе. Суть Л. м. состоит в построении уравнения f1(x) = 0, корни которого являются квадратами корней исходного уравнения f(x) = 0. Затем строят уравнение f2(x) = 0, корнями которого являются квадраты корней уравнения f1(x) = 0. Повторяя этот процесс несколько раз, получают уравнение, корни которого сильно разделены. В случае если все корни исходного уравнения действительны и различны по абсолютной величине, имеются простые вычислительные схемы Л. м. для нахождения приближённых значений корней. В случае равных по абсолютной величине корней, а также комплексных корней вычислительные схемы Л. м. очень сложны.

Метод Лагерра (Laguerre’s method) основывается на следующих соотношениях для полиномов


Методы нахождения корней полиномов


Предполагают, что корень x1 находится на расстоянии a от текущего приближения, в то время как все другие корни находятся на расстоянии b: Методы нахождения корней полиномов. Тогда

Методы нахождения корней полиномов,

откуда

Методы нахождения корней полиномов


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

Еще один метод, который применяют для поиска корней полиномов, – метод сопровождающей матрицы (companion matrix). Можно доказать, что матрица


Методы нахождения корней полиномов,


называемая сопровождающей матрицей для полинома Методы нахождения корней полиномов, имеет собственные значения равные корням полинома. Напомним, что собственными значениями матрицы называются такие числа , для которых выполняется равенство Методы нахождения корней полиномов или Методы нахождения корней полиномов. Существуют весьма эффективные методы поиска собственных значений, о некоторых из них мы будем говорить далее. Таким образом, задачу поиска корней полинома можно свести к задаче поиска собственных значений сопровождающей матрицы.


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


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

p(x) = (( ... ((anx + an-1)x + an-2)x + ... + a2)x + a1)x + a0.


Займемся общим многочленом вида:


p(x) = anxn + an-1xn-1 + an-2xn-2 + ... + a2x2 + a1x + a0.


Мы будем предполагать, что все коэффициенты an, ..., a0 известны, постоянны и записаны в массив. Это означает, что единственным входным данным для вычисления многочлена служит значение x, а результатом программы должно быть значение многочлена в точке x.
Стандартный алгоритм вычисления прямолинеен:

Evaluate(x)

xточка, в которой вычисляется значение многочлена


result = a[0] + a[1]*x

xPower = x

for i = 2 to n do

xPower = xPower*x

result = result + a[i]*xPower

end for

return result


Этот алгоритм совершенно прозрачен и его анализ очевиден. В цикле for содержится два умножения, которые выполняются n - 1 раз. Кроме того, одно умножение выполняется перед циклом, поэтому общее число умножений равно 2n - 1. В цикле выполняется также одно сложение, и одно сложение выполняется перед циклом, поэтому общее число сложений равно n.

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

HornersMethod(x)

xточка, в которой вычисляется значение многочлена

for i = n - 1 down to 0 do

result = result*x

result = result + a[i]

end for

return result

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

Предварительная обработка коэффициентов

Результат можно даже улучшить, если обработать коэффициенты многочлена до начала работы алгоритма. Основная идея состоит в том, чтобы выразить многочлен через многочлены меньшей степени. Например, для вычисления значения x256 можно воспользоваться таким же циклом, как и в функции Evaluate в начале этой статьи; в результате будет выполнено 255 умножений. Альтернативный подход состоит в том, чтобы положить result = x*x, а затем семь раз выполнить операцию result = result*result. После первого выполнения переменная result будет содержать x4, после второго x8, после третьего x16, после четвертого x32, после пятого x64, после шестого x128, и после седьмого x256.

Для того, чтобы метод предварительной обработки коэффициентов работал, нужно, чтобы многочлен был унимодальным (то есть старший коэффициент an должен равняться 1) , а степень многочлена должна быть на единицу меньше некоторой степени двойки (n = 2k - 1 для некоторого k > 1). В таком случае многочлен можно представить в виде:


p(x) = (xj + b)q(x) + r(x), где j = 2k-1. (1)

В обоих многочленах q и r будет вдвое меньше членов, чем в p. Для получения нужного результата мы вычислим по отдельности q(x) и r(x), а затем сделаем одно дополнительное умножение и два сложения. Если при этом правильно выбрать значение b, то оба многочлена q и r оказываются унимодальными, причем степень каждого из них позволяет применить к каждому из них ту же самую процедуру. Мы увидим, что ее последовательное применение позволяет сэкономить вычисления.

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


p(x) = x7 + 4x6 - 8x4 + 6x3 + 9x2 + 2x - 3.


Определим сначала множитель xj + b в уравнении (1). Степень многочлена p равна 7, то есть 23 - 1, поэтому k = 3. Отсюда вытекает, что j = 22 = 4. Выберем значение b таким образом, чтобы оба многочлена q и r были унимодальными. Для этого нужно посмотреть на коэффициенты aj-1 в p и положить b = aj-1 - 1. В нашем случае это означает, что b = a3 - 1 = 5. Теперь мы хотим найти значения q и r, удовлетворяющие уравнению:


x7 + 4x6 - 8x4 + 6x3 + 9x2 + 2x - 3 = (x4 + 5)q(x) + r(x).


Многочлены q и r совпадают соответственно с частным и остатком от деления p на x4 + 5. Деление с остатком дает:


p(x) = (x4 + 5)(x3 + 4x2 + 0x + 8) + (x3 - 11x2 + 2x - 37).


На следующем шаге мы можем применить ту же самую процедуру к каждому из многочленов q и r:


q(x) = (x2 - 1)(x + 4) + (x + 12), r(x) = (x2 + 1)(x - 11) + (x - 26).

В результате получаем:


p(x) = (x4 + 5)((x2 - 1)(x + 4) + (x + 12)) + ((x2 + 1)(x - 11) + (x - 26)).


Посмотрев на этот многочлен, мы видим, что для вычисления x2 требуется одно умножение; еще одно умножение необходимо для подсчета x4 = x2*x2. Помимо этих двух умножений в вычислении правой части равенства участвуют еще три умножения. Кроме того, выполняется 10 операций сложения. В таблице 1 приведены сравнительные результаты анализа этого метода и других методов вычисления. Экономия не выглядит значительной, однако это объясняется тем, что мы рассматриваем лишь частный случай. Общую формулу для сложности можно вывести, внимательно изучив процедуру. Заметим прежде всего, что в равенстве (1) участвуют одно умножение и два сложения. Поэтому для числа умножений M = M(k) и числа сложений A = A(k) мы получаем следующий набор рекуррентных соотношений:


M(1) = 0 A(1) = 0
M(k) = 2M(k - 1) + 1 при k > 1 A(k) = 2A(k - 1) + 2 при k > 1.

Таблица 1. Число операций при вычислении значения многочлена степени 7

Способ Умножения Сложения
Стандартный 13 7
Схема Горнера 7 7
Предварительная обработка 5 10

Решая эти соотношения, мы заключаем, что число умножений приблизительно равно N/2, а число сложений приблизительно равно (3N - 1)/2. Неучтенными, однако, остались умножения, необходимые для подсчета последовательности значений x2, x4, x8, ..., x2k-1; на это требуется дополнительно k - 1 умножение. Поэтому общее число умножений приблизительно равно N/2 + log2N.


Таблица 2. Число операций при вычислении значения многочлена степени N

Способ Умножения Сложения
Стандартный 2N - 1 N
Схема Горнера N N
Предварительная обработка N/2 + log2N (3N - 1)/2

В таблице 2 приведены результаты сравнительного анализа стандартного алгоритма, схемы Горнера и алгоритма с предварительной обработкой коэффициентов. При сравнении последних двух алгоритмов видно, что нам удалось сэкономить N/2 - log2N умножений, но за счет дополнительных (N - 1)/2 сложений. Во всех существующих вычислительных системах обмен умножений на сложения считается выгодным, поэтому предварительная обработка коэффициентов повышает эффективность.


3 Функции произвольного вида


Найдем нули функции Методы нахождения корней полиномов на интервале x=[–2,7], используя Mathcad

Изобразим сначала функцию на графике.

Методы нахождения корней полиномов


Методы нахождения корней полиномов

На заданном интервале функция три раза обращается в ноль. Определим нули функции, используя встроенную функцию root(f(x),x). Первый аргумент – функция, нуль которой необходимо найти, второй – переменная, которую необходимо варьировать. (Вообще говоря, функция f может быть функцией многих переменных и необходимо указывать, по какой именно переменной мы ищем нуль функции.) Кроме того, необходимо задать начальное приближение поиска. Точность вычислений задается встроенной переменной TOL. По умолчанию ее значение равно 0,001. Это значение можно изменить либо через меню Math/Built–In Variables или непосредственно в тексте документа: Методы нахождения корней полиномов

Задаем начальное приближение: Методы нахождения корней полиномов

И вычисляем корень: Методы нахождения корней полиномов

Если требуется найти несколько корней, как в нашей задаче, то имеет смысл определить новую функцию: Методы нахождения корней полиномов

Функция r(x) возвращает значение корня ближайшее к x2, то есть начальное приближение мы задаем через аргумент функции. Задаем вектор начальных приближений x и находим соответствующие им корни X:


Методы нахождения корней полиномов Методы нахождения корней полиномов Методы нахождения корней полиномов Методы нахождения корней полиномов

Для данного примера корни легко могут быть найдены аналитически. Они равны на заданном интервале /2/2 и Полученный численный результат с заданной точностью совпадает с точным решением.

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


Методы нахождения корней полиномов


Первый аргумент функции z задает значение параметра, второй – начальное приближение. Найдем корни уравнения при значениях параметра 1 и 2.


Методы нахождения корней полиномов Методы нахождения корней полиномов


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


Методы нахождения корней полиномов


4 Нахождение корней полиномов


Для нахождения корней полиномов имеется встроенная функция polyroots(a). Аргументом функции является вектор коэффициентов полинома Методы нахождения корней полиномов, то есть для уравнения Методы нахождения корней полиномоввектор а имеет вид

Методы нахождения корней полиномов Методы нахождения корней полиномов Методы нахождения корней полиномов


Если в полиноме отсутствуют некоторые степени, то на соответствующих местах следует писать 0. Пусть требуется найти корни полинома Методы нахождения корней полиномов


Методы нахождения корней полиномов Методы нахождения корней полиномов Методы нахождения корней полиномов


Коэффициенты полинома могут быть и комплексными.


Список используемых информационных источников


Coppersmith D., Odlyzko A. M., Schroeppel R. Descrete logarithms in GF(p) // Algorithmica. V. 1,1986. P. 1-15.

Lenstra A. K, Lenstra H. W. (jr.) The Development of the Number Field Siev. Lect. Notes in Math. V. 1554. Springer, 1993.

McCarthy D. P. “The optimal algorithm to evaluate xn using elementary multiplication methods”, Math. Comp., vol. 31, no 137, 1977, pp. 251 – 256.

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

2 К сожалению, это не всегда так. Если начальное приближение выбрано неудачно и значение производной в этой точке близко к нулю, то, вообще говоря, найденный корень может быть не ближайшим к начальному приближению. В качестве примера решите самостоятельно задачу поиска корня уравнения Методы нахождения корней полиномов, выбрав в качестве начального приближения число близкое к Методы нахождения корней полиномов. Чем ближе к Методы нахождения корней полиномовбудет выбранное значение, тем более далекий от 0 корень мы будем получать.

Похожие работы:

  1. • Математическая модель метода главных компонент
  2. • Построение порождающего полинома циклического кода ...
  3. • Нахождение корней уравнения методом простой итерации ...
  4. • Нахождение корней уравнения методом Ньютона (ЛИСП ...
  5. • Нахождение корней уравнений различными методами
  6. • Нахождение всех действительных корней алгебраического ...
  7. • НАХОЖДЕНИЕ ВСЕХ ДЕЙСТВИТЕЛЬНЫХ КОРНЕЙ АЛГЕБРАИЧЕСКОГО ...
  8. • Нахождение всех действительных корней алгебраического ...
  9. • Генерация полиномов
  10. • Проект программного модуля для нахождения корня ...
  11. • Синтаксический анализатор полиномов
  12. • Экзаменационные билеты по численным методам за первый семестр ...
  13. • Нахождение корня нелинейного уравнения ...
  14. • Вычисление характеристических многочленов ...
  15. • Полиномы Чебышева
  16. • Алгебраическая проблема собственных значений
  17. • Алгебраическая проблема собственных значений
  18. • Собственные значения
  19. • Разработка программного обеспечения для нахождения ...
Рефетека ру refoteka@gmail.com