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

qlfbtfca  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(132)

在MatLab中,有没有办法求多项式的根,不是以矩阵形式
我知道,要求一个多项式的根(比方说,p(X)=x^.2-4),我应该做以下操作:

p = [1 0 -4];
r = roots(p)

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

x759pob2

x759pob21#

根是好的

首先,如果你真的在处理多项式,使用roots的解可能会给你最准确和最快的结果。我承认,如果你的函数不是多项式,这可能是个问题。

寻找函数的根

如果你不想用根,这意味着你可能不得不用anonymous function来表示你的多项式。然后,您可以在该函数上使用任何根查找算法。Wikipedia列出了其中的一些。棘手的是,一般来说,他们不能保证他们会在根上找到,更不用说所有根了。因此,您可能需要尽可能多的有关您的功能的先验信息。
在matlab中,您可以使用fzero。默认情况下,它只找到一个零,并且它只会在函数更改符号的地方找到零(例如,它在p(x) = x²上不起作用)。以下是您将如何实施它:

p = @(x) x.^2 - 4;  % Define your polynomial as an anonymous function

x0 = 12;  % Initial guess for the zero

% Find a root
fzero(p, x0)
>>> ans = 2

% Now with a different initial guess for a different solution
x0 = -12;
fzero(p, x0)
>>> ans = -2

正如您所看到的,只有当您想要找到一个根,而不关心它是哪个根时,这个方法才有效。

问题

问题是,具有整数或有理系数的多项式有一种使用square-free factorization求根的方法。然而,只有当你有某种方法在MatLab中存储和获取这些系数时,你才能应用它。匿名函数不允许您这样做。这就是为什么Root使用矩阵而不是匿名函数的原因。

相关问题