MATLAB程序设计与应用.docx
- 文档编号:5150875
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:24
- 大小:1.31MB
MATLAB程序设计与应用.docx
《MATLAB程序设计与应用.docx》由会员分享,可在线阅读,更多相关《MATLAB程序设计与应用.docx(24页珍藏版)》请在冰豆网上搜索。
MATLAB程序设计与应用
MATLAB程序设计与应用心得
MATLAB是本学期新学的一门用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
通过MATLAB环境,可以将一些题目程序化,立体化,可以将题目要求图形化、曲线化。
本学期通过学习基本概述、绘图功能、变量与数据结构、程序设计、数值运算与其他应用五个章节的内容了解了MATLAB程序设计的优势特点、编程环境、简单易用的特点、强处理能力、图形处理、丰富的工具箱使用、程序接口等内容,并通过一些题目的练习,可以独立的设计程序并实现其应用。
MATLAB拥有极为广阔的应用空间,能够将极为复杂的数学问题简单化,如通过图像显示数学结果,以及通过一系列工具将图形清晰的表现出来,这给了一些复杂的问题一个方便快捷的解决通道。
通过学习二维平面绘图、三维立体绘图、特殊图形绘制、图像显示与读写、动画制作、GUI设计等内容详细了解了MATLAB的绘图功能;通过学习矩阵的处理与运算、字符与字符串的应用多维数组、单元数组、结构数组、稀疏矩阵等数组与矩阵的使用了解了变量与数据结构;通过学习MATLAB的运算符、M文件、程序流程控制、程序调试、文件输出及输入、程序计时、程序代码与内存的优化、应用程序接口等内容涉及了MATLAB的程序设计内容;通过学习线性代数、多项式的处理与分析、一般数学函数的处理与分析、内插方法、曲线拟合与回归分析、常微分方程、GUI应用举例、数据与函数的可视化了解了在MATLAB环境中数值运算与其它应用,将数学运算与程序设计联系起来,实现数学问题程序化,使复杂问题简单化。
下面是MATLAB的一些特点介绍:
优势特点
1)高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2)具有完备的图形处理功能,实现计算结果和编程的可视化;
3)友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。
编程环境
MATLAB由一系列工具组成。
这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。
包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。
而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。
简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。
简单易用
Matlab是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。
用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
强处理能力
MATLAB是一个包含大量计算算法的集合。
其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。
在通常情况下,可以用它来代替底层编程语言,如C和C++。
在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。
MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。
函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。
图形处理
MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。
高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。
同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。
另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。
丰富的工具箱
MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。
一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。
领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。
程序接口
新版本的MATLAB可以利用MATLAB编译器和C/C++数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C++代码。
允许用户编写可以和MATLAB进行交互的C或C++语言程序。
另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。
MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。
工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,例如,信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。
MATLAB实验程序及其结果
1、题目要求:
用MATLAB画一个图形,调整视点,着色方式,调色板,灯光和表面材质。
尽量与图形接近。
(提示:
view,shading,colormap,light,material)
题目分析:
本题目通过列出想,x,y,z的函数表达式,使用ezsurf画出图形并通过view调整视角,以便得到与题目所示图形相同视角,通过shading设置图像颜色,通过colormap设置调色板颜色种类,通过light设置光照,通过改变material数值来得到题目要求的材料。
程序设计:
x='cos(s)*cos(t)';
y='cos(s)*sin(t)';
z='sin(s)';
ezsurf(x,y,z,[0,pi/2,0,3*pi/2]);
view(19,40);
shadinginterp;
colormap(spring);
light('position',[0,0,-10],'style','local');
light('position',[-1,-0.5,2],'style','infinite');
material([1,1,1,9,0.3]);
结果显示
2、题目要求计算
的全部方根,并用图形表示,要求得到以下图形。
(提示:
roots,axis)
题目分析
由x^3+8=0得到向量[1,0,0,8],通过roots求解方程式的根,用abs求根的绝对值,必须定义t的区间及间距,通过plot画图,其中axis将坐标轴区域调整为方格形
程序设计
p=[1,0,0,8];
R=roots(p);
MR=abs(R
(1));
t=0:
pi/20:
2*pi;
x=MR*sin(t);
y=MR*cos(t);
plot(x,y,'b:
'),gridon
holdon
plot(R
(2),'.','MarkerSize',30,'Color','r')
axis([-3,3,-3,3]),axissquare
plot(R([1,3]),'o','MarkerSize',15,'Color','b');
结果显示
3、题目要求编写MATLAB程序,画出函数
的图形
(1)请问函数值z中有多少个“非数”数据?
(2)观察所绘的图形中的裂缝,分析产生裂缝的原因。
(3)请写出绘制相应的“无裂缝”图形的全部指令。
(提示:
isnan,sum,eps)
题目分析
首先通过meshgrid创建一个间距为
/15的网格区域,在网格中显示Z函数的图形,利用isnan判断得到函数值Z中是否有“非数”矩阵,“非数”返回1,否则返回0,并用sum计算“非数”个数。
程序设计
[X,Y]=meshgrid(-3*pi:
pi/15:
3*pi);
Z=sin(X).*sin(Y)./X./Y;
mesh(X,Y,Z);
M=isnan(Z);
N=sum(sum(M,2));
程序
(2)
X=-3*pi:
pi/15:
3*pi;
Y=-3*pi:
pi/15:
3*pi;
Xa=X+(X==0)*eps;
Ya=Y+(Y==0)*eps;
[X,Y]=meshgrid(Xa,Ya);
Z=sin(X).*sin(Y)./(X)./(Y);
mesh(X,Y,Z);
4、题目要求写一段程序计算
(1)使用一个for/end循环,但不能使用数组运算符和sum。
(2)使用数组运算符和sum,但不能使用任何for/end循环,S的值是多少?
程序设计
(1)
s=0;
forn=1:
1:
10
s=s+n/(n+1);
end
s
结果显示
(2)
s=1/2+2/3+3/4+4/5+5/6+6/7+7/8+8/9+9/10+10/11
sum=s
5、题目要求运用数组算术运算符去掉下面程序里的for/end循环:
x=11:
15
fork=1:
length(x)
z(k)=x(k)^2+2.3*x(k)^0.5;
End
程序设计
x=11:
15;
z=x.^2+2.3*x.^0.5
结果显示
6、不使用数组算术运算符,重写下面的程序代码:
x=[214]
z=1./(1+x.^2)
题目分析
使用switch、case语句,以得到x=1,2,4时z的值
程序设计
x=1;
whilex<=4
switchx
case1
z
(2)=1/(1+x^2);
case2
z
(1)=1/(1+x^2);
case4
z(3)=1/(1+x^2);
end
x=x+1;
end
z
7、题目要求编写一个函数M文件fun_es(x),计算函数
的值,其中参数可以为标量,也可以为向量。
在MATLAB的命令窗口中检验分别取x=3和x=[345]调用此函数,得到什么结果。
题目分析
题目要求使用函数文件,利用function定义函数
程序设计
functiony=es(x)
y=0.5*exp(x/3)-x.^2.*sin(x)
8、题目要求将两个设计参数x和y定为0 产品的成本为: 用mesh命令绘图,近似地找出使成本最低的最优参数,并写出最低成本值。 题目分析 题目应用meshgrid创建网格,并确定其间隔,通过mesh命令绘制图形,并min得到最小值。 程序设计 [x,y]=meshgrid(0: 0.01: 5,0: 0.01: 5); f=x.^2-8*x+y.^2-6*y-0.1*x.*y+50; [m,n]=find(f==min(min(f))); x(m,n),y(m,n) 结果显示 9、题目要求求函数的极值问题,设一个函数 ,求这个函数在区间[-1010]内所有极小值点和对应的函数值。 思考: 极大值如何求? 程序设计 f=@(x)sin(x)*sin(x)*exp(-0.1*x)-0.5*sin(x)*(x+0.1); z=fminbnd(f,-10,10) 结果显示 10、题目要求多项式拟合,设测量数据点为 x0=0: 0.1: 1; y0=[-.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; 分别取3,4,7次多项式对得到的测量数据进行拟合,并画出数据点和拟合多项式的图形。 题目分析 创建数组x0、y0,并用polyfit将(x0,y0)拟合成n次多项式,定义拟合曲线、原始数据,并通过plot做出其图形,通过改变n的值,得到不同的拟合曲线与原始数据的图形。 程序设计 x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=3; p=polyfit(x0,y0,n) xx=0: 0.1: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20),gridon legend('拟合曲线','原始数据','Location','NorthEast'); xlabel('x'); x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=4; p=polyfit(x0,y0,n) xx=0: 0.1: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20),gridon legend('拟合曲线','原始数据’,'Location','NorthEast');xlabel('x'); x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=7; p=polyfit(x0,y0,n) xx=0: 0.1: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20),gridon legend('拟合曲线','原始数据','Location','NorthEast');xlabel('x'); 11、题目要求最小二乘法,设测量数据点为 x0=(0: 0.1: 1)'; y0=[-.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]'; 用最小二乘法,分别取3,4,7次多项式对得到的测量数据进行拟合,并画出数据点和拟合多项式的图形。 将得到的结果与11、比较。 题目分析 题目与上题类似,通过不同方法得到不同的拟合曲线与原始据点,得到一系列点集,将其连接,可得到上题曲线。 程序设计 x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=3; n=1; p=polyfit(x0,y0,n) xx=0: 0.1: 1; xx=0: 0.001: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20); legend('拟合曲线','原始数据','Location','NorthEast');xlabel('x'); x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=4; n=1; p=polyfit(x0,y0,n) xx=0: 0.1: 1; xx=0: 0.001: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20); legend('拟合曲线','原始数据','Location','NorthEast');xlabel('x'); x0=0: 0.1: 1; y0=[-0.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22]; n=7; n=1; p=polyfit(x0,y0,n) xx=0: 0.1: 1; xx=0: 0.001: 1; yy=polyval(p,xx); plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20); legend('拟合曲线','原始数据','Location','NorthEast');xlabel('x'); 12题目要求双偶阶幻方阵双偶数是能被4整除的整数互补: 如果两个数字的和,等于幻方最大数和最小数的和,即n*n+1,称为互补。 4阶幻方的填法: a.将数字从左到右、从上到下按顺序填写; b.将对角线上的数字,换成与它互补的数字。 即得到双偶阶幻方阵。 n=4k阶幻方的填法: a.先把数字按顺序填写。 b.按4*4把它划分成k*k个方阵。 因为n是4的倍数,一定能用4*4的小方阵分割。 c.与制作4阶幻方的方法一样,对角线上的数字换成互补的数字,就构成4k幻方阵。 根据以上给出的原理,编写一个程序实现下面功能。 输入一个整数n,如果n能被4整除,则得到一个n阶幻方阵,否则,提示重新输入。 对得到的n阶幻方阵进行验证,并给出验证的结果。 (提示: 尽量使用MATLAB中的函数,不要使用循环语句) 程序设计 function[A,n]=magicmatrix(n) while1 ifmod(n,4)==0 break else n=input('请输入一个能被4整除的正整数! n=') end end G=logical(eye(4,4)+rot90(eye(4,4))); m=n/4; K=repmat(G,m,m); N=n^2; A=reshape(1: N,n,n); A(K)=N-A(K)+1; magicmatrix(3) 结果显示 13、题目要求属性控制下所绘曲线,画出如下图形,其中各条曲线的表达式分别 t=(0: pi/100: pi)'; y1=sin(t)*[1,-1]; y2=sin(t).*sin(9*t); t3=pi*(0: 9)/9; y3=sin(t3).*sin(9*t3); 程序设计 t=(0: pi/100: pi)'; y1=sin(t)*[1,-1]; y2=sin(t).*sin(9*t); t3=pi*(0: 9)/9; y3=sin(t3).*sin(9*t3); plot(t,y1,'r: ',t,y2,'-bo') holdon plot(t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0]) axis([0,pi,-1,1]) holdoff plot(t,y1,'r: ',t,y2,'-bo',t3,y3,'s','MarkerSize',10,'MarkerEdgeColor',[0,1,0],'MarkerFaceColor',[1,0.8,0]) 结果显示 14、题目要求方程组 有多少个实数解,求出距离原点最近的那个解的近似值。 (提示ezplot;ginput) 题目分析 首先做出两个方程的图像,并通过两图像交点得出方程组的解。 程序设计 ezplot('y/(1+x^2+y^2)-0.1',[-2*pi,2*pi,-pi/2,7/2*pi]); holdon ezplot('sin(x+cos(y))',[-2*pi,2*pi,-pi/2,7/2*pi]) title('CRROS-POINTSOF''y/(1+x^2+y^2)-0.1''AND''sin(x+cos(y))''') holdoff gridon 结果显示 [x0,y0]=ginput(4); x00=mean(x0); y00=mean(y0); y00/(1+x00^2+y00^2) 15、题目要求编写使红色小球沿三叶线 运动的程序。 提示: 用polar绘制三叶线;用plot创建红点的图柄,擦除模式用xor;用set操作红点坐标,使用drawnow构成动画。 程序设计 clear,clf theta=0: pi/500: 2*pi; rho=sin(3*theta); x=rho.*cos(theta); y=rho.*sin(theta); shg,axisoffequal line('xdata',x,'ydata',y,'Color',[0.7,0.7,0.7],'LineWidth',2.5); h=line('xdata',x (1),'ydata',y (1),'Color',[1,0,0],'Marker','.','MarkerSize',40,'EraseMode','xor'); N=length(x); k=2; while1 set(h,'xdata',x(k),'ydata',y(k)) pause(0.01) k=k+1; ifk>N break end end 结果显示 16、题目要求做一个花瓶,如图示。 (提示: 做一个旋转体表面,调入一幅图像对该表面进行彩绘,即用图像的色图索引作为表面体的色图索引,读取名为flowers.tif的图象文件作为花瓶的表面图案,cylinder,imread,rgb2ind,surface,colormap) 题目分析 题目要求设计一个花瓶,通过t,r的数据要求,得出花瓶的曲线方程,通过cylinder得出柱形图像,通过imread设计表面图像的文件,通过texture设计花瓶纹理,利用EdgeColor定义边缘颜色 程序设计 clear; clf,t=(0: 20)/20;r=2.5-cos(2*pi*t); t=0: pi/20: 2*pi; [x,y,z]=cylinder(2+sin(t),30); [C,CMAP]=imread('flowers.tif'); CC=double(C)+1; surface(x,y,z,'Cdata',flipud(CC),'FaceColor','texturemap','EdgeColor','none','CDataMapping','direct','Ambient',0.6,'diffuse',0.8,'speculars'
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程序设计 应用