五、句柄图形简介
句柄图形(Handle Graphics)是指MATLAB使用的图形对象系统,它用于实现图形绘制和可视化函数。 1、句柄图形的概念
句柄图形是基于对象的概念,即图形的每一部分都是一个对象,每一个对象都存在与其相关的一系列句柄,而每一个对象可根据需要改变属性。
例:建立图形窗口对象演示。
解:h=figure('color','white','toolbar','none');
当用户调用一个绘图函数时,MATLAB就创建了使用各种图形对象的图形。而创建一个图形对象的同时,MATLAB也为该对象指定了一个标识符(identifier),这就是句柄。如上例中的h。
2、句柄图形的应用
用户可以使用句柄,并通过函数get()和函数set()访问对象的属性。格式: get(handle) 获得对象的全部属性
get(handle,’ ‘) 获得对象的指定属性“PropertyName”
set(handle,’PropertyName’,Property Value) 设置PropertyName的属性为Property Value 说明:①handle为图形对象句柄,PropertyName为属性名。 例:句柄图形应用演示。 解:>> x=1:10; >> y=x.^3; >> h=plot(x,y);
>> set(h,'Color','red') >> get(h,'LineWidth') ans =
0.5000
2.6 程序设计基础
一、M文件 1、M文件特点
M文件有两种形式,即M脚本文件(Script File)和M函数文件(Function File),扩展名均为.m。 2、M脚本文件
第 31 页/共 63页
脚本文件时一种简单的M文件,它没有输入、输出参数,而是包含了一系列MATLAB命令的集合,类似于DOS下的批处理文件。
例:通过M脚本文件,绘制一幅“花瓣图案”。 解:(1)编写M脚本文件。
(2)运行M脚本文件。有两种运行方式:
①选择M文件编辑/加调试器窗口菜单“Debug|Run”。
②确保M脚本文件所在路径为当前路径,然后在MATLAB命令窗口中输入命令(即文件名):e1
3、M函数文件
(1)M函数文件的概念
如果M文件的第一行包含function,那么这个文件就是M函数文件。每一个M函数文件都定义了一个函数。实际上,MATLAB提供的函数命令大部分都是由M函数文件定义的。
M函数文件比M脚本文件要复杂一些。从使用的角度来看,M函数文件是一个“黑箱”,一些数据被送进去并进行加工处理后,结果又被送出来。从形式上看,M函数文件与M脚本文件的区别在于:M函数文件的变量可以定义,但变量及其运算都仅在M函数文件内部起作用,而不在工作空间起作用,并且当M函数文件执行完后,这些内部变量将被清除。
(2)M函数文件的基本结构
第 32 页/共 63页
组成 函数定义行 H1行 函数体 格式 %注释说明 一条或若干条MATLAB命令 备注 可省略 可省略 function[输出变量列表]=函数名(输入变量列表) 函数帮助文本 %注释说明 M函数文件通常由四部分组成,具体如下:
①函数定义行,位于函数文件的首行,以MATLAB关键字function开头,函数名以及函数的输入变量和输出变量(返回变量)都在该行被定义。
②H1行,紧随函数定义行之后以%开头的第一注释行,用来概要说明该函数的功能。该行提供lookfor关键词查询和help在线帮助使用。
③函数帮助文本,位于H1行之后及函数体之前,可以有多行,每行均以%开头,用来对该函数进行注释,通常包括函数输入、输出变量的含义,函数调用格式说明,函数开发与修改的日期等。
④函数体,是函数的主要部分,由实现该M函数文件功能的MATLAB命令构成。它接收输入变量,进行程序控制,得到输出变量。
(3)M函数文件规则
①函数名必须与文件名相同,且为运行方便,脚本文件与所调用的函数文件最好放在同一文件夹内。 ②函数文件名必须以字母开头,后面可以是字母、下划线以及数字的任意组合,但不得超过31个字符。
③函数文件可以有零个或多个输入变量,也可以有零个或多个输出变量,对函数进行调用时,不能多于函数中规定的输入和输出变量个数。当函数有一个以上的输出变量时,输出变量必须包含在“[]”内,且变量之间以逗号分隔。
④函数输入和输出变量的实际个数分别 由MATLAB的两个预定义变量nargin和nargout给出,只要进入该函数,不论是否直接使用这两个变量,MATLAB都将自动生成这两个变量。
⑤函数文件中的所有变量除了事先进行特别声明外,都是局部变量。若需要使用全局变量,可使用函数global()来定义,而且在任何使用该全局变量的函数中都应该加以定义,即使在命令窗口也不例外。
(4)函数调用语句
与M脚本文件不同的是,M函数文件不能直接调用,而必须使用MATLAB的函数调用语句,该语句的基本结构为:
[输出变量列表]=函数名(输入变量列表)
例:使用M函数文件编写一个绘制任意半径和任意色彩线型的圆,并调用此函数。 解:(1)编写M函数文件。文件名为e2.m,内容如下: function sa=e2(r,s) %定义一个名为e2的函数
%circle %绘制一个以r为半径、线条属性由s定义的圆 %r %给定半径的数值
%s %给定曲线颜色的字符串 %sa %圆面积 %
a(r) %绘制半径为r的蓝色实线圆周
a(r,s) %利用字符串s给定的曲线颜色绘制半径为r的圆周 %sa=e2(r) %绘制半径为r的蓝色圆面,并计算圆面积
%sa=e2(r,s) %利用字符串s给定的曲线颜色绘制半径为r的圆面,并计算圆面积 if nargin>2
error('Too many input arguments.'); %错误信息 end
if nargin==1
第 33 页/共 63页
s='b'; end clf;
t=0:pi/100:2*pi; x=r*exp(i*t); if nargout==0 plot(x,s); else
sa=pi*r*r;
fill(real(x),imag(x),s) end
axis('square')
(2)保存M函数。将上述函数以e2.m为名保存。 (3)调用e2函数。可采用以下方法: 在MATLAB命令窗口中输入:
>> e2(2) %绘制半径为2的蓝色实线圆周 >> e2(2,'g') %绘制半径为2的绿色实线圆周
>> sa=e2(2) %绘制半径为2的蓝色圆面,并计算圆面积 sa =
12.5664
>> sa=e2(2,'g') %绘制半径为2的绿色圆面,并计算面积 sa =
12.5664
二、M文件编辑/调试器
1、启动M文件编辑/调试器的方法
(1)在MATLAB命令窗口中运行命令edit。 (2)左键单击工具栏图标。
(3)选择菜单“File|New|M=file”。 2、打开已建立的M文件的方法 (1)命令窗口中输入:edit 文件名
(2)左键单击工具栏上打开图标,再从弹出的对话框中选择所需打开的文件。 (3)选择菜单“File|Open”。
3、编写或修改后的M文件的保存方法
第 34 页/共 63页
单击工具栏保存图标,或菜单“File|Save”。 三、程序设计基础
1、全局变量和局部变量
全局变量的作用域是整个工作空间,通过命令“global”来定义,格式为:global x y z
如果想在不同的函数和MATLAB工作空间里使用同一个变量,就可以定义全局变量。如果一个变量为全局变量,则在任何一个函数里都可以对它进行赋值操作。
使用全局变量须遵循如下规则:
(1)全局变量的定义语句必须在使用该变量的语句前,为了提高程序的可读性,最好将所有全局变量的定义放在MATLAB程序的前面。
(2)一个函数如果需要调用某个全局变量,则在该函数中必须将这个变量定义为全局变量。
局部变量的作用域为函数文件所在的区域,其他函数文件无法对它实行调用。局部变量仅在其所在的函数文件运行时起作用,该函数文件运行完毕,局部变量自动消失。
2、数据类型 数据类型 数值型(Number Types) 逻辑型(Logical Types) 字符和字符串 (Characters and Strings) 日期和时间 (Dates and Times) 结构体(Structures) 元胞数组(Cell Arrays) 基本描述 包括:整型和实型、复数、不定值(NAN)、无穷大以及数据显示格式 有逻辑真(true)和逻辑假(false)两种状态 包括:字符、字符串、字符串元胞数组;字符串的比较、搜寻、替换 以及字符/数值转换 包括日期字符串,连续日期数、日期向量、日期类型转换以及输出显示格式 与C语言的结构体类似,可以存储不同类型的数据 矩阵的直接扩展,可以存储不同类型和规模的数组 函数句柄(Function Handles) 用于间接访问函数的句柄;可以很方便地调用其他函数 MATLAB类(MATLAB Classes) 使用面向对象类和方法,创建用户自己的MATLAB数据类型 Java类(Java Classes) 使用Java程序设计语言生成Java类 3、流程控制语句
主要有循环结构语句、条件(分支)结构语句、开关结构语句及试探性结构语句等。 (1)循环结构 ①for循环。格式:
for 循环控制变量=<循环次数设定> 循环体 end 说明:A.设定循环次数的数组可以是已定义数组,也可以是在for循环语句中新定义的数组,且定义的格式为:<初始值>:<步长>:<终值> 步长的缺省值为1
B.for循环可以嵌套使用。
例:使用for循环结构求
?k的值。
k?1100解:程序名为e3.m的MATLAB程序如下: sum=0; for k=1:100
sum=sum+k; end sum
第 35 页/共 63页