一元多次方程求解新方法的验证与探索_第1页
一元多次方程求解新方法的验证与探索_第2页
一元多次方程求解新方法的验证与探索_第3页
一元多次方程求解新方法的验证与探索_第4页
一元多次方程求解新方法的验证与探索_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、密级:学号:C2012177分类号:U D C :南昌大学工程硕士学位研究生学位论文一元多次方程求解新方法的验证与探索Verification and explore a new method of solving the equationof element times唐骏培养单位(院、系):信工学院指导教师姓名、职称:江顺亮教授专业学位种类:工程硕士专业领域名称:计算机技术论文答辩日期:2014年12月答辩委员会主席:评阅人:2014年12月7日学位论文独创性声明一、学位论文独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注

2、和致谢的地方外,论文中不包含 其他人己经发表或撰写过的研究成果,也不包含为获得南昌大学或其他教育机 构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡 献均已在论文中作了明确的说明并表示谢意。学位论文作者签名(手写):用股 签字日期:合 年I月y日二、学卷论文版权使用授权书本学位论文作者完全了解南昌大学有关保留、使用学位论文的规定,同意 学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文 被查阅和借阅。本人授权南昌大学可以将学位论文的全部或部分内容编入有关 数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编本学位论文。 同时授权北京万方数据股份有限

3、公司和中国学术期刊(光盘版)电子杂志社将 本学位论文收录到中国学位论文全文数据库和中国优秀博硕士学位论文 全文数据库中全文发表,并通过网络向社会公众提供信息服务,同意按“章程” 规定享受相关权益。学位论文作者签名(手写): 底吕七 导师签名(手写):签字日期年(月日签字日期:Am年I月日论文题目一元多次方程求解新方法的验证与探索姓 名唐骏学号C2012177论文级别博士口硕士7院/系/所信工学院专业计算机技术Email备注:0公开口保密(面衰学位苏雨请获批施为“保密”, 年 月后公开)摘要摘要一元多次方程是一种简单而实用范围广的方程形式,实际工程应用中以 及数学问题求解中它都有着重大使用价值。

4、为很好地求解一元多次方程,本 文在前人已有方法基础上探索新的求解方法,通过研究,提出了新方法的求 解思路和求解方法,并用计算机实现算法,验证新方法求解实根的可行性和 实用性。最后,进一步探索了用新方法求解虚根。关键词:一元多次方程;求解;方法;虚根AbstractABSTRACTA polynomial equation with one unknown quantity is a simple and practical equation form, which is significant in practical applications and solving math problem

5、s, For good solving a polynomial equation, a new solution based on preciously existing method is explored. Through this topic research, new methods of solving polynomial equation is presented, and finally realized and verified by computer the feasibility and practicability of new methods in real roo

6、t case. Finally, it is further explored to use this method solve the complex root.Key Words: polynomial equation with one unknown quantity; equation solving; method; complex root目录 TOC o 1-5 h z HYPERLINK l bookmark16 o Current Document 第1章绪论1 HYPERLINK l bookmark19 o Current Document 1.1课题主要研发内容1 H

7、YPERLINK l bookmark22 o Current Document 一元二次、三次、四次方程的求解1 HYPERLINK l bookmark26 o Current Document 一元五次方程以上的方程被证明没有根式解4一元多次方程的求解是有必要的4 HYPERLINK l bookmark33 o Current Document 第2章 一元多次方程的求解方法6 HYPERLINK l bookmark36 o Current Document 2.1试根法多项式因式分解6 HYPERLINK l bookmark39 o Current Document 2.2基于N

8、TL算法库的多元多项式分解高效实现6 HYPERLINK l bookmark42 o Current Document 2.3基于模式识别的多项式因式分解算法及其应用7 HYPERLINK l bookmark45 o Current Document 2.4牛顿插值的多项式因式分解7 HYPERLINK l bookmark72 o Current Document 第3章 新方法的理论分析113.1 一元高次方程求解的新方法一转化为齐次线性递归数列极限求解法.11 HYPERLINK l bookmark78 o Current Document 3.2新方法的理论基础-一线性常系数齐次

9、递推关系11 HYPERLINK l bookmark81 o Current Document 3.3 元多次方程转换为递推数列求方程根12 HYPERLINK l bookmark85 o Current Document 3.4新方法求解的可行性与优点13 HYPERLINK l bookmark92 o Current Document 第4章方案的实现与验证15 HYPERLINK l bookmark95 o Current Document 4.1编程环境简介15 HYPERLINK l bookmark98 o Current Document 4.2实数范围内的一元多次方程1

10、64.2.1设计流程图164.2.2程序分析 164.2.3 测试结果 18424问题分析19 HYPERLINK l bookmark101 o Current Document 4.3虚数范围内的一元多次方程224.3.1虚数范围内的一元多次方程求解与实数的求解的相同与不同处224.3.2复数运算的实现224.3.3结果测试254.3.4关于复数坐标平移后的系数探讨 27 HYPERLINK l bookmark106 o Current Document 第5章方案的优化29 HYPERLINK l bookmark109 o Current Document 5. 1关于平移量的界面设

11、置29 HYPERLINK l bookmark112 o Current Document 5.2关于精度的自动选择29 HYPERLINK l bookmark115 o Current Document 致谢33 HYPERLINK l bookmark118 o Current Document 参考文献34 HYPERLINK l bookmark169 o Current Document 附录 36第1章绪论1.1课题主要研发内容本课题旨在探索一元多次方程求解的一种新方法,并对探索的成果进行相关验证, 力求保证新方法的可行性,还对方法进一步的完善,使之既能求实根,也能求虚根,还

12、能相应地调整结果的精度,保证结果的有效性。众所周知,在实际工程和数学研究中,都离不开求解方程的支持。一元多次方程更 是在这些方面有很频繁的应用。但是,对于一个普通的一元多次方程,低次宿时一般人 才能手工解出,而大部分人都解不出四次以上的方程。本文就是仔细地分析一元多次方 程,学习和比较他人提出的一元多次方程求解方法,并提出一种一元多次方程求解新方 法,探索它在实根和虚根求解中的具体实现,从而发掘一元多次方程求解规律。元二次、三次、四次方程的求解定义:一元二次方程,就是只有一个未知数且未知数最高次数为2的整式方程,其 般形式为 ax2+bx+c=O(a0)一元二次方程是一元多次方程最基本的形式,

13、同时也是大家最熟悉的形式,应用范 围十分之广,而且列出方程和求解都比较简单。因式分解法,配方法等方法都是一元二 次方程求解的常用方法,但应用最广而且最实用的方法就是公式法,即:x= 0)中 设两个根为Xi, x?则 Xi+ X2= -b/aXX2=c/a用韦达定理判断方程的根若b2-4ac0则方程有实数根若b2-4ac0则方程有两个不相等的实数根若b2-4ac=0则方程有两个相等的实数根 一元三次韦达定理:对于三次方程ax3+bx2+cx+d=0,存在XX2X3=d/aXX2+ XiX3+X2X3=c/axi+X2+X3=b/a韦达定理的推广:韦达定理在更高次方程中也是可以使用的。一般的,对一

14、个一元n次方程ZAiXi =0它的根记作X】,X2,Xn ,我们有:LXi=(-l)Al*A(n-l)/A(n) XjXj=(-l)A2*A(n-2)/A(n)nXj=(-l)An*A(0)/A(n)三次方程求解公式的探索:三次方程的求解是一个非常漫长的过程,意大利数学家帕西奥利在对三次方程进行 各种探索依然得不到结果的时候宣布了一元三次方程无求根公式的结论。这揭开了对一 元三次方程求根公式求解公式探索的序幕。先是大学教授费罗得到了 x3+mx=n这样一类 缺项三次方程的求解公式,但他并没有公布自己的结论。他死后,塔塔利亚也同样发现 了形如x3+mx=n方程的求解公式,他接着研究,到1541年

15、,终于完全解决了三次方程 的求解问题,但他同样没公开自己的结论。他把结论告诉了一个名叫卡尔丹诺的人,而 这个卡尔丹诺却出版了大术一书,将三次方程解法公开了。而三次方程的求解公式 就是卡尔丹诺公式。卡尔丹诺公式:一元三次方程的一般形式是x3+sx2+tx+u=0如果作一个横坐标平移尸x+s/3,那么 我们就可以把方程的二次项消去。所以我们只要考虑形如x3=px+q的三次方程。对于形如x3=px+q的三次方程,假设方程的解x可以写成x=a-b的形式,这里a 和b是待定的参数。代入方程, 我们就有 a3-3a2b+3ab2-b3=p(a-b)+q 整理得到 a3-b3 =(a-b)(p+3ab)+q

16、由二次方程理论可知,一定可以适当选取a和b,使得在x=a-b的同时,3ab+p=0。这样 上式就成为a3-b3=q两边各乘以27a3,就得到 27a6-27a3b3=27qa3由 p=-3ab 可知 27a6 + p3 = 27qa3这是一个关于a3的二次方程,所以可以解得a。进而可解出b和根x.笛卡尔法:四次方程的解法可以用待定系数法,这种方法称为笛卡尔法,由笛卡尔于1637年 提出。先将四次方程化为x4+ax3+bx2+cx+d=0的形式。令 x=y-a/4,整理后得到 y4+py2+qy+r=0 (1)设 y4+py2+qy+r=(y2+ky+t)(y2-ky+m)=y4+(t+m-k2

17、)y2+k(m-t)y+tm比较 dy 对应项系数,得 t+m-k2=p, k(m-t)=q, tm=r设kU 0,把t和m当作未知数,解前两个方程,得t=(k3+pk-q)/(2k), m =(k3+pk+q)/(2k)再代入第三个方程,得(k3+pk)2-q2)/(4k2)=r。即 k6+2pk4+(p2-4r)k2-q2=0解这个方程,设k o是它的任意一根,t o和m o是k=ko时t和m的值那么方程(】) 就成为(y2+koy+to)(y2-koy+mo)=0解方程y2+koy+to=0和y2-koy+mo=0就可以得出方程(1)的四个根,各根加上 -4/a就可以得出原方程的四个根。

18、一元四次求根公式:对于一般的一元四次方程ax4+bx3+cx2+dx+e=0设方程的四根分别为:xl=(-b+A+B+K)/(4a)x2=(-b-A+B-K)/(4a)x3 =(-b+A-B-K)/(4a)x4=(-b-A-B+K)/(4a)(A,B,K三个字母足以表示任意三个复数,根据韦达定理:方程四根的和为-b/a,所以 当X” X2, X3的代数式为原方程的三个根时,那么x4形式的代数式必是方程的第四个 根。)将这四个代数式代入到韦达定理中可整理得:Xi+ X2+x3+x4= -b/aX x2+ xj X3+X1X4+ X2X34-X2X4+X3X4=( 1 /8a2)(3b2-A2-B

19、2-K2)=c/axix2x3 +x iX2X4+x 1 x3X4+x2x3X4= (1/16a3)(-b3+bA2+bB2+Bk2+2ABK)= -d/axix2x3X4-(l/256a4)(b4+A4+B4+K4-2b2A2-2b2B2-2b2K2-2A2B2-2A2K2-2B2K2-8bABK)=e/a整理后为:A2+B2+K2=3b2-8ac记 为 pA2B2+A2K2+B2K2=3b4+16a2c2-16ab2c+16a2bd-64a3e记为 qA2B2K2=(b3-4abc+8a2d)2记为 r由此可知:A2, B2, K2是关于一元三次方程 y3-py2+qy-r=0 的三根 从

20、而可解得土yll/2,y21/2,y31/2 是 A, B, K 的解。若y=ll/2,y=21/2,y=31/2是A, B, K的一组解(A, B, K具有轮换性,所以在代 入时无须按照顺序)。那么另外三组为:(yll/2,-y21/2,-y31/2)(-yll/2, y21/2,-y31/2)(-yll/2,- y21/2, y31/2)从而将以上任意一组解代入到所设代数式中,均可解得原四次方程的四根。一元五次方程以上的方程被证明没有根式解用根式求解四次或四次下方程的问题在16世纪已获得圆满解决,但是在以后的几 个世纪里,探寻五次和五次以上方程的一般公式解法却一直没有得到结果。1770年左

21、右, 法国数学家拉格朗日转变代数的思维方法,提出方程根的排列与置换理论是解代数方程 的关键所在,并利用拉格朗日预解式方法,即利用1的任意n次单位根(n=l)引进了 预解式xl+x2+2x3+n-lxn,详细分析了二次、三次、四次方程的根式解法。他的工 作促进了代数方程论的进步,但是他的这种方法却不能对一般五次方程作根式解,于是 他怀疑五次方程是否存在根式解。并且他在寻求一般n次方程的代数解法时也遭失败, 从而开始怀疑四次以上代数方程是否有根式解,而他的这种思维给了后人启示。随后, 经过了鲁菲尼,高斯,阿贝尔等众多著名数学的研究,可以解决构造任意次数的代数可 解的方程的问题,但是不能解决判定已知

22、方程是否可用根式求解的问题。后来,伽罗瓦 开始证明不存在一个五次或高于五次的方程的一般根式解法时,与拉格朗日相同,也从 方程根的置换入手。他给方程可解性问题提供了全面而透彻的解答,解决了困扰数学家 们长达数百年之久的问题。他开辟了群论,这么一个全新的研究领域,以结构研究代替 计算,把从偏重计算研究的思维方式转变为用结构观念研究的思维方式,并把数学运算 归类,从而证明一元五次以上是没根式解的。L4 一元多次方程的求解是肴宓要而代数基本定理:任何复系数n次多项式方程在复数域上至少有一根(nNl)由此推出,n 次复系数多项式方程在复数域内有且只有n个根(重根按重数计算)既然一个n次多项式方程有n个根

23、,而五次及五次以上的方程是不存在求根公式的, 而我们又很有必要求解出高次方程的解,虽然高次方程不存在求解公式,但是却可以找 到求解高次方程根的方法。尤其是在有计算机技术支持的条件下,有很多种方法都能得 到多次方程的根,所以,我要做的是在前人求解方法的基础上,对他们的方法进行比较 和改进,探索出一种新颖的一元多次方程的求解方法。第2章一元多次方程的求解方法2.1试根法多项式因式分解分解一个高次多项式,一般就是采用竖除法,就是你所谓的“多项式除法除出因式”。 例如一个n次方程a0+alx+a2x2+ +an-lx n-l+anxn =0,由代数基本定理知这个方程有 n个根,我们可利用试根法得到方程

24、的第一个根xl,然后用a0+alx+a2x2+an-lxn-l +anxn/xxl,得到新的n-1次的多项式,然后再重复上面工作,依次循环,最后便可求出 方程这n个解。至于试根法,并不是盲目的试,假设一个n次方程具有有理根,那么他的每个根必 有(b/a)形式,其中b是常数项a0的因子,a是最高次系数an的因子,然后用这个进行尝试 则可以方便很多。而对于其证明过程,我们只要对aO进行移项的话,也不难证明方程 的根必是b/a形式。在此用简单的例子说明多项式的因式分解:求解方程 3x3-4x2-27x+36=0最高次系数3的因子有1,土3常数项系数 36 的因子有1,2,3,土4,6,12,土 18

25、,36可发现3是方程的一个根再对其进行降次3x3.4x227x+36/x-3=3x2+5x-12方程3x2+5x2=0的两根是3 4/3因此,可解出这个方程的三个根分别是3, -3, 4/3这方法比较简单方便,可以适用绝大部分实数解的方程,但是前提是必须把最高次 系数和常数项系数都化为整数。2.2基于NTL算法库的多元多项式分解高效实现NTL算法库是开放源码的自由软件,具有专业处理任意精度大整数、实数的计算数 论与计算代数的高性能可移植C+库,支持任意大整数任意精度实数以及基于整环和有 限域上向量、矩阵、多项式的数据结构和算术运算,同时提供了大量的库函数实现,因 此它是信息安全理论实现、符号计

26、算与计算机自动推理平台开发的高效函数库。整数环上多元多项式的因式分解的算法,基本思想仍然是将多元问题逐步化为一元 问题,再应用多元Hensel提升方法。可以在Rx,y,z)中将y赋以值a,已经知道这个等价 于求其模ya的余式,这样则可将其化为n-1元问题。当一元多项式在整数环上不可约 时,对某素数可能是模p可约的。对于多元多项式也有同样的问题,若f(x,y,z,)在整 数环上是不可约的,但对某个整数a,f(x,az,)在整数环上是可能可约。总之,该方法是讨论整数环上多项式因式分解算法与实现方法,并提出了基于具备 高效,任意精度大整数、实数的计算数论,并由此来求解一元多次方程的解。2.3基于模式

27、识别的多项式因式分解算法及其应用规则集RULES=(T_1,T_2,是包含以下因式分解公式的变形T_1 :x2-y2(x+y)* (x-y)T_2:x3-y3 f (x-y)*(x2+xy+y2)T_3 :x3+y3 f (x+y)*(x2-xy+y2)T_4:x2+y2+2xy-*(x+y)2T_5 :x3+y3+z3-3xyz-* (x+y+z)*(x2+y2+z2-xy-yz-xz)T_6: x,+y 4+x?y 2(x2+y2)2-2x2y2T_7:x2+2xy-2yz-z2-* (x+y)2-(y+z)2因式分解问题就是:输入多项式F,找出多项式pi,.,Pn,使得F通过RULES_

28、O得 Plpn, F=piPn,同时输出推导的中间过程和引用的规则。多项式分解的提取公因式和分组分解方法,可通过扩展规则集RULESJ)实现。而 单变元多项式、二次三项式等多项式的分解,除了要扩展规则外,还要在识别过程中引 入数字计算。如果输入多项式a2-5a+6,先用Pattem_Matching判定a2-5a+6=p(ax2+bxy+cy2)p:(x,y,a,b,c)-(a,1,1,-5,6)然后通过分解整数得到al,a2c-l, 1, cl,c2e3,-2,-l,l,2,3,再逐一验算求得 a】,a2,Ci,C2 可以分别取 1,-3,1,-2。同时机器可以学习新的规则,实现计算机学习用

29、户输入的规则,并将其列入 USER_RULES 集合。2.4牛顿插值的多项式因式分解Newton向前差分插值算法定义:设等距节点Xj=x0+ih, h是步长,i=0, 1, 2,。记函数f的值=f(Xi),i=0,l,2,。称 *+1-为一阶向前差分, 为n阶向前差分定理:向前差分与函数的关系为:E 扣)七卜其中(:卜心者士1现:讨论尊#巨节点情形XoXVxk, Xi+I-Xi=h, i=O,l,k由定理有:fx/n!制=U/1 !+(-iy(Xa + 0当/21+.+(-俨 ERxgVn!c(2 = A% /2!+(-1 (Xq + xt + x2) A% /3! + +n*1 1h*-1

30、n/2且fecmon= 1,则输出f(x)的最后一个因式f(x),否则继续构造。I;*)的系数数租国|中】求fZ I;系致巴散大公成子I.并令砒|=8|/1牛顿插值法就是利用了多项式整除的一些性质,来判断多项式是否存在因式,并找出多项式的因安。一般情况下,人工可以进行低次多项式的分解,而高次多项式则可以 通过计算机将其分解成一些不可约多项式的积。第3章新方法的理论分析3.1 一元高次方程求解的新方法一转化为齐次线性递归数列极限求解法在诸多前人总结的一元高次方程求解的方法基础上,虽然方法都不一样,但是大体 思想都离不开多项式的因式分解。既然明白了高次方程的求解关键在于通过多项式的因 式分解来降次

31、。于是我在总结这些方法的基础上,尝试新的求解方法,最后,想到了求 解高次方程可以将方程转换为齐次线形递归数列,通过数列各项之间的关系来进行求 解。3. 2新方法的理论基础一-线性常系数齐次递推关系定义:an+Cian.i+czan-2+,+ckan.k=Oa()=do,ai=dak-idk-i若C|,C2,Ck,d0,dk都是常数则该式称为k阶的线形常系数齐次递推关系 而对于线形常系数齐次递推关系存在两个定理,分别是:定理L如果常系数齐次线形递归数列务的特征方程有k个不同的单根X|,X2,,Xk.那么, 数列an的通项公式是:an=A!x1n+A2x2n+-+Akxkn,M中A|,A2,,Ak

32、是待定常数,由初 始条件确定。定理2:如果常系数齐次线性递归数列R的特征方程有不同的特征根X|,X2,Xk(svk),其 中Xj(l i s)是特征方程的重根t+t2+ts=k,则数列an的通项公式是:an =A)(n)xin+A2(x)x2n+ -, +Ar(n)xrn.其中,A1 (n)=Bi+B2n+ , Bt)nl 11,i= 1,2, , , ,s,这里 B【,B2, Bti是待定系数,由初始条件决定。下面用两个具体例子来体现利用线性常系数齐次递推关系来求解数列an的通项公式 例子 1: an-an.r 12an.2=0,ao=3,ai=26,求数列aQ的通项公式首先把它划成特征方程

33、:x2-x-12=0即(x4) (x+3)=0G(x) =P(x) /l-x-12x2=P(x)/(l-4x) (l+3x) 其中P(x)是一次多项式 将G (x)化为部分分数得:G(x)=A/l-4x+B/l+3x=A1 +4x+42x2+ +B 1 -3x+32x2-33x3+34x4*an=A(4)n+B(3)nao=A+B=3 ai=4A3B=26 _ - _ -由、式得A=5, B=-2an=5*4n-2* (3)n例子 2:已知 ai=a2=l, a3=2, 3an+3=:4an+2+afl+i-2an,求数列an的通项公式由已知条件3&+3=45+5-2&可得数列an的特征方程为

34、:3x3-4x2-x+2=0,解得特征根为:xlf2=l(重根),x3=-2/3.由定理2得,可得数列an=A1+A2n+BI (-2/3)n.由 ai-a,2=l, a3=2.代入通项公式解得:At=l/25, A2=3/5, Bi=27/50则数列an的通项公式为 a=l/25+3/5n-27/50(-2/3),这是用特征方程求出特征根,从而代入公式求出待定的系数,求到数列an的通项 公式。_元多次方程转换为递推数列求方程根首先说明一下将一元多次方程转换为递推数列求方程根的思路:存在n次方程Anxn+An.ixn+Aix+Ao=O,由代数基本定理知该方程必有解且有n 个解(包括重根和虚根)

35、,将方程转为数列Ana2n+An-】a2n+Aian+i+Aoan=0,这样就得 到了一个数列an为跖街赋值,利用方程转出的数列求出后面的项,当n趋近于无穷大时,低次的便 可以忽略不计算,会收敛的使得x=an+i/an,且这个X必是绝对值最大的那个根,记为 Xmax然后再利用原来的方程除以(X-Xmax),便对方程进行了降次,依次循环,每次都求原 方程的最大解,这样对于一个n次方程,它循环d次后,就求得了方程的所有解。用个具体例子说明该方法如何求解一元多次方程。x3-6x2+llx-6=O可以表示为 an+36an+2+l 1 an+i-6an=0所以 a时3=6an+2-llan+i+6a令

36、 a)=0 a5=l ai=l推倒后面各项a3=-5a4=-35a5=-149ae=-539a7=-1805一直到后面,会发现a伸/an无限接近于3而3恰好是方程的最大根再用 xA3-6xA2+l lx-6/(x-3)=xA2-3x+2然后利用循环求出方程所有的根虽然可以很简单的看出方程的根是1和2,但是我 们还是转换成数列来看看:an+2=3an+i-2an令 ao=0, ai=l,推后面各项a2=3 a3=7 34=15本文程序的结果输出是这样的:_ n x很显然,用后项比前项可以得方程的根,也就是2L8O0080 7.000000 15.000000 31.080000 63.00000

37、0 127.000000 255.080000 511.000000 1023.000000 2047.000000 4095.000000 8191.000000 16383.000000 32767.000000 65535.000000 131071.000000 262143.000000 524287.008000 1048575.000808 2097151.000000 4194303.000000 8388607.000000 16777215.000000 33554431.0000003.4新方法求解的可行性与优点前面已经提到了,把方程转换为数列后,为前面一些跖,由定上值后

38、,可以求出后 面的项。当n趋近于无穷大时,知+屈就无限接近最大根,在程序中的实现方法可以是 an+2/an+1-an+l/an10-n, n接近正无穷。然后输出的知+血几就是他的最大根。对比前面扉提成I的方法;新方宓的优点还是很曲显矗前面的方法已经被前人所提出应用过,已不能称做为纯粹的新方法了。试根法对最高次项和常数项系数的值要求比较苛刻,如果存在一点误差就会导致 结果的很大偏差,而且试根法解决不了带虚数根的方程,这个问题在新方法中就可以得 到解决。其他几种方法大体都是基于一个算法库或者模式识别的基础上,利用计算机去寻 找相似的因式,这样的话,局限性还是比较大的。该方法将利用递推数列与特征方程

39、的关系,从利用特征方程求解递推数列入手, 反过来运用数列之间的关系求解方程的根,是一个新颖的方法。而且该方法通用性很高, 甚至可以解决带虚数根的方程。第4章方案的实现与验证4.1编程环境简介本文方案实现所基于的开发环境是VC6.0,即Visual C+6.0,是微软推出的一款C +编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+有着很多的 优点,是一个功能强大的可视化软件开发工具,而且它不仅是一个C+编译器,而 且是一个基于Windows操作系统的可视化集成开发环境。Visual C+它大概可以分成三个主要的部分:(1). Developer Studio,它是一

40、个集 成开发环境,我们日常工作的绝大部分都是在它上面完成的,再加上它的标题赫然写着 “Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+ 了。但是实际 上并不是这样的,虽然Developer Studio提供了 一个很好的编辑器和很多Wizard,但事 实上它没有任何编译和链接程序的功能,真正完成这些工作的我们后面会介绍。我们也 知道,Developer Studio并不是专门用于VC的,它也同样用于VB, VJ, VID等Visual Studio家族的其他同胞兄弟。所以不能把Developer Studio当成Visual C+,它是Visual

41、C+的一个壳子而已。(2). MFCo从理论上来讲,MFC也不是专用于Visual C+, Borland C+, C+Builder和Symantec C+同样可以处理MFC。同时,用Visual C+编写代码也 并不意味着一定要用MFC,只要愿意,用Visual C+来编写SDK程序,或者使用STL, ATL, 一样没有限制。不过,Visual C+就是为MFC而打造的,Visual C+中的许多特 征和语言扩展也是为MFC而专门设计的,所以用Visual C+而不用MFC就等于抛弃了 Visual C+中很大的一部分功能。但是,Visual C+不等于MFC。.Platform SDKo

42、 这才是Visual C+和整个Visual Studio的精华和灵魂,但是我们很少能直接接触到它。 大致说来,Platform SDK是以Microsoft C/C+编译器为核心,配合MASM,辅以其他 一些工具和文档资料。VC6.0同时还有很多优点,比如说界面简洁,占用资源少,操作方便等等,这些都 是很多其他软件所不具有的。尤其是对于我们本科生来说,所研究的课题还不算复杂, 应尽量选择简单的,合适的编程软件,而VC的操作便捷性就可以很好的满足我们的这 一需求,同时,VC界面简洁,容易上手,而且我们在学习C语言时就和它有过接触, 是一个熟悉的编程环境。VC6.0同样能验证我们新方法是否可行,

43、所以,在与其他复杂的环境相比之下,我们自然是尽量选择较为简洁而又熟悉的环境。4.2实数范围内的一元多次方程4. 2. 1设计流程图4. 2. 2程序分析程序中最关键的子函数就是double qiujie (double f,int n)。他的功能是求解出方程 的最大根,对于一个n次方程,主函数需要调用它n次,才能将方程的解完全解出,它 的全代码如下:double qiujie (doublen)int i,j,k;double xFJS+l;for(i=l;in+l;i-H-)for(i=l;in+l;i+)xi=0;xl=l;for(i=0,k=0;l ;i+,k=(k+n)%(n+1)fb

44、r(j=1 ,x k%(n+1 )=0;j 10& xk%(n+l)/x(k+l)%(n+l)-x(k+l)%(n+l)/x(k+2)%(n+l)0.001& x(k+l)%(n+l)/x(k+2)%(n+l)-xk%(n+l)/x(k+l)%(n+l)0.001) break;return xk%(n+l)/x(k+l)%(n+l);其中,数组xi就相当于我前面所提到的数列an,程序中我是把除窗外的项都定为0, 是为了方便计算,当然,如果出现当n无穷大时,后面的项知为0,导致a2an没有意 义的话,是需要对值进行一些改变的。不过经过测试后,发现这种不收敛的情况并不多。 对于数组xi,求后面的

45、每项的语句是fbr(j=l,xk%(n+l)=Oyn+l;j+)xk%(n+l)+-x(k+j)%(n+l)*fj;求到了数列an的每一项后做一步限定工作,在程序中是ifxk%(n+l)/x(k+l)%(n+l)-x(k+l)%(n+l)/x(k+2)%(n+l)0.001&x(k4-l)%(n+l)/x(k+2)%(n+l)-xk%(n+l)/x(k+l)%(n+l)0.001) break;其中0.001是个自己设的精度,即an+z/az-az/anVO.OOl时让程序跳转出去,求出an +1/an,这么一来a/an就基本上是等于它的最大根的,所以程序最后返回的就是x k%(n+l)/x(

46、k+l)%(n+l)4. 2.3测试结果例 1,对于方程(x-1)(x-2)=x2.3x+2=0_ xIjie shu:2 p:*C:XDocuaents and Sett ingsAdainist rai-3.0000002.0000002.0008001.000000Press any key to continue例 2,对于方程(x-1 )(x-2)(x-3)(x-4)=x4-10 x3+35x2-50 x+24=01.000000-10.00000035.000000 50.00000024.0000004.0013552.9961772.8035663.998902Press an

47、y key to continue(例 3,对于方程(x-1 )(x-2)(x-3)(x-4)(x-5)(x-6)=x6-21 x5+175x4-735x3+1624x2-1764x+720=04. 2. 4问题分析问题主要是出现在系数的数组存放中,可以看到我的程序中除了 yFJS+l外,还有 三个数组fFJS+l, gFJS+l,hFJS+l,按理来说只需要有一个数组存放系数就可以了, 但是由于该方法是先求最大解再循环的特殊情况,所以必须要对原方磐行变动,这样 就有必要多定义两组新的系数组。*(1)由于double qiujie (double f,int n)求最大解需要最高次系数为1,所

48、以需要建立新 的数组fi,令f!i=gi/gO,这样就相当于将方程各项的系数除以原方程最高次项,这 样最高次项就化为了 1,这个系数标准化是该程序实现必须的一步工作。例如:方程 2x4+5x3+8x2+10 x+l 1=0,gi存的依次是 2,5,8,10,11,但由于最高次需化为1,则方程化为xi+Z.SxS+IxnSx+S.SwOfi存的依次是 1,2.5,4,5,55NameValueH01.00000000800000002.5000000000000000F24.0000000000000000F35.0000000000000000J5.5000000000000000g02.00

49、00000000000000gi5.0000000000000000g28.0000000000000000g310.000000000000008g411.000000000008000(2)解方程的同时会出现这么一个问题,如果存在两个根绝对值相等,互为相反数, 那么double qiujie (double f,intn)便不能求出是那个解,这样就需要对程序进行修改, 我采用的方法是这样的:将坐标轴进行平移1,即将x用x+1代入,这样的话,如果原 方程有两个根5, -5,那么转换后求出的根就是4, -6,这样便可以通过该方法求解到根 -6,最后输出的时候再让它加1就可以了。用x+1代替x后

50、会出现一个新的系数组hi,根据杨辉三角可以容易知道,hi和fi存 在如下关系:hi= X顷挪妇具体实现代码是:hO=fIO;fbr(i=l ;in+l;i+)(hi=0;fbr(j = Og = ij +)(hi += comb2(n * fj;其中comb2是组合的意思,是方程的一个子函数它的实现代码如下:int comb2(int m,int k)int a;int i;fbr(i=O,a=l ;ik;i+)a=a*(m-i);fbr(i=O;ik;i+)a=a/(i+l);return a;用个具体例子说明fi和hi之间的关系 (x-1)(x-2)(x-3)(x-4)=x4_10 x3+

51、35x2-5Ox+24-O fO=l1=-10fI2=35f3=-50fI4=24hO=fO=lhl=4f0+fl=-6 h2=6f0+3fl+f2=ll h3=4f0+3qi+2f2+f3=-6 h4=f0+fIl+f2+fI3=0 程序调试的fi,hi结果如下:NameValueH01.0008000000000000f1-10.000000080000000F235.000000000000000f3-50.00000000000000024.000000000000000h01.0080000000000000h1-6.0000000000000000h211.000008000000

52、000h3-6.0000000000000000h40.00000000080000000把 x+1 代入 x 后也就是(x+1)4-10(x+1)3+35(x+1)2-50(x+1)+24= x4-6x3+1 1x2-6x=0如此一来,就可以避免出现解不出互为相反数的根的情况了。但是,这么一来,如果方 程存在两个根,使得xi+l=-(X2+1),例如-6, 4,就解不出方程了.这种情况是该方法避 免不了的,所以如果出现这样的情况,只需要再调动平移量就定可以解出。经研究发现, 平移过的系数组h(i)与未平移前的系数组f(i)存在如下关系:hi= Z Ci、fkaT(其中a是你所进行的平移量,而

53、且经过研究发现,a既可以是实数,同时还可以是虚 数)4.3虚数范围内的一元多次方程4. 3.1虚数范围内的一元多次方程求解与实数的求解的相同与不同处在解决了实数范围内一元高次方程的求解后,我进一步的探索,去探索该方法是否 同样适用于虚数范围内的求解。经研究发现,该方法同样适用于带虚数解的方程,而且 能解出虚数解。该程序与实数范围内求解的思路和方法是一样的,但是不同之处在于虚 数范围内的求解要定义复数的运算方法。程序代码的思路完全一样,只是虚数部分多出 了类的定义以及一些细节不同之处,例如printf( f,x);改为x.display。;.众所周知,系数如果全是实数的话,如果存在虚根的话,那么

54、必然存在偶数个虚根, 而且两两成共轴虚根,共辘虚根的模是相等的,那么求解的时候必须要对坐标轴进行平 移,而且最好平移虚坐标,最后在求得新的求解结果后平移回正确的求解,这样才能解 决共辘虚根的问题,其实在实数范围内的求解中我一开始并没有考虑到类似5, -5这样 的解的问题,也没有考虑要进行坐标轴的平移,而共辘虚根的存在使我不得不考虑去尝 试解决存在模相等的根的情况,最后考虑到了坐标轴平移的实用方法来解决该问题。4. 3.2复数运算的实现解决在复数范围内的运算不如实数范围内的运算那么简单,它的每一个方法的实现 都需要专门去定义。而对于一个一元高次方程的求解,它需要定义的运算符还是很多的,加减乘除以

55、及 +=,=,*=,/=都是在复数运算中必须定义的。同时,从实数范围内的求解程序来看, 还要去实现负数、绝对值以及输出的方法。class complexpublic:complex(double r=0.0,double i=0.0)set(r,i);void set(double r=0.0,double i=0.0)(real=r;imag=i;)复数加法方法的实现:complex complex:operator +(complex c2)return complex(real+c2. real, imag+c2. imag);)复数+=方法的实现:complex complex:ope

56、rator +=(complex c2)(real+=c2.real;imag+=c2.imag;return complex(real,imag);)复数减法方法的实现:complex complex:operator -(complex c2)return complex(real-c2.real,imag-c2.imag);)复数-=方法的实现:complex complex:operator (complex c2) real-=c2.real;imag-=c2.imag; return complex(real?imag);复数乘法方法的实现:complex complex: ope

57、rator *(complex c2)(return complex(real*c2.real-imag*c2.imageal*c2.imag+imag*c2.real);复数*=方法的实现:complex complex: :operator *=(complex c2)(real=real* c2.real-imag*c2.imag;imag=real*c2 .imag+imag* c2.real;return complex(real,imag);复数除法方法的实现:complex complex: operator /(complex c2)double m=c2.real*c2.re

58、al+c2.imag*c2.imag;return complex(real*c2.real+imag*c2.imag)/m,(imag*c2.real-real*c2.imag)/m); 复数/=方法的实现:complex complex: :operator /=(complex c2)double m=c2.real*c2.real+c2.imag*c2.imag;real=(real*c2.real+imag*c2.imag)/m;imag=(imag*c2.real-real*c2.imag)/m;return complex(real,imag);复数的负数方法的实现:comple

59、x complex:operator -()return complex(-real,imag);)复数绝对值方法的实现:double complex:abs()(return sqrt(real*real+im 聘*imag);)复数输出方法的实现:void complex:display()(coutvvreal=0?H+)vvimagvvi vvendl;4.3.3结果测试例 1.方程x-(l+i)x+(l-2i)=x2-3ix-(l+i)(l-2i)=x2-3ix+(-3+i)根应该是-l+2i和1+i0.999969U.999911I.999969U.000091Press any

60、key to continue.例 2.方程 x2+2x+2=0 根应该是对共辗根-1 土 iD: 代码Debu叭虔根.jie shu:2xi shu:002 0-1.00001*0.9999751-0.999995-0.9999751例 3.方程(x2+2x+2)(4x2+16x+25)=4x4+24x3+65x2+82x+50=0这个方程是两个无实数解的一元二次方程乘出来的,我们可以手算出这两对根应该是-2+1.5i,-2-1.5i 和l+i 和l-iPress any key to continue例 4.方程(x2+2x+2)(4x2+16x+25)(2x2+2x+1)=8x6+56x

温馨提示

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

评论

0/150

提交评论