《第2章语言程序设计基础PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第2章语言程序设计基础PPT讲稿.ppt(84页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第2 2章语言程序设计章语言程序设计章语言程序设计章语言程序设计基础基础基础基础第1页,共84页,编辑于2022年,星期一内容提要内容提要MATLAB语言的基本使用环境语言的基本使用环境MATLAB语言的数据结构语言的数据结构MATLAB下矩阵的运算下矩阵的运算流程控制结构流程控制结构MATLAB函数编写与技巧函数编写与技巧MATLAB语言下图形的绘制与技巧语言下图形的绘制与技巧三维图形的绘制方法三维图形的绘制方法MATLAB图形用户界面设计技术图形用户界面设计技术提高提高MATLAB程序执行效率的技巧程序执行效率的技巧第2页,共84页,编辑于2022年,星期一2.1 MATLAB语言的
2、基本使用环境语言的基本使用环境MathWorks公司现在每年三月和九月各发布公司现在每年三月和九月各发布一个新版本,分别命名为一个新版本,分别命名为a和和b版版MATLAB语言环境操作界面语言环境操作界面u命令窗口、当前目录窗口、命令历史记录窗口、命令窗口、当前目录窗口、命令历史记录窗口、工作空间窗口;可以只使用命令窗口工作空间窗口;可以只使用命令窗口MATLAB的联机帮助与电子版手册的联机帮助与电子版手册uHelp|MATLAB Helpuhttp:/ 全套全套PDF文件文件第3页,共84页,编辑于2022年,星期一2.2 MATLAB语言的数据结构语言的数据结构强大方便的数值运算功能是强大
3、方便的数值运算功能是MATLAB语言的最显语言的最显著特色之一。著特色之一。MATLAB下最常用数值量为双精度浮点数下最常用数值量为双精度浮点数u占占8个字节个字节(64位位),遵从,遵从IEEE记数法记数法u有有11个指数位、个指数位、52位尾数及一个符号位位尾数及一个符号位u值域的近似范围为值域的近似范围为u其其MATLAB表示为表示为double()其他数据结构其他数据结构uint8()、int16()、int32()、uint16()和和uint32()u符号型数据、字符串、单元数组、结构体、类符号型数据、字符串、单元数组、结构体、类第4页,共84页,编辑于2022年,星期一Float
4、(IEEE754 Single precision 32-bit)23.53=2.35300006866455078125E15.88=5.88000011444091796875E017.64=1.76399993896484375E1 第5页,共84页,编辑于2022年,星期一Double(IEEE754 Double precision 64-bit)23.53=2.35300000000000011368683772162E15.88=5.87999999999999989341858963598E017.64=1.76400000000000005684341886081E1第6页,
5、共84页,编辑于2022年,星期一2.2.1 常量与变量常量与变量常量(保留字符串)常量(保留字符串)ueps:机器的浮点运算:机器的浮点运算误误差限,默差限,默认值认值ui和和j:虚数:虚数单单位,位,-1的平方根,的平方根,i=sqrt(-1)uInf:无:无穷穷大量,大量,-Inf为负为负无无穷穷大大uNaN:不定式(:不定式(Not a Number)upi:圆圆周率周率p的双精度浮点表示的双精度浮点表示变变量:量:u由字母引由字母引导导,可以跟字母、数字和下划,可以跟字母、数字和下划线线等等u区分大小写区分大小写第7页,共84页,编辑于2022年,星期一1.2.2 赋值语句赋值语句两
6、种赋值语句:两种赋值语句:u直接赋值语句直接赋值语句l语句结构语句结构 l后面加分号不显示结果后面加分号不显示结果l无返回变量,结果传给无返回变量,结果传给ansu函数调用语句函数调用语句l语句结构语句结构l一般对应于一般对应于*.m函数函数l同一函数可以有不同的调用格式同一函数可以有不同的调用格式第8页,共84页,编辑于2022年,星期一1.2.3 矩阵的矩阵的MATLAB表示表示复数矩阵为复数矩阵为MATLAB的基本变量单元的基本变量单元矩阵输入矩阵输入MATLAB输入语句输入语句uA=1,2,3;4,5,6;7,8,0;uA=1,2,3;4 5,6;7,8,0;扩展矩阵扩展矩阵uA=A;
7、1 3 5 1;2;3;4无需预先定义维数无需预先定义维数第9页,共84页,编辑于2022年,星期一冒号表达式冒号表达式举例举例uA=0:0.1:1.16复数矩阵的输入复数矩阵的输入MATLAB语句语句uB=1+9i,2+8i,3+7j;4+6j 5+5j,6+4i;7+3i,8+2j 1i矩阵变换成符号型矩阵变换成符号型uC=sym(B)第10页,共84页,编辑于2022年,星期一1.2.3 多维数组的定义多维数组的定义三维数组三维数组MATLAB输入输入第11页,共84页,编辑于2022年,星期一2.3 MATLAB下矩阵的运算下矩阵的运算本节主要内容本节主要内容u矩阵的代数运算矩阵的代数
8、运算u矩阵的逻辑运算矩阵的逻辑运算u矩阵的比较运算矩阵的比较运算u矩阵元素的数据变换矩阵元素的数据变换第12页,共84页,编辑于2022年,星期一2.3.1 矩阵的代数运算矩阵的代数运算矩阵转置:矩阵转置:A、A.加减乘除:加减乘除:A+B、A-B、A*B、AB、B/A矩阵翻转:矩阵翻转:flipud(A)、fliplr(A)、rot90(A)矩阵乘方:矩阵乘方:Ax点运算:点运算:A.*B、A.2、A.AKronecker乘积:乘积:kron(A,B)第13页,共84页,编辑于2022年,星期一矩阵运算举例矩阵运算举例例例1:矩阵的立方根:矩阵的立方根第一立方根第一立方根其他两个立方根可以通
9、过旋转求得其他两个立方根可以通过旋转求得例例2:矩阵乘积和点乘的:矩阵乘积和点乘的MATLAB命令命令第14页,共84页,编辑于2022年,星期一2.3.2 矩阵的逻辑运算矩阵的逻辑运算逻辑型变量的描述逻辑型变量的描述u逻辑型变量:逻辑型变量:logical()u双精度表示逻辑变量:双精度表示逻辑变量:非非0表示逻辑表示逻辑1逻辑运算逻辑运算u逻辑逻辑“与与”:A&Bu逻辑逻辑“或或”:A|Bu逻辑逻辑“非非”:Au逻辑逻辑“异或异或”:xor(A,B)逻辑运算是相应元素之间的运算逻辑运算是相应元素之间的运算第15页,共84页,编辑于2022年,星期一2.3.3 矩阵的比较关系矩阵的比较关系比
10、较关系比较关系u 关系关系、=、N=1:1000;y=Pc(N);plot(N,y,r);第52页,共84页,编辑于2022年,星期一探讨(续)探讨(续)代码代码1N=1:1000;y=Pc(N);plot(N,y,r);u只迭代了一次,相当于只迭代了一次,相当于y=Pc(1);plot(1000,Pc(1),r);代码代码2for N=1:1000,y=Pc(N);endplot(N,y,r);u只绘出一个点只绘出一个点代码代码3for N=1:1000,y(N)=Pc(N);endplot(N,y,r);代码代码4for N=1:1000,y(N)=Pc(N);endplot(1:1000
11、,y,rx);第53页,共84页,编辑于2022年,星期一2.8 MATLAB图形用户界面设计技术图形用户界面设计技术图形界面的优劣往往决定着软件的档次图形界面的优劣往往决定着软件的档次MATLAB的图形用户界面的图形用户界面(Graphical User Interface,GUI)设计技术对设计出设计技术对设计出良好的通用软件十分重要良好的通用软件十分重要本节主要内容本节主要内容u图形界面设计工具图形界面设计工具Guideu句柄图形学及句柄对象属性句柄图形学及句柄对象属性u菜单系统设计菜单系统设计u界面设计举例与技巧界面设计举例与技巧u工具栏设计工具栏设计第54页,共84页,编辑于2022
12、年,星期一2.8.1 图形界面设计工具图形界面设计工具Guide在命令窗口给出在命令窗口给出guide命令可以启动图形用户界面命令可以启动图形用户界面设计程序,有如下选项设计程序,有如下选项u建立一个默认的空白界面建立一个默认的空白界面(Blank GUI)u带有一些控件的界面带有一些控件的界面(GUI with Uicontrols)u带有坐标轴和菜单的界面带有坐标轴和菜单的界面(GUI with Axes and Menu)u基本模态对话框基本模态对话框(Modal Question Dialogu打开现有的打开现有的GUI(Open Existing GUI)第55页,共84页,编辑于2
13、022年,星期一窗口对象的常用属性窗口对象的常用属性MenuBar属性:设置图形窗口菜单形式属性:设置图形窗口菜单形式Name属性:设置图形窗口标题栏中内容属性:设置图形窗口标题栏中内容Units属性:窗口尺寸的单位,默认的像素点单位属性:窗口尺寸的单位,默认的像素点单位pixels,此外,此外,normalized、inchesPosition属性:窗口位置属性,包含左下角坐标和属性:窗口位置属性,包含左下角坐标和宽度、高度这宽度、高度这4个参数构成的向量个参数构成的向量Toolbar属性:图形窗口可视编辑工具条属性:图形窗口可视编辑工具条Visible属性:建立的窗口是否可见属性:建立的窗
14、口是否可见第56页,共84页,编辑于2022年,星期一2.8.2 句柄图形学及句柄对象属性句柄图形学及句柄对象属性图形用户界面编程主要是对各个对象属性读取和修图形用户界面编程主要是对各个对象属性读取和修改的技术改的技术窗口是一个对象,其上面的每个控件也都是对象,窗口是一个对象,其上面的每个控件也都是对象,每个对象都有自己的属性每个对象都有自己的属性双击对象则可以打开对象属性浏览器双击对象则可以打开对象属性浏览器还可以使用还可以使用set和和get函数设置、读取属性函数设置、读取属性例如,用户可以通过这样的属性浏览器改变原例如,用户可以通过这样的属性浏览器改变原型窗口的属性,如颜色等型窗口的属性
15、,如颜色等第57页,共84页,编辑于2022年,星期一对象属性的读取与修改对象属性的读取与修改关键函数关键函数set和和get常用的句柄常用的句柄ugcf:得到当前窗口的句柄:得到当前窗口的句柄ugco:获得当前对象的句柄:获得当前对象的句柄ugca:获得当前坐标系的句柄:获得当前坐标系的句柄ugcs:获得当前:获得当前Simulink模型的句柄模型的句柄第58页,共84页,编辑于2022年,星期一简单界面设计实例简单界面设计实例设计一个窗口,有两个控件:按钮和文本。按钮按下设计一个窗口,有两个控件:按钮和文本。按钮按下后在文本位置显示后在文本位置显示“Hello world!”u绘制原型窗口
16、:打开空白原型窗口并在该窗口中绘制出这绘制原型窗口:打开空白原型窗口并在该窗口中绘制出这两个控件两个控件u控件属性修改:因为需要修改文本控件的属性控件属性修改:因为需要修改文本控件的属性lString属性:先设置成空白字符串属性:先设置成空白字符串lTag属性:很关键,设置成属性:很关键,设置成txtHellou自动生成框架文件:建立了窗口之后,可以将其存成自动生成框架文件:建立了窗口之后,可以将其存成.fig文件,文件,如如c2eggui1.fig,这时会自动生成,这时会自动生成c2eggui1.m文件文件第59页,共84页,编辑于2022年,星期一u编写回调函数:为按钮对象编写回调函数,当
17、按钮按下后,操作编写回调函数:为按钮对象编写回调函数,当按钮按下后,操作Tag为为txtHello的控件的控件其他可能的回调函数其他可能的回调函数uCloseRequestFcn:关闭窗口时响应函数。:关闭窗口时响应函数。uKeyPressFcn:键盘键按下时响应函数。:键盘键按下时响应函数。uWindowButtonDownFcn:鼠标键按下时响应函数。鼠标键按下时响应函数。uWindowButtonMotionFcn:鼠标移动时响应函数。鼠标移动时响应函数。uWindowButtonUpFcn:鼠标键释放时响应函数。鼠标键释放时响应函数。uCreateFcn和和DeleteFcn:建立和删
18、除对象时响应函数。:建立和删除对象时响应函数。uCallBack:对象被选中时自动执行的回调函数:对象被选中时自动执行的回调函数第60页,共84页,编辑于2022年,星期一其他控件的常用属性其他控件的常用属性Units与与Position属性:与窗口定义是一致的属性:与窗口定义是一致的String属性:标注该控件的字符串属性:标注该控件的字符串CallBack属性:该对象被选中和改变时,系统自动响应的函属性:该对象被选中和改变时,系统自动响应的函数。数。Enable属性:表示此控件的使能状态属性:表示此控件的使能状态CData属性:将真色彩图形标注到控件上属性:将真色彩图形标注到控件上Tool
19、tipString属性:提示信息显示,属性:提示信息显示,UserData属性:界面及控件之间数据交换与暂存属性:界面及控件之间数据交换与暂存Interruptable属性:回调函数在执行时是否允许中断有属性:回调函数在执行时是否允许中断有关字体的属性:如关字体的属性:如FontAngle、FontName第61页,共84页,编辑于2022年,星期一2.8.4 菜单系统设计菜单系统设计菜单编辑器菜单编辑器Tools|Menu Editor演示程序:演示程序:c2eggui2.m允许用户给窗口设计自己的菜单系统允许用户给窗口设计自己的菜单系统u添加菜单项添加菜单项u设计子菜单项设计子菜单项u编写
20、回调函数编写回调函数第62页,共84页,编辑于2022年,星期一2.8.5 界面设计举例与技巧界面设计举例与技巧设计目标:设计一个窗口设计目标:设计一个窗口u建立主坐标系,以后绘制三维图形建立主坐标系,以后绘制三维图形u建立函数编辑框,接受用户输入的绘图数据建立函数编辑框,接受用户输入的绘图数据u建立两个按钮,一个用于启动绘图功能,另一个建立两个按钮,一个用于启动绘图功能,另一个用于启动演示功能。用于启动演示功能。u建立一组建立一组3个编辑框,设置光源的坐标值个编辑框,设置光源的坐标值u建立一组建立一组3个复选框,决定各轴是否需要网格个复选框,决定各轴是否需要网格u建立一个列表框,描述着色方法
21、。建立一个列表框,描述着色方法。第63页,共84页,编辑于2022年,星期一原型窗口界面的预期效果原型窗口界面的预期效果第64页,共84页,编辑于2022年,星期一程序界面的任务分配程序界面的任务分配文件名:文件名:c2eggui3.m第65页,共84页,编辑于2022年,星期一2.8.6 工具栏设计工具栏设计Tools|Toolbar Editoru提供了一些标准的工具图标,有继承功能提供了一些标准的工具图标,有继承功能u用户可以自己添加新工具图标用户可以自己添加新工具图标u如何给图标写回调函数如何给图标写回调函数编写一个新图形界面编写一个新图形界面u添加坐标系,绘制正弦曲线添加坐标系,绘制
22、正弦曲线u使之包含使之包含x、y轴局部放大的工具图标轴局部放大的工具图标u文件名:文件名:c2eggui4.m第66页,共84页,编辑于2022年,星期一2015.3.23 信安信安第67页,共84页,编辑于2022年,星期一2.9 提高提高MATLAB程序程序执行效率的技巧执行效率的技巧有时有时MATLAB程序的效率不高程序的效率不高如何提升运行速度?如何提升运行速度?本节内容提要本节内容提要u测定程序执行时间和时间分配测定程序执行时间和时间分配u加快加快MATLAB程序执行速度的建议程序执行速度的建议uMex程序设计技术程序设计技术第68页,共84页,编辑于2022年,星期一2.9.1 测
23、定程序执行时间和时间分配测定程序执行时间和时间分配两套方法:两套方法:utic、toc命令对命令对ucputime命令命令例:生成例:生成1000 x1000的的Hilbert矩阵,求其奇异矩阵,求其奇异值,测试运行时间值,测试运行时间两种方法耗时相仿,两种方法耗时相仿,15s左右左右第69页,共84页,编辑于2022年,星期一M-函数耗时剖析命令函数耗时剖析命令Profile命令是命令是MATLAB提供的一个实用耗时提供的一个实用耗时剖析功能,可通过剖析找出瓶颈,提高效率剖析功能,可通过剖析找出瓶颈,提高效率例:测试例:测试ctrllab程序的耗时问题程序的耗时问题第70页,共84页,编辑于
24、2022年,星期一2.9.2 加快加快MATLAB程序执行速度的建议程序执行速度的建议(1)尽量避免使用循环尽量避免使用循环 尽量用向量化的运算来代替循环操作。下面将尽量用向量化的运算来代替循环操作。下面将通过如下的例子来演示如何将通过如下的例子来演示如何将例:无穷级数例:无穷级数u用循环用循环u不用循环不用循环第71页,共84页,编辑于2022年,星期一在必须使用多重循环的情况下,如果两个循环执行的次数不同,在必须使用多重循环的情况下,如果两个循环执行的次数不同,则建议在循环的外环执行循环次数少的,则建议在循环的外环执行循环次数少的,内环执行循环次数多内环执行循环次数多的的例:生成例:生成1
25、00005的的Hilbert矩阵矩阵u通项:通项:u两重循环:两重循环:1:5和和1:10000,差异很显著,差异很显著u代码代码1u代码代码2第72页,共84页,编辑于2022年,星期一(2)大型矩阵的预先定维大型矩阵的预先定维u可以使用可以使用zeros或或ones函数直接定维函数直接定维例:继续考虑例:继续考虑Hilbert矩阵的生成矩阵的生成u结合向量化方法结合向量化方法u采用采用meshgrid避免循环避免循环第73页,共84页,编辑于2022年,星期一(3)优先考虑内核函数优先考虑内核函数u有有eig()就没有必要自己工具算法编就没有必要自己工具算法编(4)采用有效的算法采用有效的
26、算法u科学计算领域是存在科学计算领域是存在“多快好省多快好省”的途径的的途径的u求定积分的求定积分的quadl速度、精度等远远高于速度、精度等远远高于quad(5)应用应用Mex技术技术u采用了很多措施,但执行速度仍然很慢采用了很多措施,但执行速度仍然很慢u采用采用C或或Fortran语言编程语言编程u解决某专业问题已经存在由其他语言编写的源代码,则没有必要全盘用解决某专业问题已经存在由其他语言编写的源代码,则没有必要全盘用MATLAB改写现有程序,而需要有一种技术将该代码嵌入整个改写现有程序,而需要有一种技术将该代码嵌入整个MATLAB程序,程序,Mex技术正好可以解决这样的问题。技术正好可
27、以解决这样的问题。第74页,共84页,编辑于2022年,星期一2.9.3 Mex程序设计技术程序设计技术按照按照Mex技术要求的格式编写相应的程序技术要求的格式编写相应的程序通过编译连接,形成在通过编译连接,形成在MATLAB中可以直接中可以直接调用的动态链接库文件调用的动态链接库文件这样可以显著地加快运算速度或增加现有代码这样可以显著地加快运算速度或增加现有代码的可重用度。的可重用度。常用常用Mex函数的调用方法函数的调用方法u检测一个输入变量的类型检测一个输入变量的类型第75页,共84页,编辑于2022年,星期一支持的变量类型支持的变量类型第76页,共84页,编辑于2022年,星期一u获获
28、得得输输入入变变量的元素量的元素总总数数u测测出出输输入入变变量的量的维维数数u判定是否判定是否为为某某类变类变量量在构造的在构造的C语语言文件中包含言文件中包含头头文件文件mex.hu使用支持使用支持32位位编编程的程的C编译编译程序,程序,Microsoft Visual C+、Watcom C+及及MATLAB自自带带的免的免费费LCC-win32进进行行Mex编译编译u编译编译程序和程序和环环境境设设置置第77页,共84页,编辑于2022年,星期一Mex程序结构程序结构第78页,共84页,编辑于2022年,星期一Mex文件的入口引导语句文件的入口引导语句其他必要函数其他必要函数u获得矩
29、阵的行数和列数:第获得矩阵的行数和列数:第k输入变量输入变量u获得矩阵变量的指针:输入和输出获得矩阵变量的指针:输入和输出u判定一个矩阵是否为复数矩阵判定一个矩阵是否为复数矩阵u输出变量指针的动态分配输出变量指针的动态分配第79页,共84页,编辑于2022年,星期一Mex函数举例函数举例用用C语言编写语言编写A*B的程序的程序u期望调用格式期望调用格式第80页,共84页,编辑于2022年,星期一程序的错误或漏洞程序的错误或漏洞不可乘矩阵也可以得出不可乘矩阵也可以得出“乘积乘积”(错误)(错误)加入维数检测:加入维数检测:c2exmex2a.m该函数仍有漏洞:该函数仍有漏洞:uA、B其一是标量,
30、则程序仍然可能出错误其一是标量,则程序仍然可能出错误u涉及到复数矩阵的运算,此函数仍然无能为力涉及到复数矩阵的运算,此函数仍然无能为力结论:结论:C语言相对于语言相对于MATLAB编程需要考虑编程需要考虑的烦琐事情要多得多,有一点小地方考虑不到,的烦琐事情要多得多,有一点小地方考虑不到,就可能出现不可预见的错误。就可能出现不可预见的错误。第81页,共84页,编辑于2022年,星期一C语言下语言下Mex编程步骤编程步骤引导语句:引导语句:mexFunction()和头文件和头文件用用mxGetPr()读取各个输入变量指针,由读取各个输入变量指针,由mxGetM()和和mxGetN()读取输入变量
31、的维数,可以从内存中取出读取输入变量的维数,可以从内存中取出MATLAB工作空间变量工作空间变量mxCreateDoubleMatrix()给返回变量开创内存空间,给返回变量开创内存空间,用用mxGetPr()设定指针,这样设定指针,这样C程序的返回结果将能程序的返回结果将能写到写到MATLAB环境能读到的位置环境能读到的位置编译后形成可执行文件:编译后形成可执行文件:*.mexw32/64编写同名的编写同名的*.m文件,提供函数的帮助信息文件,提供函数的帮助信息第82页,共84页,编辑于2022年,星期一附录:符号对象与其它数据对象间的转换附录:符号对象与其它数据对象间的转换第83页,共84页,编辑于2022年,星期一Thanks士不可以不弘毅,任重而道远士不可以不弘毅,任重而道远第84页,共84页,编辑于2022年,星期一