资源描述:
《实验三:matlab求代数方程的近似根(解)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验三求代数方程的近似根(解)数学实验问题背景和实验目的实验三、近似求解代数方程解方程(代数方程)是最常见的数学问题之一,也是众多应用领域中不可避免的问题之一。目前还没有一般的解析方法来求解非线性方程,但如果在任意给定的精度下,能够解出方程的近似解,则可以认为求解问题已基本解决,至少可以满足实际需要。本实验主要介绍一些有效的求解方程的数值方法:对分法,迭代法和牛顿法。同时要求大家学会如何利用Matlab来求方程的近似解。相关概念如果f(x)是一次多项式,称上面的方程为线性方程;否则称之为非线性方程。线性方程与非线性方程基本思想对
2、分法将有根区间进行对分,判断出解在某个分段内,然后再对该段对分,依次类推,直到满足给定的精度为止。适用范围求有根区间内的单根或奇重实根。数学原理:介值定理设f(x)在[a,b]上连续,且f(a)f(b)<0,则由介值定理可得,在(a,b)内至少存在一点使得f()=0。具体步骤对分法设方程在区间[a,b]内连续,且f(a)f(b)<0,给定精度要求,若有
3、f(x)
4、<,则x就是我们所需要的f(x)在区间(a,b)内的近似根。......收敛性分析对分法收敛性设方程的根为x*(ak,bk),又,所以0(k)对分法总是收敛
5、的但对分法的收敛速度较慢通常用来试探实根的分布区间,或给出根的一个较为粗糙的近似。根据上面的算法,我们可以得到一个每次缩小一半的区间序列{[ak,bk]},在(ak,bk)中含有方程的根。迭代法基本思想构造f(x)=0的一个等价方程:从某个近似根x0出发,计算得到一个迭代序列k=0,1,2,......(x)的不动点f(x)=0x=(x)等价变换f(x)的零点若收敛,即,假设(x)连续,则收敛性分析迭代法的收敛性即注:若得到的点列发散,则迭代法失效!定义:迭代法收敛性判断定理2:如果定理1的条件成立,则有如下估计如果存在
6、x*的某个邻域=(x*-,x*+),使得对x0开始的迭代xk+1=(xk)都收敛,则称该迭代法在x*附近局部收敛。定理1:设x*=(x*),的某个邻域内连续,且对x都有
7、’(x)
8、q<1,则对x0,由迭代xk+1=(xk)得到的点列都收敛。迭代法收敛性判断定理3:已知方程x=(x),且(1)对x[a,b],有(x)[a,b];对x[a,b],有
9、’(x)
10、q<1;则对x0[a,b],由迭代xk+1=(xk)得到的点列都收敛,且q越小,迭代收敛越快’(x*)越小,迭代收
11、敛越快迭代法收敛性判断以上所给出的收敛性定理中的条件的验证都比较困难,在实际应用中,我们常用下面不严格的判别方法:当有根区间[a,b]较小,且对某一x0[a,b],
12、’(x0)
13、明显小于1时,则我们就认为迭代收敛迭代法的加速设迭代xk+1=(xk),第k步和第k+1步得到的近似根分别为xk和(xk),令其中wk称为加权系数或权重。得新迭代xk+1=(xk)加权系数wk的确定:令’(x)=0得松弛迭代法松弛法迭代公式:松弛法具有较好的加速效果,甚至有些不收敛的迭代,加速后也能收敛。缺点:每次迭代需计算导数Altken迭
14、代法Altken迭代法用差商近似微商设x*是方程的根,则由中值定理可得Altken迭代法Altken迭代公式k=0,1,2,......Altken法同样具有较好的加速效果牛顿迭代法令:基本思想:用线性方程来近似非线性方程,即采用线性化方法设非线性方程f(x)=0,f(x)在x0处的Taylor展开为牛顿法迭代公式牛顿迭代公式k=0,1,2,......牛顿法的收敛速度令牛顿法至少二阶局部收敛当f(x*)0时’(x*)=0(x)即为牛顿法的迭代函数牛顿法迭代公式牛顿的优点牛顿法是目前求解非线性方程(组)的主要方法至少二阶局
15、部收敛,收敛速度较快,特别是当迭代点充分靠近精确解时。牛顿的缺点对重根收敛速度较慢(线性收敛)对初值的选取很敏感,要求初值相当接近真解在实际计算中,可以先用其它方法获得真解的一个粗糙近似,然后再用牛顿法求解。Matlab解方程函数roots(p):多项式的所有零点,p是多项式系数向量。fzero(f,x0):求f=0在x0附近的根,f可以使用inline、字符串、或@,但不能是方程或符号表达式!solve(f,v):求方程关于指定自变量的解,f可以是用字符串表示的方程、符号表达式或符号方程;solve也可解方程组(包含非线性);
16、得不到解析解时,给出数值解。linsolve(A,b):解线性方程组。其他Matlab相关函数g=diff(f,v):求符号表达式f关于v的导数g=diff(f):求符号表达式f关于默认变量的导数g=diff(f,v,n):求f关于v的n阶导数difff是符号表