五种迭代法解非线性方程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1题目:用五种迭代法解非线性方程学生姓名:崔敬轩学号:2015210458专业班级:电气工程7班指导教师:王承竞2015年11月7日21二分法1.1迭代思想零点定理:设函数f(x)在闭区间[a,b]上连续,且f(a)与f(b)异号(即f(a)·f(b)0),那么在开区间(a,b)内至少有一点ξ,使fξ=0[1](1-1)二分法通过以下方式利用这一思想:若f(a)f(b)0,则计算c=,并进行检验,若f(a)f(c)0,则f(x)在[a,c]内有零点;若f(a)f(c)0(即f(c)f(b)0),则f(x)在[c,b]内有零点。这样,将b或a代换成c,就得到了包含f(x)的零点的一个新的区间[a,b],按一定条件,重复这个过程,便可以得到较为接近真实解r的近似解c值。[2]1.2算法误差|cn-x*|≤(bn-an)=(bn-1-an-1)=···=(b0-a0)ε(1-2)⇒2ε⇒n[lnε]-1(1-3)式(1-2)说明二分法求解误差与迭代次数n和初始迭代区间端点a、b有关,迭代次数越多,初始迭代区间越小,误差越小。式(1-3)说明迭代次数需大于某数值才能获得较为准确的解。1.3优点、缺点1.3.1优点①理论简单,编程容易;②能够比较准确地求解规定精度的数值解;③对函数的光滑性要求低,区间指数缩减。1.3.2缺点①局部收敛速度慢,特别是收敛区间为[0,1];②不能解决重根问题,不方便解决同一收敛区间多个根的问题。31.4基于Matlab的数值试验1.4.1计算平台:①CPU(2.50GHz)、②RAM(4.00GB)、③OS(Windows7旗舰版)1.4.2参数设置:编写的m文件可在程序初始化运行时键入自变量限界δ、函数值限界ε以及最大迭代步数M,在数值试验过程中,将δ赋值为0.0001,ε赋值为0.0001,M赋值为100。1.4.3计算结果(程序代码详见附录Ⅰ)非线性方程210x4324100xxx2220xxxxeetan0xx计算结果0.9999851.9999699.9999620.046875迭代步数1616174计算时间0.078001s0.140401s0.140401s0.109201s(1)210x(2)4324100xxx[3](3)2220xxxxee[4]4(4)tan0xx[5]1.4.4分析改进①对210x进行分析,发现经试验得到的解只有一个1x,而对另一个解1x试验并没有求得,这是因为试验中输入的区间为[0,10],但即使将区间扩大至将两解都包含在内,仍然无法求到负根,这是由于算法本身决定的;②对4324100xxx进行分析,发现迭代结果为2x,而将结果回带到原方程函数43()2410fxxxx,发现(2)180f,而迭代次数16100M,经43(2*4*10)solvexxx演算,发现线性方程的4个解均为复数,推测试验解2x的得出可能是程序只考虑了()fx的4次项和3次项,而未对低次项进行考虑并且定义域区间为[2,2]也可能在一定程度上制约了方程求解的结果;③对2220xxxxee进行分析,发现试验解10x回带后,得8(10)4.856110f,这基本可以判断为计算错误,经2(2**()(2*))solvexxexpxexpx演算,2220xxxxee的解为0,1lambertw,即0.5671,再观察实验输入的自定义区间[0,10]并不包含真实5解,所以出现了这个错误,说明自定义的区间[,]ab的确定直接关系到解的好坏,而在预先不知道真实解得情况,这个区间难于确定,只能通过扩大[,]ab的范围来减少这个问题的出现频率,但自定义区间[,]ab长度的增加势必会增加迭代次数M和计算时间t,那么平衡[,]ab和M的关系就变得很重要了,在此之前,只能通过大区间、多迭代来在一定程度上防止迭代错误的出现;④对tan0xx进行分析,试验结果0.05x,因为考虑到tan0xx存在无穷多解,所以在试验中,所取定义域区间为[0,1.5],但所得的解只为接近于0的解,原则上在[0,1.5]上还应有另一个解,在经solve('tanx-x')演算后,只得到0x的解,没有得到期望的无穷多个解,这可能是Matlab自身默认设置决定的。62牛顿法2.1迭代思想过非线性函数曲线f(x)上点(x,f(x))作曲线f(x)的切线交x轴于点x,然后再由(x,f(x))作f(x)的切线,如此不断作线性处理,逼近真实解。解高阶非线性方程f(x)=0,设根为r,则f(r)=0,因不好直接解出r,故令靠近r的x与一个差量h和的形式(x+h)替换,则f(r)=f(x+h),而f(x+h)=f(x)+f(x)h+o(h)≈f(x)+f(x)(2-1)⇒r=x+h≈x-()()⇒x=x−()()(2-2)2.2算法误差(收敛速度、精度变化)x=x−f(x)f′(x)x−r=x−r−f(x)f′(x)=f′(x)(x−r)−f(x)f′(x)0=f(r)=f(x)+f′(x)(r−x)+12f′′(ξ)(r−x)f′(x)(x−r)−f(x)=12f′′(ξ)(r−x)x−r=12f′′(ξ)(r−x)f′(x) ,f∈Ce=x−r=′′(ξ)′()e≈′′()′()e, e=Ce(2-3)由式(2-3)可知,牛顿法不仅局部收敛速度快,而且随着收敛的进行,精度会逐渐提高。2.3优点、缺点2.3.1优点①局部二阶收敛,收敛速度快2.3.2缺点①只应用在局部收敛情况下;②要求f′(x)存在且不等于0。72.4基于Matlab的数值试验2.4.1计算平台:①CPU(2.50GHz)、②RAM(4.00GB)、③OS(Windows7旗舰版)2.4.2参数设置:编写的m文件可在程序初始化运行时键入自变量限界δ、函数值限界ε以及最大迭代步数M,在数值试验过程中,将δ赋值为0.0001,ε赋值为0.0001,M赋值为100。2.4.3计算结果(程序代码详见附录Ⅰ)非线性方程210x4324100xxx2220xxxxeetan0xx计算结果1.000005-3.067794-0.5626770.048168迭代步数51002611计算时间1.185608s0.296402s0.124801s0.093601s(1)210x(2)4324100xxx(3)2220xxxxee8(4)tan0xx2.4.4分析改进①对210x进行分析,发现试验解为1x,而对另一个解1x试验并没有求得,这是因为算法在求得一个解后会停止运算,同样的牛顿法也不能解决重根问题;②对4324100xxx进行分析,发现迭代结果为3x,而(3)290f,依然没有得到真实解,这是因为迭代次数M已经达到上限100次,如果提高迭代上限,则应该可以得到更接近于0的解;③对2220xxxxee进行分析,发现试验解0.5627x与经2(2**()(2*))solvexxexpxexpx演算得到的解0.5671x一致,满足要求;④对tan0xx进行分析,试验结果0.05x,与真实解0x基本一致,满足要求。93简易牛顿法3.1迭代思想与牛顿法类似,区别在于当分f(x)在x处导数不存在时,找一个数x代替f′(x)中的x,即找一个斜率稍小一点的切线,代替斜率不存在点的切线。迭代公式为:x=x−()′()(3-1)3.2算法误差收敛速度慢,精度几乎没有提高,甚至可能因为误差累加导致误差变大。3.3优点、缺点优点:解决了牛顿法可能存在导数不存在点的情况;缺点:收敛速度太慢。3.4基于Matlab的数值试验3.4.1计算平台:①CPU(2.50GHz)、②RAM(4.00GB)、③OS(Windows7旗舰版)3.4.2参数设置:编写的m文件可在程序初始化运行时键入自变量限界δ、函数值限界ε以及最大迭代步数M,在数值试验过程中,将δ赋值为0.0001,ε赋值为0.0001,M赋值为100。3.4.3计算结果(程序代码详见附录Ⅰ)非线性方程210x4324100xxx2220xxxxeetan0xx计算结果1.0008182.577127.6726370.918798迭代步数69100100100计算时间1.279208s0.265202s0.265202s0.156001s10(1)210x(2)4324100xxx(3)2220xxxxee(4)tan0xx3.4.4分析改进①对210x进行分析,发现试验解为1x,但与Newton的5次迭代即得到结果相比,简易Newton用了69次迭代,而这只是解了一个最简单的方程,说11明简易Newton法收敛速度太慢,除Newton法中遇到导数'()0fx的情况才考虑使用;②对4324100xxx、2220xxxxee及tan0xx进行分析,发现迭代次数M均达到迭代上限100,因此对于简易Newton法应极大地增加迭代上限,猜测这个上限或许达到610、710等级。124割线法4.1迭代思想类似牛顿法,但与牛顿法作切线的方式不同是作割线,无限逼近。迭代公式为x=x−()()f(x)(4-1)4.2算法误差收敛情况为局部超收敛,收敛速度慢于牛顿法,而快于简易牛顿法。4.3优点、缺点优点:收敛速度快;缺点:两个相接近的数相减作分母。4.4基于Matlab的数值试验4.4.1计算平台:①CPU(2.50GHz)、②RAM(4.00GB)、③OS(Windows7旗舰版)4.4.2参数设置:编写的m文件可在程序初始化运行时键入自变量限界δ、函数值限界ε以及最大迭代步数M,在数值试验过程中,将δ赋值为0.0001,ε赋值为0.0001,M赋值为100。4.4.3计算结果(程序代码详见附录Ⅰ)非线性方程210x4324100xxx2220xxxxeetan0xx计算结果0.997825-1.319151-10.0000000.078644迭代步数92104计算时间1.107607s0.187201s0.140401s0.078001s13(1)210x(2)4324100xxx(3)2220xxxxee(4)tan0xx144.4.4分析改进①对210x进行分析,发现试验解为1x,满足要求,收敛速度与Newton法相近;②对4324100xxx进行分析,发现迭代结果为1.3x,而(1.3)12.050f,但与Newton法的试验解3x相比,更接近使函数43()2410fxxxx为0,且迭代次数为21次(Newton法超过迭代上限);③对2220xxxxee进行分析,发现试验解10x,而解算次数为0次,考虑到割线法中割线不动点010x,第一个变动点110x,应该能够得到真实解,或靠近真实解0.5671x的近似解,但没有,甚至在解方程的时候没有进行迭代,试算(10)100f,与0相去甚远,再检查割线法的Matlab程序,发现在进入循环之前,2102000()(10)1020yfxfee2102011()(10)(10)20100yfxfee10211101010()1010010()()100xxxxfxfxfx而运算程序中循环判断条件21&&2&&whileabsxxdelt

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功