numeric::polyroots

Числовые корни одномерного полинома

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

numeric::polyroots(eqs, <FixedPrecision>, <SquareFree>, <Factor>, <NoWarning>)

Описание

numeric::polyroots(eqs) возвращает числовые приближения всех действительных и комплексных корней одномерных полиномов eqs.

Коэффициенты могут быть вещественными или комплексными числами. Также символьные коэффициенты приняты, если они могут быть преобразованы в плавания.

Тривиальный полиномиальный eqs = 0 результатов в сообщении об ошибке. Пустой список возвращен для постоянных полиномов eqs ≠ 0.

Несколько корней перечислены согласно их кратности, т.е. длина корневого списка совпадает со степенью eqs.

Корневой список сортируется по numeric::sort.

Чтобы округлить эффекты, числовые корни должны быть с точностью до DIGITS значительные цифры, если опция FixedPrecision используется.

Все записи с плавающей точкой в eqs внутренне аппроксимированы рациональными числами: numeric::polyroots(eqs) вычисляет корни numeric::rationalize(eqs, Minimize).

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

Рекомендуется использовать numeric::realroots или polylib::realroots если eqs действительный полином, и только действительные корни представляют интерес.

Взаимодействия среды

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

Примеры

Пример 1

Оба многочленных выражения, а также DOM_POLY объекты могут использоваться, чтобы задать полином:

numeric::polyroots(x^3 - 3*x - sqrt(2))

numeric::polyroots(PI*z^4 + I*z + 0.1)

numeric::polyroots(poly(x^5 - x^2, [x]))

Пример 2

Следующий полином имеет точные коэффициенты:

p := poly((x - 1)*(x - PI)^3, [x]): 
numeric::polyroots(p)

Обратите внимание на то, что ошибки округления в коэффициентах eqs имейте сильное воздействие на нескольких корнях:

p := poly((x - 1.0)*(x - float(PI))^3, [x]): 
numeric::polyroots(p)

Это корни следующего рационализированного полинома:

numeric::rationalize(p, Minimize)

delete p:

Пример 3

Несколько корень следующего полинома могут только быть вычислены с ограниченной точностью фиксированной арифметикой точности:

p := poly((x^2 - 6*x +8)*(x - I/3)^5, [x]):
numeric::polyroots(p, FixedPrecision)

Без опции FixedPrecision, рабочая точность увеличена внутренне, чтобы вычислить лучшие приближения:

numeric::polyroots(p)

delete p:

Пример 4

Следующий полином плохо разделил корни. numeric::polyroots не умеет разделить их правильно:

p := poly(_mult((x - 1 - i/10^9) $ i=0..5), [x]):
numeric::polyroots(p)

Можно предварительно обработать полином символьной факторизацией:

numeric::polyroots(p, Factor)

В качестве альтернативы можно увеличить рабочую точность, чтобы разделить корни:

DIGITS := 20:
numeric::polyroots(p)

delete p, DIGITS:

Параметры

eqs

Одномерное многочленное выражение или одномерный полином доменного типа DOM_POLY. Функция также принимает список, набор, array, или matrix (Cat::Matrix) из многочленных выражений.

Опции

FixedPrecision

Эта опция обеспечивает самый быстрый способ получить приближения корней числовым поиском с фиксированной внутренней точностью 2 DIGITS десятичные разряды.

Обратите внимание на то, что плохо изолированные корни или несколько корней не будут обычно аппроксимироваться к DIGITS десятичные числа при использовании этой опции. Задача нахождения такие корни численно плохо обусловлены, т.е. такие корни, не может быть найдена к полной точности с фиксированной арифметикой точности. Как правило, q - корень сгиба будет аппроксимирован только приблизительно к десятичным разрядам. См. Пример 3.

Без этой опции, numeric::polyroots внутренне увеличивает рабочую точность, пока все корни не найдены к DIGITS десятичные разряды.

SquareFree

При использовании этой опции символьная квадратная свободная факторизация вычисляется через polylib::sqrfree(eqs). Числовой корневой алгоритм нахождения затем применяется к каждому квадратному свободному фактору.

Эта опция рекомендуется, когда p как известно, имеет несколько корней. Такие корни обеспечивают numeric::polyroots увеличить рабочую точность, внутренне увеличивающую затраты на числовой поиск. Квадратная свободная факторизация уменьшает кратность каждого корня одному, ускоряя итоговый числовой поиск.

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

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

Factor

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

Эта опция полезна, когда eqs может быть успешно разложен на множители (например, когда каждое выражение от eqs имеет несколько корней). Числовой поиск на факторах намного более эффективен, чем поиск на исходном полиноме. С другой стороны, символьная факторизация eqs может быть дорогостоящим.

NoWarning

Отключает предупреждения

Возвращаемые значения

Список числовых корней.

Алгоритмы

Числовой корневой алгоритм нахождения реализован numeric::polyroots метод Лагерра: В.Х. Пресс, B.P. Flannery, S.A. Теукольский и В.Т. Веттерлинг: Числовые Рецепты в C, издательстве Кембриджского университета, 1988.

Для просмотра документации необходимо авторизоваться на сайте