在MatLab中,有没有办法求多项式的根,不是以矩阵形式?我知道,要求一个多项式的根(比方说,p(X)=x^.2-4),我应该做以下操作:
p = [1 0 -4]; r = roots(p)
我想知道的是,在我的matlab代码中,是否有某种方法可以找到已经以多项式形式(而不是矩阵形式)出现的函数的根(比如p(X)=x^.2-4)?类似于r = roots(p(x))的任何东西(当然,这不起作用)。
r = roots(p(x))
x759pob21#
首先,如果你真的在处理多项式,使用roots的解可能会给你最准确和最快的结果。我承认,如果你的函数不是多项式,这可能是个问题。
roots
如果你不想用根,这意味着你可能不得不用anonymous function来表示你的多项式。然后,您可以在该函数上使用任何根查找算法。Wikipedia列出了其中的一些。棘手的是,一般来说,他们不能保证他们会在根上找到,更不用说所有根了。因此,您可能需要尽可能多的有关您的功能的先验信息。在matlab中,您可以使用fzero。默认情况下,它只找到一个零,并且它只会在函数更改符号的地方找到零(例如,它在p(x) = x²上不起作用)。以下是您将如何实施它:
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使用矩阵而不是匿名函数的原因。
1条答案
按热度按时间x759pob21#
根是好的
首先,如果你真的在处理多项式,使用
roots
的解可能会给你最准确和最快的结果。我承认,如果你的函数不是多项式,这可能是个问题。寻找函数的根
如果你不想用根,这意味着你可能不得不用anonymous function来表示你的多项式。然后,您可以在该函数上使用任何根查找算法。Wikipedia列出了其中的一些。棘手的是,一般来说,他们不能保证他们会在根上找到,更不用说所有根了。因此,您可能需要尽可能多的有关您的功能的先验信息。
在matlab中,您可以使用fzero。默认情况下,它只找到一个零,并且它只会在函数更改符号的地方找到零(例如,它在
p(x) = x²
上不起作用)。以下是您将如何实施它:正如您所看到的,只有当您想要找到一个根,而不关心它是哪个根时,这个方法才有效。
问题
问题是,具有整数或有理系数的多项式有一种使用square-free factorization求根的方法。然而,只有当你有某种方法在MatLab中存储和获取这些系数时,你才能应用它。匿名函数不允许您这样做。这就是为什么Root使用矩阵而不是匿名函数的原因。