一、实验目的:
通过实验,熟悉线性方程组的求根的经典解法。掌握二分法、简单迭代法和牛顿迭代法的算法思想。理解二分法、简单迭代法、牛顿迭代法、弦截法的Mathematica程序,能够采用不同的方法求出方程的根,并比较各个不同方法的优劣。
二、实验内容:
43221、用二分法求方程x2x4x4x40在区间[0,2]内的根,使误差不超过10。
2、用牛顿法求方程x3x103在x02附近的根。
三、实验要求:
1.不得使用内部命令,要编程实现。2.可以自拟实验题,要求同上。
四、实验程序及结果:
1、用二分法求方程的根
f[x_]:=x4-2x3-4x2+4x+4;
Plot[f[x],{x,0,2}](*画图估计方程根的大概位置*) {a,b}={1.,2.};e=10-2;
For[k=1,k100,k++,c=(a+b)/2;If[Abs[f[c]] Print[\"方程的根:x=\ \Print[\"方程的精确解为\0,{x,1.4}]] wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802 420.51.024wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802 1.52.0 第 1 次二分区间:[ 1. , 2. ], 中点c= 1.5 ,中点f[c]= -0.6875 第 2 次二分区间:[ 1. , 1.5 ], 中点c= 1.25 ,中点f[c]= 1.28516 第 3 次二分区间:[ 1.25 , 1.5 ], 中点c= 1.375 ,中点f[c]= 0.312744 第 4 次二分区间:[ 1.375 , 1.5 ], 中点c= 1.4375 ,中点f[c]= -0.186508 第 5 次二分区间:[ 1.375 , 1.4375 ], 中点c= 1.40625 ,中点f[c]= 0.0636759 第 6 次二分区间:[ 1.40625 , 1.4375 ], 中点c= 1.42188 ,中点f[c]= -0.0613183 方程的根:x= 1.41406 f[x]= 0.00120849 方程的精确解为 {x1.41421} 2、用牛顿法求方程的根 f[x_]:=x3-3x-1; M=50; x0=2.; e=10-4; k=1; x1=x0-f[x0]/f'[x0]; Print[\"第\次迭代x=\ While[Abs[x0-x1]>e,If[k>M,x0=x1; Print[\"达到最大迭代次数,可能是死循环!\"],x0=x1; x1=x0-f[x0]/f'[x0]; k=k+1; Print[\"第\次迭代x=\ 第 1 次迭代x= 1.88889 第 2 次迭代x= 1.87945 第 3 次迭代x= 1.87939 五、实验总结: 通过本次实验我加深了对二分法、简单迭代法、牛顿迭代法和弦截法算法思想的了解,并对各个不同方法的优劣有了更深的理解。 本次试验主要使用了二分法和牛顿法,我觉得二分法看起来稍微复杂一点,迭代次数也比较多;而牛顿法迭代次数很少就能得到较精确的根。但是牛顿法使用了求导运算,这是Mathematica内部实现的,其实也加大了算法的复杂度,只不过我们没有直接看到而已。所以我认为二分法和牛顿法的优劣并不能简单判断,可能在不同精度要求下各有优势,要具体判断还需进一步设计实验。 wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802
因篇幅问题不能全部显示,请点此查看更多更全内容