exponenta event banner

Корни многочленов

В этом примере показано несколько различных методов вычисления корней полинома.

Числовые корни

roots функция вычисляет корни одновариантного многочлена, представленного вектором коэффициентов.

Например, создайте вектор для представления многочлена x2 x − 6, затем вычислите корни.

p = [1 -1 -6];
r = roots(p)
r =

     3
    -2

По соглашению MATLAB ® возвращает корни в векторе столбца.

poly функция преобразует корни обратно в полиномиальные коэффициенты. При работе с векторами, poly и roots являются обратными функциями, такими, что poly(roots(p)) прибыль p (вплоть до ошибки округления, упорядочения и масштабирования).

p2 = poly(r)
p2 =

     1    -1    -6

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

Корни с использованием подстановки

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

Например, найдите значения, которые решают уравнение

3cos2 (start) -sin (start) + 3 = 0.

Чтобы выразить уравнение полностью в терминах синусоидальных функций, используйте тот факт, что cos2 (start) = 1-sin2 (start):

-3sin2 (start) -sin (start) + 6 = 0.

Используйте подстановку x = sin (start), чтобы выразить уравнение как простое полиномиальное уравнение:

-3x2-x + 6 = 0.

Создайте вектор для представления многочлена.

p = [-3 -1 6];

Найдите корни многочлена.

r = roots(p)
r = 2×1

   -1.5907
    1.2573

Чтобы отменить подстановку, используйте start= sin-1 (x). asin функция вычисляет обратный синус.

theta = asin(r)
theta = 2×1 complex

  -1.5708 + 1.0395i
   1.5708 - 0.7028i

Убедитесь, что элементы в theta являются значениями, которые решают исходное уравнение (в пределах ошибки округления).

f = @(Z) 3*cos(Z).^2 - sin(Z) + 3;
f(theta)
ans = 2×1 complex
10-14 ×

  -0.0888 + 0.0647i
   0.2665 + 0.0399i

Корни в определенном интервале

Используйте fzero для поиска корней многочлена в определенном интервале. Среди прочих применений, этот метод подходит, если вы строите график многочлена и хотите знать значение определенного корня.

Например, создайте дескриптор функции для представления многочлена 3x7 + 4x6 + 2x5 + 4x4 + x3 + 5x2.

p = @(x) 3*x.^7 + 4*x.^6 + 2*x.^5 + 4*x.^4 + x.^3 + 5*x.^2;

Постройте график функции на интервале [-2,1].

x = -2:0.1:1;
plot(x,p(x))
ylim([-100 50])
grid on
hold on

Figure contains an axes. The axes contains an object of type line.

Из графика многочлен имеет тривиальный корень на 0 и еще один рядом -1.5. Использовать fzero для вычисления и построения графика корня, который находится рядом -1.5.

Z = fzero(p, -1.5)
Z = -1.6056
plot(Z,p(Z),'r*')

Figure contains an axes. The axes contains 2 objects of type line.

Символические корни

Если у вас есть символьные математические Toolbox™, то есть дополнительные опции для вычисления многочленов символически. Один из способов - использовать solve (Символьная математическая панель инструментов).

syms x
s = solve(x^2-x-6)
s =
 
 -2
  3

Другой способ - использовать factor Функция (Символьная математическая панель инструментов) для деления многочленов на множители.

F = factor(x^2-x-6)
F =
 
[ x + 2, x - 3]

Дополнительные сведения см. в разделе Решение алгебраического уравнения (инструментарий символьной математики).

См. также

| |

Связанные темы