Matlab GUI绘图
- 格式:ppt
- 大小:1.22 MB
- 文档页数:52
在Matlab中使用GUI设计用户界面引言Graphical User Interface (GUI) 是现代计算机软件中常用的一种类型用户界面,它通过图形化的形式提供了直观、易用的操作方式。
Matlab作为一种功能强大的数值计算软件,也提供了丰富的GUI设计工具,使得用户可以通过简单的拖拽和设置,快速地创建出美观实用的用户界面。
本文将介绍在Matlab中使用GUI设计用户界面的基本原理和步骤,并结合实例演示具体操作。
一、Matlab中的GUI设计工具Matlab提供了几种常用的GUI设计工具,包括GUIDE(GUI Development Environment)和App Designer。
GUIDE是Matlab较早期的一个GUI设计工具,提供了可视化的编辑界面,方便用户进行界面布局和交互事件的设置。
而App Designer是Matlab较新推出的GUI设计工具,相比GUIDE具有更加丰富的功能和更好的可视化编辑体验。
在本文中,我们将以App Designer为例来介绍Matlab中的GUI设计过程。
二、创建GUI应用程序在Matlab的主界面中,点击"APPS"菜单,选择"App Designer"打开App Designer界面,然后点击"Create App"按钮创建一个新的GUI应用程序。
在弹出的对话框中输入应用程序的名称并设置保存位置,点击"Create"按钮即可创建一个空的GUI应用程序。
三、设计用户界面在App Designer中,可以通过拖拽和调整控件来设计用户界面。
常用的控件包括按钮、文本框、下拉菜单、滑块等,用户可以根据需求自由选择和排列这些控件。
同时,还可以设置控件的属性,如大小、颜色、字体等,以及添加交互事件,如按下按钮后执行的操作。
四、设置控件属性和交互事件在设计好用户界面后,需要为每个控件设置相应的属性和交互事件。
(1)利用Matlab的图形用户界面(GUI)功能,设计并实现实验主界面;(2) 实现在“符号计算”图形用户界面中的各项符号计算功能,如实现Matlab的求极限、求导、求不定积分与定积分、级数求和、方程组的符号求解、常微分方程的符号求解等符号计算;(3) 利用Matlab的二维、三维绘图功能,实现图形用户界面(GUI)中的部分符号计算的可视化,即给出符号计算实例的同时实现该实例的图形化描述。
如下图给出了一个简单的GUI界面,学生可以参考如下图设计出自己的GUI界面。
程序如下:hf=figure('Position',[200,200,700,500],...'Name','信计08(2)班阿卜杜热黑木20080803417', ...'NumberTitle','off','MenuBar','none');uicontrol(hf,'Style','Frame','Position',[0,0.15,0.45,1],...'Units','normalized','Back',[0,1,1]);COMM1=['n=str2num(get(he1,''String''));', ...%求导连接'b=sym(get(he7,''String''));',...'dec=diff(b,n);', ...'set(he8,''string'',char(dec));'];COMM2=['a=str2num(get(he2,''String''));', ...%求极限连接'f=sym(get(he7,''String''));',...'lim=limit(f,a);', ...'set(he8,''string'',char(lim));'];COMM3=['g=sym(get(he7,''String''));',... %不定积分连接'int_1=int(g);', ...'set(he8,''string'',char(int_1));'];COMM4=['a=str2num(get(he3,''String''));', ... %级数求和连接'b=str2num(get(he5,''String''));', ...'f=sym(get(he7,''String''));',...'sum_1=symsum(f,a,b);', ...'set(he8,''string'',char(sum_1));'];COMM5=['a=str2num(get(he4,''String''));', ... %定积分连接'b=str2num(get(he6,''String''));', ...'f=sym(get(he7,''String''));',...'int_2=int(f,a,b);', ...'set(he8,''string'',char(int_2));'];COMM6=['f=get(he7,''String'');',...'dsolve_1=dsolve(f,''x'');', ...'set(he8,''string'',char(dsolve_1));'];COMM7=['f=get(he7,''String'');',...'ezplot(f);'];COMM8=['g=get(he8,''String'');',...'ezplot(g);'];uicontrol(hf,'Style','Push','Position',[0.02,0.9,0.11,0.06],...'String','求导','Units','normalized','Call',COMM1); uicontrol(hf,'Style','Text','Position',[0.17,0.85,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','阶数','Back',[0,1,1]);he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.9,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.72,0.13,0.06],...'String','求极限','Units','normalized','Call',COMM2);uicontrol(hf,'Style','Text','Position',[0.17,0.67,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','极限点','Back',[0,1,1]);he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.72,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.58,0.13,0.06],...'String','不定积分','Units','normalized','Call',COMM3);uicontrol(hf,'Style','Push','Position',[0.02,0.45,0.13,0.06],...'String','级数求和','Units','normalized','Call',COMM4);uicontrol(hf,'Style','Text','Position',[0.31,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he5=uicontrol(hf,'Style','Edit','Position',[0.38,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he3=uicontrol(hf,'Style','Edit','Position',[0.24,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.32,0.13,0.06],...'String','求定积分','Units','normalized','Call',COMM5);uicontrol(hf,'Style','Text','Position',[0.31,0.31,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he6=uicontrol(hf,'Style','Edit','Position',[0.38,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.3,0.08,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he4=uicontrol(hf,'Style','Edit','Position',[0.24,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.2,0.16,0.06],...'String','解微分方程','Units','normalized','Call',COMM6);uicontrol(hf,'Style','text','Position',[0.48,0.9,0.13,0.06],...'String','原函数','Units','normalized');he7=uicontrol(hf,'Style','edit','Position',[0.65,0.9,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','text','Position',[0.48,0.77,0.13,0.06],...'String','结果函数','Units','normalized');he8=uicontrol(hf,'Style','text','Position',[0.65,0.77,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);h_axes=axes('position',[0.55,0.2,0.4,0.5]);uicontrol(hf,'Style','push','Position',[0.58,0.02,0.13,0.06],...'String','初始绘图','Units','normalized','call',COMM7);uicontrol(hf,'Style','push','Position',[0.80,0.02,0.13,0.06],...'String','结果绘图','Units','normalized','call',COMM8);uicontrol(hf,'Style','Push','Position',[0.02,0.02,0.08,0.06],...'String','退出','Units','normalized','Call', 'close');。
/thread-58816-1-1.html请教Matlab用sfunction在GUI的axes上画图的问题我需要把simulink里面的实时仿真数据显示在GUI的axes里面,在sfunction里面通过guihandles和guidata获得了GUI中figure和axes的handle,用axes()指定GUI中的axes为当前的axes,用plot画图,运行后生成一个新的figure,在这个新的figure上画图,且只画一个点,没有连成曲线。
后来用plot(x,y,'Parent',axes_handle)画图,可以在GUI里面的axes上画图了,但是还是生成一个新的figure。
问题:1. 在sfunction里面的axes()指定当前axes是否有用,还是只能在GUI的m文件里有用?2. 怎么能不生成新的figure?3. 如何不只是画出点,而是连成曲线。
在论坛里看到有人说问题已经解决,不过方法就是在plot前面用axes()设置当前的axes,我用这个方法没有用,希望大家能不吝赐教,谢谢。
我觉得是这样的问题,你试试这样解决行不?1、把你的GUI的figure的handlevisibility属性从“callback”改为"on"。
然后再用你上面的方法绘图看看。
有问题的话再找我,呵呵。
2、用line函数绘图,代码如下:首先定义初始绘图标志,并初始化,在figure的opening_Fcn函数中global isfirstisfirst=1;然后在sfunction里面用如下代码:global xdata;global ydata;global h1;if isfirst==1xdata(1)=p;%p、q为从scope得到的点ydata(1)=q;xdata(2)=p;ydata(2)=q;h1=line(xdata,ydata,'EraseMode','xor');isfirst=0;endif isfirst==0xdata(2)=p;ydata(2)=q;set(h1,'xdata',xdata,'ydata',ydata); end。
MATLAB的计算可视化和GUI设计一、实验目的和要求(1)熟练掌握MA TLAB二维曲线的绘制(2)熟练掌握图形的修饰(3)掌握三维图形的绘制(4)熟练掌握各种特殊图形的绘制(5)掌握句柄图形的概念(6)掌握GUI设计二、内容和步骤(1)绘制二维曲线plot命令是MA TLAB中用来绘制二维曲线的1个常用命令。
>>subplot(221)>>x1=0:0.1:2*pi;>>y1=sin(x1);>>plot(x1,y1)以上命令是把图形窗口分割成两行两列,在窗口1绘制y=sin(x)的曲线;>>subplot(222)>>x2=peaks;>>plot(x2)在窗口2中绘制49*49的矩阵x2的曲线;>>subplot(223)>>x3=[1 2 3];>>y3=[1 2 3;4 5 6];>>plot(x3,y3)在窗口3中绘制x,y的混合曲线;>>x4=[1 1 1;2 2 2];>>y4=[1 3 7;5 9 6];>>z=x4+i*y4;>>plot(z)在窗口4中绘制复向量的曲线。
如下图所示:在窗口2中添加图形的网格并添加文字“x2曲线”>>subplot(222)>>hidden off>>subplot(222)>>grid on>>title('x2曲线')在窗口1中增加y=cos(x)曲线,并用两种不同的线型来表示y=sin(x)和y=cos(x) >>plot(x1,y1,’.’)>>hold on>>y=cos(x1);>>plot(x1,y,’o’)>>legend('sin(x)','cos(x)',4) %添加图例>>xlabel('x') %横坐标轴名>>ylabel('y') %纵坐标轴名在窗口2中改变坐标比例,并去掉坐标框>>axis([0,50,-5,5])>>box off(2)绘制三维图形在MA TLAB中,用来绘制三维图形的命令是plot3,它的使用格式与二维绘图的plot命令相似。
/viewthread.php?tid=47718&highlight=gui%2Baxes GUI中axes使用subplot时的清空及axes大小的固定的解决方法
看到过好几个类似下面问题的帖子:
1、axes显示图片时随着图片的大小变化,如何固定axes显示图片大小;
2、当在axes使用subplot画多个图时,如何清空图片,达到可以重复绘制图片的目的;昨天又遇到了/thread-47629-1-1.html
动手做了一个例子验证了一下,得出解决方法。
第一个问题很简单,把axes放到一个panel面板中即可;
第二个问题稍微麻烦点,有人可能会说用cla/cla reset,这个时候cla/cla reset只能清除最后一个subplot对应的图,其他的不能清除,举个例子说一下解决方法:
%画图程序:
复制内容到剪贴板
代码:
h1=subplot(121); %记下句柄h1
x=imread('football.jpg');
imshow(x);
h2=subplot(122); %记下句柄h2
y=imread('arms.jpg');
imshow(y);
%清空图像
复制内容到剪贴板
代码:
global h1 h2;
h=0;
if ishandle(h1) %判断h1是不是一个句柄
delete(h1);h=1;
end
if ishandle(h2) %判断h2是不是一个句柄
delete(h2);h=1;
end
if h
axes('parent',handles.uipanel1) %重建一个axes
end。
(1 利用Matlab 的图形用户界面(GUI )功能,设计与实现实验主界面;(2 实现在“数值计算”图形用户界面中的各项数值计算,如实现Matlab 的线性方程组的求解、数据统计与分析、数值插值、曲线拟合、常微分方程的数值求解等数值计算;(3 利用Matlab 的二维、三维绘图功能,实现图形用户界面(GUI )中的数值计算的可视化,即给出数值计算实例的同时实现该实例的图形化描述。
如下图给出了一个简单的GUI 界面,学生可以参考如下图设计出自己的GUI 界面。
figure('Color' ,[1,1,1],'Position' ,[100,100,700,600],...'Name' , '' , ...'NumberTitle' , 'off' , 'MenuBar' , 'none' ;uicontrol('Style' , 'Frame' , 'Position' ,[0,0.08,0.45,1],...'Units' , 'normalized' , 'Back' ,[0,1,1];XIANQIU=['a=str2num(get(xishu,''String'';', ...'b=str2num(get(changshu,''String'';', ...'b=b'';x=a\b;', ...'set(jieguo,''string'',x;'];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.92,0.20,0.06],...'String' , 'ÏßÐÔ·½³Ì×éÇó½â', 'Units' , 'normalized' , 'Call' ,XIANQIU;uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.83,0.1,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'ϵÊý¾ØÕó', 'Back' ,[0,1,1];xishu=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.83,0.25,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.72,0.1,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , '³£ÊýÏî¾ØÕó', 'Back' ,[0,1,1];changshu=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.72,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.63,0.20,0.06],... 'String' ,'Êýֵͳ¼ÆÓë·ÖÎö';uicontrol('Style' , 'Text' , 'Position' ,[0.23,0.63,0.2,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'ÔÚϵÊý¾ØÕóÊäÈë¿òÖÐÊäÈëÒª·ÖÎöµÄ¾ØÕó', 'Back' ,[0,1,1];uicontrol('Style' , 'Push' , 'Position' ,[0.06,0.55,0.1,0.05],... 'String' , 'ÊýÖµ²åÖµ';uicontrol('Style' , 'Push' , 'Position' ,[0.22,0.55,0.1,0.05],... 'String' , 'ÇúÏßÄâºÏ';uicontrol('Style' , 'Text' , 'Position' ,[0.005,0.45,0.05,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'X' , 'Back' ,[0,1,1];chazhi=uicontrol('Style' , 'Edit' , 'Position' ,[0.05,0.45,0.15,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.2,0.45,0.05,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'Y' , 'Back' ,[0,1,1];nihe=uicontrol('Style' , 'Edit' , 'Position' ,[0.25,0.45,0.15,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];XIANXING=['s=(get(changwei,''String'';', ...'c=(get(tiaojian,''String'';', ...'c_f=dsolve(''s'',''b'',''x'';', ...'set(jieguo,''string'',char(c_f;'];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.35,0.25,0.06],...'String' , '³£Î¢·Ö·½³ÌÊýÖµÇó½â', 'Units' , 'normalized' , 'Call' ,XIANXING;chengwei=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.25,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.25,0.1,0.05],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '΢·Ö·½³Ì', 'Back' ,[0,1,1];tiaojian=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.15,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.15,0.1,0.05],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '³õÖµÌõ¼þ', 'Back' ,[0,1,1];h_axes=axes('position' ,[0.5,0.15,0.4,0.4];jieguo=uicontrol('Style' , 'text' , 'Position' ,[0.5,0.6,0.45,0.25],... 'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.6,0.85,0.3,0.1],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '½á¹û', 'Back' ,[1,1,1],'FontSize' ,35;uicontrol('Style' , 'Push' , 'Position' ,[0.018,0.02,0.08,0.05],... 'String' , 'Í˳ö', 'Units' , 'normalized' , 'Call' , 'close' ;uicontrol('Style' , 'Push' , 'Position' ,[0.65,0.025,0.08,0.05],...'String' , '°¡Êµ´òʵ', 'Units' , 'normalized' , 'Call' , '»æÍ¼º¯Êý°´Å¥';。
matlab使⽤GUI的Axes控件读取图⽚或绘制曲线近期准备把⼀些之前在matlab上仿真的程序做成GUI便于后续的使⽤,因此⼜研究了⼀下GUI的使⽤,之前⽤GUI做过⼀个⼩⼯具,不过没有整理相关的内容,因此这次在制作GUI的过程中把⼀些常⽤的控件的使⽤进⾏简单的讲解。
在matlab程序中常常会⽤plot函数绘制⼀些图像⽤于分析,在GUI中⾃然也要充分利⽤图像显⽰的控件,达到更加直观的演⽰效果。
⾸先建⽴⼀个空的GUI⽂件,进⼊gui编辑界⾯,下图中左侧菜单栏⾥坐标图样的控件就是axes控件选中axes控件后在空⽩界⾯中左键进⾏拖拽即可得到⼀个空⽩的axes1。
为了在axes⾥⾯画点东西,添加⼀个按钮⽤于产⽣触发事件,当然也可以选择打开gui时显⽰或是其他的事件触发时显⽰。
右键按钮后,菜单中在查看回调选项⾥找到callback,点击后进⼊matlab编辑器界⾯,下⾯写⼀个简单的触发事件,显⽰⼀个正弦波信号,这⾥我们先使⽤axes函数选择⽤来显⽰的控件,然后和普通的matlab⼀样plot即可。
function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)t=0:0.01:1;axes(handles.axes1)plot(sin(50.*t)) 写好我们想显⽰的内容后保存m⽂件在gui编辑界⾯点击绿⾊箭头运⾏后,产⽣我们刚刚做好的gui界⾯。
点击按钮即可得到刚才我们写的触发函数的输出结果。
在Matlab中使用GUI工具箱进行界面设计Matlab是一款功能强大的科学计算软件,它不仅可以进行数值计算和数据分析,还提供了用于图形用户界面(Graphical User Interface,简称GUI)的工具箱。
通过GUI工具箱,用户可以设计出直观、易用的界面,方便自己和他人使用和操作自己编写的程序。
GUI工具箱提供了丰富的可视化组件,如按钮、文本框、下拉菜单等,以及一系列的回调函数,使得在Matlab环境中进行GUI设计变得相对简单。
下面我将简单介绍一下在Matlab中使用GUI工具箱进行界面设计的流程和常用技巧。
首先,打开Matlab软件,创建一个新的GUI应用程序。
在Matlab命令窗口中输入"guide"命令,即可打开GUI编辑器。
在GUI编辑器中,可以选择默认的空白界面或基于模板的预设界面进行设计。
在设计界面之前,需要明确自己的需求和设计目标。
例如,设计一个简单的计算器界面,包含输入框、按钮和显示框等组件。
接下来,可以通过拖拽和放置组件等方式来设计界面。
在GUI编辑器的左侧可以看到工具箱,其中包含了各种可用的界面组件。
不同组件有不同的属性,可以通过调整属性值来实现个性化的设计。
例如,我们可以在界面上放置一个输入框组件,用于用户输入计算器的操作数。
在属性编辑器中,可以设置输入框的位置、大小、默认值等属性。
同样地,我们可以在界面上放置一个按钮组件,用于用户点击进行计算。
在属性编辑器中,可以设置按钮的文本、位置、大小等属性。
在设计完界面之后,需要为按钮组件添加回调函数,以响应用户的操作。
回调函数是一种特殊的函数,当用户与界面交互时会被调用。
回调函数可以通过访问界面上的组件来获取用户输入的数据,并进行相应的计算和操作。
在Matlab中,可以通过编辑按钮的"Callback"属性来设置回调函数。
例如,我们可以为计算按钮添加如下的回调函数:function calculateButton_Callback(hObject, eventdata, handles)operand = str2double(get(handles.inputBox, 'String'));result = calculate(operand);set(handles.outputBox, 'String', num2str(result));上述回调函数中,首先通过获取输入框组件的字符串,将用户输入的操作数转换为浮点数。
设计一个用户图形界面,完成以下基本功能:添加两个输入框,用来输入下图典型二阶系统的阻尼比和无阻尼自然频率。
根据所输入的值不同,通过下拉列表选择绘制该二阶系统的四种分析图(在四个不同的坐标系中绘制):单位阶跃响应图(在该图上显示该二阶系统的三个性能指标的值:超调量、调节时间、峰值时间)、根轨迹图、乃奎斯特图和波特图(在该图上显示该系统的幅值裕度和相角裕度的值)。
PS:可对图形界面进行个性化设计并添加更为丰富的功能。
将文档后边程序复制到m文本里,并下载gui界面,放到一个文件夹里,将MATLAB的工作目录指定到该文件夹。
地址如下:运行m文本。
在阻尼比和无阻尼自然频率的文本框里输入相应的值,在下拉菜单里选择相应的曲线类型,再点击绘制,则可以在图表中显示对应的曲线,点击退出则关闭图形界面。
例如输入阻尼比1,无阻尼自然频率输入2,点击根轨迹图,则显示如图的曲线。
的曲线。
点击奈奎斯特图则,显示如下:点击波特图则显示如下:程序代码如下:function varargout = lastwork(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @lastwork_OpeningFcn, ...'gui_OutputFcn', @lastwork_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});endfunction lastwork_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject;guidata(hObject, handles);function varargout = lastwork_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;function pushbutton1_Callback(hObject, eventdata, handles)clc;a = str2num(get(handles.edit1,'string'));b = str2num(get(handles.edit3,'string'));num=[b*b];den1=[1 2*a*b b*b] ;t = 0:0.005:5;sys1=tf(num, den1);c = get(handles.popupmenu1,'value');switch ccase 1X =step(sys1,t);plot(t,X,'r','linewidth',2);[y,x,t]= step(sys1,t);[ymax,tp]=max(y);fengzhi_time = (tp - 1)*0.005;chaotiaoliang = (ymax-1)/1*100;max_overshoot=ymax-1 ;r=1;while r<=length(y)&& y(r)<1.0001r=r+1;endshangshen_time = (r-1)*0.005;s=1001;while y(s)>0.98&&y(s)<1.02s=s-1;endtiaojie_time=(s-1)*0.005 ;fengzhi_time=num2str(fengzhi_time);chaotiaoliang=num2str(chaotiaoliang);chaotiaoliang=[chaotiaoliang,'%'];tiaojie_time=num2str(tiaojie_time);max_overshoot=num2str(max_overshoot);text(3,(max(X)+min(X))/2+(max(X)+min(X))/6,'调节时间:');text(4,(max(X)+min(X))/2+(max(X)+min(X))/6,tiaojie_time);text(3,(max(X)+min(X))/2,'峰值时间:');text(4,(max(X)+min(X))/2,fengzhi_time);text(3,(max(X)+min(X))/2-(max(X)+min(X))/6,'超调量:');text(4,(max(X)+min(X))/2-(max(X)+min(X))/6,chaotiaoliang);case 2rlocus(num,den1)a=get(gca);x=a.XLim;%获取横坐标上下限case 3nyquist(num,den1);case 4bode(sys1);set(findobj(gcf,'type','line'),'linewidth',2,'color','red')[gm,pm] = margin(sys1);text(0.1,100,'相角裕度:');pm=num2str(pm);text(1,100,pm);text(0.1,50,'幅值裕度:');gm=num2str(gm);text(1,50,gm);endgrid on;function edit1_Callback(hObject, eventdata, handles)function edit1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction edit3_Callback(hObject, eventdata, handles)function edit3_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction listbox1_Callback(hObject, eventdata, handles)function listbox1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction popupmenu1_Callback(hObject, eventdata, handles)function popupmenu1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction pushbutton2_Callback(hObject, eventdata, handles)close(gcf)。
第4章MATLAB计算的可视化和GUI设计MATLAB具有非常强大的二维和三维绘图功能,尤其擅长于各种科学运算结果的可视化。
1. plot(x) 绘制x向量曲线plot命令是MATLAB中最简单而且使用最广泛的一个绘图命令,用来绘制二维曲线。
语法:plot(x) %绘制以x为纵坐标的二维曲线plot(x,y) %绘制以x为横坐标y为纵坐标的二维曲线说明:x和y可以是向量或矩阵。
【例4.1】用plot(x)命令画直线,如图4.1所示。
图4.1 (a) x1曲线 (b) x2曲线x1=[1 2 3]x1 =1 2 3plot(x1)x2=[0 1 0]x2 =0 1 0plot(x2)2. plot(x,y) 绘制向量x 和y的曲线【例4.2】绘制正弦曲线y=sin(x)和方波曲线,如图4.2所示。
x1=0:0.1:2*pi;y1=sin(x1);%y1为x1的正弦函数plot(x1,y1);x2=[0 1 1 2 2 3 ];y2=[1 1 0 0 1 1 ];plot(x2,y2);axis([0 4 0 2])%将坐标轴X围设定为0-4和0-2图4.2 (a) 正弦曲线 (b) 方波曲线3. plot(x) 绘制矩阵x的曲线【例4.3】矩阵图形的绘制,如图4.3所示。
图4.3 (a) x1曲线 (b) x2曲线x1=[1 2 3;4 5 6];plot(x1);x2=peaks; %产生一个49*49的矩阵plot(x2);程序分析:a图中有三条曲线而不是两条曲线,因为矩阵x1有三列,每列向量画一条曲线;b图为由peaks函数生成的一个49×49的二维矩阵,因此产生49条曲线。
4. plot(x,y)绘制混合式曲线当plot(x,y)命令中的参数x和y是向量或矩阵时,分别有以下几种情况:▪如果x是向量,而y是矩阵,如此x的长度与矩阵y的行数或列数必须相等,如果x的长度与y的行数相等,如此向量x与矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等,向量x与y的每行向量画一条曲线,如果y是方阵,如此x和y的行数和列数都相等,将向量x与矩阵y的每列向量画一条曲线;▪如果x是矩阵,而y是向量,如此y的长度必须等于x的行数或列数,绘制的方法与前一种相似;▪如果x和y都是矩阵,如此大小必须一样,矩阵x的每列和y的每列画一条曲线。