第一篇:matlab实习报告(最新)
1.求f(x)=4x6-x+x3-95在(0,100)上最大值、最小值,根。(使用函数fminbnd、roots)
>>[x,y]=fminbnd('4*x.^6-x+x.^3-95',0,100)x =
0.4432 y =
-95.3258 >> [x,y]=fminbnd('-4*x.^6+x-x.^3+95',0,100)x =
99.9999 y =-4.0000e+012 >> a=[4 0 0 1 0-1-95];roots(a)ans =
1.6860
0.8525 + 1.4852i
0.85251.4514i 求解常微分方程x’’=-x’+x+1,x’(0)=1,x(0)=0(使用函数dsolve)dsolve('D2x=-Dx+x+1','Dx(0)=1','x(0)=0')ans =(5^(1/2)*exp(t*(5^(1/2)/23))/(10*exp(t*(5^(1/2)/2 + 1/2)))1/3 + 1/51/11 +...)其中 n 为函式的输入,级数和 f(n)则是函式的输出。此外,你必须进行下列事项:
function f=pifun(n)l=1;s=0;for i=1:n s=s+l/(2*i-1);l=-l;end s=4*s;disp('f(n)的值是');disp(num2str(s))(1)使用 tic 和 toc 指令来测量 pifun(100000)的计算时间。如果你不知道如何使用这两个指令,请使用 help tic 及 help toc 来查出它们的用法。我的计算机是 Pentium-450,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。
>> tic,pifun(100000),toc f(n)的值是 3.1416 Elapsed time is 0.028928 seconds.Cpu Pentium dual—core e5300(2)使用 flops 指令来测量 pifun(100000)所用到 floating point operations 的计算次数。如果你不知道如何使用这个指令,请使用 help flops 来查出它的用法。
14、写一个 MATLAB 的递归函式 fibo.m 来计算 Fibonacci 数列,其定义如下:
fibo(n+2)= fibo(n+1)+fibo(n)此数列的启始条件如下: fibo(1)= 0, fibo(2)= 1.function f=fibo(n)if n==1 f=0;elseif n==2 f=1;else f=fibo(n-1)+fibo(n-2);end 求下列函数的极小点:
1)fXx24x29x22x18x;
12312>> f='x(1)^2+4*x(2)^2+9*x(3)^2-2*x(1)+18*x(2)';[x,fm]=fminsearch(f,[0,0,0])x =
1.0000-2.2500 0.0000
fm =
-21.2500
2)
fX2x1; 32x22x1x2x12x22>> 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.*** 1.***
fm =
-0.***
3)fXx1422.12>> f='(x(1)-1)^4+x(2)^2';>> [x,fm]=fminsearch(f,[0;1])x =
0.***-0.***
fm =
4.24***82e-017
第1),2)题的初始点可任意选取,第3)题的初始点取为X00,1T.5x1x2x31x3xx23416. 解线性方程组 1并求系数矩阵的行列式。
x1x25x432x34x41 a=[5 1-1 0 1;1 0 3-1 2;-1-1 0 5 3;0 0 2 4-1];>> rref(a)
ans =
1.0000
0
0
0
1.4000
0
1.0000
0
0
-5.9000
0
0
1.0000
0
0.1000
0
0
0
1.0000
-0.3000
所以 x1=1.4;x2=-5.9;x3=0.1;x4=-0.3
a=[5 1-1 0;1 0 3-1;-1-1 0 5;0 0 2 4];>> det(a)
ans =
2f17. 设 f(x,y)= 4 sin(x y),求
xy
3x2,y3
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)
>> zs17
ans =
1.0636e+003 18.求方程 3x4+4x3-20x+5 = 0 的所有解。
c=[3 4 0-20 5];roots(c)
>> zs18
ans =
-1.5003 + 1.5470i-1.50031.0860i 1.9536 + 1.0860i 1.0727
r =
8.6397e+003 即在第108年停产可获最大利润,最大利润为8639.7百万元。一幢楼房的后面是一个很大的花园。在花园中紧靠着楼房建有一个温室,温室高10英尺,延伸进花园7尺。清洁工要打扫温室上方的楼房的窗户。他只有借助于梯子,一头放在花园中,一头靠在楼房的墙上,攀援上去进行工作。他只有一架20米长的梯子,你认为他能否成功?能满足要求的梯子的最小长度是多少?
步骤:
1.先进行问题分析,明确问题;
2.建立模型,并运用Matlab函数求解; 3.对结果进行分析说明; 4.line)设计程序画出图形,对问题进行直观的分析和了解(主要用画线函数plot。若梯子能恰好放置,则梯子的长度f与倾角x关系如下:
ab7f(x)
(其中a=m, b=3.048m,0 L=inline('3.048/sin(x)+2.333/cos(x)','x');x=fminbnd(L,0.01,pi/2-0.01)l=subs(L) ezplot('3.048/sin(x)+2.333/cos(x)',[0,pi/2]) 由以上可知梯子的最小长度为7.59m。所以他能成功。 22.某大学青年教师从31岁开始建立自己的养老基金,他把已有的积蓄10000元也一次性地存入,已知月利率为0.001(以复利计),每月存入700元,试问当他60岁退休时,他的退休基金有多少?又若,他退休后每月要从银行提取1000元,试问多少年后他的基金将用完? function f=title22()s=10000;t=0;for i=1:360 s=s*(1+0.001)+700;end fprintf('60ËêÍËÐÝʱÍËÐÝ»ù½ðÓÐ%fÔª.n',s);while s>0 s=(s-1000)*(1+0.001);t=t+1;end t=ceil(t/12); fprintf('ÍËÐݺóÿÔÂÒª´ÓÒøÐÐÌáÈ¡1000Ôª£¬%dÄêºó»ù½ð½«ÓÃÍê.n',t);>> zs22 60岁退休时退休基金有317480.843330元.退休后每月要从银行提取1000元,32年后基金将用完.23.:请设计一个程序,程序完成下列功能:(1)让用户输入一个矩阵A;(2)在A中找出小于0的矩阵元素的位置;(3)在A中统计出等于0的元素的个数;(4)显示A的行数和列数; (5)找出矩阵A各元素中的最大值(显示值,不显示元素位置)。 function f=title20()a=input('ÇëÊäÈë¾ØÕóA: ');[m,n]=size(a);t=0;p=0;for i=1:m for j=1:n if a(i,j)<0 p=p+1; fprintf('µÚ%d¸öСÓÚ0µÄλÖÃÊÇ(%d,%d)n',p,i,j); end if a(i,j)==0 t=t+1; end end end B=a(:);max=B(1);for i=2:m*n if B(i)>max max=B(i); end end if p==0 disp('AÖÐûÓÐСÓÚ0µÄÔªËØ.');end fprintf('AÖеÈÓÚ0µÄÔªËصĸöÊýΪ%dn',t);fprintf('AµÄÐÐÊýºÍÁÐÊý·Ö±ðΪ%d£¬%dn',m,n);fprintf('A¸÷ÔªËØÖеÄ×î´óֵΪ%dn',max); 24:请设计一个程序,程序完成下列功能:(1)让用户依次输入两个字符串s1和s2;(2)比较两个字符串的长度并显示比较结果; (3)判断s1与s2有没有长度在3个字符以上的相同子串,显示判断结果。function f=title24() s1=input('ÇëÊäÈë×Ö·û´®s1: ');s2=input('ÇëÊäÈë×Ö·û´®s2: ');m=length(s1);n=length(s2);t=m;kk=0;if m>n t=n; disp('s1µÄ³¤¶È´óÓÚs2µÄ³¤¶È.');elseif m disp('s1µÄ³¤¶ÈСÓÚs2µÄ³¤¶È.');else disp('s1µÄ³¤¶ÈµÈÓÚs2µÄ³¤¶È.');end for 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),b{r})==1 l=1; break;end end if l==0 kk=kk+1; b{kk}=s1(j:j+i-1); end end end end end for i=1:kk fprintf('µÚ%d¸öÏàͬ×Ö·û´®£º',i);disp(b{i}); end 25:编写程序模拟杨氏双缝干涉 两相干光源到接收屏上P点距离r1=(D2+(y-a/2)2)1/2, r2=(D2+(y+a/2)2)1/2,相位差 Φ=2π(r2-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+D^2);r2=sqrt((ys(i)+a/2).^2+D^2);phi=2*pi*(r2-r1)./lam;B(i,:)=sum(4*cos(phi/2).^2);end N=255;Br=(B/4.0)*N;subplot(1,2,1);image(xs,ys,Br);colormap(gray(N));subplot(1,2,2);plot(B,ys); 26:编写程序模拟光栅衍射 公式:I=I0(sinα/α)2(sin(λβ)/sinβ)2 α=(πa/λ)sinΦ β=(πd/λ)sinΦ clear lam=500e-9;N=2;a=2e-4;D=5;d=5*a;ym=2*lam*D/a;xs=ym;n=1001;ys=linspace(-ym,ym,n);for i=1:n sinphi=ys(i)/D;alpha=pi*a*sinphi/lam;beta=pi*d*sinphi/lam; B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;B1=B/max(B);end NC=255;Br=(B/max(B))*NC;subplot(1,2,1)image(xs,ys,Br);colormap(gray(NC));subplot(1,2,2)plot(B1,ys); 27:绘制三元函数wx2y2z2的可视化图形 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 equal 28:绘制 zf(x,y)(1x)12ln(xy)的图象 [x,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;lighting 29: 试完成matlab 动画 霓虹灯效果动画:一颗花心: clear;clc;close all c=5;t=linspace(-c,c);[x,y]=meshgrid(t);z=17*x.^2-16*abs(x).*y+17*y.^2-225;pcolor(x,y,z);shading interp pause(2);spinmap(10) 30:试完成matlab gui程序 function varargout = ex0(varargin)gui_Singleton = 1; gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @ex0_OpeningFcn,...'gui_OutputFcn', @ex0_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end function ex0_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; global i a i=0; a=floor(100*rand); guidata(hObject, handles); function varargout = ex0_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; function x1_Callback(hObject, eventdata, handles) function x1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end function x2_Callback(hObject, eventdata, handles) function x2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end function p1_Callback(hObject, eventdata, handles) global i a x1= eval(get(handles.x1,'String')); if x1>a x2='high'; set(handles.x2,'string',num2str(x2)); elseif x1 set(handles.x2,'string',num2str(x2)); else x2='YOU ARE WIN'; set(handles.x2,'string',num2str(x2));a=floor(100*rand);i=0; end i=i+1;if i==10 x2='YOU ARE LOSE'; set(handles.x2,'string',num2str(x2));a=floor(100*rand);i=0;end function p2_Callback(hObject, eventdata, handles) close = questdlg('ÄúÈ·¶¨Òª¹Ø±ÕÂð?','È·¶¨¹Ø±Õ','ÊÇ','·ñ','ÊÇ');switch close case '·ñ' case 'ÊÇ' delete(handles.figure1)end matlab实习报告 实习总结报告;学校名称;实习类型学学软件MTLAB实习起止时间年月日至年;所在院(系);班级;学生姓名;学号;年月日;实习总结报告;2013年7月8日至7月26日,我们应数专业进行;这次认识实习分为两大部分:理论知识学习和上机实践; 一、实习目的;这次实习的目的是使我们掌握MATLAB的基本知识; 二、实习内容; (一)操作基础;MATLAB是一种用于科学计算的高 实习总结报告 学校名称 实习类型 学学软件MTLAB 实习起止时间 年 月 日至 年 月 日 指导教师 所在院(系)班 级 学生姓名 学 号 年 月 日 实习总结报告 2013年7月8日至7月26日,我们应数专业进行了为期3周的实习。这次认识实习分为两大部分:理论知识学习和上机实践学习。这次认识实习使我对专业知识有了一定的了解,知道以后的学习重点,感受工作环节,为自己将来走向社会打下基础。 一、实习目的 这次实习的目的是使我们掌握MATLAB的基本知识,能运用MATLAB来编写程序,解决一般性的问题,使得我们在完成本课程学习后,掌握MATLAB的基本知识和初步的编程能力,为以后的学习和工作提供了一个非常有用的工具。 二、实习内容 (一)操作基础 MATLAB是一种用于科学计算的高性能语言。它将计算、可视化和程序设计集成在一个非常容易的环境中,使用我们熟悉的数学符号表示问题与答案。MATLAB系统由5个主要部分组成,包括开发环境、MATLAB数学函数库、MATLAB语言、图形、MATLAB应用程序接口。对于MATLAB的操作基础,应该学会启动和退出MATLAB、MATLAB的桌面工具和开发环境、命令窗口、历史窗口等等。 (二)矩阵及其运算 MATLAB,即“矩阵实验室”,它是以矩阵为基本运算单元。因此,本书从最基本的运算单元出发,介绍MATLAB的命令及其用法。 1.矩阵的表示:MATLAB的强大功能之一体现在能直接处理向量 或矩阵。当然首要任务是输入待处理的向量或矩阵。不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。所有元素处于一方括号([ ])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。其中有:符号矩阵、大矩阵的生成、多维数组的创建、特殊矩阵的生成(主要有零矩阵(zero)、单位阵(eye)、全一阵(ones)、均匀分布随机矩阵(rand)、正态分布随机矩阵(randn)等)。 (三)程序设计与文件操作 1.程序设计: Matlab既是一种语言,又是一种编程环境。Matlab提供了很多方便用户的工具,用于管理变量、输入输出数据以及生成和管理M文件。 用户可在Matlab的命令窗口键入一个命令,也可以由它定义的语言在编辑器中编写应用程序,Matlab软件对此进行解释后,在Matlab环境下对它进行处理,最后返回结果.MATLAB语言的显著特点:具有强大的矩阵运算能力:Matrix Laboratory(矩阵实验室),使得矩阵运算非常简单。也是一种演算式语,MATLAB的基本数据单元是既不需要指定维数,也不需要说明数据类型的矩阵(向量和标量为矩阵的特例),而且数学表达式和运算规则与通常的习惯相同。因此,MATLAB语言编程简单,使用方便。 2.文件操作: (1)指令驱动模式:即在MATLABM命令行窗口下用户输入单行指令时,MATLAB立即处理这条指令,并显示结果,这就是MATLAB命令行方式。缺点:命令行方式程序可读性差,而且不能存储,当处理复杂问题和大量数据时很不方便。(2)M文件模式:将MATLAB语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件 模式。 (3)M语言文件可以分为主程序文件和函数文件, 一个M语言文件就是由若干MATLAB的命令组合在一起构成的。M语言文件是标的纯文本格式的文件,其文件扩展名为.m。MATLAB提供了meditor编辑器编辑M文件。 (四)数据分析与多项式计算 MATLAB数据分析与多项式计算主要包括:数据统计处理、数据插值、曲线拟合、离散傅立叶变换、多项式计算等等。 在数据处理中我们要了解最大值和最小值,如果在程序中求一个矩阵的极值问题,max或min(x,[],1)代表的是每一列中最大值或最小值组合写成一个行矩阵,max或min(x,[],2)表示的是每一行中的最大值和最小值写成一个列矩阵。在计算多项式时,了解root函数以及熟练地应用,将多项式每一项前系数都写入root中,便可以通过root函数求出根。 (五)解线性方程与函数极值 线性方程:解线性方程包括:线性方程组求解、非线性方程数值求解、常微分方程初值问题的数值解法、函数极值等。 线性方程求解:(a)直接法: 利用左除运算符的直接解法对于线性方程组Ax=b,可以利用左除运算符“”求解:x=Ab。(b)利用矩阵的分解求解线性方程组: 矩阵分解是指根据一定的原理用某种算法将一个矩阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、QR分解、Cholesky分解,以及Schur分解、Hessenberg分解、奇异分解等。 (c)非线性方程组的求解: 对于非线性方程组F(X)=0,用fsolve函数求其数值解。fsolve函数的调用格式为: X=fsolve('fun',X0,option)其中X为返回的解,fun是用于定义需求解的非线性方程组的函数文件名,X0是求根过程的初值,option为最优化工具箱的选项设定。最优化工具箱提供了20多个选项,用户可以使用optimset命令将它们显示出来。如果想改变其中某个选项,则可以调用optimset()函数来完成。例如,Display选项决定函数调用时中间结果的显示方式,其中‘off’为不显示,‘iter’表示每步都显示,‘final’只显示最终结果。optimset(‘Display’,‘off’)将设定Display选项为‘off’。 (六)符号计算 在数值计算中,计算机处理的对象和得到的结果都是数值,而在符号计算中,计算机处理的数据和得到的结果都是符号。符号计算中首先要对符号变量进行定义。Sym只能为单个符号变量定义,而Syms可以为多个进行定义。定义之后,可以进行符号计算,主要用于研究符号微积分运算。求解符号微分,可以直接采用diff()函数进行求解;符号的积分,可以使用int()函数进行计算,最后调用M文件得到正确结果。 (七)数值积分与微分 MATLAB数值积分与微分主要包括:数值积分与数值微分。求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)?法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,?,n,其中x1=a,xn+1=b。这样求定积分问题就分解为求和问题。 二重定积分的数值求解:使用MATLAB提供的dblquad函数就可以直接求出二重定积分的数值解。该函数的调用格式为: I=dblquad(f,a,b,c,d,tol,trace)该函数求f(x,y)在[a,b]×[c,d]区域上的二重定积分。参数tol,trace的用法与函数quad完全相同。 (八)微分方程符号解法和数值解法 solve函数的使用Solve(‘p*sin(x)=r’)ans=asin(r/p),dsolve函数的一般调用形式是:dsolve(‘s’,’s1’; (九)绘图操作;二维图形可以采用ezplot进行绘图,一般形式是;ezplot(f,[a,b])表示的是回执函数y;三维图形或者多维图形一般采用ezplot3进行绘; (十)图形用户界面设计图形用户和界面设计中我们要; (十一)统计方法及其应用;概率分布及其有关函数中,常用的是pdf,cdf,; (十二)图形句柄; 的一般调用形式是:dsolve(‘s’,’s1’,’s2’...)(s为方程,s1,s2,s3,为初始条件,x为自变量)。Ode45表示的是常微分方程的数值求解。通过此函数可以很方便快速的求出有关微分方程求解的问题。 (九)绘图操作 二维图形可以采用ezplot进行绘图,一般形式是: ezplot(f,[a,b])表示的是回执函数y=f(x)在区间(a,b)上的图像。 三维图形或者多维图形一般采用ezplot3进行绘图,一般形式是: ezplot3(x,y,z)表示的是空间曲线x=x(t),y=y(t),z=z(t),0 (十)图形用户界面设计 图形用户和界面设计中我们要遵循四个原则:简单性,一致性,习常性以及其他考虑因素。如果建立主菜单条,菜单项句柄=uimenu(图形黄口句柄,属性名1,属性值1,...);子菜单句柄=uimenu(父菜单句柄,属性名1,属性值1,...)图形窗口的创建一般是 窗口句柄=figure(属性名1,属性值1,属性名2,属性值2,...),对于图形用户界面设计工具-Guide Control Panel要有简单的了解。 (十一)统计方法及其应用 概率分布及其有关函数中,常用的是pdf,cdf,stat(概率密度,分布函数,均值与方差),以及样本均值mean和中值median,在描述性统计就是搜集.整理.加工和分析统计数据使之系统化。在描述样本中心值的偏离程度中,有var(方差),cov(协方差)等研究参数,同时还可以对参数进行估计,方差分析有anova1(单因素试验方差)和anova2(双因素试验),通过统计数据,最终进行统计图的绘制。 (十二)图形句柄 图形句柄主要包括:图形对象及其句柄、图形对象属性、图 形对象的创建。我们学习了很多MATLAB高层绘图函数,这些函数都是将不同的曲线或曲面绘制在图形窗口中,而图形窗口也就是由不同图形对象(如坐标轴、曲线、曲面或文字等)组成的图形界面。MATLAB给每个图形对象分配一个标志符,称为句柄。以后可以通过该句柄对该图形对象的属性进行设置,也可以获取有关属性,从而能够更加自主地绘制各种图形。 直接对图形句柄进行操作的绘图方法称为低层绘图操作。相对于高层绘图,低层绘图的操作控制和表现图形的能力更强,事实上,MATLAB的高层绘图函数都是利用低层绘图函数建立起来的。有时单靠高层绘图不能满足要求,如,绘制特殊图形、建立图形用户界面等,这时就需要图形句柄操作。 三、实习心得 这次实习我收获颇多,领会了很多东西,这次实习对于我们数学专业的学生意义重大。可以说,这次实习完全做到了学以致用,正如陶行知先生所言:“知行合一”。这对于我们以后的学习和将来走上工作岗位,有一定的借鉴意义。在这个过程中心得如下: 1、“实践是检验真理的唯一标准”,在学习Matlab的过程中,这一点非常的重要,在学习的过程中我们不仅要学会老师讲授的知识,而且要多操作,多实践,在操作和实践的过程中将知识融会贯通,做到“信手拈来”的境界。 2、要有团队精神,这一似乎是我们这个时代许多重大发现,科技进步一个非常重要的因素。而在学习Matlab的过程中也体现了这一点,在与同学和老师的交流过程中,无形之中就学到了很多的知识。 3、数学与计算机是一对同胞兄弟。在学习Matlab的过程中深有 体会,两者相辅相成,Matlab的诸多功能对我们学习数学的过程中是非常有帮助的,Matlab简单易学,代码短小,有强大的图形绘制和处理功能,这些功能对于我们学习数学起到了事半功倍的作用。 4、“学无止境”,我们应该树立一种终身学习的信念,在这个信息时代,知识在不断的更新,更新的源泉来自创新,而创新就要有独立思考的能力,Matlab的功能已经非常强大了,但仍需完善,作为数学人我们与责任和义务去完善它,在未来的前进过程中不断的做出创新,我想,这也是我们高等教育所提倡的,所以说,我们数学人任重而道远,需明白“学无止境”的道理。 MATLAB实习报告 MATLAB课程设计报告 摘要 MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。 MATLAB的基本数据单位是矩阵。MATLAB几乎包括了矩阵的所有运算,从简单的矩阵生成及简单的运算到大量的矩阵运算与转换。MATLAB应用于矩阵有很大的必要性和很重要的现实意义。 MATLAB具有强大的二维、三维绘图功能,提供了许多绘图语句。利用MATLAB我们可以画出我们所需要的几乎所有图形。关键词:矩阵;解方程组;画图 MATLAB实习报告 目录一、二、三、四、五、背景…………………………………………………………………………4 第一部分题目………………………………………………………………17 第二部分选做题…………………………………………………………....19 心得体会…………………………………………………………………....19 参考文献……………………………………………………………………19 MATLAB实习报告 一、背景 MATLAB软件功能简介 MATLAB的名称源自Matrix Laboratory,1984年由美国Mathworks公司推向市场。它是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。 MATLAB软件包括五大通用功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。该软件有三大特点,一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks公司已推出30多个应用工具箱。MATLAB在线性代数、矩阵分析、数值及优化、数值统计和随机信号分析、电路与系统、系统动力学、次那好和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。 MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能,能基本满足信号与系统课程的需求。例如解微分方程、傅里叶正反变换、拉普拉斯正反变换和z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲击响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析和零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入地理解理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础。 MATLAB实习报告 二、第一部分 1.求解常微分方程x’’=-x’+x+1,x’(0)=1,x(0)=0(使用函数dsolve)dsolve('D2x=-Dx+x+1','Dx(0)=1','x(0)=0')ans =(5^(1/2)*exp(t*(5^(1/2)/23))/(10*exp(t*(5^(1/2)/2 + 1/2)))– 1 2.请用梯形法、辛普森法分别计算积分值x2x1dx(trapz、quad) 0f=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.3369 3.计算二重积分(x2y2xy2xy1)dxdy(使用函数dblquad) 00dblquad('x.^2+y.^2+x*y+2*x+y+1', 0, 1, 0, 2)ans = 10.3333 4.矩阵M=[1,2,6;4,2,7;8,9,3],求M的LU分解,QR分解,对角阵,特征值分解。 (使用函数lu、qr、shol、eig)M=[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.3500 7.5500 qr(M)ans = 9.0000 9.1111 6.4444 -0.5000 2.4470 -2.3360 -1.0000 -0.4719 6.8566 [D,X]=eig(M)D = -0.4111 -0.7719 -0.4992 -0.5484 0.6237 -0.3914 121MATLAB实习报告 -0.7282 0.1229 0.7730 X = 14.2944 0 0 0 -1.5712 0 0 0 -6.7232 5.a=3,A=4,b=a2,B=b2-1,c=a+A-2B,C=a+B+2c,求C。(使用函数solve)>> syms a b c A B C eq1='a=3';eq2='A=4';eq3='b=a^2';eq4='B=b^2-1';eq5='c=a+A-2*B';eq6='C=a+B+2*c';x=solve(eq1,eq2,eq3,eq4,eq5,eq6);>> x.C ans =-223 6.用两种方法求解Ax=b的解。b为四阶向量,(A为四阶随机矩阵,自己创建)。方法一:>> A=rand(4)A = 0.9355 0.0579 0.1389 0.2722 0.9169 0.3529 0.2028 0.1988 0.4103 0.8132 0.1987 0.0153 0.8936 0.0099 0.6038 0.7468 >> B=[1;2;3;4];x=inv(A)*B x =-0.2035 2.3800 5.7042 0.9564 方法二: >> A(:,5)=B;rref(A)ans = 1.0000 0 0 0 -0.2035 0 1.0000 0 0 2.3800 0 0 1.0000 0 5.7042 0 0 0 1.0000 0.9564 MATLAB实习报告 13237.f(x)x(x0.8)/(x1.25)5(x),用两种方法求函数的根,并求其 x极值与零点。 方法1: >> solve('x^3+(x-4/5)^2/(x+5/4)^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 方法2: >> fzero('x.^3+(x-0.8).^2/(x+1.25).^3-5*(x+1/x)',3)ans =2.4156 求极值: >> 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 >> 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 = 205.8164 >> x=t(2);z2=subs(z)z2 =-53.5382 所以函数f(x)存在一个极大值点x1=-2.4039,极大值为-6.4732;一个极小值点x2=-2.4039,极小值为16.2832 x2x6,x0且x4 28、f(x)的定义如下:f(x)x5x6,0x10,x2且x3,写一个matlab函 x2x1,其它数func1实现该函数。MATLAB实习报告 function func1(x)if x<0&&x==-4 y=x^2+x-6;elseif x>=0&x<10&x~=2&x~=3 y=x^2-5*x+6;else y=x.^2-x-1;end fprintf('%dn',y); 9、写一个MATLAB小程序,求出最小的 n 值,使得 n!> realmax。function f=realmax10()s=1;n=1;while(1)n=n+1;s=s*n;if s>realmax break;end end fprintf(' %dn',n) 10、写一个 MATLAB 函式 pifun.m 来计算下列级数: f(n)= 4*(11/7 + 1/91.5470i 1.4134 0.2539 2xk11yk14.xk13:对于迭代模型yk10.3xk 取初值x0 = 0, y0 = 0, 进行3000次迭代,对于k>1000, 在(xk, yk)处亮一点(注意不要连线)可得所谓Henon引力线图。 x(1)=0;y(1)=0; for i=1:1:3000;%开始先从一到3000 x(i+1)=1+y(i)-1.4*x(i)^2;y(i+1)=0.3*x(i);hold on plot(x(i),y(i),'*b')end 14:请设计一个程序,程序完成下列功能:(1)让用户依次输入两个字符串s1和s2; (2)比较两个字符串的长度并显示比较结果; (3)判断s1与s2有没有长度在3个字符以上的相同子串,显示判断结果。 MATLAB实习报告 function f=title24()s1=input('please input s1:请以‘要输入的字符串’ 格式输入');s2=input('please input s2:同上');m=length(s1);n=length(s2);t=m;kk=0;if m>n t=n;disp('s1长度>s2长度');elseif m for r=1:kk if strcmp(s1(j:j+i-1),b{r})==1 l=1;break;end end if l==0 kk=kk+1;b{kk}=s1(j:j+i-1);end end end end end if kk>0 for i=1:kk fprintf('第%d个相同字符串:',i);disp(b{i});end MATLAB实习报告 else disp('没有长度在3字符个以上相同的字符串');end 15:编写程序模拟杨氏双缝干涉 两相干光源到接收屏上P点距离r1=(D2+(y-a/2)2)1/2, r2=(D2+(y+a/2)2)1/2,相位差 Φ=2π(r2-r1)/λ,光强I=4I0cos2(Φ/2)编写程序 function yangshi()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+D^2);r2=sqrt((ys(i)+a/2).^2+D^2);phi=2*pi*(r2-r1)./lam;B(i,:)=sum(4*cos(phi/2).^2);end N=255;Br=(B/4.0)*N;subplot(1,2,1);image(xs,ys,Br);colormap(gray(N));subplot(1,2,2);plot(B,ys); 16:编写程序模拟光栅衍射 公式:I=I0(sinα/α)2(sin(λβ)/sinβ)2 α=(πa/λ)sinΦ β=(πd/λ)sinΦ function guangpu()lam=500e-9;N=2; MATLAB实习报告 a=2e-4;D=5;d=5*a;ym=2*lam*D/a;xs=ym;n=1001;ys=linspace(-ym,ym,n);for i=1:n sinphi=ys(i)/D;alpha=pi*a*sinphi/lam;beta=pi*d*sinphi/lam;B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;B1=B/max(B);end NC=255;Br=(B/max(B))*NC;subplot(1,2,1)image(xs,ys,Br);colormap(gray(NC));subplot(1,2,2)plot(B1,ys); 17:绘制三元函数wx2y2z2的可视化图形 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 equal MATLAB实习报告 18:绘制 zf(x,y)(1x)12ln(xy)的图象 [x,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', view(3)camlight;lighting 19: 试完成matlab 动画 霓虹灯效果动画:一颗花心: clear;clc;close all c=5;t=linspace(-c,c);[x,y]=meshgrid(t);z=17*x.^2-16*abs(x).*y+17*y.^2-225;pcolor(x,y,z);shading interp pause(2);spinmap(10));'none'MATLAB实习报告 20:试完成matlab gui程序 function varargout = ex0(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @ex0_OpeningFcn,...'gui_OutputFcn', @ex0_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end function ex0_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;global i a i=0;a=floor(100*rand);guidata(hObject, handles);function varargout = ex0_OutputFcn(hObject, eventdata, handles)varargout{1} = handles.output; MATLAB实习报告 function x1_Callback(hObject, eventdata, handles)function x1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end function x2_Callback(hObject, eventdata, handles)function x2_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end function p1_Callback(hObject, eventdata, handles)global i a x1= eval(get(handles.x1,'String'));if x1>a x2='high';set(handles.x2,'string',num2str(x2));elseif x1 x2='YOU ARE WIN';set(handles.x2,'string',num2str(x2));a=floor(100*rand);i=0;end i=i+1;if i==10 x2='YOU ARE LOSE';set(handles.x2,'string',num2str(x2));a=floor(100*rand);i=0;end function p2_Callback(hObject, eventdata, handles)close = questdlg('ÄúÈ·¶¨Òª¹Ø±ÕÂð?','È·¶¨¹Ø±Õ','ÊÇ','·ñ','ÊÇ');switch close MATLAB实习报告 case '·ñ' case 'ÊÇ' delete(handles.figure1)end 三、第二部分 1:某公司投资2000万元建成一条生产线。投产后,在时刻t 的追加成本和追加收益分别为G(t)= 5t2t2/3(百万元/年), H(t)=180t2/3(百万元/年)。试确定该生产线在合适何时停产可获最大利润?最大利润是多少? 要求:写出数学模型、M函数(如果需要的话)、运算命令和计算结果。解:利润函数R(t)=(H(t)G(t))dt20(百万元)0f(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)-20 t = 1.0e+002 * 1.9536-1.0860i 1.9536 + 1.0860i 1.0727 r =8.6397e+003 即在第108年停产可获最大利润,最大利润为8639.7百万元。:一幢楼房的后面是一个很大的花园。在花园中紧靠着楼房建有一个温室,温室高10英尺,延伸进花园7尺。清洁工要打扫温室上方的楼房的窗户。他只有借助于梯子,一头放在花园中,一头靠在楼房的墙上,攀援上去进行工作。他只有一架20米长的梯子,你认为他能否成功?能满足要求的梯子的最小长度是多少? 步骤: 1.先进行问题分析,明确问题; 2.建立模型,并运用Matlab函数求解; 3.对结果进行分析说明; 4.设计程序画出图形,对问题进行直观的分析和了解(主要用画线函数plot,line) 。若梯子能恰好放置,则梯子的长度f与倾角x关系如下: 7abf(x) (其中a=m, b=3.048m,0 3cosxsinx2接下来用Matlab求该函数的最小值: L=inline('3.048/sin(x)+2.333/cos(x)','x');x=fminbnd(L,0.01,pi/2-0.01)tMATLAB实习报告 l=subs(L)ezplot('3.048/sin(x)+2.333/cos(x)',[0,pi/2]) 由以上可知梯子的最小长度为7.59m。所以他能成功。 3.某大学青年教师从31岁开始建立自己的养老基金,他把已有的积蓄10000元也一次性地存入,已知月利率为0.001(以复利计),每月存入700元,试问当他60岁退休时,他的退休基金有多少?又若,他退休后每月要从银行提取1000元,试问多少年后他的基金将用完? function f=title22()s=10000;t=0;for i=1:360 s=s*(1+0.001)+700;end fprintf('60岁退休时退休基金,%d.n',s);while s>0 s=(s-1000)*(1+0.001);t=t+1;end t=ceil(t/12);fprintf('退休后每月要从银行提取1000元,多少年用完,%d.n',t);>> zs22 60岁退休时退休基金有317480.843330元.退休后每月要从银行提取1000元,32年后基金将用完.4.经调查发现,电饭锅销售速度与当时的销量成正比。现在我们来建立一个数学模型以预测销量。 close;fplot(‘exp(0.9*x)’, [0,10]);%模型1解析解 hold on;[t,x]=ode45(inline(‘0.9*x*(1-x/1000)’,‘t’,‘x’),[0 10],1);%模型2数值解 plot(t,x);axis([0 10 0 1500]); MATLAB实习报告 hold off; 四、心得体会 五、参考文献: 1.姚东.MATLAB及在电子信息课程中的应用[M].第二版.北京:北京电子工业出版社,2000 2.张智星.MATLAB程序设计与应用.北京:清华大学出版社,2002 3.肖伟、刘忠.MATLAB程序设计与应用[M].北京:清华大学出版社 2005 实验一 仿真条件:电机空载下,输入为阶跃信号,仿真时间为0.4S。 阶跃信号,仿真时间为0.4S。 图二 磁链图 实验结果:开始时有摩擦转矩,在短时间内能够快速形成圆形转矩。 图1 速度响应曲线 实际结果:时间与电机负载转矩为0时的电机响应速度曲线,速度响应误差为0。 仿真条件:电机空载下,输入为 仿真条件:d轴电流设置为0,输入为阶跃信号,电机空载运行响应时间为0.4秒。 图三 速度电流响应曲线 实际结果:在0.02秒时间达到目标转速,iq达到稳定。 实验三 实验目的:验证比列系数对稳态跟踪误差的影响。 仿真条件:修改KVFF为0,KAFF为0,负载为0,KPP为169,KPD为200.8,kpi为0 图四 速度 EP的响应曲线 试验目的:验证比例系数对稳态跟踪误差的关系ESS=V/K稳态跟踪误差越来越小。 仿真条件:修改KVFF为0,KAFF为0,负载为0,KPP为500,KPD为200.8,kpi为0。 图五 速度 EP的响应曲线 试验目的:验证比例系数对稳态跟踪误差的关系。 仿真条件:修改KVFF为0,KAFF为0,负载为0,KPP为5000,KPD为200.8,kpi为0。 图六 速度 EP的响应曲线 实验结果:Ep=V/K,随着K的增加,V不变,EP渐渐减小,前馈=1,完全补偿误差,稳定位置跟踪误差=0.试验目的:修改前馈系数观察稳态跟踪误差关系。 仿真条件:使KVFF为0.5电机负载为0使电机的摩擦系数为0。 图七 速度 EP的响应曲线 试验结论:修改前馈系数观察稳态跟踪误差关系。仿真条件:使KVFF为1电机负载为0使电机的摩擦系数为0。 图八 速度 EP的响应曲线 实验结果:由稳态跟踪误差=速度/比列系数(ess=v/k)得,比列系数越大,速度不变,稳态跟踪误差越大。 实验二 条件:电流给定信号(iq=500HZF方波),Id=0。电机的摩擦系数为无穷大,看Iq的响应波形。 实验结果:电机的摩擦系数为1000时,TL会反向转动。 条件:电流环达到速度环输出,还原参数速度还比列信号改成正弦波,继续增加频率。 正弦波频率为100HZ 正弦波频率为200HZ 正弦波频率为500HZ 正弦波频率为700HZ 实验四 实验条件:建立一个直流电机单速度闭环调节器。 南京工程学院 自动化学院 2013/2014学年第一学期 实习报告 MATLAB与控制系统仿真实习 实习报告成绩:评阅老师签字: 2014年 1月 实习学生班级自动化 101实习学生姓名实习学生学号实习地 点基础实验中心 B302实习指导老师陆锋陈桂实习时 间19-20周第二篇:matlab实习报告
第三篇:MATLAB实习报告
第四篇:Matlab实习报告
第五篇:MATLAB实习报告封面