MATLAB学习经验语法小结.doc_第1页
MATLAB学习经验语法小结.doc_第2页
MATLAB学习经验语法小结.doc_第3页
MATLAB学习经验语法小结.doc_第4页
MATLAB学习经验语法小结.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB GUI设计学习手记 罗华飞 编著 北京航空航天大学出版社变量名区分大小写,不能写错。序列用x1=1,2,3,4;%方括号不能省整数范围用n1=1:8;求长度 length()找第几个单元的值 n1(1);s,z是系统定义变量,在使用前如果默认则是拉式、z域算子;表示向量一行的结束:表示从第几个到底几个 表示某个变量的取值范围用n=1:99,如果想依照某个间距来取点,的左右表示行、列 则linspace(0,2*pi,100)path找目前已有的搜寻路径path(path,C:SLDKJFSIDFJSSDFSD)加入某个文件所在文件夹的路径,注意是文件夹,不是到文件。加入路径后就可以在程序任何位置调用该文件。which xxx.m找到xxx.m文件所在的路径type xxx.m显示xxx.m文件的内容MATLAB入门教程中P15有关于文件调用的介绍diff(f)表示微分,如果只有一个变量则正常,如果有两个以上变量则随机对一个进行微分,这时应该使用diff(f,t)来指定某个变量。diff(f,n)指定几阶微分diff(f,t,n)也可以int(f)表示积分,与上面一样,有int(f,t) int(f,m,n) m和n是实数,表示对变量在m到n上积分int(f,m,n) m和n是变量或表达式,表示对变量在m到n上积分解矩阵方程:设A*B=C易知A=C/B,这可以从逆矩阵变换得来,但是他还可以看做是右除/,相应的就有左除B=AC,可以看做从左面除掉一个A之后就剩下一个B.这种运算是正确的。plot(x,f1,x,f2)同一个图上画多条曲线xn=wavread(,)读取文件并采样xn,fs,nbits=wavread()可以返回采样频率x=wavread(,size)返回信号采样后的尺寸,格式为尺寸 声道数=wavread(,FMT)FMT表示数据格式,如果是native,则自动匹配文件的数据量化范围,选择8、16、24、 32位数据格式,其值在help中有对应关系。如果是double,则是浮点数据格式, 都显示为-1+1之间的值。 只要选定了double或者native,则数据位数是自动定的。不规定FMT则默认为double,量化成-1到1的值。wavwrite()用于把声音数据写成声音文件。要告诉他数据xn,采样频率fs,数据位数nbits,存储名WAVFILE默认为16位数据,8000hz。还原为声音文件的时候是这样设置nbits的:当检测到数据是小数(浮点数)时,按照浮点数结合nbits来还原,即如果是-0.121212121,是16位数据格式,则按照-0.2121212121*参考电平来还原,数据位数只是存储小数的长度而已。如果是整数data,16位数据格式则按照data/(216)*参考电平来还原。最终都能还原到原模拟信号。输出的数据如果只指明文件名则创建到原目录下,还可以指定任意文件夹进行创建。数据不够采是不行的。sound(x,fs)只能对于DOUBLE类型的采样可以使用。即数据值是-1到1之间,我的声音设备不能定义数据位数。freqz 绘制z域函数的频率响应。参见help。h,w=freqz(b,a,n) :h是频率响应复数序列,w是频率采样序列。n是指定的采样点数。是在z域单位元上采样的角频率w范围是0到pih,w=freqz(b,a,n,whole) w从0到2pi进行采样。h是对称的。freqz绘制的是对数作为纵坐标值,需要注意。如果使用freqz(b,a,n,fs)则横坐标变成HZ为单位。2*pi等效为fs所谓z域频率响应其实就是将z代换为ejw,再利用数字角频率w从0到2*pi进行计算而已。freqs 绘制S域函数的频率响应。参见help。使用a=complex(1,2)可以生成1+2i的复数。关于GUI设计:给控件添加不同的回调函数,与VB有所不同,是右击控件,在 view callback中可以进行选择。tab编辑器可以调整各个控件使用TAB键被选中的顺序。toolbar editor可以快速插入打开、新建、保存、打印、放大、缩小等快捷菜单图标。对象浏览器object inspector可以看到文件中所有的控件以及他们的组织关系。editor可以打开回调函数编辑。在编辑界面中点击f图标可以看到所有函数进行快速选择,也可以直接右击控件,选择回调函数。menu editor可以快速编辑菜单栏。在GUI函数的参数中,hObject 是当前回调函数对应的GUI对象的句柄。eventdata为未定义的保留参数,handles是当前GUI所有数据的结构体,包含所有GUI对象的句柄和用户定义的数据。varargin在初始化时是空的,在触发控件时,变成一个1*4的单元数组。第一个varargin1表示触发控件后所要执行的回调函数的函数名,如:用户点击了Tag值如果想可以同时使用多个GUI界面,可以将主函数中的gui_Singleton设置为0,或者在GUI Options中去掉singletonhandles结构体是设计GUI界面时自动生成的结构体,用于存放所有GUI对象数据。他在每个函数中都作为参数,使得每个函数都可以任意访问对应GUI窗口内的每一个控件。可能在访问其他窗口时也像VB一样需要form1.限制。get() set()函数:用于读取结构体的内容或设置结构体内容。如下:(想直接使用某个控件的某个属性,只能通过get函数,需要提供两个参数:1句柄 2属性名。不能直接写出来,那是无效的。想设置某个属性的值需要提供三部分的参量,1句柄 2属性名 3属性值)如果想把一个局部变量变成全局变量,一个有效的办法是将变量存在handles中。语法为:handles.a=1; %a是变量名,1是值guidata(hObject,handles);%更新handles数据。获取handles结构体中某个变量值的方法是x=handles.a,运行为x=1获取handles结构体中某个对象的某个属性的方法是:(要使用get函数)str=get(handles.tag1,width)或者:temp=get(handles.tag1);str=temp.width; 如果设置某个对象的某个属性,可以使用set()函数:function pushbutton1_ButtonDownFcn(hObject, eventdata, handles)c=get(hObject,foreg);c_user=uisetcolor(c,选择颜色);set(hObject,foreg,c_user);%set()可以一次设置多个属性。例如:set(hObject,foreg,c_user,backg,c_user);创建一个不存在于GUI窗口的控件,并把它放在handles结构体中:方法一(采用存储用户数据的方法):h=uicontrol(tag,push1);handles.push1=h;guidata(hObject,handles);方法二(采用guihandles函数的方法):h=uicontrol(tag,push1);handles=guihandles;(这个函数分析见下面)guidata(hObject,handles);在GUI的M文件中,不能使用guidata函数存储除handles结构体之外的任何数据,否则会覆盖handles,使得GUI不能运行。可以通过将其他数据添加到handles中在存储的方法。handles结构体包括GUI的各种控件的tag以及各个变量名。而对于每一个控件有各种属性,也是一个结构体,就像vb的一样。所以通过handles调用控件的变量值与调用普通的变量值有些区别,要多一层调用关系。创建一个GUI的过程分为以下9步:1.是否只允许单一GUI %gui_State.gui_Singleton是否=1或者02.将GUI显示在屏幕上 %gui_State.gui_LayoutFcn3.创建或更新GUI数据(handles结构体)4.检查输入参数是否“属性”和“属性值”成对出现,并逐对设置属性,直到遇到错误跳出5.检查句柄可见性 %HandleVisibility属性6.执行Opening函数 %gui_State.gui_OpeningFcn7.设置figure可见 %Visible属性,figure窗口就是程序窗口以及各种图像显示窗口。8.执行Output函数 %gui_State.gui_OutputFcn9.设置句柄可见性 %HandleVisibility属性利用guidata函数进行管理GUI数据的步骤如下:1.data=guidata(obj_handle);可以返回一个当前GUI数据结构体。2.更新data结构体3.采用语句guidata(obj_handle,data);将data结构体存储到figure(由obj_handle关联到该对象的GUI)中,作为新的GUI数据。任何时候GUI只能管理一个handles,如果改变了handles,应该立即使用guidata来更新GUI相关联的handles.guidata与guihandles函数的使用:data=guidata(obj_handle);可以返回一个当前GUI数据结构体。guihandles可以创建handles结构体。handles=guihandles(obj_handle);可以返回一个对象结构体(与guidata用法相似),字段名为对象obj_handle对应窗口内所有GUI对象的Tag值,字段值为这些GUI对象句柄。从这里可以看出来,handles结构体的字段名是Tag值,是对象的名称。真正在软件中可以凭借找到该对象的应该是该对象的句柄,也就是handles结构体的字段值,即句柄。使用handles.tag,访问到的是对象的句柄。可以看出来一个函数是创建GUI的数据,另一个是创建GUI的对象。正是这两部分组成了handles结构体。使用guihandles创建handles结构体要注意,使用M文件创建的GUI对象也包括在handles结构体之内。所以可以使用上文中的方法二来更新handles.关于Application数据的用法:Application数据保存在GUI对象的一个未公开的属性(ApplicationData)内,该属性的值为一个结构体。通常选择figure对象(也就是窗口对象,不是内部控件对象)作为Application数据的保存对象。一些操作如下:setappdata(h,name,value):添加新的字段到对象h的Application数据中。字段名为name,字段值为value.value=getappdata(h,name):获取对象h的Application中name字段的值。values=getappdata(h):获取对象h的Application所有数据。rmappdata(h,name):移除对象h的Application数据中的字段nameisappdata(h,name):判断对象h的Application数据中是否存在字段name.关于UserData属性的使用:与Application使用方法基本相同,只不过它是公开的,并且数据可以是结构体,也可以是普通变量,但只能是一个结构体或一个变量。userdata就是每个对象的一个变量属性。data=get(h,userata); %用于获取对象h中存储的UserData.set(h,userdata,data1);%设置对象h的UserData为变量data1.M文件中的Opening函数中的默认语句如下:% Choose default command line output for twohandles.output = hObject;% Update handles structureguidata(hObject, handles);这表示创建一个变量字段output,其值为hObject.暂停函数有:uiwait(h) 暂停执行M文件,直到resume或窗口h被删除uiwait 暂停执行M文件,直到resume或当前窗口被删除uiwait(h,timeout) 暂停执行M文件,直到resume或窗口h被删除或者timeout时间到。继续执行M文件:uiresume(h)如果不进行暂停,GUI执行函数的顺序为:opening output callback,即使执行了callback函数也不能输出。所以需要改变程序执行的顺序。方法如下:1.添加uiwait命令到Opening函数中,使M文件暂停输出,等待用户出发一个GUI组件。2.在期望响应的回调函数中,更新handles.output值,并执行uiresume命令。对于一些名称比较长的属性,可以只写出可以用于唯一辨识这个属性的前部分字符就可以了。例:function pushbutton1_ButtonDownFcn(hObject, eventdata, handles)c=get(hObject,foreg);%foregroundcolor的简写,还可以写成foregr,与下面的可不同。c_user=uisetcolor(c,选择颜色);set(hObject,foreg,c_user);这种简写的方式可以说是可以与VB媲美的。GUI各个基本控件的使用方法:static text:string:设置显示内容。可以在属性观测器中点左边的图标,在弹出框中设置内容,可以设置多行。Enable:激活/不激活/未激活但显示激活状态三种tag:识别标志。text:如果max-min1,则允许多行,否则只允许单行输入。(对其他控件也是这样)通常需要使用 str2num()函数将字符转换成数值。例如:function edit1_Callback(hObject, eventdata, handles)str=get(hObject,string);val=str2num(str);if isempty(val)&(val=0&val1,则允许多选,否则只允许单选。(对其他控件也是这样)function listbox1_Callback(hObject, eventdata, handles)sel=get(gcf,selectiontype);%selectiontype是figure1的属性,可以区别各种点击。gcf是什么还不知道?if strcmp(sel,open) %当双击时,selectiontype属性值为open。进行字符比较确定是哪种点击。 str=get(hObject,string);%string属性值如果是多个记录,则作为结构体数组。所以需要知道选择了第几个选项才知道选择了哪个字符。 n=get(hObject,value); %确定选择了哪个行。 set(handles.text1,string,strn);%strn表示第n个字符。endbutton group:可以包含axes对象、uicontrol对象、Panel对象、Button Group对象。里面的子对象可以都是翻转按钮Toggle button、都是单选按钮、或者两者的混合。同一时刻只有一个处于选中状态。当子对象定义了callback函数时,点击按钮,响应的就是callback函数,如果没有定义函数,则会响应button group的函数。当点击子对象时,子对象的句柄只是作为button group对象的SelectedObject属性值,并不作为hObject句柄。但是对于子对象的函数来说,传回的参数就是句柄。SelectionChangeFcn函数中可以这样处理传回的hObject句柄:function bin_dec_SelectionChangeFcn(hObject, eventdata, handles)str=get(handles.num,string);switch get(hObject,tag) %通过判断子对象的句柄值来判断选中的子对象,执行操作。 case bin val=floor(str2num(str); set(handles.num,string,dec2bin(val); case dec set(handles.num,string,num2str(bin2dec(str); endPanel:面板:外形与button group相同。可以包含axes对象、uicontrol对象、Panel对象、Button Group对象。这与button group是相同的。不同点在于它不能够保证 在同一时刻,所有单选控件或翻转按钮中只有一个被选中。只是一个普通框架。axes:坐标轴,它是一个容器,可以存放GUI核心图形对象:image,light,line,patche,rectangle,surface,text.要注意NextPlot属性。回调函数之间共享数据的方法:1.使用全局变量在两个回调函数中都使用下面的定义global a %a是全局变量。则a成为两个函数之间的共享数据。使用全局变量还可以作为不同GUI窗口之间的变量传递。(.mat文件也可以作为不同窗口之间的数据传递方法。)2.GUI数据把变量放在handles中handles.变量名=变量值guidata(hObject,handles)如果存取大量数据:1.如果使用不频繁,可以放在userdata或者Application结构体中。2.如果使用很频繁,声明称global或其他普通变量。大量数据不应该放在handles中,否则会加大内存开销。窗口的句柄是正整数,其他对象的句柄值是系统随机产生的正数。部分图形对象的创建函数如下:根对象(计算机屏幕) root图形对象 figure坐标轴 axes内部控件 uicontrol菜单 uimenu右键菜单 uicontextmenu工具栏 uitoolbar按钮组 uibutongroup面板 uipanel图像 image灯光 light线条 line块 patch矩形 rectangle曲面 surface文本 text绘制 plot,area,bar,stem等分组 hggroup注释 annotation将GUI编译成可执行程序.exe在命令行中输入以下命令:mbuild -setupy并回车1并回车y并回车此时会显示Done.,表示安装成功。可以使用mcc命令进行编译,使用方法如下:mcc -m file1 file2 file3 %file表示M文件名。file1表示主GUI文件,file2,file3表示被

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论