《常州大学MATLAB实习报告.doc》由会员分享,可在线阅读,更多相关《常州大学MATLAB实习报告.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、序号: 41 学号: 常 州 大 学实 习 资 料 袋 数理学院 学院; 2013 2014 学年第 一 学期实习名称 MATLAB应用软件实习 指导教师 张燕新 学生姓名 段 旭 专业班级 电科112 实习单位 常州大学 W3机房 成 绩 实习时间2013年 12 月 30 日 2014 年 1月10日目 录 清 单序号材 料 名 称有“”备 注1实 习 日 记2实 习 报 告345 指导教师(签字): 序号: 41 学号: 实 习 报 告实习课程名称: Matlab应用软件实习 实 习 题 目: Matlab综合应用 学 生 姓 名: 段 旭 学 院(系): 数理学院 专 业 班 级: 电
2、科112 校内指导教师: 张燕新 专业技术职务: 讲师 实习时间: 2013 年 12 月 30 日 2014 年 1 月 10 Matlab应用软件实习摘 要:MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C+和FORTRAN)编写的程序。本次实习,针对MATLAB的一些计算
3、功能进行了一些浅显的实验与研究,主使用了MATLAB的函数计算、数值模拟和一些常用的画图功能。最后,用MATLAB进行了几个简单的数学建模实验。关键词:Matlab;实习;应用;目录摘要 I目录 II1 背景 11.1 MATLAB简介11.2 MATLAB历史12 详细求解22.1必做题22.2 选做题113 总结 15参考文献161 背景1.1 MATLAB简介MATLAB是由美国MathWorks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究
4、、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算
5、问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C+,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。1.2 MATLAB历史1970年代末到80年代初,时任美国新墨西哥大学教授的克里夫莫勒尔为了让学生更方便地使用LINPACK及EISPACK(需要通过FORTRAN编程来实现,但当时学生们并无相关知识),独立编写了第一
6、个版本的MATLAB。这个版本的MATLAB只能进行简单的矩阵运算,例如矩阵转置、计算行列式和本征值,此版本软件分发出大约两三百份。1984年,杰克李特、克里夫莫勒尔和斯蒂夫班格尔特(Steve Bangert)合作成立了MathWorks公司,正式把MATLAB推向市场。MATLAB最初是由莫勒尔用FORTRAN编写的,李特和班格尔特花了约一年半的时间用C重新编写了MATLAB并增加了一些新功能,同时,李特还开发了第一个系统控制工具箱,其中一些代码到现在仍然在使用。C语言版的面向MS-DOS系统的MATLAB 1.0在拉斯维加斯举行的IEEE决策与控制会议(IEEE Conference o
7、n Decision and Control)正式推出,它的第一份订单只售出了10份拷贝,而到了现在,根据MathWorks自己的数据,目前世界上100多个国家的超过一百万工程师和科学家在使用MATLAB和Simulink。1992年,学生版MATLAB推出;1993年,Microsoft Windows版MATLAB面世;1995年,推出Linux版。2 详细求解2.1必做题2.1.2 求解常微分方程x=-x+x+1,x(0)=1,x(0)=0(使用函数dsolve)dsolve(D2x=-Dx+x+1,Dx(0)=1,x(0)=0) ans =exp(t*(5(1/2)/2 - 1/2)*
8、(3*5(1/2)/10 + 1/2) + (5(1/2)*exp(-t*(5(1/2)/2 + 1/2)*(5(1/2) - 3)/10 - 12.1.3 已知t=an2+bn,测得对应数据如下:(多项式插值interp1)t=0,20,40,60,80,100,120,140,160,183.5;n=0,1153,2045,2800,3466,4068,4621,5135,5619,6152;试求a和b的值。t0=0,20,40,60,80,100,120,140,160,183.5;n0=0,1153,2045,2800,3466,4068,4621,5135,5619,6152;n=0
9、:0.001:6152;t=interp1(n0,t0,n,spline);p=polyfit(n,t,2)p = 0.0000 0.0144 0.06312.1.4 请用梯形法、辛普森法分别计算积分值 (trapz、quad)dblquad(x.2+y.2+x*y+2*x+y+1, 0, 1, 0, 2)ans = 10.3333f=inline(sqrt(x.2+x+1),x); quad(f,0,1)ans = 1.3369 x=0:0.01:1;y=sqrt(x.2+x+1);trapz(x,y)ans = 1.33692.1.5 计算二重积分 (使用函数dblquad)2.1.6 矩
10、阵M=1,2,6; 4,2,7; 8,9,3,求M的LU分解,QR分解,对角阵,特征值分解。(使用函数lu、qr、shol、eig) syms a b c A B Ceq1=a=3;eq2=A=4;eq3=b=a2;eq4=B=b2-1;eq5=c=a+A-2*B;eq6=C=a+B+2*c;x=solve(eq1,eq2,eq3,eq4,eq5,eq6); x.Cans =-223diag(M)ans = 1 2 3M=1,2,6; 4,2,7; 8,9,3; lu(M)ans = 8.0000 9.0000 3.0000 0.5000 -2.5000 5.5000 0.1250 -0.35
11、00 7.5500qr(M)ans = 9.0000 9.1111 6.4444 -0.5000 2.4470 -2.3360 -1.0000 -0.4719 6.8566D,X=eig(M) D = -0.4111 -0.7719 -0.4992 -0.5484 0.6237 -0.3914 -0.7282 0.1229 0.7730X = 14.2944 0 0 0 -1.5712 0 0 0 -6.72322.1.7 a=3,A=4,b=a2,B=b2-1,c=a+A-2B,C=a+B+2c,求C。(使用函数solve)2.1.8用两种方法求解Ax=b的解。(A为四阶随机矩阵,b为四阶向
12、量,自己创建)。 B=1;2;3;4;x=inv(A)*Bx = -6.4970 1.9163 10.9584 -3.8362 A=rand(4)A = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057方法一:方法二: A(:,5)=B;rref(A)ans = 1.0000 0 0 0 -6.4970 0 1.0000 0 0 1.9163 0 0 1.0000 0 10.9584 0 0 0 1.0000 -3.836
13、22.1.9 ,用两种方法求函数的根,并求其极值与零点。方法一: solve(x3+(x-0.8)2/(x+1.25)3-5*x-5/x);x=double(ans); for i=1:length(x) xx(i)=isreal(x(i); end x=x(xx)x =2.4156方法二: fzero(x.3+(x-0.8).2/(x+1.25).3-5*(x+1/x),3)ans =2.4156 x=t(1);y1=subs(y)y1 = 16.2832 x=t(2);y2=subs(y)y2 = -6.4732 z=diff(diff(y); x=t(1);z1=subs(z)z1 =
14、205.8164 x=t(2);z2=subs(z)z2 = -53.5382 syms x y y=x.3+(x-0.8).2/(x+1.25).3-5*(x+1/x); dydx=diff(y); solve(dydx);x=double(ans); for i=1:length(x) xx(i)=isreal(x(i); end t=x(xx)t = -0.4694 -2.4039求极值:所以函数f(x)存在一个极大值点x1=-2.4039,极大值为-6.4732;一个极小值点x2=-2.4039,极小值为16.28322.1.10 f(x)的定义如下:,写一个matlab函数func1
15、实现该函数。2.1.11 写一个MATLAB小程序,求出最小的 n 值,使得 n! realmax。function func1 (x)if x=0&xrealmax break; endendfprintf(最小的整数为:%dn,n)2.1.12 写一个 MATLAB 函式 myfun.m 来计算下列方程式: y = 0.5*exp(x/3)-x*x*sin(x) 其中 x 是函式的输入,y 是函式的输出。你的函式必须能够处理当 x 是纯量或是向量的两种情况。function f=myfun(x)n=length(x);for i=1:n f(i)=0.5*exp(x(i)/3)-x(i)*
16、x(i)*sin(x(i);end2.1.13 写一个 MATLAB 函式 pifun.m 来计算下列级数: f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + .) 其中 n 为函式的输入,级数和 f(n) 则是函式的输出。此外,你必须进行下列事项: (1) 使用 tic 和 toc 指令来测量 pifun() 的计算时间。如果你不知道如何使用这两个指令,请使用 help tic 及 help toc 来查出它们的用法。我的计算机是 Pentium-450,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。 (2)使用 flops 指令来测
17、量 pifun() 所用到 floating point operations 的计算次数。如果你不知道如何使用这个指令,请使用 help flops 来查出它的用法。 function sum,time,flop=pifun(n)%f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + .)ticsum=0;i=0;flag=1;for i=0:1:n sum = sum + 4*(flag/(2*i+1); flag = -flag;endtime=toc2.1.15 求下列函数的极小点: f=x(1)2+4*x(2)2+9*x(3)2-2*x(1)+18
18、*x(2) ;x,fm=fminsearch(f,0,0,0)x =1.0000 -2.2500 0.0000fm = -21.2500 1) 2) f=x(1)2+3/2*x(2)2-2*x(1)*x(2)+x(1)-2*x(2) ;x,fm=fminsearch(f,0,0)x = 0.2681 1.9168fm = -0.06663) f= (x(1)-1)4+x(2)2; x,fm=fminsearch(f,0;1)x = 0.2533 -0.0016fm = 4.1482e-017 4.1482e-0172.1.17 设 f(x,y) = 4 sin (x 3y),求 2.1.19
19、对于迭代模型x(1)=0;y(1)=0;for i=1:1:3000;%开始先从1到3000x(i+1)=1+y(i)-1.4*x(i)2;y(i+1)=0.3*x(i);hold onplot(x(i),y(i),*b)end取初值x0 = 0, y0 = 0, 进行3000次迭代,对于k1000, 在(xk, yk) 处亮一点(注意不要连线)可得所谓Henon引力线图。syms f s y; syms f x y; f=4*sin(x.3*y); z=diff(diff(f,x),y); x=2;y=3;subs(z)ans = 1.0636e+0032.1.20 请设计一个程序,程序完成
20、下列功能:(1)让用户输入一个矩阵A;(2)在A中找出小于0的矩阵元素的位置;(3)在A中统计出等于0的元素的个数;(4)显示A的行数和列数;(5)找出矩阵A各元素中的最大值(显示值,不显示元素位置)。2.11.21 请设计一个程序,程序完成下列功能:(1) 让用户依次输入两个字符串s1和s2;(2) 比较两个字符串的长度并显示比较结果;function f=title21()s1=input(请输入字符串s1: , s);s2=input(请输入字符串s2: , s);m=length(s1);n=length(s2);t=m;kk=0;if mn t=n;disp( s1大于s2.);el
21、seif mn disp(s1小于s2.);else disp(字符串相等.);endfor i=4:t for j=1:m-i+1 for k=1:n-i+1 if strcmp(s1(j:j+i-1),s2(k:k+i-1)=1 l=0; for r=1:kk if strcmp(s1(j:j+i-1),br)=1 l=1; break; end end if l=0 kk=kk+1; bkk=s1(j:j+i-1); end end end endendfor i=1:kk fprintf(有%d个相同字符串,i); disp(bi); endfunction f=title20()a=
22、input(请输入矩阵A: );m,n=size(a);t=0;p=0;for i=1:m for j=1:n if a(i,j)max max=B(i); endend if p=0 disp(小于0.);endfprintf(A中0的个数为%dn,t);fprintf(A的行数为%d列数为%dn,m,n);fprintf(A中元素最大值为%dn,max);(3) 判断s1与s2有没有长度在3个字符以上的相同子串,显示判断结果。2.1.22 编写程序模拟杨氏双缝干涉 两相干光源到接收屏上P点距离r1=(D2+(y-a/2)2)1/2, r2=(D2+(y+a/2)2)1/2,相位差=2(r2
23、-r1)/,光强I=4I0cos2(/2)编写程序clear lam=500e-9;a=2e-3;D=1;ym=5*lam*D/a;xs=ym;n=101;ys=linspace(-ym,ym,n);for i=1:n r1=sqrt(ys(i)-a/2).2+D2); r2=sqrt(ys(i)+a/2).2+D2); phi=2*pi*(r2-r1)./lam; B(i,:)=sum(4*cos(phi/2).2);endN=255;Br=(B/4.0)*N;subplot(1,2,1);image(xs,ys,Br);colormap(gray(N);subplot(1,2,2);plo
24、t(B,ys);2.1.24 绘制三元函数的可视化图形x=-5:0.05:5;y=-5:0.05:5;z=-5:0.05:5;x,y,z=meshgrid(x,y,z);v=x.2+y.2+z.2;isosurface(x,y,z,v,10);axis equalx,y,z,v = flow;q=1./sqrt(1-x).*log(x-y)-z;p = patch(isosurface(x, y, z, v, 0);isonormals(x,y,z,q,p)set(p, FaceColor, blue, EdgeColor, none);view(3)camlight; lighting2.1
25、.25 绘制的图象2.2 选做题2.2.28 某公司投资2000万元建成一条生产线。投产后,在时刻t 的追加成本和追加收益分别为G(t)= (百万元/年), H(t)= (百万元/年)。试确定该生产线在合适何时停产可获最大利润?最大利润是多少?要求:写出数学模型、M函数(如果需要的话)、运算命令和计算结果。解:利润函数 (百万元)f(t)=H(t)-G(t)=175-t-3t2/3,f(t)单调递减,则当f(t)=0时利润最大f=175-t-3*t(2/3);t=double(solve(f)f=inline(175-t-3*t.(2./3);r=quad(f,0,107.2708)-20t
26、= 1.0e+002 * 1.9536 - 1.0860i 1.9536 + 1.0860i 1.0727 r = 8.6397e+003即在第108年停产可获最大利润,最大利润为8639.7百万元。2.2.29 一幢楼房的后面是一个很大的花园。在花园中紧靠着楼房建有一个温室,温室高10英尺,延伸进花园7尺。清洁工要打扫温室上方的楼房的窗户。他只有借助于梯子,一头放在花园中,一头靠在楼房的墙上,攀援上去进行工作。他只有一架20米长的梯子,你认为他能否成功?能满足要求的梯子的最小长度是多少?步骤:1先进行问题分析,明确问题;2建立模型,并运用Matlab函数求解;3对结果进行分析说明;4设计程序
27、画出图形,对问题进行直观的分析和了解(主要用画线函数plot,line)。若梯子能恰好放置,则梯子的长度f与倾角x关系如下:(其中a=m, b=3.048m,0x0 s=(s-1000)*(1+0.001); t=t+1;endt=ceil(t/12);fprintf(%d年后他的退休金将用完.n,t); title3360岁时退休金为:3.e+005.32年后他的退休金将用完.60岁退休时退休基金有.元.退休后每月要从银行提取1000元,32年后基金将用完.2.2.34 一半径为5m的球形水罐充满了水,底部有一半径为b=0.1m的小孔漏水,问多少时间以后,水面下降至离底部0.5m?解:水从孔
28、漏出的速度由下列能量方程决定,u是速度, z表示从球心测量的水面高度, g为重力加速度。考虑在时间dt内水面变化dz,漏水的体积为,其中x为高度,z为水面的半径, 。由于得:在顶部z=R水降到0.5m时,从而:clear;R=5; b=0.1; g= 9.81; z1=0.5-R; z2=R;n=100;h=(z2-z1)/n; z =z1 : h : z2;f = (R2 - z.2)./ (b2 * sqrt(2*g*(z+R);I = trapz(z,f)/(60*60) I = 0.51443 总结通过这次实习,我了解到了一些关于Matlab的基础知识,见识到了Matlab作为一款计算
29、工具的强大之处。当然,还有很多很多的功能是我没有接触到了,我会努力学习,越来越娴熟的去掌握这款工具。作为新时代的大学生,要珍惜这些难得的环境,努力学习,将来报效祖国。Matlab是一个强大的数学工具,它的应用广泛,涉及到各个领域。它使用起来十分方便,不用麻烦去定义变量,它的绘图能力很强,甚至可以模拟出三维视图。矩阵是它应用的核心,许多工程繁琐的运算都需要靠矩阵来化简,这正是它的生命力所在。但是,他的函数很多,开始学时记的比较痛苦,我已经深深感觉到了。不过看多了也就熟了,感觉和学五笔差不多。它的语法简单,像我学过C语言的学起来还是蛮容易的,尤其是他支持C语言的混编,让我能够快速的掌握他的语法。它
30、的数组定义十分符合自然,是从1开始的,数组元素的调用也很接近数学的表达。此外,函数的名字也很符合英文规则,让我使用起来得心应手。Simulink动态仿真功能,主要用于仿真、验证、算法思想是否正确。在这段时间里,我们主要学习MATLAB的工具的使用,熟悉其最基础的功能,锻炼了我的实际动手能力。Help是MATLAB中最有效的命令。遇到问题,通常都可以借助help解决问题。老师一再给我们强调了help的重要性。下面是我对help的一些常用方法的总结:(1)命令窗口直接敲“help”,你就可以得到本地机器上matlab的基本的帮助信息。(2)对于某些不是很明确的命令,只知道大体所属范围,譬如说某个工
31、具箱,直接在命令窗口中敲入helptoolboxname,一帮可以得到本工具箱有关的信息:版本号,函数名等。(3)知道函数名,直接用helpfunname就可以得到相应的帮助信息。我觉得想要学好MATLAB是不容易的,这是一件需要持之以恒的事,必须要坚持不懈的学习,还需要敢于开口向别人请教,更需要我们勤于思考,勤于记忆,勤于动手。程序设计是实践性和操作性很强的事情,需要我们亲自动手。因此,我们应该经常自己动手实际操作设计程序,熟悉MATLAB的操作,这对提高我们的操作能力非常有效。通过学习matlab,我又一次锻炼了自己的思维。它学起来得心应手也让我明白了学习一门语言(c语言)对学习其他语言的
32、帮助指导作用。同时,它也加强了我理论联系实际的能力。这是一个专业课的基础工具,学好它是必要的。在这几天时间里,我仅仅是学了一点点皮毛,想要进一步的学习,还需要我在以后的的实际运用里不断地学习,改进自己的不足之处,让自己能够有所进步,有所成长。参考文献1 Thomas Haigh. The History of Numerical Analysis and Scientific Computing (PDF). Santa Barbara, California. 2004-03-08: (6465) 2010-04-29. 2 Cleve Moler. The Growth of MATLAB
33、 and The MathWorks over Two Decades (PDF). January 2006 2010-04-30 3 MathWorks Founders. MathWorks. 2010-04-29. 4 Schrader, C.B.; Spong, M.W. The IEEE Conference on Decision and Control - tracing CDC history. IEEE Control Systems Magazine. Dec. 2004, 24 (6): 56 66 Jan. 14, 2011. doi:10.1109/MCS.2004. 5 About The MathWorks. MathWorks. 2010-04-29. 6 MATLAB 7.10简介及主要功能. MathWorks中国. 2010-04-29. 7 MATLAB附加产品. MathWorks中国. 2010-04-29. 8 Matlab的简明基础教程9 Matlab软件应用与开发
限制150内