实验一方程求根1山西大学计算机与信息技术学院实验报告姓名学号专业班级课程名称计算方法实验实验日期成绩指导老师批改日期实验名称实验一方程求根一、实验目的用各种方法求任意实函数方程f(x)=0在自变量区间[a,b]上,或某一点附近的实根。并比较方法的优劣。二、实验方法(1)二分法对方程f(x)=0在[a,b]内求根,将所给区间二分,在分点x=2ab判断是否f(x)=0,若是,则有根x=(b+a)/2。否则,继续判断是否f(a)*f(x)0,若是,则令b=x,否则令a=x、重复此过程直至求出方程f(x)=0在[a,b]中的近似根为止。(2)迭代法将方程f(x)=0等价变换为x=φ(x)形式,并建立相应的迭代公式xk+1=φ(xk)。(3)牛顿法若已知方程f(x)=0的一个近似根x0,是函数f(x)在点x0附近可用一阶泰勒多项式p1(x)=f(x0)+f`(x0)(x-x0)来近似,因此方程f(x)=0可近似表示为f(x0)+f`(x0)(x-x0)=0。设f`(x0)≠0,则x=x0-f(x0)/f`(x0)。则x作为原方程新的近似根x1,然后x1将作为x0带入上式。迭代公式为xk+1=xk-f(xk)/f`(xk)。三、实验内容(1)在区间[0,1]上用二分法求方程ex+10x-2=0的近似根,要求误差不超过0.5x10-3。(2)取初值x0=0,用迭代公式,xk+1=10kxe-2,(k=0,1,2···)求方程ex+10x-2=0的近似根。要求误差不超过0.5x10-3。(3)取初值x0=0,用牛顿迭代法求方程ex+10x-2=0(k=0,1,2···)的近似根。要求误差不超过0.5x10-3。四、实验程序#includeiostream#includecmathusingnamespacestd;实验一方程求根2#defineeps0.5*1e-3voidfunction(){doublefunction(double);doublex1=0,x2=1,n;do{n=(x1+x2)/2;function(n);if(function(x1)*function(n)0){x2=n;}else{x1=n;}}while(fabs(x2-x1)=eps);couttheresultis:nendl;}doublefunction(doublex){return(exp(x)+10*x-2);}voidfunction2(){doublex,x0,m;x0=0;m=exp(x0);x=(2-m)/10;while(fabs(x-x0)eps){x0=x;m=exp(x0);x=(2-m)/10;printf(x0=%12.10lf,x=%12.10lf\n,x0,x);}printf(用Newton得:%12.10lf\n,x);}//牛顿迭代法voidmain(){doublex,x0,f0,f00,m;x0=0;实验一方程求根3m=exp(x0);f0=m+10*x0-2;f00=m+10;x=x0-f0/f00;while(fabs(x-x0)eps){x0=x;m=exp(x0);f0=m+10*x0-2;f00=m+10;x=x0-f0/f00;printf(x0=%12.10lf,x=%12.10lf\n,x0,x);}printf(用牛顿迭代法得:%12.10lf\n,x);function();function2();}五实验结果六、结果分析1二分法需要十一次计算,迭代法需要五次计算,牛顿迭代法需要两次计算。牛顿迭代法计算量最低。2用牛顿法解方程式,应该尽量使初值接近零点,这样能够更节省时间,得到的根更准确。3二分法和牛顿法都是解方程的两个比较好的方法,二分法在解一元方程应用中相比牛顿法要简单些,特别是写程序要简单些,但是二分法求根过程的步骤要比牛顿法多,牛实验一方程求根4顿法不仅可以解一元方程,还可以解多元可微分方程,而且求根速度很快,但是牛顿法有一个点就是要在根的附近才能求解,如果离根距离太大,有可能不能解出根来,所以在不知根在哪个小范围的情况下,最好先用二分法找到一个比较小的区间,再在这个区间上求方程的根,这样的求解是可行的。另外,如果在某点处,矩阵的行列式为零,则在运算中会出现分母为零的情况,牛顿法不能继续求解,这也是牛顿法的个缺点,但是遇到这种情况的时候,如果稍稍改变初值,求解过程就会实现了。