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

时间:2018-02-19 22:28:41

标签: 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=unique(answerArray)

问题是我的独特方法不适用于某些负值。我得到了答案:

  

answerArrayUnique =

     

-3.0000 -3.0000 -3.0000 1.0000 2.0000

奇怪的是,如果每次在负数上唯一失败,那么会有更多-3.0000。任何人都知道造成这种情况的原因是什么?

注意:再次使用独特的方法调用不能解决问题,这让我相信它认为数字进一步扩展到第万分之一的地方是不同的......也许? / em>的

2 个答案:

答案 0 :(得分:1)

你应该看到Mendis回答,如何正确地做到这一点。但是,你遇到的问题是因为-3.000不相等。

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

为避免这种情况,您可以使用uniquetol来指定公差,在此范围内,您认为两个数字相等。例如uniquetol(answerArray,1e-4)

答案 1 :(得分:0)

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

p = [1 0 -7 +6];

要计算x = 0.8处的值,例如使用:

polyval(p,0.8)

找到你使用的根:

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

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