有理系数多项式有理根计算_第1页
有理系数多项式有理根计算_第2页
有理系数多项式有理根计算_第3页
有理系数多项式有理根计算_第4页
有理系数多项式有理根计算_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、有理系数多项式有理根计算摘要:设计出计算一元有理系数多项式有理根的 算法及程序,并给出计算实例.关键词:有理系数多项式;有理根;算法;程序.多项式问题中,有理系数多项式有理根的计算非常重 要,然而,尽管说已有完整的计算方法,但是人工操作却并 非易事;尽管说已有大型的数学软件,但是它们的表现却并 非如意.例如多项式:有2重有理根-19162/429459 ,但用matlab计算的结 果却是-233/5222o因此,本文研究专门的计算有理系数多 项式有理根的算法及程序.1. 理论基础基本定义及结论请参阅文献1,下面仅列出主要的。本原多项式1若整系数多项式f (x)的系数互素, 则称f (x)为本原

2、多项式.整系数多项式有理根的性质1设f( x ) =anxn+an-lxn-l+. . . +alx+ao是整系数多项式.如果有理数 u/v是f (x)的一个根,其中u和v是互素的整数,那 么:(1)、整除f (x)最高次项系数ao ,而u整除f (x)的常数项an ;(2)、 f (x) = (x-u/v) /q (x),这里 q (x)是一个 整系数多项式.并且,若有理数u/v ( u, vuz且(u, v) =1)是f (x) =anxn+an-lxn-l+. . +alx+a0 的有理根,那么 f (1) / (v-u)和 f (t) / (v+u)全为整数.综合除法1设 f (x)

3、=anxn+an-lxn-l+. . +alx+ao 是 整系数多项式,c是整数,如果f (x) = (x-c) (bn-lxn-l+bn-2xn-2+. . . +blx+bo) +r 那么 bnt=an ,b-二ai+l+cbi+1 ( owiwnt ),r=ao+cbo.2. 算法设计根据整系数多项式有理根的性质,设计有理系数多项式 f (x)有理根算法如下。2. 1主函数、输入f (x)系数。输入系数需要区分整数与分数, 为此用两个数组分别存储分子与分母,并初始化分母数组值 为1,这样在输入整数时即可不顾分母。、调用”多项式输出子函数”,输出f (x)的多项 式形式。、调用”化本原子函

4、数”,变f (x)为本原多项式 g (x) =aoxn+. . . +an-lx+an。、调用”求特殊根子函数”,确定0、?是否为g(x)的根。、调用”求普通根子函数”,确定g (x)非0非? 的有理根。2. 2子函数 、多项式输出子函数:需要根据各项系数及次数设计。 、化本原式子函数:调用”求最小公倍数子函数”求得f (x)系数之公分母,调用”求最大公因数子函数”求 得f (x)系数分子的最大公约数,则g(x)=(1/g)/f(x)即是本原多项式。 、求特殊根子函数:当an=an-t=. . . =an-k=o而 an+k-tho (k20)时,0 是 f (x)的 k+1 重根;调用&qu

5、ot; 综合除法子函数”计算且记下g(?)的值,并当1或-1 是根时确定其重数且输出结果。 、求普通根子函数:此函数的功能是求出g (x)最 高项系数h、常数项t的因子并构成g (x)的可能的有理 根%z且判定%z是否为g(x)的根。为此设| ao | =h、i an | =t,首先k从2循环到,当k/t时,若t/k=k, 则k是t的因子,否则k与t/k都是t的因子,用数组u 存储t所有的正因子u o其次k从2循环到,同样方法确 定h的正因子v ,并且每求出一个v,将v与u中的每个 数u组成分数u/v且判断u/v是否为g(x)的根,为此 需调用”判根子函数”。 、综合除法子函数:此函数的功能是

6、判定有理数m/d 是否为g(x)的根,若是则输出结果。首先综合除法容易 实现。其次用m/d除g (x),若余数为0,则设g (x)=(x-m/d) /q (x),再用 m/d 除 q(x), 直下去,假设 t+1 次后的余数不为零,那么m/d即是f (x)的t重根,输出 此结果。 、判根子函数:此函数的功能是将v与u中的每个 数u组成u/v且判定其是否为g (x)的根。为此需做:遍 历u中元素u,构作u/v ,并且每构作一个就调用”排除 非有理根子函数”判断其是否为可能的有理根,若是就调 用”综合除法子函数”对其进行判定处理。 、排除非有理根子函数:对于有理数u/v ,如果g(l) /(v-u

7、)与g (-1 ) / (v+u)不全为整数,则u/v不是g(x)的有理根;否则u/v即可能是f(x)的有理根。最大公因数、最小公倍数子函数等算法容易确定,从略。3. 参考程序根据算法,我们用c语言设计了参考程序,代码如下:include include ttinclude define ul 2000 /*存储常数项正因子的数组u的长度*/static int z; double x2 50, x2 50; staticint z; int y50;static double fl, f2, ao, an; /*f1 为 f (1), f2 为f (t), ao为最高项系数,an为常数项*/

8、*判断两数相乘是否溢出子函数*/int mul (double a, double b) if (a>0 &&b>0 && a-pow (10, 15) /b>=pow (10, -6) return 1;/*判断有效数位是否超过15位*/else if (a>0 && b二-pow (10, -6) return 1;else 辻(ao && pow (10, -6) 0. 0 && p) printf (”+ “);else if (* (am+p) >0. 0 &&

9、; ! p) printf (” “);else printf (” - “);if (* (ad+p) =1. 0) if ( ! (np) printf (” % olf ” , fabs (* (am+p);else if (n-p=二 1 && fabs (* (am+p)!二1.0) printf (” 01fx” , fabs (* (am+p );else if (n-p=二 1 && fabs (* (am+p) =1.0) printf (” x”);printfprintfelse if (np>l && fabs (*

10、 (am+p) =1.0)(” x § d ”,n-p );else if (np>l && fabs (* (am+p) >1.0)(” 01fx§d" , fabs (* (am+p), n-p); else if ( ! (n-p) printf (” (%. olf/%. olf) ” , fabs (* (am+p), * (ad+p);else if (n-p=l) printf (”(%. olf/%. olf) x” ,fabs (* (am+p), * (ad+p);else if (n-p>l) printf

11、(” (%. olf/%. olf) x §d”, fabs (* (am+p), * (ad+p), n-p); printf (" n n 的有理根有:”);/*化本原子函数*/double* int (double* m, double* d, int n) int p=0; double 1二0.0, x二*m;double *a=(double*)malloc(sizeofcdouble)*(n+l);double *pd二(double*) malloc (sizeof (double) * (n+1);for (p=0; p return ! fmod (fl/ (d-m), 1.0)&& ! fmod (f2/ (d+m), 1.0);/*综合除法子函数*/*形参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论