您好,欢迎访问三七文档
一、科学计算的算法及其举例应用和利用MATLAB自带函数实现科学计算法:弦截法非线性方程实例:采用弦截法求方程lgx+x=2在区间[1,4]上的一个根。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]上的一个根。(4)Xk的递推公式为:0)()(),()()(0)()(),()()(111111kkkkkkkkxfafbfbfxfbxbxxfafafafxfaxax且)()()(1afafbfabax在MATLAB中编程实现的弦截法的函数为:Secant.功能:用弦截法求函数在某个区间的一个零点。调用格式:root=Secant(f,a,b,eps).其中,f为函数名;a为区间左端点;b为区间左端点;eps为根的精度;root为求出的函数零点。2.流程图弦截法流程图f(a)f(x1)0??YES(a,f(a)),(x1,f(x1))作一直线,它与x轴的交点记为x2NO(b,f(b)),(x1,f(x1))作一直线,它与x轴的交点记为x21*()()()kkkxaxafafxfa1*()()()kkkxaxbfbfxfb?1xxkk?1xxkkYESYES输出xn为f(x)=0在区间[a,b]上的一个根输出xn为f(x)=0在区间[a,b]上的一个根过(a,f(a)),(b,f(b))作一直线,它与x轴有一个交点,记为x1.输入a,b,xxkk1NOxxkk1NO实例流程图:3.源程序代码弦截法源程序代码:functionroot=Secant(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*f20)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);调用Secant进行运算输出结果r=1.8773结束输入条件:sqrt(x)+log(x)-2积分区间:(1,4)开始while(toleps)r1=root;fx=subs(sym(f),findsym(sym(f)),r1);s=fx*fa;if(s==0)root=r1;elseif(s0)root=b-(r1-b)*fb/(fx-fb);elseroot=a-(r1-a)*fa/(fx-fa);endendtol=abs(root-r1);endend实例源代码:r=Secant('sqrt(x)+log(x)-2',1,4)运行结果:r=1.8773二、分析单自由度阻尼系统的阻尼系数对其固有振动模态的影响1.流程图结束绘制x,t二维图象subplot(1,2,1)j=1j≤10?plot(t,x(j,:))j=j+2开始输入wn,x0,v0,tfj=1zeta=0.1*jwd=wnA=/wda=atan2(wd*x0,v0+zeta*wn*x0)j≤10?t=0j=j+1t≤tf?t=t+tf/1000x(j,:)=A**sin(wd*t+a)subplot(1,2,2),mesh(x)NoYesYesNoNoYes2.源程序代码:3.运行结果:三.Appollo卫星的运行轨迹1.流程图2.源程序代码:函数文件:开始输入初值[t,y]=ode45('appollo',[0,20],x0,options)绘制图形plot(y(:,1),y(:,3))结束命令文件:3.运行结果
本文标题:弦截法非线性方程
链接地址:https://www.777doc.com/doc-4921868 .html