【问题标题】:Finding roots of a polynomial without writing it in the form of a matrix在不将多项式写成矩阵形式的情况下求多项式的根
【发布时间】:2023-01-09 23:41:38
【问题描述】:

有什么方法可以找到多项式的根,不是矩阵形式, 在 MATLAB 中?

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

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

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

【问题讨论】:

  • 你以什么形式有你的功能?它是符号函数、字符串还是实际的 MATLAB 函数(即代码)?

标签: function matlab


【解决方案1】:

根好

首先,如果您确实在使用多项式,那么使用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

如您所见,只有在您想找到时才有效一种root 并且不关心它是哪一个。

问题

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多