弦截法非线性方程求解《MATLAB程序设计实践》课程考核一、,编程实现以下科学计算算法,并举一例应用之。(参考书籍《精通MATLAB科学计算》,王正林等著,电子工业出版社,2009年)“弦截法非线性方程求解”1、算法说明:弦截法的算法过程如下:1)过两点(a,f(a)),(b,f(b))作一直线,它与x轴有一个交点,记为x1..((2)如果f(a)f(x1)<0,过两点(a,f(a)),(x1,f(x1))作一直线,它与x轴的交点记为x2,否则过两点(b,f(b)),(x1,f(x1))作一直线,它与x轴的交点记为x2;,(3)如此下去,直到|xn-xn-1|<,就可以认为xn为f(x)=0在区间[a,b]上的一个根。x,a,,k,1x,a,f(a),f(a)f(x),0kk,1,,f(x),f(a),,k,1(4)Xk的递推公式为:且,,,xbk,1,,x,b,f(b),f(a)f(x),0kk,1,,f(x),f(b)k,1,,b,ax,a,f(a)1f(b),f(a)在MATLAB中编程实现的弦截法的函数为::用弦截法求函数在某个区间的一个零点。调用格式:root=Secant(f,a,b,eps).其中,f为函数名;a为区间左端点;b为区间右端点;eps为根的精度;root为求出的函数零点。2、流程图:,输入a,b,过(a,f(a)),(b,f(b))作一直线,,记为x1(b,f(b)),(x(a,f(a)),(x,11NOYES,f(x))作一f(x))作一11直线,它与f(a)f(x)<0?直线,它与1x轴的交,x轴的交点记为x点记为x22xa,xa,kk*()*()xbfb,,xafa,,,1,1kk()()()()fxfb,fxfa,kk,,,?,,,?xxk,1kxxk,1kYESYESNONO输出x为输出x为nn,,xxkk,1xxkk,1f(x)=0在区f(x)=0在区间[a,b]上的间[a,b]上的一个根一个根3、M文件:functionroot=Secant(f,a,b,eps)%弦截法求函数f在区间[a,b]上的一个零点%函数名:f%区间左端点:a%区间右端点:b%根的精度:eps%求出的函数零点:rootif(nargin==3)eps=-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;elsetol=1;fa=subs(sym(f),findsym(sym(f)),a);fb=subs(sym(f),findsym(sym(f)),b);root=a-(b-a)*fa./(fb-fa);%迭代初始值while(tol>eps)r1=root;fx=subs(sym(f),findsym(sym(f)),r1);s=fx*fa;if(s==0)root=r1;elseif(s>0)root=b-(r1-b)*fb/(fx-fb);%用递推公式2elseroot=a-(r1-a)*fa/(fx-fa);%用递推公式1endendtol
弦截法非线性方程求解 来自淘豆网m.daumloan.com转载请标明出处.