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



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

function y = f(x)
y = x.^3 - 7*x + 6;

Compute.m 调用 fzero 时,该函数返回多项式和 for 循环,值从 -10 到 10。

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.00002.0000

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

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

你应该看到门迪斯的答案,关于如何正确地做到这一点。但是,您遇到的问题是因为这些 -3.000 不相等。

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

为了避免这种情况,您可以使用uniquetol,它允许您指定一个公差,对于公差,您认为两个数字相等。uniquetol(answerArray,1e-4)

在 matlab 中,表示多项式的最佳方式是直通系数向量。 对于您的示例:

p = [1 0 -7 +6];

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

polyval(p,0.8)

要查找您使用的根目录,请执行以下操作:

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

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

最新更新