matlab实验报告_4.docx
matlab实验报告Matlab实验报告定积分的近似计算学生姓名:学号:专业:数学与应用数学专业数学实验报告实验序号:1001114030日期:2021年10月20日班级应一姓名陈璐学号1001114030实验名称:定积分的近似运算问题背景描绘:利用牛顿莱布尼茨公式固然能够准确地计算定积分的值,但它仅合适于被积分函数的原函数能用初等函数表达出来的情形。假如这点办不到或不容易办到,这就有必要考虑近似计算的方法。在定积分的很多应用问题中,被积函数甚至没有解析表达式,可能只是一条实验记录曲线,或者是一组离散的采样值,这时只能应用近似方法去计算相应的定积分。实验目的:本实验将主要研究定积分的三种近似计算算法:矩形法、梯形法、抛物线发。对于定积分的近似数值计算,Matlab有专门函数可用。实验原理与数学模型:1.suma:求数组a的和。2.formatlong:长格式,即屏幕显示15位有效数字。3.double:若输入的是字符则转化为相应的ASCII码;若输入的是整型数之则转化为相应的实型数值。4.quad:抛物线法求数值积分。格式:quadfun,a,b。此处的fun是函数,并且为数值形式,所以使用*、/、等运算时要在其前加上小数点。5.trapz():梯形法求数值积分。格式:trapzx,y。其中x为带有步长的积分区间;y为数值形式的运算。6.fprintf文件地址,格式,写入的变量:把数据写入指定文件。7.syms变量1变量2:定义变量为符号。8.sym'表达式':将表达式定义为符号。9.intf,v,a,b:求f关于v积分,积分区间由a到b。10.subsf,'x',a:将a的值赋给符号表达式f中的x,并计算出值。若简单地使用subsf,则将f的所有符号变量用可能的数值代入,并计算出值。实验所用软件及版本:Matlab7.0.1主要内容要点:1.矩形法:ibaniixfdxxf?=?=1)()(?1左点法:对等分区间bxinabaxxaxni=xj=a+(i-1)*(b-a)/n;xi=a+i*(b-a)/n;fxj=subs(fx,'x',xj);fxi=subs(fx,'x',xi);inum=inum+(fxj+fxi)*(b-a)/(2*n);endinumintegrate=int(fx,1,2)integrate=double(integrate)fprintf('Therelativeerrorbetweeninumandreal-valueisabout:%gnn',.abs(inum-integrate)/integrate)运行结果:inum=0.69315152080005integrate=log(2)integrate=0.69314718055995Therelativeerrorbetweeninumandreal-valueisabout:6.26164e-006(2)抛物线法:formatlong%2*n=240;n=120;a=1;b=2;symsxfxfx=1/x;fori=1:nx0=a+(2*i-2)*(b-a)/(2*n);x1=a+(2*i-1)*(b-a)/(2*n);x2=a+(2*i-0)*(b-a)/(2*n);fx0=subs(fx,x,x0);fx1=subs(fx,x,x1);fx2=subs(fx,x,x2);Si=(fx0+4*fx1+fx2)*(b-a)/(6*n);inum=inum+Si;endinumintegrate=int(fx,1,2);integrate=double(integrate)fprintf('抛物线法的相对误差为:%en',abs(inum-integrate)/integrate)%将inum输入成了abs导致运行出错运行结果:inum=0.69314718056936integrate=0.69314718055995抛物线法的相对误差为:1.358861e-011 (3)Trapz法:x=1:1/120:2;y=1./x;trapz(x,y)运行结果:ans=0.69315152080005 (4)quad()法:quad('1./x',1,2)运行结果:ans=0.693147199862972、试计算定积分?+0sindxxx.注意:能够运用trapz、quad或附录程序求解吗?为何?)symsxf=sin(x)/x;I=int(f,0,inf)%该题积分上限为正无穷,故只能用符号运算,而不能用trapz()、quad()或附录程序运行结果:I=1/2*pi3、学习fuluBsum.m的程序设计方法,尝试用函数sum改写矩阵方法和抛物线法的程序,避免for循环.formatlongn=120;a=1;b=2;symsxfxfx=1/x;%第一次操作将fx的值当作了1,运算出错i=1:n;xj=a+(i-1)*(b-a)/n;xi=a+i*(b-a)/n;fxj=subs(fx,'x',xj);fxi=subs(fx,'x',xi);f=(fxj+fxi)/2*(b-a)/n;inum=sum(f)integrate=int(fx,1,2)integrate=double(integrate)fprintf('Therelativeerrorbetweeninumandreal-valueisabout:%gnn',.abs(inum-integrate)/integrate)%第二个连接符号打成了下划线运行结果:inum=0.69315152080005integrate=log(2)integrate=0.69314718055995Therelativeerrorbetweeninumandreal-valueisabout:6.26164e-006考虑与深化:这几个题其实都不算难,但是由于是第一次运用所学Matlab知识,很多地方只能照着书本才能写出来程序,对各种方法都很陌生,需要加强运用。另外,有些程序编译较简单,但是出现了些低级错误,比方拼写出错,或是符号打成了中文符号。总的来讲还需加强温习这方面的内容,最好能运用Matlab中近似计算积分的知识解决积分中碰到的难题。