1.3 MATLAB窗口的基本操作
1.3.1 命令窗口的使用
许多简单的计算工作都可以在命令窗口中完成。
(1)数的运算
在命令窗口中输入:
25*4
按Enter键,则得到结果:
ans = 100
输入(1+2)*3^0.5,按Enter键,得到结果ans=5.1962。
输入13^4,sqrt(ans),按Enter键,得到结果ans=169。
输入2*pi,按Enter键,得到结果ans=6.2832。
输入(1+2*i)(1-i),按Enter键,得到结果ans=3.0000+1.0000i。
输入1/inf,按Enter键,得到结果ans=0。
上面程序中的pi是圆周率,i是复数单位,inf是无穷大。在MATLAB中可以用这些字母来代替有些无理数与复数单位。
(2)向量与矩阵计算
可以在命令窗口中完成矩阵的赋值,输入a1=[1 2 3 4;-1 0 5-2];a2=[2 3;-2 2;3 0;1-1],按Enter键,有:
a1 = 1 2 3 4 -1 0 5 -2 a2 = 2 3 -2 2 3 0 1 -1
输入命令a1*a2,按Enter键,则进行矩阵乘法运算,得到结果:
ans = 11 3 11 -1
数学上关于矩阵的计算基本上都可以在MATLAB(命令窗口)中进行。例如:
norm计算矩阵范数,rand计算矩阵的秩,trace计算矩阵的迹,det计算矩阵的行列式的值等。
向量是矩阵的特例,矩阵的所有运算函数都可以用在向量上。除了矩阵的通用函数外,也提供了计算向量的特殊函数,例如点乘、叉乘函数等。
在命令窗口中输入a=[1,2,3];b=[3,4,5];dot(a,b),计算向量a与b的点乘,输出26。
如果不清除workspace中的变量,在命令窗口中继续输入命令cross(a,b)(也是函数,用来计算两个向量的叉乘),则有ans =-2 4-2,得到的是积向量。
注意
命令clear用来清除workspace中已有的变量,clc用来擦除命令窗口中的内容。
(3)符号运算
使用MATLAB可以进行多项式乘除运算,也可以进行因式分解。例如,要计算(x+1)3,在命令窗口中输入syms x;expand((x+1)^3),按Enter键,得到结果:
ans = x^3+3*x^2+3*x+1
因式分解x9-1;
输入syms x;factor(x^9-1),按Enter键,得到结果:
ans = (x-1)*(x^2+x+1)*(x^6+x^3+1)
也可以计算极限、导数等,例如计算极限:
syms x;limit(sin(x)/x)
计算出极限值为1,默认x趋近于0。再输入limit((1+2*t/x)^ (3*x),x,inf),得到的结果是exp(6*t),此时x趋近于无穷大。
上面通过数的运算、向量运算与符号运算介绍了MATLAB的命令窗口的使用。
在命令窗口中执行命令语句可以一句一句执行,清晰方便。但是,有很多复杂的工作还需要进行程序设计。
1.3.2 Figure窗口的图形操作功能
Figure窗口主要功能是输出图形,图形就显示在Figure窗口中。使用Figure窗口的Edit→Copy Figure把图形放到剪切板上,再粘贴到Word文档中。
在Copy Figure之前,先使用Figure窗口的Insert→X Label,Y Label,Z Label添加坐标轴标示字X、Y与Z。
Figure窗口还有很多操作图形的功能。
(1)File菜单
Save选项可以把窗口中的图形存储为.Fig文件。
Open选项可以打开已有的.Fig文件,图形显示在另一个Figure窗口中。
Export选项可以把图形导出变成其他图像格式,例如,变成.jpg格式。
其他的选项还可以对图形页面进行设置,如打印等。
(2)Edit菜单
Figure Properties选项可以对图形颜色等属性进行修改。
Copy Options选项可以对复制图形的属性进行设置,例如,把背景色设置为透明色或白色等。
Copy Figure选项是执行复制功能的。单击这个选项便把设置好的图形放到剪切板上。
(3)Insert菜单
使用这个菜单,可以给图形添加标示,也可以在图形上添加箭头、直线、文字以及颜色条等。
选择Arrow选项可以在图形上用鼠标添加箭头。
选择Line选项可以在图形上用鼠标绘制直线。
选择Text选项可以在图形上添加文字。
(4)Tools菜单
Edit Plot选项可以对图形进行编辑。
Zoom Out选项与Zoom In选项是用来缩放图形的。
Rotate 3D选项用来旋转三维图形。在旋转的过程中图形转动,以便从各个角度观察图形。
Move Camera选项用来移动相机。
(5)View菜单与工具条
View菜单有两个选项,一个是Figure Toolbar,另一个是Camera Toolbar。默认时(Figure Toolbar被选中),Figure窗口中出现如图1-4(a)所示图形工具条。如果选中View菜单中的Camera Toolbar选项,那么如图1-4(b)所示的摄像机工具条就会弹出。
图1-4 MATLAB图形窗口工具条
下面对两个工具条上的按钮进行简单的解释。
从左到右分别表示File菜单中的New、Open、Save与Print选项。
从左到右分别表示Tool菜单中的Zoom In、Zoom Out、Pan与Rotate 3Dt选项。
这些工具用于平移、旋转与缩放等操作。
是主轴选择器。
是用来设置场景灯光的。
左边选项是设置为正交投影,右边选项是设置为透视投影。
左边选项是重新设置相机与场景灯光,右边选项是停止相机与场景灯光的运动。
1.3.3 GUI(图形用户接口)
为了更好地实现交互,MATLAB提供了制作界面的功能。可以使用代码直接创建界面,也可以使用MATLAB的GUI制作向导来完成界面设计。使用代码创建GUI在后面章节进行讲解,这里介绍GUI制作向导。
(1)进入GUI(制作向导)设计器
在MATLAB主菜单上,选择File→New→GUI出现对话框(如图1-5所示),这就是MATLAB的GUI设计器,可以使用该设计器进行界面设计。
图1-5 GUI制作向导
在这个对话框中有两个页,默认是Create New GUI,用来创建新的图形用户接口(GUI);另外一个是Open Existing GUI,用来打开原有的GUI,然后进行编辑。
新建(Create New)GUI页有4个选项:
① 选择GUI with Uicontrols选项,出现的设计界面中带有一些已经安装好的控件按钮,可以在这个基础上进行设计。
② GUI with Axes and Menu选项提供坐标系统安装好的控件。
③ Modal Question Dialog选项用来制作问题提示对话框。
④ Blank GUI(Default)选项是新建空GUI默认选项,选中该选项,再单击【OK】按钮,就进入新(空)GUI的设计页面。空的GUI设计界面如图1-6所示。
图1-6 空的GUI设计界面
使用如图1-6所示设计界面,可以制作新的GUI程序。
(2)Push Button(命令)按钮
【例1-1】空白模板上按钮的安装与属性设置。
单击选中左边竖排工具栏中的命令按钮,使用鼠标在工作区右下部单击,然后拖出一个按钮。
双击刚安装的按钮,打开如图1-7(a)所示的属性设置对话框,在对话框中找到Callback属性,设置为clc,然后保存。
图1-7 空GUI设计界面
单击工具栏上的运行按钮,出现如图1-7(b)所示的运行结果。
单击Push Button按钮,发现命令窗口中的原有内容都已经被清除。该例题设计了命令按钮的单击功能,使其单击功能为系统函数(命令)clc。
这个小例子虽然简单,但是它展示了GUI程序设计的基本过程。这个过程就是:
第一步,设计界面布局,在界面上安装控件。
第二步,设置各个按钮的属性,包括修改按钮上的显示文字(如修改Push Button与Edit Text的String属性等);修改按钮底色(BackgroundColor属性);函数命令调用,如上面调用命令clc等。
第三步,有些复杂的工作,需要打开m文件进行程序设计。
上面例题由于简单,没有涉及在m文件中进行程序设计。
(3)Edit Text文本框与Static Text文本框
【例1-2】使用Push Button按钮、Edit Text编辑文本框与Static Text静态文本框,在窗口中显示单击按钮次数。
第一步,在界面上安装一个静态文本框、一个命令按钮。此时单击工具栏上的运行按钮,运行程序,结果如图1-8(a)所示。界面上两个按钮上的文字Static Text与Push Button是按钮的通用名称,按钮还不能完成显示单击次数的功能。
图1-8 空GUI设计界面
第二步,使用对象的属性窗口,设置控件的属性,把Static Text的BackgroundColor属性设置为粉红色,把Push Button按钮的String属性设置为Click。
属性设置时必须注意,每一个对象都有自己的属性设置窗口,双击该对象打开它的属性设置窗口。
第三步,编写程序。
单击设计界面上工具栏中的按钮,打开该GUI的m文件,m文件中已经自动生成了许多代码(代码中绿色的文字是注释)。
找到函数function pushbutton1_Callback(hObject, eventdata, handles),在这个函数名称下面写入如下程序段:
persistent c if isempty(c) c=0 end c=c+1; str=sprintf('Total Clicks:%d',c); set=(handles.text1,'String',str);
保存程序,程序名称为untitled3。
单击工具栏上的运行按钮,出现交互界面。单击Click按钮,则在上面的文本框中显示单击次数,如图1-8(b)所示。
【例1-3】制作一个简易的加减法计算器。
首先在界面上安装两个逻辑文本框、一个静态文本框与两个命令按钮,如图1-9(a)所示。
图1-9 加减法计算器的设计
使用属性对话框,把两个Edit Text与一个Static Text的String属性都设置成为空(把原先的字擦除);把两个Push Button的String属性变为Plus与Sub。
单击工具栏上的按钮,打开GUI的m文件,在函数pushbutton1_Callback与函数pushbutton2_Callback中加入代码,如下所示。
function pushbutton1_Callback(hObject, eventdata, handles) s1=str2double(get(handles.edit1,'String')) s1=str2double(get(handles.edit2,'String')) set=(handles.text1,'String',s1+s2); function pushbutton2_Callback(hObject, eventdata, handles) s1=str2double(get(handles.edit1,'String')) s1=str2double(get(handles.edit2,'String')) set=(handles.text1,'String',s1-s2);
然后运行程序,程序运行结果如图1-9(b)所示。
程序中最关键的语句是handles.edit1、handles.edit2、handles.text1、handles.text2,MATLAB的GUI程序设计就是靠handles.加上对象名称来指明是哪个对象;然后,靠String等来指明是哪种属性;最后凭借get从对象那里取值,凭借set给对象(的相关属性)赋值。
(4)radiobutton(单选钮)
单选钮是在界面上用来交互确定某变量属性的,因为多个单选钮只有一个可以选择,所以称为单选钮。
【例1-4】使用3个单选钮控制静态文本框的背景颜色。
首先安装3个单选钮,把它们的String属性设置为Red、Green与Blue。安装一个静态文本框。
然后打开程序设计窗口,在3个Callback函数中添加代码如下:
function radiobutton1_Callback(hObject, eventdata, handles) set(handles.text1,'BackGroundColor','r') function radiobutton2_Callback(hObject, eventdata, handles) set(handles.text1,'BackGroundColor','g') function radiobutton3_Callback(hObject, eventdata, handles) set(handles.text1,'BackGroundColor','b')
上面粗体部分是添加进去的语句。
运行程序后,单击名称为Red的单选钮,静态文本框的背景色变成红色,结果如1-10(a)所示。
(5)滚动条slider
首先在界面上安装一个静态文本框和一个滚动条。
在程序窗口的函数function slider1_CreateFcn(hObject, eventdata, handles)中加入如下语句:
v=get(handles.slider1,'Value'); str=sprintf('%.2f',v); set(handles.text1,'String',str);
程序运行时,选用get语句取出滚动条的位置赋给变量v,然后使用sprintf函数把v值写入变量str,最后用set语句把str中的值输出在文本框上。
运行程序,结果如图1-10(b)所示,拖动滚动条,上面的数值就根据滑块的位置变化,变化范围在0~1之间。
图1-10 单选钮与滚动条的程序运行结果
1.3.4 自定义函数
MATLAB拥有大量的库函数,也允许用户自定义函数。
把下面两行语句写入M-File编辑窗口,然后保存,自动命名为f.m。
function w=f(x,y,z) w=x.^3-2*y.^2-2*z+5
这两个语句就构造一个简单的自定义函数。在命令窗口中输入f(1,2,3),按Enter键,则输出结果为w= -8。
也可以在其他程序(或自定义函数)中调用函数f(x,y,z),例如,下面定义了函数fp( ),在该函数中又调用了函数f( )。
function wp=fp(x,y,z) wp=f(1,2,3)+f(x,y,z)
在命令窗口中输入fp(1,2,3),按Enter键,则输出结果为wp=-16。
有些自定义函数没有输出值,只是为了完成一定的功能。例如:
function plot2D x=-2:0.1:2; y1=sin(x); y2=cos(x); y=y1-y2; plot(x,y)
这个函数就是在[-2,2]上绘制函数y=sin(x)-cos(x)的曲线。
与其他语言一样,MATLAB中的函数具有通用性,给定参数就能输出函数值,或者执行一定的工作;函数具有重用价值。有些经常使用的程序段都可以写成函数,以备调用。与有些语言不同,MATLAB中函数的制作与调用更加简单。
【例1-5】设计鼠标移动与鼠标按下函数,然后用这些鼠标函数实现交互操作。
function WindowButtonMotion(hObject,eventdata,handles) global istep global xdata global ydata global h p=get(gca,'currentpoint'); if(istep==1) xdata(2)=p(1); ydata(2)=p(3); set(h,'XData',xdata,'YData',ydata) end function WindowButtonDown(hObject,eventdata,handles) global istep global xdata global ydata global h istep=istep+1; p=get(gca,'currentpoint'); if(istep==1) xdata(1)=p(1); ydata(1)=p(3); xdata(2)=p(1); ydata(2)=p(3); h=line(xdata,ydata,'EraseMode','xor') elseif(istep==2) xdata(2)=p(1); ydata(2)=p(3); set(h,'XData',xdata,'YData',ydata,'EraseMode','normal') istep=0; end function interplot global istep global xdata global ydata istep=0; set(gcf,'pointer','cross'); set(gcf,'WindowButtonDownFcn',@WindowButtonDown); set(gcf,'WindowButtonMotionFcn',@WindowButtonMotion);
这个程序中有3 个自定义函数,分别是WindowButton Motion( )、WindowButtonDown( )与interplot。该程序运行后出现空坐标系,按下鼠标左键选择始点,将鼠标移动到线段终点,再单击右键,就完成一条直线的绘制,如图1-11所示。
图1-11 鼠标交互绘制直线段
在交互控制中对程序进行详细说明。
1.3.5 交互控制
交互控制是计算机语言一个重要的组成部分。最常用的交互控制是鼠标控制与键盘控制。
(1)鼠标控制
鼠标控制可以用get函数与set函数来完成。
在例1-5 中,第一个函数(鼠标移动函数)WindowButtonMotion()中,关键语句是p=get(gca,'currentpoint'),该语句返回鼠标当前位置的坐标,坐标值赋给变量p。gca也是一个命令,用来返回当前图形窗口中当前坐标轴的句柄;currentpoint是命令参数(关键字),表示鼠标当前位置。
在函数WindowButtonDown()中,语句istep=istep+1通过后面程序确定是鼠标移动还是按下鼠标,该函数也有返回当前鼠标的语句,用来确定线段的起点和终点。
在主函数interplot中,首先使用语句set(gcf,'pointer','cross')把鼠标设置为十字形,所以,运行主程序后,鼠标呈十字形状;然后在语句set(gcf,'WindowButtonDownFcn',@Window-ButtonDown)中调用函数WindowButtonDown,让该函数在鼠标按下时执行;最后,调用函数WindowButtonMotion,让该函数在鼠标移动时执行。
程序中istep、xdata、ydata与h是定义的4个全局变量,程序中其他函数也可以调用这些全局变量。
鼠标移动与按下鼠标左键是常用的两个功能,其他功能(如按下鼠标右键等)也是用上面类似的方法实现的。
(2)键盘控制
命令T=waitforbuttonpress能使程序停止下来,等待键盘按键或者鼠标动作。按键盘的任意键,程序继续执行,返回的T值为1;按下鼠标任意键,程序继续执行,返回的T值为0。
(3)input函数
可以使用input函数给程序中的变量赋值。