计算机辅助求解一元高次方程
- 格式:pdf
- 大小:430.57 KB
- 文档页数:2
f 淳技术 应用研究
2.2.1弦截泼
例如:求解方程ax3+bx2+cx+d=O。弦截法求解具体思路如下: (1)取两个不同点x1,x2,如果f(x1)和f(x2)符号相反,则(X1,x2) 区间内必有一个根。如果f(x1)与f(x2)同符号,则应改变xl,)【2,直到 f(x1)、f(x2)异号为止。注意x1、)【2的值不应差太大,以保证(xl,x2)区 间内只有一个根。 (2)连接f(x1)和f(x2)两点,此线(即弦)交X轴于X,见图4。 X点坐标可用下式求出: 型二 竺 ,再由x求出f(x)。f(x2)f(xl A一 一 、 ’f Eq^ Ll_l 、五,。 (3)若 x)与f(X1)同符号,则根必在(x,x2)区间内,此时将X作为 新的x1。如果 x)与r(x2)同符号,则表示根在(xl,x)区间内,将X作为 新的x2。 (4)重复步骤(2)和(3),直到l f(x)『<e为止,e为一个很小的 数,例 ̄10-6。此时认为f(x)一O。根据上述思路画出N—S流程图,见 图5。 输入xl、x2,求f(x1)、f(x2) 直到f(x1)和f(x2)异号 程序说明: 程序中分别用几个函数来实现各部分功能: ①用函数f(x)来求X的函数:f(x)=ax +bX2+cx+d; ②用函数xpoint(xl,x2)来求f(x1)和f(x2)的连线与x轴的交点 X的坐标; ③用函数root(xl,xa)来求(xl,x2)区间的那个实根。显然,执行 root函数过程中要用到函数xpoint,而执行xpoint函数过程中要用 Nf函数。 ④若求解具体的一元三次方Nx3-5x2+16x-80=0的根,其方程 系数分别是:a=l,b=-5,c=16,d=-80,编程时可以用预编译命令 #define预先定义。当求解其它方程时,只需更改预编译语句即可。 程序源代码如下: #include”math.h” #define a 1 #define b-5 #define c 16 #define d-80 float f(float x)/}定义f函数,实现f(x)=ax。+bx0+cx+d}/ {float y,y=a x率x牛x+b牛x x+c水x+d;return(y);} float xpoint(float xl,float x2)/*定义xpoint函数,求出弦与 x轴交点}/ {float Y; y=(xl}f(x2)一x2 f(x1))/(f(x2)-f(x1))} return (y); } float root(float xl,float x2)/ 定义root函数,求近似根 / {int i}float X,Y,yl I yl=f(x1)} do{x=xpoint(xl,x2); y=f(x); if(y*yl>O) {yl=y;xl=x;}else x2=x; }while(fabs(y)>=0.000001); return(x); } main() / 主函数}/ {float xl,x2,f1,f2,X} do{printf(”input xl,x2:\n”);scanf(”%f,%f”,&xl, &x2); fl=f(x1)I f2=f(x2)}}while(fl f2>=O)} x=root(xl,x2)#printf(”A root of equation is%8.4f”,x)I } 程序运行情况如下: input xl,x2: 2,6 A root of equation is:5.O0O0 由程序运行结果可知,此一元三次方程的一个实根为:x=5。
2.2.2二分法
二分法求根的思路与弦截法类似,所不同的唯一就在于弦截法
中的x是弦与x轴交点,而二分法中取的x是所取区间的中点,因此二
分法的程序是把上述程序中的root函数作一下更改。
float xpoint(float xl,float x2)/}定义xpoint函数,求出区
间[xl,x21的中点(xl+x2)/2 /
{float Y; y=(xl+x2)/2; retum(y);}
2.2.3牛顿切线法
牛顿切线法的思路是:对方程fix)给定一个初值xO作为方程的
近似根,经过若干次迭代后,得到方程高精度的近似根。牛顿切线法
迭代公式为:
f(xi)
x_+l~ 一,^t(x
其中,f‘(xi)是f()【i)的导数,当I Xi+l-X r<lo 时,Xi+。就作为方
程的近似解。
实际上,牛顿切线法的实质是逐步以切线与x轴的交点来作为
曲线与x轴交点的近似值。
例如:求解方程3xL4X -5x+l 3=0。
其求解源程序如下:
#include<math.h>
main() / 本例将所有功能全放在一个主函数中 /
{float xl,x2,fxl,fx2;/}fxl为原方程,fx2为导数方程
}/
x2=3;
do{xl=x2;
fxl=3*xl十x1十x1—4十x1*xl-5*xl+l3l
fx2=9*xl*xl-8.xl-5;
x2=xl-fx1/Ix2;}while(fabs(xl-x2)>=1e-6);
prinff(”A root of equation is%8.4f”,x2);}
程序运行情况如下:
A root of equation is:-I.5489
由程序运行结果可知,此一元三次方程的一个实根为:X=-1.
5489。
3结语
3.1两种方法比较
使用Excel求解方程较为简便,操作简单,易于理解,但缺点在
于仅仅知晓最终结果,无法了解求解过程,只能对具体的某一方程
求解。
使用C语言求解方程较为复杂,且解题者须具备C语言编程的
相关知识,否则无法运行程序,但此方法可知晓具体程序以及如何
求解,且可以通过改变预编译命令改变方程的系数,从而适用于不
同的高次方程。
3.2总结
对于一个一元高次方程,我们平时求解只能通过因式分解或其
它方法去硬凑出其根,但通过这类方法求解的方程有限,而通过上
述两种方法可帮助我们求得此类方程的近似解,尤其是利用计算机
的自动计算替代了我们手工计算的繁琐,且精度较高,但总的缺点
都是只能求解出一个实根,若方程有多个实根时,一次只能计算其
中的一个。
参考文献
[1]邵丽,郭宁.中文版Excel2000实用教程.航空工业出版社,2000.5.
[2]谭浩强.C语言程序设计.清华大学出版社,2001.1 2.