如何在Matlab中找到多项式的多根?

如何在Matlab中找到多项式的多根?,matlab,polynomial-math,polynomials,Matlab,Polynomial Math,Polynomials,我正在尝试创建两个matlab.m文件。“f.m”包含我想要使用的多项式的函数 function y = f(x) y = x.^3 - 7*x + 6; Compute.m调用fzero,该函数返回多项式和从-10到10的for值循环 clc fun = @f; answerArray= []; for x0 = -10:10 z = fzero(fun,x0); answerArray=[answerArray z]; end answerArrayUnique=uniqu

我正在尝试创建两个matlab.m文件。“f.m”包含我想要使用的多项式的函数

function y = f(x)
y = x.^3 - 7*x + 6;
Compute.m调用fzero,该函数返回多项式和从-10到10的for值循环

clc
fun = @f;
answerArray= [];
for x0 = -10:10
    z = fzero(fun,x0);
    answerArray=[answerArray z];
end
answerArrayUnique=unique(answerArray)
问题是我的独特方法对某些负值不起作用。我得到的答案是:

答复=

-3.0000-3.0000-3.0000 1.0000 2.0000

奇怪的是,如果unique每次都在负数上失败,那么还会有更多的错误——3.0000。有人知道这是什么原因吗


注意:再次使用独特的方法调用并不能解决这个问题,这让我相信,当它们进一步深入到第万分之一点时,它认为数字是不同的。。也许?

在matlab中,表示多项式的最佳方法是通过系数向量。例如:

p = [1 0 -7 +6];
例如,要计算x=0.8时的值,请使用:

polyval(p,0.8)
要查找您使用的根,请执行以下操作:

r = roots(p) %output: -3 2 1

仅对非线性函数使用“fzero”,并祈祷找到所有的解决方案。

您应该看到门迪斯的答案,了解如何正确地进行。然而,你的问题是因为-3.000不相等

unique
通过排序然后检查连续数字是否相等来工作。但是,由于您使用了数值方法来查找零点,因此解决方案是近似的。试着减去两个相等的解,差会很小,但不是零


为了避免这种情况,您可以使用
uniquetol
,它允许您指定一个公差,在该公差范围内,您认为两个数字相等。e、 g.
uniquetol(answerArray,1e-4)

有没有办法将多项式转换为向量?我希望输入是多项式,而不是表示它的向量。