1、目 录第 1 课 MATLAB 入门(1) .11基础脚本 11)基础语法 12)数组(矩阵)创建 33)数组(矩阵)运算 54)基础函数(详见 MATLAB 帮助,这里列出常用的函数) .82. 基础脚本的应用 - 文字型小游戏 .93. 实习要求 .11第 2 课 MATLAB 入门(2) .121. 二维图形曲线 .122图形窗口操作 153. 三维图形绘制 .164图像显示与简单处理 185动画处理与 GIF 动画文件 196实习要求 20第 3 课 MATLAB 入门(3) .211. 一个简单的窗口编程 .212. 一个简单的按钮交互式动画编程 .263. 一个较复杂的交互式界面编
2、程 .284. 一个交互式小游戏-“ 石头剪刀布”的窗口版本 .345. 实习要求 .391第 1 课 MATLAB 入门(1)熟悉 MATLAB 环境、基础脚本、命令窗口的使用、以及简单的交互编程。1基础脚本包括:基础语法、数组(矩阵)创建、数组(矩阵)运算、基础函数1)基础语法计算器运算赋值语句、判断语句输出(显示)语句关系运算符有:=, , =, 等待用户输入解法 - 判断结果正确与否)4)* 数据统计:已知某个班级的三门课程考试成绩表如下:学号 英语 数学 专业课 学号 英语 数学 专业课x0001 91.2 76 79 x0016 91.4 91 91x0002 78.6 61 65
3、 x0017 94.4 88 89x0003 94.4 94 94 x0018 84.6 81 82x0004 93.6 88 89 x0019 82.4 86 85x0005 83.8 83 83 x0020 96.2 94 94x0006 91.4 85 86 x0021 75 93 89x0007 93.6 96 96 x0022 93.6 90 91x0008 84.6 84 84 x0023 93.6 86 88x0009 92.8 92 92 x0024 93.6 87 88x0010 92.8 89 90 x0025 95.2 87 89x0011 89.6 78 80 x002
4、6 92 84 86x0012 84.2 85 85 x0027 93.6 85 87x0013 92 83 85 x0028 93.6 84 86x0014 86.4 88 88 x0029 92.8 80 83x0015 92 65 70 x0030 92.8 86 87要求用 MATLAB 脚本统计出每门课程的优( =90) 、良(8089) ,合格(6079) 、不合格(=80)提示 3:最终给出的统计表格形式如下:优 良 合格 不合格人数 比例% 人数 比例% 人数 比例% 人数 比例%英语数学专业课注:* 表示较难,* 表示难。11第 2 课 MATLAB 入门(2)熟悉 MATL
5、AB 图形图像窗口、图形图像函数、以及简单的图形图像交互编程。1. 二维图形曲线输入脚本:则绘制的曲线如下:在“Command Window”中输入“doc plot”,可以观看“plot”指令的所有功能和相关的样例代码。常见的二维图形绘制函数有:figure:创建一个空白的图形窗口plot:绘制多条二维曲线(直角坐标系)grid on:显示网格线,grid off:不显示网格线xlabel:显示 x 轴单位,ylabel:显示 y 轴单位title:显示标题legend:显示图例axis on:显示坐标轴及其刻度,axis off:关闭坐标轴及其刻度ginput:用鼠标点击的方式在图形窗口中
6、输入坐标gtext:在图形指定位置显示文本字符串或数值12drawnow:立刻刷新图形窗口subplot:子图semilogx,semilogy,loglog:按对数轴方式显示图形曲线polar:极坐标系作图bar, stem, stairs, area, pie, pie3:直方图、圆点图、阶梯图、圆饼图一个稍微复杂一点的样例:显示的结果如下:子图样例:13显示结果如下:142图形窗口操作MATLAB 图形(图像)窗口中提供了丰富的手动操作,可以用手工的方式对绘制完成的图形(图像)做很多方面的修改。放大/缩小:点击放大按钮后,可以在图形窗口中按鼠标左键选取放大区域,按鼠标右键进行缩小等操作;
7、旋转:点击旋转按钮后,可以在图形窗口中按住鼠标左键不放,移动鼠标即可观看不同旋转角度后的图形;手工编辑:点击编辑按钮后,编辑工具栏的按钮就会亮起来,可以修改曲线粗细、线型、颜色,可以删除某一条曲线,可以添加文本、添加直线、箭头线、方框,可以更改坐标刻度、坐标颜色、坐标比例、图例、背景等;这是前面的样例图经过手工修改后的结果:放大 平移 旋转编辑153. 三维图形绘制三维曲线绘制样例:plot3 的使用可以参考 MATLAB 帮助,大部分图形语句可以适用于三维坐标系。三维曲面的绘制主要有两类:mesh 和 surface。其中 mesh 仅绘制曲面骨架,surface对曲面进行渲染。mesh 函
8、数的样例:运行结果为:16把代码中的 mesh 函数换成 surface,则结果显示为:三维曲面、等高线函数还有:meshc、meshz 、surface、surfc、contour、contour3 、等等。174图像显示与简单处理MATLAB 支持众多的图像文件格式,如 BMP、JPG、GIF、TIF 等。图像文件的读取和显示样例:运行结果为:图像保存语句为:imwrite(I3, test2.JPG,JPG);185动画处理与 GIF 动画文件通过连续显示图像的方式,MATLAB 可以生成和显示动画,并且可以把生成的动画存入 GIF 文件,以供其它动画浏览软件(如 IE 浏览器)进行播放
9、。下面提供了一个由两幅图像来回运动而生成的动画显示样例。注意,上面的两幅图片(初始 1.JPG 和剪刀 1.JPG)必须高、宽要一样,不然窗口大小会产生变化。上述动画以间隔 0.2 秒的时间周期来回运动。下面提供了如何生成 GIF 动画文件的样例。上述样例生成了一个 GIF 动画文件,要求每幅图像的长、高必须一致。三幅图像如下所示。石头 1.png 剪刀 1.png 布 1.png生成的 GIF 动画将会以 0.2 秒的时间间隔不断切换画面。196实习要求1)重复上述所有的样例代码,其中的图像文件可以换成别的图像;2)手工调整图形显示效果;3)* 针对如下统计的数据做出对比图。优 良 合格 不
10、合格英语 10 12 7 1数学 6 13 9 2专业课 5 10 11 4提示:使用 bar 函数绘制直方图,使用 pie 或 pie3 函数绘制饼图。4)* 从百度中寻找若干幅图像,利用“画图”工具把图像的尺寸处理成一致,然后做成GIF 动画文件。5)* 从网络上下载一段 AVI 视频,利用 MATLAB 的 AVI 工具箱函数编写视频播放、视频分割、视频修改并保存等功能。注:* 表示较难,* 表示难,* 表示很难。20第 3 课 MATLAB 入门(3)熟悉 MATLAB 可视化编程。1. 一个简单的窗口编程第 1 步:选择菜单:“File | New | GUI | Create Ne
11、w GUI | Blank GUI (default)”,按“ok”按钮,弹出下面的可视化设计界面:设计界面左侧是元件区,包含:按钮元件、滚动条元件、单选多选框元件、编辑输入框元件、文本显示元件等等。设计界面右侧是布局区,布局区同等于程序运行后的效果。在元件区拖拉元件到布局区,即可把元件安放到布局区。设计界面上侧是工具栏,其中绿色三角形按钮是执行按钮。设计完毕后可以执行看看实际运行效果。第 2 步:拖拉三个元件:一个文本显示、一个编辑输入框、一个按钮到布局区,可以通过拖拉元件周围黑点的方式更改元件大小。效果如下:元件区布局区执行按钮21第 3 步:双击文本显示元件,弹出属性编辑器:双击它22第
12、 4 步:更改属性“FontName”=“宋体” , “FontSize”=12, “ForegroundColor”=红色,“Position.Width”=30。同理更改编辑输入框元件的字体、颜色、宽度。把按钮元件上的文字改成“确认” 。元件名对应的属性是“Tag” ,元件的文本字符串对应属性“String” 。第 5 步:点击“保存”按钮,弹出“Save As ”对话框,输入文件名 “test1”,按“保存”按钮。保存后将会弹出自动生成的源代码“test1.m”编辑窗口。元件名:text1元件名:edit1 元件名:Pushbutton123第 6 步:回到设计界面,右击按钮元件,弹出菜
13、单:第 7 步:点击菜单“Callback” ,MATLAB 会自动弹出“ test1.m”源代码编辑界面,并且定位到“pushbutton1_callback”函数,在按钮被点击时将会执行这个函数里输入的代码。在 pushbutton1_callback 函数中,输入参数 handles 是界面上所有元件的集合,可以通过24handles 对元件的属性进行编程更改;eventdata 是元件事件发生时额外数据集合,是预留变量;hObject 指向事件发生的元件对象,一般不用。第 9 步中可以通过更改 handles 中的元件属性完成编程任务。第 8 步:在函数 pushbutton1_cal
14、lback 下方输入语句:红色框中是输入的语句,其它的语句均为 MATLAB 自动生成的。其中,handles.edit1 代表设计界面上的编辑输入框元件, String 代表指向元件 handles.edit1的 String 属性。 get 函数取出元件 handles.edit1 的 String 属性值,然后赋给 ss 变量。set函数把变量 ss 的值赋给元件 handles.text1 的 String 属性值,这个赋值过程会更改运行窗口上的文本显示元件上文本字符串。因此,这两句代码的效果就是:当按钮被点击后,在编辑输入框中输入的文本字符串会被复制一份显示到文本显示元件上。第 9
15、步:在 Editor 界面(源代码编辑界面)上保存好代码,按“F5”键,或者在设计界面上点击绿色三角形按钮(执行按钮) ,均可运行程序。运行程序后,出现如下窗口:第 10 步:测试程序。在编辑输入框中输入:“1234567890” ,点击“确认”按钮,你会发现上方红色的文本显示元件的文本也更改成“1234567890” 。252. 一个简单的按钮交互式动画编程第 1 步:按照上述的步骤设计界面如下:即:新建一个空白窗口,拖拉一个按钮(pushbutton1) 。第 2 步:把程序保存成“test2.fig” ,MATLAB 自动生成“test2.m” 。第3步:在Editor界面(源代码编辑)
16、的test2_OpeningFcn函数中输入如下语句:红线框中是需要自己输入的语句,其它均为 MATLAB 自动生成的语句。函数test2_OpeningFcn 中的语句将会在程序刚运行(窗口尚未显示出来)时被执行。因此这个元件名:pushbutton126函数中的语句通常是用来做程序的初始化处理。这里红框中的第 1 条语句是把元件pushbutton1 的 UserData 属性值置为 0(初始值) 。元件的 UserData 属性通常存放需要跨函数交互处理的变量值,可以存放任意数据类型的值。在这里 pushbutton1 的 UserData 值置为 0,是为后面的函数中提供初始值,在下一
17、步将会用到。红框中的第 2 条语句是把元件 pushbutton1 的文本显示置为 “显示 0 次” ,是一种显示文本的初始化。第 4 步:在 pushbutton1_callback 函数中输入如下语句:红线框中是需要自己输入的语句,其它均为 MATLAB 自动生成的语句。函数pushbutton1_callback 中的语句将会在按钮点击后被执行。红框中第 1 条语句是取出元件 pushbutton1 的 UserData 属性值(该属性值在test2_OpeningFcn 函数中已经被初始化为 0)赋给变量 k,第 2 条语句是增加 k 的值,第 3条语句是把变量 k 的值放回元件 pu
18、shbutton1 的 UserData 属性中。红框中第 4 条语句是根据变量 k 的值生成一条字符串,并显示到按钮元件 pushbutton1 上。红框中第 5-7 条语句是取出按钮元件 pushbutton1 的坐标位置,并且把 x 坐标值加 1,然后放回元件。其效果就是每次点击按钮,按钮就会自动向右边平移一小段距离。其中 Position属性里面存放了 4 个子属性(x, y, width, height) ,pos1(1) 就是对应 x 坐标值。第 5 步:保存好代码,执行该程序,得到如下窗口:第 6 步:测试程序。点击按钮,每次点击将会显示“点击 xxx 次” ,并且按钮向右平移一
19、小段距离。273. 一个较复杂的交互式界面编程包含下拉框、列表框、图形图像、多线程等常用可视化编程。第 1 步:设计界面如下,保存成“test3.fig” ,源代码文件为“test3.m ”。其中,下拉框中包含三个选项:“sin” 、 “cos”、 “exp”。界面的上半部分是可以手工添加指定类型的信号到信号集中,并列在列表框中。下半部分是生成每条信号,显示其时域曲线和幅频曲线,并把信号处理的进度在滚动条和提示文本中显示出来。还提供了停止按钮,当信号条数很多时可以临时停止(相当于一个处理子线程、一个停止线程并列执行) 。元件名:listbox1 元件名: edit128第2步:信号集初始化。在
20、test3_OpeningFcn函数中插入语句用于初始化一个信号集结构体变量Signals ,Signals中包含了 num、names 、types、StartValues、EndValues 五个成员。信号集 Signals 存放在元件 listbox1 的 UserData 属性中。第 3 步:添加信号。插入如下语句实现向信号集中添加信号的功能。从元件 handles.listbox1 的 UserData 属性中取出信号集 Signals,把输入框、下拉框中的内容添加到 Signals,放回 handles.listbox1 的 UserData 属性,最后刷新列表显示。29第 4 步:列表选择对应的显示刷新。在 listbox1_callback 函数中输入如下语句:每当用户点击选择了列表的某一行时,将会执行该函数的语句。上述的代码根据用户选择的列表行号,把行号对应的信号信息(名称、类型等)显示到右边的输入框、下拉框中。第 5 步:删除列表中的某一行及其对应的信号。