资源描述:
《matlab非线性方程求根》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、科学计算与MATLAB中南大学材料科学与工程学院2010.10第八讲 非线性方程求根内容提要引言二分法迭代法Newton迭代法MATLAB的非线性方程求根函数小结在工程和科学技术中许多问题常常归结为求解非线性方程式问题,例如在控制系统的设计领域,研究人口增长率等。例关于真实气体的状态方程(Vanderwaals方程)为其中,P是气体压力,V是气体体积,T是绝对温度,R是气体常数。如果已知某气体的温度T及压力P,那么求体积V的方程为:1、引言非线性方程的一般形式:f(x)=0代数方程:f(x)=a0+a1x+……+anxn(an0)超越方程:f
2、(x)中含三角函数、指数函数、或其他超越函数。用数值方法求解非线性方程的步骤:(1)找出有根区间;(只含一个实根的区间称隔根区间)(2)近似根的精确化。从隔根区间内的一个或多个点出发,逐次逼近,寻求满足精度的根的近似值。2、方程求根的二分法2.1二分法的基本思想:假定f(x)=0在[a,b]内有唯一单实根x*,考察有根区间[a,b],取中点x0=(a+b)/2,若f(x0)=0,则x*=x0,否则,(1)若f(x0)f(a)>0,则x*在x0右侧,令a1=x0,b1=b;(2)若f(x0)f(a)<0,则x*在x0左侧,令a1=a,b1=x0。
3、定理1(介值定理)设函数f(x)在区间[a,b]连续,且f(a)f(b)<0,则方程f(x)=0在区间[a,b]内至少有一个根。以[a1,b1]为新的隔根区间,且仅为[a,b]的一半,对[a1,b1]重复前过程,得新的隔根区间[a2,b2],如此二分下去,得一系列隔根区间:[a,b][a1,b1][a2,b2]……[ak,bk]……其中每个区间都是前一区间的一半,故[ak,bk]的长度:当k趋于无穷时趋于0。即若二分过程无限继续下去,这些区间最后必收敛于一点x*,即方程的根。每次二分后,取有根区间的中点xk=(ak+bk)/2作为根的
4、近似值,则可得一近似根序列:x0,x1,x2,…该序列必以根x*为极限。实际计算中,若给定充分小的正数0和允许误差限1,当
5、f(xn)
6、<0或bn-an<1时,均可取x*xn。计算过程简单,收敛性可保证;对函数的性质要求低,只要连续即可。缺点:收敛速度慢;不能求复根和重根;调用一次求解一个[a,b]间的多个根无法求得。2.2二分法求解非线性方程的优缺点:输入计算输出:“functionapproachinginfinityforx=”;x否是或否输出分半次还没有到达精度要求信息输出stop是是否否2.3MATLAB实现function
7、root=HalfInterval(f,a,b,eps)if(nargin==3)eps=1.0e-4;endf1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=a;endif(f2==0)root=b;endif(f1*f2>0)disp('两端点函数值乘积大于0!');return;elseroot=FindRoots(f,a,b,eps);endfunctionr=FindRoots(f,a,b,eps)f_1=subs(sym
8、(f),findsym(sym(f)),a);f_2=subs(sym(f),findsym(sym(f)),b);mf=subs(sym(f),findsym(sym(f)),(a+b)/2);if(f_1*mf>0)t=(a+b)/2;r=FindRoots(f,t,b,eps);elseif(f_1*mf==0)r=(a+b)/2;elseif(abs(b-a)<=eps)r=(b+3*a)/4;elses=(a+b)/2;r=FindRoots(f,a,s,eps);endendend例:用二分法求方程x^3-3x+1=0在区间[0,1
9、]上的一个根。3.1基本思想迭代法是一种逐次逼近的方法,用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果。3、迭代法例:求方程x3-x-1=0在x=1.5附近的一个根。将所给方程改写成假设初值x0=1.5是其根,代入得x1≠x0,再将x1代入得x2≠x1,再将x2代入得如此下去,这种逐步校正的过程称为迭代过程。这里用的公式称为迭代公式,即k=0,1,2,……迭代结果见下表。仅取六位数字,x7与x8相同,即认为x8是方程的根。x*≈x8=1.32472kxkkxk012341.51.357211.330861.3258
10、81.3249456781.324761.324731.324721.32472计算否输出迭代次还没有达到精度要求信息输出输入是将连续函数方程f(x)