logo
Лабы

Полиномиальные уравнения

Пусть требуется решить полиномиальное уравнение

.

Проверим, нет ли общих делителей у полиномиальных коэффициентов в правой части уравнения

, ,,

. Видим, что общих корней нет. Уравнение правильное. Найдем его минимальное решение. Так как решение минимальное, то степень p(x) равна 1, степень q(x) равна 2. Неизвестные коэффициенты многочленов p(x) и q(x) будем рассматривать как элементы одного вектора а. Нумерацию индексов элементов этого вектора начнем с нуля. Создадим функции

, ,

, .

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

.

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

.

Первые два числа в этом результате дают коэффициенты многочлена p(x), а остальные три – многочлена q(x). К сожалению, при символьном решении системы вектор a не создается. Поэтому для выполнения проверки придется создать многочлены p(x) и q(x). Итак,

, .

Выполняем проверку:

.

Получили, что минимальное решение найдено правильно.

Если бы степени многочленов были выше, то символьная система могла не справиться с решением системы уравнений или выдать решение в виде дробей с очень большими знаменателями. В таком случае следует использовать численные методы, то есть функции find или lsolve. Здесь мы рассмотрим, как можно воспользоваться функцией find.

Скопируем коэффициенты левой части исходного уравнения. Будем рассматривать их как функцию от вектора a

.

Сформируем вектор из коэффициентов правой части исходного уравнения

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

given

.

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

Ранее мы создавали функции p(a,x) и q(a,x). Но потом мы их уничтожили, создав функции с теми же именами p(x) и q(x). Скопируем блоки создания функций p(a,x) и q(a,x). Так как вектор коэффициентов b найден, то эти функции и являются минимальным решением. Их можно использовать для вычисления значений найденных многочленов, подставляя нужные значения x. Используем это для проверки

.

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

Для завершения решения задачи нужно записать общее решение исходного полиномиального уравнения

, ,

где m(x) – любой многочлен.