1、1非线性方程求根 2桂林电子科技大学数学与计算科学学院实验报告实验室: 实验日期:2010年4月17日学号0800730121批次3姓名彭兆拓成绩课程名称数值分析实验项目名 称1非线性方程求根指导教师李光云一,实验目的通过实验,熟悉非线性方程求根的经典数值方法,掌握二分法,简单迭代法,牛顿迭代法的算法思想二,实验原理求非线性方程的数值解的方法一般有1.二分法要求在所给含根区间内有且只有一个根.即.求根方法为不断取区间中点求函数值,将中点替代与之同号的端点,实现含根区间逐步减半,达到逐步接近方程根的目的.2.简单迭代法利用方程构造迭代格式,选取初值,产生迭代序列,在迭代格式收敛的情况下,可以得到
2、的近似根.3.牛顿迭代法是取特殊迭代格式的迭代法.三,使用仪器,材料计算机一台;Mathematica软件.四,实验内容与步骤1. 用二分法求方程的解,精确到5位小数.2. 求解方程在内根的下列迭代法(1), (2),(3) , (4)试通过实验找出收敛的迭代法.3. 编写程序, 分别用下列方法求解方程,取,. (1) 牛顿迭代法;(2) ;(3)* ;比较各个方法的收敛速度.五,实验过程原始记录(数据,图表,计算等)1、解:PlotCosSinx-0.75,x,-5,5(*二分法*输入数据,a,b为含根区间,fx为已知函数,e为允许误差*)Clearx;a = -3.;b = -2;fx_
3、:= CosSinx - 0.75;e = 10(-3);(*)Iffa*fb 0, Printa,b区间上fx无解!, i = 1; WhileAbsa - b e, IfAbsf(b + a)/2 0, a = (b + a)/2, b = (b + a)/2; Print第, i, 次二分区间得:, a, , b, , 区间中点为:, (a + b)/2, , fx=, f(a + b)/2; i = i + 1; Print方程根为x=, (a + b)/2, , fx=, f(a + b)/2; (*)第1次二分区间得:-2.5,-2, 区间中点为:-2.25, fx=0.04271
4、01第2次二分区间得:-2.25,-2, 区间中点为:-2.125, fx=-0.0295192第3次二分区间得:-2.25,-2.125, 区间中点为:-2.1875, fx=0.00500699第4次二分区间得:-2.1875,-2.125, 区间中点为:-2.15625, fx=-0.0126648第5次二分区间得:-2.1875,-2.15625, 区间中点为:-2.17188, fx=-0.00392973第6次二分区间得:-2.1875,-2.17188, 区间中点为:-2.17969, fx=0.000513602方程根为x=-2.17969, fx=0.0005136022、(
5、1)*输入数据,max为最大迭代次数,gx为迭代格式,x0为迭代初值,e为允许误差,k为计数器*)Clearx;max = 10;gx_ := (x2 + x + 1)(1/3);x0 = 1.5;e = 10(-3);k = 1;(*利用迭代公式形成迭代序列*)xx = gx0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, Ifk max, x0 = xx; Print达到最大迭代次数,可能为死循环!, x0 = xx; xx = gx0; k = k + 1; Print第 , k, 次迭代x= , xx; (*)第1次迭代x=1.68099第 2 次迭代
6、x= 1.76589第 3 次迭代x= 1.80536第 4 次迭代x= 1.82363第 5 次迭代x= 1.83206第 6 次迭代x= 1.83596第 7 次迭代x= 1.83775第 8 次迭代x= 1.83858(2)(*简单迭代法*输入数据,max为最大迭代次数,gx为迭代格式,x0为迭代初值,e为允许误差,k为计数器*)Clearx;max = 30;gx_ := 1 + 1/x + 1/x2;x0 = 1.5;e = 10(-3);k = 1;(*利用迭代公式形成迭代序列*)xx = gx0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, If
7、k max, x0 = xx; Print达到最大迭代次数,可能为死循环!, x0 = xx; xx = gx0; k = k + 1; Print第 , k, 次迭代x= , xx; (*)第1次迭代x=2.11111第 2 次迭代x= 1.69806第 3 次迭代x= 1.93572第 4 次迭代x= 1.78348第 5 次迭代x= 1.87509第 6 次迭代x= 1.81773第 7 次迭代x= 1.85279第 8 次迭代x= 1.83103第 9 次迭代x= 1.84441第 10 次迭代x= 1.83614第 11 次迭代x= 1.84123第 12 次迭代x= 1.83809
8、第 13 次迭代x= 1.84003第 14 次迭代x= 1.83883第 15 次迭代x= 1.83957(3)(*简单迭代法*输入数据,max为最大迭代次数,gx为迭代格式,x0为迭代初值,e为允许误差,k为计数器*)Clearx;max = 30;gx_ := x3 - x2 - 1;x0 = 1.5;e = 10(-3);k = 1;(*利用迭代公式形成迭代序列*)xx = gx0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, Ifk max, x0 = xx; Print达到最大迭代次数,可能为死循环!, x0 = xx; xx = gx0; k =
9、 k + 1; Print第 , k, 次迭代x= , xx; (*)第1次迭代x=0.125第 2 次迭代x= -1.01367第 3 次迭代x= -3.06911第 4 次迭代x= -39.3287第 5 次迭代x= -62379.3第 6 次迭代x= -2.42733*1014第 7 次迭代x= -1.43017*1043第 8 次迭代x= -2.92523*10129第 9 次迭代x= -2.503114349471163*10388第 10 次迭代x= -1.568346682658564*101165第 11 次迭代x= -3.85768008432428*103495第 12 次
10、迭代x= -5.7408820864370*1010486第 13 次迭代x= -1.8920642529243*1031460第 14 次迭代x= -6.773414323074*1094380第 15 次迭代x= -3.107584347897*10283142第 16 次迭代x= -3.001019214385*10849427第 17 次迭代x= -2.70275281386*102548282第 18 次迭代x= -1.97432654417*107644847第 19 次迭代x= -7.6958563660*1022934541第 20 次迭代x= -4.5579636837*10
11、68803625第 21 次迭代x= -9.469184568*10206410876General:ovfl: Overflow occurred in computation. General:ovfl: Overflow occurred in computation. 第 22 次迭代x= Overflow第 23 次迭代x= Overflow第 24 次迭代x= Overflow第 25 次迭代x= Overflow第 26 次迭代x= Overflow第 27 次迭代x= Overflow第 28 次迭代x= Overflow第 29 次迭代x= Overflow第 30 次迭代x
12、= Overflow第 31 次迭代x= Overflow达到最大迭代次数,可能为死循环!由实验可知、此收敛方式发散(4)(*简单迭代法*输入数据,max为最大迭代次数,gx为迭代格式,x0为迭代初值,e为允许误差,k为计数器*)Clearx;max = 30;gx_ := (x2 + 1)/(x2 - 1);x0 = 1.8;e = 10(-3);k = 1;(*利用迭代公式形成迭代序列*)xx = gx0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, Ifk max, x0 = xx; Print达到最大迭代次数,可能为死循环!, x0 = xx; xx
13、= gx0; k = k + 1; Print第 , k, 次迭代x= , xx; (*)第1次迭代x=1.89286第 2 次迭代x= 1.77432第 3 次迭代x= 1.93101第 4 次迭代x= 1.73293第 5 次迭代x= 1.99848第 6 次迭代x= 1.66802第 7 次迭代x= 2.12216第 8 次迭代x= 1.57085第 9 次迭代x= 2.3628第 10 次迭代x= 1.43641第 11 次迭代x= 2.88097第 12 次迭代x= 1.27397第 13 次迭代x= 4.21024第 14 次迭代x= 1.11957第 15 次迭代x= 8.891
14、26第 16 次迭代x= 1.02562第 17 次迭代x= 39.5336第 18 次迭代x= 1.00128第 19 次迭代x= 781.452第 20 次迭代x= 1.第 21 次迭代x= 305333.第 22 次迭代x= 1.第 23 次迭代x= 4.66144*1010第 24 次迭代x= 1.第 25 次迭代x= -9.0072*1015第 26 次迭代x= 1.Power:infy: Infinite expression 1/0. encountered. 第 27 次迭代x= ComplexInfinityInfinity:indet: Indeterminate expr
15、ession 0 ComplexInfinity encountered. 第 28 次迭代x= Indeterminate3、(1)(*牛顿迭代法*输入数据,fx为已知函数,x0为初值,e为允许误差*)Clearx;fx_ := x2 + 2 x*Ex + E(2 x);x0 = 0.0;e = 10(-5);(*利用牛顿迭代公式求迭代序列*)k = 1;dfx_ := Dfx, x;xx = x0 - fx/dfx /. x - x0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, Ifk 100, x0 = xx; Print达到最大迭代次数,可能为死循环
16、!, x0 = xx; xx = x0 - fx/dfx /. x - x0; k = k + 1; Print第, k, 次迭代x=, xx;(*)第1次迭代x=-0.25第2次迭代x=-0.39864第3次迭代x=-0.480194第4次迭代x=-0.522967第5次迭代x=-0.544876第6次迭代x=-0.555965第7次迭代x=-0.561543第8次迭代x=-0.56434第9次迭代x=-0.565741第10次迭代x=-0.566442第11次迭代x=-0.566793第12次迭代x=-0.566968第13次迭代x=-0.567056第14次迭代x=-0.567099第1
17、5次迭代x=-0.567121第16次迭代x=-0.567132第17次迭代x=-0.567138(2)(*牛顿迭代法*输入数据,fx为已知函数,x0为初值,e为允许误差*)Clearx;fx_ := x2 + 2 x*Ex + E(2 x);x0 = 0.0;e = 10(-5);(*利用牛顿迭代公式求迭代序列*)k = 1;dfx_ := Dfx, x;xx = x0 - 2*fx/dfx /. x - x0;Print第, k, 次迭代x=, xx;WhileAbsx0 - xx e, Ifk 100, x0 = xx; Print达到最大迭代次数,可能为死循环!, x0 = xx; xx = x0 - 2*fx/dfx /. x - x0; k = k + 1; Print第, k, 次迭代x=, xx;(*)第1次迭代x=-0.5第2次迭代x=-0.566311第3次迭代x=-0.567143第4次迭代x=-0.567143与方法一相比,第2种迭代方式更简便六,实验结果分析或总结通过此次试验,了解了如何使用Mathematica软件解决非线性问题的求解问题,以及简单迭代法、牛顿迭代法、二分法求解非线性方程的根,但由于对mathematic软件的不熟悉,使得有些地方还不是不太明白,对简单迭代法的一些问题还是不了解.总的来说,本次试验基本熟悉了本课所要求掌握的内容。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1