gpt4 book ai didi

matlab - 如何正确求多项式根?

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:37 24 4
gpt4 key购买 nike

考虑一个多项式,例如:

p = [1 -9 27 -27];

显然真正的根是 3:

polyval(p,3)

0

在使用roots 函数时

q = roots([1 -9 27 -27]);

使用短格式:

q =

3.0000 + 0.0000i
3.0000 + 0.0000i
3.0000 - 0.0000i

并检查根是否真实:

bsxfun(@eq,ones(size(q)),isreal(q))

0
0
0

更糟糕的是 format long 我得到:

roots([1 -9 27 -27])

ans =

3.000019414068325 + 0.000000000000000i
2.999990292965843 + 0.000016813349886i
2.999990292965843 - 0.000016813349886i

如何正确计算多项式的根?

最佳答案

您可能必须象征性地工作。为此,您需要符号数学工具箱。

  1. 将多项式定义为符号函数。您可以 (a) 使用 poly2sym从其系数生成符号多项式。或者 (b) 更好的是,直接使用字符串定义符号函数。这样您就可以避免将系数表示为 double 可能导致的准确性损失。

  2. 使用 solve , 它象征性地求解代数方程。

带有选项 (a) 的代码:

p = [1 -9 27 -27];
ps = poly2sym(p);
rs = solve(ps);

带有选项 (b) 的代码:

ps = sym('x^3-9*x^2+27*x-27');
rs = solve(ps);

无论哪种情况,结果都是象征性的:

>> rs
rs =
3
3
3

您可能希望使用以下方法转换为数值

r = double(rs);

在你的例子中,这给出了

>> format long
>> r
r =
3
3
3

关于matlab - 如何正确求多项式根?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com