logo资料库

非线性方程求根 python.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
华北科技学院 实 验 报 告 课程名称 数值计算 学生所在院部 理学院 学生姓名 陈硕 学号 201809014223 任课教师 郑 宇 理学院制
一、 实验目的 华北科技学院实验报告 1. 通过计算结果分析迭代函数对收敛性的影响; 2. 通过计算结果分析初值的选择对收敛性的影响; 3. 通过计算结果比较几种经典算法的收敛速度。 二、 实验题目 非线性方程求根实验 1. 迭代函数对收敛性的影响: 实验题目:用简单迭代法求方程 3)(f  x 3 x  4 x 01  方案一 化方程为简单不动点方程 取初值 x0=0.5,迭代 8 次。 方案二 化方程为等价方程 x  43 1 x  3  )( x x  1 3 3 x  4  )( x 取初值 x0=0.5,迭代 8 次,观察其计算结果并加以分析。 2. 初值的选择对收敛性的影响: 实验题目:用牛顿法求方程 )( xf  3 x  01 x 在 x=0.5 附近的根 方案一 使用牛顿法并取初值 x0=0.5,由 x k  1 x k  ( xf k (' f x k ) ) 得 x k  1 x k  1 x 3  k 3 x x k 2  k  1  2 3 x x 3 k 2 k   1 1 迭代 6 次。 方案二 取初值 x0=0.0,使用同样的公式 x k  1 x k  1 x 3  k 3 x x k 2  k  1  2 3 x x 3 k 2 k   1 1 迭代 6 次,观察并比较计算结果,分析原因。 第 1 页
3. 几种经典算法的比较 华北科技学院实验报告 实验题目:求方程 )( xf  3 x  cos x  5 x 01  的全部根 方案一 用牛顿方程求解: x k  1 x k  ( xf k (' f x k ) )  x k  x 3 k cos  2 3 x  k x k sin  x 5 k x  k 5  1 ; 方案二 用简单迭代法求解: x k  1 3 cos x k  5 x k  1 ; 方案三 用埃特金迭代加速法求解: z k ( (  ),  x y k k x k 1  y   x y  k 2 y  k ) k  k ) 2 x k , k  ...1,0  x k  z k 其中, )( x  3 cos x  5 x  1 取相同的迭代初始值,比较各方法的收敛速度 三、 实验原理 不动点迭代法基本原理:通过某种等价变换,可将非线性方程 f(x)=0 改写成 x= )x 其中, )(x 为连续函数。给定初始值 x0 后,课构造迭代计算公式 ( x  k 1 x k ) (k=0,1,2,...) 从而得到近似解序列{ kx }。 牛顿迭代法基本原理:从几何角度看,就是讲切线与横轴交点处的 x 值作为下一步 近似解。采用点斜式公式,切线方程为 解方程 P(x)=0,得到牛顿迭代法的迭代计算公式: )( xP  ( xf k )  ( x  x k ) f (' x k ) x k  1 x k  ( xf k (' f x k ) ) 迭代收敛速度:达到特定的准确度需要多少步迭代,也就是需要多少计算量 第 2 页
四、 实验内容 华北科技学院实验报告 1. 迭代函数对收敛性的影响: 以不同的方式得到方程的等价形式,选择同一初值 x0=0.5 代入迭代方程,比 较计算结果,研究响应的不动点迭代法的收敛情况。 2. 初值的选择对收敛性的影响: 选择不同的初值 x0=0.5,x0=0.0 代入牛顿迭代方程,比较计算结果,研究初值 的选择是否会对收敛性造成影响 3. 几种经典算法的比较: 选择同以初值 x0=2.0,分别代入牛顿法迭代方程、简单迭代方程和埃特金收 敛加速法迭代方程,观察计算结果,比较不同算法的收敛速度 五、 实验结果和分析: 1. 迭代函数对收敛性的影响: 将原方程改为等价的方案一、方案二两种形式,得到下属两种不动点迭代法。 方案一 化方程为简单不动点方程 x  3 取初值 x0=0.5,迭代 8 次,计算出的结果如下: 43  x 1 迭代次数 1 Xk 0.6934 2 0.8393 3 0.9227  )( x 5 0.9839 6 0.9928 7 0.9967 8 0.9985 4 0.9644 从上述计算结果看,序列{ kx }有趋于无穷大的趋势,爹大幅不收敛,无法求出近似 解。 方案二 化方程为等价方程 x  1 3 3 x  4  )( x 迭代次数 1 Xk 取初值 x0=0.5,迭代 8 次,计算出的结果如下: 5 0.2638 8 0.2638 从上述计算结果看,x7 和 x8 前 5 位有效数字均为 0.2638,可认为迭代过程是收敛 的,要求的根为 0.2638 2 0.2805 3 0.2665 4 0.2642 6 0.2637 7 0.2638 0.3437 方案一、方案二计算结果对比可以看出,用不同的方式改造原方程,可得到多种不 动点迭代法计算过程,其收敛性质也不同。 2.初值的选择对收敛性的影响: 方案一 使用牛顿法并取初值 x0=0.5,由 x k  1 x k  ( xf k (' f x k ) ) 第 3 页
得 华北科技学院实验报告 x k  1 x k  1 x 3  k 3 x x k 2  k  1  2 3 x x 3 k 2 k   1 1 迭代 6 次,计算结果如下: 迭代次数 1 Xk 2 0.6832 0.7143 3 0.6823 4 0.6823 5 0.6823 6 0.6823 从上述计算结果看出,x3、x4、x5、x6 前 5 位有效数字均为 0.6823,可认为迭 代过程是收敛的,要求的根为 0.6823 方案二 取初值 x0=0.0,使用同样的公式 x k  1 x k  1 x 3  k 3 x x k 2  k  1  2 3 x x 3 k 2 k   1 1 迭代 6 次,计算结果如下: 迭代次数 1 Xk 1.0 2 0.75 3 0.6860 4 0.6823 5 0.6823 6 0.6823 从上述计算结果看出,x4、x5、x6 前 5 位有效数字均为 0.6823,可认为迭代过 程是收敛的,要求的根为 0.6823。 方案一、方案二计算结果对比可以得出,选择不同的初值会对迭代收敛的速度有所 影响,但不影响收敛的性质。 3.几种经典算法的比较 方案一 用牛顿方程求解: x k  1 x k  ( xf k (' f x k ) )  x k  x 3 k cos  2 3 x  k x k sin  x 5 k x  k 5  1 ; 迭代 8 次,计算结果如下: 迭代次数 1 Xk 2.3267 2 2.2725 3 2.2708 4 2.2708 5 2.2708 6 2.2708 7 2.2708 8 2.2708 从表中数据可以看出,到第四步迭代,解的前 5 位有效数字已经不变化了,迭代过 程收敛的较快 方案二 用简单迭代法求解: x k  1 3 cos x k  5 x k  1 ; 迭代 8 次,计算结果如下: 迭代次数 1 Xk 2.1956 2 2.2501 3 2.2651 4 2.2692 5 2.2704 6 2.2708 7 2.2708 8 2.2708 从表内数据可以看出,到第七步迭代时,解的前 5 位有效数字已经不变化了,迭代 过程收敛的较慢 方案三 用埃特金迭代加速法求解: 第 4 页
y k 华北科技学院实验报告 ) (   2 ), x k x k 1   x k  z k ( z k y   x y  k 2 y  k ) k  k x k , k  ...1,0 迭代 3 次,计算结果如下: 其中, )( x  3 cos x  5 x  1 迭代次数 1 2 3 Xk 2.2713 2.2708 2.2708 从表内数据可以看出,到第三步迭代时,解的前 5 位有效数字已经不变化了,迭代 过程收敛的很快 方案一、方案二、方案三计算结果对比可以得出,选择初值相同时,埃特金迭代加 速法收敛速度最快,牛顿迭代法收敛速度较快,简单迭代法收敛速度最慢。 六、 附录 代码及运行结果: #1.方案一 x = 0.5 for i in range(8): x = pow((4*x-1)/3.0,1/3) print('第'+str(i+1)+'次的迭代结果为'+str(x)) #输出: # 第 1 次的迭代结果为 0.6933612743506347 # 第 2 次的迭代结果为 0.839264457114505 # 第 3 次的迭代结果为 0.9227477487920787 # 第 4 次的迭代结果为 0.9644143487133259 # 第 5 次的迭代结果为 0.9839272042752456 # 第 6 次的迭代结果为 0.9928048897851239 # 第 7 次的迭代结果为 0.9967918922886454 # 第 8 次的迭代结果为 0.9985721365267841 1.方案二 x = 0.5 for i in range(8): x = (3.0*x**3+1.0)/4.0 print('第'+str(i+1)+'次的迭代结果为'+str(x)) # #输出: 第 5 页
华北科技学院实验报告 # 第 1 次的迭代结果为 0.34375 # 第 2 次的迭代结果为 0.28046417236328125 # 第 3 次的迭代结果为 0.26654601581715853 # 第 4 次的迭代结果为 0.2642029268189602 # 第 5 次的迭代结果为 0.2638316546388099 # 第 6 次的迭代结果为 0.2637734255843168 # 第 7 次的迭代结果为 0.2637643079912704 # 第 8 次的迭代结果为 0.26376288070926884 #2.方案一 x = 0.5 for i in range(6): x =(2.0*x**3+1.0)/(3.0*x**2+1.0) print('第'+str(i+1)+'次的迭代结果为'+str(x)) # #输出: # 第 1 次的迭代结果为 0.7142857142857143 # 第 2 次的迭代结果为 0.6831797235023042 # 第 3 次的迭代结果为 0.6823284233045783 # 第 4 次的迭代结果为 0.682327803828347 # 第 5 次的迭代结果为 0.6823278038280193 # 第 6 次的迭代结果为 0.6823278038280194 #2.方案二 x = 0.0 for i in range(6): x =(2.0*x**3+1.0)/(3.0*x**2+1.0) print('第'+str(i+1)+'次的迭代结果为'+str(x)) # #输出: # 第 1 次的迭代结果为 1.0 # 第 2 次的迭代结果为 0.75 # 第 3 次的迭代结果为 0.686046511627907 # 第 4 次的迭代结果为 0.6823395825973143 # 第 5 次的迭代结果为 0.6823278039465127 # 第 6 次的迭代结果为 0.6823278038280193 #3.方案一 import math x=2.0 for i in range(8): x = x - (x**3-math.cos(x)-5.0*x-1.0)/(3.0*x**2+math.sin(x)-5.0) print('第' + str(i + 1) + '次的迭代结果为' + str(x)) # #输出: # 第 1 次的迭代结果为 2.3266855479083763 # 第 2 次的迭代结果为 2.272546398909606 # 第 3 次的迭代结果为 2.270830646264361 # 第 4 次的迭代结果为 2.270828944840953 第 6 页
华北科技学院实验报告 # 第 5 次的迭代结果为 2.270828944839281 # 第 6 次的迭代结果为 2.2708289448392804 # 第 7 次的迭代结果为 2.2708289448392804 # 第 8 次的迭代结果为 2.2708289448392804 #3.方案二 import math x=2.0 for i in range(8): x = math.pow((math.cos(x)+5.0*x+1.0),1/3) print('第' + str(i + 1) + '次的迭代结果为' + str(x)) # 输出: # 第 1 次的迭代结果为 2.195573272531163 # 第 2 次的迭代结果为 2.2501530755476673 # 第 3 次的迭代结果为 2.2651632710880665 # 第 4 次的迭代结果为 2.269277475483024 # 第 5 次的迭代结果为 2.2704041738207237 # 第 6 次的迭代结果为 2.270712654203415 # 第 7 次的迭代结果为 2.2707971080950586 # 第 8 次的迭代结果为 2.2708202289657673 #3.方案三 import math def fun(x): f = math.pow((math.cos(x)+5.0*x+1.0),1/3) return f x=2.0 y=fun(x) z=fun(y) for i in range(8): x = x-(y-x)**2/(z-2.0*y+x) y=fun(x) z=fun(y) print('第' + str(i + 1) + '次的迭代结果为' + str(x)) # 输出: # 第 1 次的迭代结果为 2.271281393813576 # 第 2 次的迭代结果为 2.2708289457789386 # 第 3 次的迭代结果为 2.2708289448392804 第 7 页
分享到:
收藏