小伙伴关心的问题:求整系数多项式的全部有理根的方法(如何求整系数多项式的有理根),本文通过数据整理汇集了求整系数多项式的全部有理根的方法(如何求整系数多项式的有理根)相关信息,下面一起看看。

求整系数多项式的全部有理根的方法(如何求整系数多项式的有理根)

众所周知,期末考如果不想复习了就会开始摸鱼,所以就有了这篇文章。

关于本原多项式,有这个定理:

根据这个定理,可以设计如下的方法来找一个整系数多项式的有理根

这里要注意如果检测到了多个有理根也只选择其中的一个输出

用matlab实现如下

先编写函数tools来求系数的最大公约数,做多项式除法

functiontools_ =tools_()tools_ = struct(gcds,@gcds,div,@div); functiona =gcds(p)L = length(p);q=0; for i=1:L q = gcd(q,p(i)); end a = q; end functionb =div(a,r)L = length(a)-1; b(1) = a(1); for i = 2:L b(i) = a(i)+b(i-1)*r; end end end

编写函数rational_roots来求解方程的有理根,其中输入p为多项式的系数,系数从高次到低次

functionroots =rational_roots(p)roots = []; tool = tools_(); while(length(p)>1) p = p/tool.gcds(p); roots_list = []; a_n = p(1);a_1 = p(end); factor_a_n = [unique(factor(abs(a_n))),1]; factor_a_n = [factor_a_n,-factor_a_n]; L1 = length(factor_a_n); factor_a_1 = [unique(factor(abs(a_1))),1]; factor_a_1 = [factor_a_1,-factor_a_1]; L2 = length(factor_a_1); for i=1:L1 for j=1:L2 roots_list(end+1) = [factor_a_1(j)/factor_a_n(i)]; end end s = 0; for i=1:length(roots_list) if polyval(p,roots_list(i))==0 root = roots_list(i); s = 1; end end if s==0 break end roots(end+1) = root; p = tool.div(p,roots(end)); end

例如对于多项式 p(x)=3x4+8x3+6x2+3x−2\begin{equation} p(x)=3 x^{4}+8 x^{3}+6 x^{2}+3 x-2 \end{equation} ​ ,测试结果如下

>> rational_roots([3,8,6,3,-2]) ​ ans = ​ -2.0000 0.3333

而 p(x)=(3x2+3x+3)(x−13)(x+2)\begin{equation} p(x)=\left(3 x^{2}+3 x+3\right)\left(x-\frac{1}{3}\right)(x+2) \end{equation} ,所以结果是正确的。

更多求整系数多项式的全部有理根的方法(如何求整系数多项式的有理根)相关信息请关注本站,本文仅仅做为展示!