资源描述:
《实验5--非线性方程求根及其MATLAB实现.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、分类数学实验之方程求近似实根问题.考虑方程f(x)=0⑴求根分为两步:(1)先确定某个根的近似值;(2)再将初始近似值加工成满足精度要求的结果。1.两分法迭代(理论基础:零点定理)设f(x)∈C[a,b],f(a)·f(b)<0。区间(a,b)就是方程⑴根的存在区间,再用下面的方法改善根的精度。方程求根数值算法的基本思想取[a,b]的中点x0=(a+b)/2,若f(x0)=0,则x0即是根;否则,f(a)·f(x0)<0,令a1=a,b1=x0(取[a,b]的左半部);f(x0)·f(b)<0,令a1=x0,b1=b(取[a,b]的右
2、半部)。.abf(a)f((a+b)/2)f(b)f(x)xy.将上述做法重复n次,得到n个小区间,且bn-an=(b-a)/2n,[a,b]经过一次这样对原区间[a,b]的处理,得到了一个新的有根区间[a1,b1],且b1-a1=(b-a)/2,[a,b][a1,b1]。1.两分法迭代当n足够大时即可达到满意的精度。[a1,b1]…[an,bn]。.例1求方程x3+1.1x2+0.9x–1.4=0的一个实根。使误差不超过10-31.两分法迭代解:(1)首先观测图形,作f(x)的图像:ezplot('x^3+1.1*x^2+0.9*x
3、-1.4')x=-1:0.01:1;y=x.^3+1.1.*x.^2+0.9.*x-1.4;%函数表达式figure;plot(x,y,'LineWidth',2)%画出图形holdon;y1=zeros(size(x));%y1=0plot(x,y1,'r','LineWidth',4);.bisect.m关于此程序的解释见“方程求根的代码解释”一文(2)按两分法的思想,进行迭代求根。为了使得程序具有通用性,将方程的表达式写成一个函数:functiony=myequation(x);y=x.^3+1.1.*x.^2+0.9.*x-1
4、.4;这样修改y的表达式,即可求出其他方程的实根。(3)运行二分法的程序:.两分法迭代的加速:abf(a)f((a+b)/2)f(b)f(x)xyc以f(a),f(b)的连线在x轴的交点作为新的出发点。但此方法不一定能真正加速。原理请详见教材p191。程序:fastbisect.m.2.不动点迭代称满足方程f(x)=x的点x为函数f的不动点.求函数f的不动点。可以从一个初始点x0出发,以格式xn+1=f(xn)进行迭代;x1=f(x0),x2=f(x1),…,xk+1=f(xk),…得到x0,x1,x2,……,xn,…..如果该数列是
5、收敛的,则.将方程f(x)=0⑴化为等价方程x=φ(x)(2)取某个定数x0,做数列{xn},其中,x1=φ(x0),x2=φ(x1),…,xk+1=φ(xk),…(3)设φ(x)连续,且a就是方程f(x)=0的根。a就是函数φ的一个不动点,即a=φ(a)等价于f(a)=0.y=f(x)x0f(x0)x1=f(x0)f(x1)x2=f(x1)y=xx收敛的迭代:.发散的迭代:x0.2.不动点迭代例2求方程在x=3附近的近似实根。解:可将方程写成下三种形式:x=14–x2,functionf=iterfun(x)%f=14-x.^2;%
6、f=14./(x+1);f=x-(x.^2+x-14)./(2*x+1);(1)将三种迭代形式写成函数存起来:(2)演示程序使用的程序:iter.m.2.不动点迭代收敛性 蛛网图一般地,若函数φ(x)在含不动点ξ的某邻域内一阶导数连续,且则存在一个邻域Δ:
7、ξ-x
8、<δ,对任何的x0∈Δ,其迭代序列必收敛。高级例子iterexample2.m 请同学们自己消化.3.牛顿迭代法记[a,b]为方程f(x)=0的根的存在区间,f(a)与f(b)异号,且对于每个x∈[a,b],f'(x)≠0,f"(x)保持符号不变。取x0∈[a,b],对f(
9、x)用微分中值定理,近似地,有f(x)≈p(x)=f(x0)+f'(x0)(x-x0)令p(x)=0,得到f(x)=0的近似根记为x1=为改善根的精确程度,反复实施这一过程,得到牛顿迭代公式:.xk+1就是从线性方程f(xk)+f'(xk)(x–xk)=0(1)中解得的根x.以点(xk,f(xk))为切点,曲线y=f(x)的切线y=f(xk)+f'(xk)(x–xk)(2)方程(2)与y=0相联立,得到与x轴的交点,该交点即xk+1.x*x0x0,f(x0)x1x1,f(x1)x2.例3求方程在x0=2附近的近似实根。准确到小数点后4
10、位数字解:迭代公式为:计算步骤如下:(1)选x0=2,按照迭代公式计算x1;(2)若
11、x1-x0
12、<=0.00001,终止迭代;否则,x0=x1;转(1);(3)输出迭代次数和近似根.编程步骤如下:(1)写函数:func