
实验指导书非线性方程(组)的数值解法.docx
26页仅供个人参考实验指导书—非线性方程(组)的数值解法隔根区间的求法(确定根的初始近似值):作图法,逐步搜索法等求根的方法:二分法,迭代法,牛顿法,割线法,抛物线法,迭代法的加速等Forpersonaluseonlyinstudyandresearch;notforcommercialuse实验平台:MATLAB件说明:与方程求根有关的MATLAB函数另见MATLAB学习资料Forpersonaluseonlyinstudyandresearch;notforcommercialuse一、搜索根的方法及其MATLAB序求解非线性方程根的近似值时,首先需要判断方程有没有根?如果有根,有几个根?如果有根,需要搜索根所在的区间或确定根的初始近似值(简称初始值).搜索根的近似位置白^常用方法有三种:作图法、逐步搜索法和二分法等,使用这些方法的前提是高等数学中的零点定理.1 .作图法及其MATLAB序(1)作函数y=f(x)在区间[a,b]的图形的MATLAB程序一x=a:h:b;%h是步长y=f(x);plot(x,y)grid,gtext('y=f(x)')说明:①此程序在MATLAB的工作区输入,运行后即可出现函数y=f(x)的图形.此图形与x轴交点的横坐标即为所要求的根的近似值.②区间[a,b]的两个端点的距离b-a和步长h的绝对值越小,图形越精确.(2)作函数y=f(x)在区间[a,b]的图形的MATLAB程序二将y=f(x)化为h(x)=g(x),其中h(x)和g(x)是两个相等的简单函数x=a:h:b;y1=h(x);y2=g(x);plot(x,y1,x,y2)grid,gtext('y1=h(x),y2=g(x)')说明:此程序在MATLAB的工作区输入,运行后即可出现函数y1=h(x)和y2=g(x)的图形.两图形交点的横坐标即为所要求的根的近似值.2 .逐步搜索法及其MATLAB序逐步搜索法也称试算法.它是求方程f(x)=0根的近似值位置的一种常用的方法.逐步搜索法依赖于寻找连续函数f(x)满足f(a)与f(b)异号的区间[a,b].一旦找到区间,无论区间多大,通过某种方法总会找到一个根.MATLAB的库函数中没有逐步搜索法的程序,现根据逐步搜索法的计算步骤和它的收敛判定准则编写其MATLAB程序如下,命名为zhubussm.输入输出说明:输入区间端点a和b的值,步长h和精度tol,运行后输出迭代次数k=(b-a)/h+1,方程f(x)=0根的近似值r.function[k,r]=zhubuss(a,b,h,tol)%输入的量:%琲Db是闭区间[a,b]的左、右端点;%h是步长;%tol是预先给定的精度.%运行后输出的量:%k是搜索点的个数;%r是方程在[a,b]上的实根的近似值,其精度是tol;X=a:h:b;Y=funs(X);%f(x)的M文件,对应名称为funs.m的函数文件n=fix((b-a)/h)+1;m=0;X(n+1)=X(n);Y(n+1)=Y(n);fork=2:nX(k)=a+k*h;Y(k)=funs(X(k));%程序中调用的funs.m为函数sk=Y(k)*Y(k-1);ifsk<=0,m=m+1;r(m)=X(k);endxielv=(Y(k+1)-Y(k))*(Y(k)-Y(k-1));if(abs(Y(k)) 方法1作图法.在MATLAB工作窗口输入如下程序>>x=-4:0.1:4;y=x.A3-x+4;plot(x,y)grid,gtext('y=xA3-x+4')画出函数f(x)=x3-x+4的图像.从图像可以看出,此曲线有两个驻点士1都在x轴的上方,在(-2,-1)内曲线与x轴只有一个交点,则该方程有唯一一个实根,且在(-2,-1)内.方法2试算法.在MATLAB工作窗口输入程序>>x=-4:1:4,y=x.A3-x+4运行后输出结果x=-4-3-2-101234y=-56-20-2444102864由于连续函数f(x)满足,所以此方程在(-2,-1)内有一个实根.(2)用二分法的主程序计算.在MATLAB工作窗口输入程序>>[k,x,wuca,yx]=erfen(-2,-1,0.001)运行后屏幕显示用二分法计算的过程(现已被列入下表),其余结果为k=9,x=-1.7959,wuca=9.7656e-004yx=0.0037次数k左端点ak右端点bk中点xk函数值f(ak)函数值f(bk)函数值f(xk)0-2.0000-1.0000-1.50000.5000-2.00004.00002.12501-2.0000-1.5000-1.75000.2500-2.00002.12500.39062-2.0000-1.7500-1.87500.1250-2.00000.3906-0.71683-1.8750-1.7500-1.81250.0625-0.71680.3906-0.14184-1.8125-1.7500-1.78130.0313-0.14180.39060.12965-1.8125-1.7813-1.79690.0156-0.14180.1296-0.00486-1.7969-1.7813-1.78910.0078-0.00480.12960.06277-1.7969-1.7891-1.79300.0039-0.00480.06270.02908-1.7969-1.7930-1.79490.0020-0.00480.02900.01219-1.7969-1.7949-1.79590.0010-0.00480.01210.0037二分法的MATLAB主程序二:function[c,err,yc,k]=bisect(f,a,b,delta)ya=feval(f,a);yb=feval(f,b);ifya*yb>0,return,endmax1=1+round((log(b-a)-log(delta))/log(2));fork=1:max1c=(a+b)/2;yc=feval(f,c);ifyc==0a=c;b=c;elseifyb*yc>0b=c;yb=yc;elsea=c;ya=yc;endifb-a
