求多项式的根而不将其写成矩阵形式

har*_*amv 1 matlab function

在 MATLAB 中是否有任何方法可以找到非矩阵形式的多项式的根?

我知道,要找到多项式的根(例如,p(x) = x^.2 - 4),我应该执行以下操作:

p = [1 0 -4];
r = roots(p)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有某种方法可以找到我的 matlab 代码中已经以多项式形式(而不是矩阵形式)存在的函数的根(例如 p(x) = x^.2 - 4)?就像任何类似的东西r = roots(p(x))(当然,这不起作用)。

LNi*_*rha 6

根是好的

\n

首先,roots如果您确实使用多项式,那么使用的解决方案可能会为您提供最准确和最快的结果。我承认,如果您的函数不是多项式,这可能是一个问题。

\n

求函数的根

\n

如果您不想使用根,这意味着您可能必须将多项式表示为匿名函数。然后您可以对该函数使用任何求根算法。维基百科列出了其中一些。棘手的是,一般来说,他们不能保证找到一个根,更不用说找到所有根了。因此,您可能需要尽可能多的有关您的功能的先验信息。

\n

在 matlab 中,您可以使用fzerop(x) = x\xc2\xb2它的问题是它只能找到一个零,并且只能在函数改变符号的地方找到零(例如,它不起作用)。这就是你将如何实现它:

\n
p = @(x) x.^2 - 4;  % Define your polynomial as an anonymous function\n\nx0 = 12;  % Initial guess for the zero\n\n% Find a root\nfzero(p, x0)\n>>> ans = 2\n\n% Now with a different initial guess for a different solution\nx0 = -12;\nfzero(p, x0)\n>>> ans = -2\n
Run Code Online (Sandbox Code Playgroud)\n

正如你所看到的,只有当你想找到一个根并且不关心它是哪一个时,这才有效。

\n

问题

\n

问题是具有整数或有理系数的多项式可以通过使用无平方因式分解来找到根。然而,只有当您有某种方法在 matlab 中存储和访问这些系数时,您才能应用它。匿名函数不允许您这样做。这就是为什么 root 使用矩阵而不是匿名函数的原因。

\n