Рассмотрим многочлен, такие как:Как правильно найти полиномиальные корни?
p = [1 -9 27 -27];
очевидно вещественный корень 3:
polyval(p,3)
0
При использовании функции roots
q = roots([1 -9 27 -27]);
с format short
:
q =
3.0000 + 0.0000i
3.0000 + 0.0000i
3.0000 - 0.0000i
и проверить, если корни вещественны:
bsxfun(@eq,ones(size(q)),isreal(q))
0
0
0
И еще хуже с format long
я получаю:
roots([1 -9 27 -27])
ans =
3.000019414068325 + 0.000000000000000i
2.999990292965843 + 0.000016813349886i
2.999990292965843 - 0.000016813349886i
Как я могу вычислить корни полинома правильно?
Незначительное примечание: ваш чек, чтобы проверить, являются ли корни реальными, неверно. 'isreal (q)' дает 'false', если _array_' q' является сложным. Но некоторые записи могут иметь нулевую мнимую часть. Фактически, 'isreal (q)' дает 'false', тогда как' for x = q (:). ', Isreal (x), end' дает 'true',' false', 'false'. Первая запись 'q' является реальной, другие - нет, а' q' в целом не является реальной. –