带你从零开始,快速学会 Matlab GUI_软件供应链安全的博客-程序员宅基地

本文来自作者 木木小迷哥 在 GitChat 上分享「Matlab GUI 零基础学员快速入门」,阅读原文」查看交流实录

文末高能

编辑 | 洛肯

Matlab广泛地应用于数学分析、计算、自动控制、系统仿真、数字信号处理、图像处理、数理统计、人工智能、通信工程和金融系统等领域。

本活动针对零基础学员,结合个人经验,使 Matlab 新手少走弯路、快速入门(相应的代码用斜体表示)。具体内容如下:

  • Matlab 基础知识

  • Matlab 绘图

  • Matlab GUI 编程

  • 相关知识介绍

  • 交流讨论

1. Matlab 基础知识

1.1 Matlab操作环境

Matlab为用户提供了简洁易用的界面操作环境,主界面上显示的常用主要功能模块包括:新建脚本、当前工作目录、命令行窗口、工作空间、Simulink工具等。如下图所示。

注1.1:编程时候通常ctrl+n新建一个脚本文件,然后点击ctrl+s把文件保存到当前工作目录。然后可以在新建的脚本文件里写代码,执行代码后产生的数据结果将在工作空间显示。

1.2 常用命令介绍

Matlab提供了一些简单的命令,平时经常用到。总结在下表中。

  • clc                        清空命令行窗口

  • clear                     清除工作空间所有变量

  • clear all                清除工作空间所有变量和函数

  • close all                关闭图形窗口

  • save name            保存工作空间变量到文件name.mat中

  • save name x y       保存工作空间变量x,y到文件name.mat中

  • load name             载入name.mat文件中的所有变量到工作空间

  • load name x y        载入name.mat文件中的的变量x,y到工作空间

  • “ 向上箭头”             调用上一次的命

  • “ 向下箭头”             调用下一行的命令

  • Tab    函数自动补全

注1.2:了解常用命令即可,不必死记硬背。使用时,可百度查询相应的命令或者查询帮助文档。

1.3 M文件编辑器

代码通常可写在Matlab的M文件编辑器中,这样便于调试代码。使用时可通过快捷键ctrl+n或者点击Matlab主界面的“新建脚本”来创建空白的M文件。然后可在M文件中编写代码。此外,笔者个人习惯上在M文件开头写上clc; clear all; close all;等命令,如下图所示。

1.4 Matlab使用帮助

  1. 可通过help命令查询相关函数使用说明

  2. 可在互联网查询相关函数使用说明,并往往可以查到多个实例,便于初学者使用。

1.5 Matlab数值运算

1)加减乘除实例

可以看到在M文件(上图右侧)编写代码的话,运算过程和结果(上图左侧)都较为清晰,同时方便对源代码(上图右侧)进行修改。

2)矩阵运算实例

1.6 Matlab符号运算

Matlab符号运算种类很多,支持常用的代数运算、积分、微分、极限等。

1)极限实例

可以看到,结果为:1。

2)微分实例

3)积分实例

此外,Matlab还支持其他一些常用的符号计算。相应的函数如下:

  • 合并表达式    collect

  • 展开表达式    expand

  • 因式分解    factor

  • 嵌套表达式    horner

  • 计算最小分母公因式    Numden

  • 求反函数    finverse

2. Matlab 绘图

2.1 绘二维图形

1)实例1:绘制正弦曲线(使用的函数:plot)。代码如下:

clc
clear all
close all
%%
x = -10:0.1:10;
figure(1)
plot(x,sin(x));

相应的图形如下:

2)实例2:绘制余弦曲线。代码如下:

clc
clear all
close all
%%
x = -10:0.1:10;
y = sin(x);
figure(1)
plot(x,y);

相应的图形如下:

3)实例3:同时绘制多个图形(使用函数hold on)绘制正余弦曲线,代码如下:

clc
clear all
close all
%%
x = -10:0.1:10;
y1 = sin(x);
y2 = cos(x);
figure(1)
plot(x,y1);
hold on;
plot(x,y2)

相应的图形如下:

2.2 设置曲线属性

  • -       实线

  • :      虚线

  • -.     点划线

  • —     双划线

  • b    蓝色

  • g    绿色

  • r    红色

  • c    青色

  • m    品红

  • y    黄色

  • k    黑色

  • w    白色

Matlab中,除了可以设置曲线形状和颜色外,还可以为曲线中的数据点设置属性。这样就可以选择不同的数据点行,从而方便的将不同的曲线区分开来。Matlab中的数据点行的属性如下:

  • .    实心黑点

  • +    +字符号

  • ^    上三角符

  • d    菱形

  • h    六角星

  • o    空心圆圈

  • p    五角星

  • s    方块符

  • x    差字符号

1)实例说明代码如下:

clc
clear all
close all
%%
x = -6pi:0.1:6pi;
y = sin(x);
figure(1)
plot(x,y,’r—‘,’linewidth’,2);

图形如下:

2)设置坐标轴范围,使用的函数 axis,实例:

clc
clear all
close all
%%
x = 0:0.01:pi/2;
plot(x,tan(x),’-ro’);
axis([0 pi/2 0 50])
grid on

相应的图形如下:

3)图形标识:legend函数,title函数,xlabel函数,ylabel函数,text函数等…..

实例如下:绘制sin(x)和cos(x),分别为红色实现和蓝色点划线。

clc
clear all
close all
%%
x = -3pi:0.1:3pi;
y1 = sin(x);
y2 = cos(x);
figure(1)
plot(x,y1,’r-‘);
hold on
plot(x,y2,’b—‘)
legend(‘sin(x)’,’cos(x)’);
axis([-12 12 -1.5 1.5])
grid on

相应的图形如下:

4)其他图形绘制函数介绍

Matlab还支持其他形状的图形绘制。现总结如下:

函数名称    功能介绍
subplot    绘制多子图
plotyy    绘制双坐标轴
area    绘制面积图
bar    绘制直方图
pie    绘制二维饼图

Matlab绘图命令非常丰富,未能一一详细列举,如有用到可上网查询。

3. Matlab GUI编程

图形用户界面(GUI)是为方便用户和计算机信息交流而设计的计算机程序,它是由窗口、菜单、图标、光标、按键、对话框、文本框等组成的用户界面。它让用户定制与Matlab的交互方式,而命令窗口不是唯一与Matlab的交互方式。

3.1 图形用户界面开发环境(GUIDE)

Matlab提供了一套可视化的创建图形窗口的工具,使用图形用户界面开发环境可方便地创建GUI应用程序,它可以根据用户设计的GUI布局,自动生成M文件的框架,用户使用这一框架编制自己的应用程序。

同时,Matlab提供了一套可视化的创建图形用户接口(GUI)的工具,如下图所示:

下面对其进行详细介绍。

1)布局编辑器(Layout editor)如下:

布局编辑器用于从控件选择板上选择控件对象并拖拽到布局区合适的位置去。 在命令窗口输入GUIDE命令即可打开空白的布局编辑器图形用户界面。

2)位置调整工具(Alignment tool)如下:

利用该工具,可对GUI对象设计区的多个对象的位置对齐调整。

3)属性查看器

利用对象属性查看器,可以查看每个对象的属性值,也可以修改、设置对象的属性值。

4)菜单编辑器(Menu Editor)如下

菜单编辑器包括菜单的设计和编辑,菜单编辑器有八个快捷键,可以利用它们任意添加或删除菜单,可以设置菜单项的属性,包括名称(Label)、标识(Tag)、选择是否显示分隔线(Separator above this item)、是否在菜单前加上选中标记(Item is checked)、调用函数(Callback)。利用菜单编辑器,可以创建、设置、修改下拉式菜单和快捷菜单。

5)对象浏览器(Object Browsers)

利用对象浏览器,可以查看当前设计阶段的各个句柄图形对象。可以在对象浏览器中选中一个或多个控件来打开该控件的属性编辑器。

6)Tab顺序编辑器(Tab Order Editor)

3.2 控件对象及属性

Matlab中的控件大致可分为两种,一种为动作控件,鼠标点击这些控件时会产生相应的响应。一种为静态控件,是一种不产生响应的控件,如文本框等。常用的控件属性及其描述如下:

  • BackgroundColor:取值为颜色的预定义字符或RGB数值;缺省值为浅灰色;

  • Callback:取值为字符串,可以是某个M文件名或一小段Matlab语句,当用户激活某个控件对象时,应用程序就运行该属性定义的子程序;

  • Enable:取值为on(缺省值),inactive和off;

  • Extend:取值为四元素矢量[0, 0, width, height],记录控件对象标题字符的位置和尺寸;

  • ForegroundColor:取值为颜色的预定义字符或RGB数值,该属性定义控件对象标题字符的颜色;缺省值为黑色;

  • Max,Min:取值都为数值,缺省值分别为1和0;

  • String:取值为字符串矩阵或块数组,定义控件对象标题或选项内容;

  • Style:取值可以是pushbutton(缺省值), radiobutton, checkbox, edit, text, slider, frame, popupmenu 或listbox;

  • Units:取值可以是pixels (缺省值), normalized(相对单位), inches, centimeters(厘米)或points(磅);

  • Value:取值可以是矢量,也可以是数值,其含义及解释依赖于控件对象的类型;

  • FontAngle:取值为normal(正体,缺省值), italic(斜体), oblique(方头);

  • FontName:取值为控件标题等字体的字库名;

  • FontSize:取值为数值;

  • FontUnits:取值为points(缺省值), normalized, inches, centimeters或pixels;

  • FontWeight:取值为normal(缺省值), light,demi和bold,定义字符的粗细;

  • HorizontalAligment:取值为left,center (缺省值) 或 right,定义控件对象标题等的对齐方式。

3.3 GUI编程思路介绍

1)(控件属性设置查看)往布局编辑器添加一个控件,并双击,会出现一个界面。界面左侧是该控件的属性,包括“BackgroundColr”、“BeingDeleted”、“BusyAction”等,界面右侧是与每个属性相对应的属性值。

2)(控件名字)每个对象都有一个“名字”,即Tag属性,之所以称之为名字,是因为我们在使用这个对象的时候是通过这个Tag来找到该对象的。即通过一个非常重要的get()函数来实现。

3)(get(), set()函数)通过对象的名字(Tag属性)找到该对象以后,对该对象的操作是通过set()函数来实现。

4)(hObject, handles)用户按下某个按键,必然是想触发某个响应,即调用callbackfunction(回调函数)来执行这个响应。在这个过程中,数据通过hObject和handles.对象名来传递。

3.4实例演示(视频讲解)

1)两个数相加

命令行窗口输入guide,弹出如下窗口:

选择第一个空白GUI,点“确定”按钮。弹出如下未命名GUI界面:

点击“文件”—“另存为”,保存当前GUI界面,命名为GUI_test:

拖拽三个“可编辑文本”控件,两个“静态文本”控件,一个“按钮”控件,并在适当位置摆放好(可使用对齐工具进行控件间对齐),效果如下:

双击每个控件,对其对象属性(Tag)进行设置,属性分别设置为三个“可编辑文本”控件:string属性的属性值均为“空”;tag属性的属性值分别为number_1, number_2, number_3(对tag属性进行设置,相当于给每个控件起个不同的名字,便于后面对每个控件进行操作)。

两个“静态文本”控件:string属性的属性值分别为“+”和“=”;tag属性的属性值默认即可(因为此例中我们不需要对这两个控件的属性进行操作)。

一个“按钮”空间:string属性的属性值为“Run”;tag属性的属性值为“run_button”。

设置后的效果如下图:

下面进行编程。

点击保存按钮,会跳转到M文件编辑器,右键run_button控件,点击“查看回调”—“callback”,会进入到相应的代码编辑区,效果图如下:

下面进行代码编辑。注意get() set() hObject, handles的使用,充分理解数据如何获得和在空间之间进行传递。代码如下:

data_1_str = get(handles.number_1, ‘string’);
data_1_num = str2num(data_1_str);
data_2_string = get(handles.number_2, ‘string’);

data_2_num = str2num(data_2_string);
sum_num = data_1_num + data_2_num;

sum_str = num2str(sum_num);
set(handles.number_3, ‘string’, sum_str);

效果图如下:

2)按下按钮去绘制sin(x)

3.5 GUI高级编程

  • 1)对话框

  • 2)串口

  • 3)文件和IO

  • 4)推荐书籍  《MATLAB GUI 设计学习手记 第2版 罗华飞》

4. 相关知识介绍

Matlab应用领域非常广泛,包括数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理技术、数字信号处理技术、MATLAB在通讯系统设计与仿真的应用、MATLAB在通讯系统设计与仿真的应用、通讯系统设计与仿真、财务与金融工程、管理与调度优化计算(运筹学)等各个领域,我们不可能对每个领域的都很擅长,因此结合自身研究方向,选择合适的参考资料进行学习。

这里给出一个比较好的学习网站(不仅限于Matlab):www.youtube.com,Google和百度里也有非常多的学习资料。

学习建议:针对Matlab GUI,理解所列举的核心思想;针对自己的研究课题,以任务为导向,有针对性学习某方向的知识;借助互联网,搜索相关资料。

 近期热文

Java 多线程编程核心技术有哪些

Python 的 C 扩展开发惯例

如何成为一名程序员面霸

轻松入门 | 用 WordPress 和主题模板做网站

Java 8 Stream API 实用指南

GitChat 与 CSDN 联合推出

《GitChat 达人课:AI 工程师职业指南》

「阅读原文」看交流实录,你想知道的都在这里

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/GitChat/article/details/78546892

智能推荐

bash进程子进程_bash子进程-程序员宅基地

进程子进程作为子进程运行的管道, 不能够改变脚本的变量.[bash]$ variable=“initial_value”[bash]$ echo “new_value” | read variable[bash]$ echo “$variable”initial_value[bash]$ a=“hello”;echo “world” | read a ; echo $ahello[..._bash子进程

eclipse 导入项目出现的问题汇总-程序员宅基地

Unbound classpath variable: 'TOMCAT_HOME' in project XXX Problem翻译:未绑定的类路径变量:项目XXX中的“TOMCAT_HOME”解决:配置TOMCAT环境变量,新建TOMCAT_HOME环境变量,path为tomcat目录路径。打开eclipse,选择Window-> Preferences-> Ja..._configure path variables tomcat_home

如何写出让同事无法维护的代码?-程序员宅基地

译文:http://coolshell.cn/articles/4758.html原文:http://mindprod.com/jgloss/unmain.html文章转自公众号str...

uni-app 内置canvas生成验证码_uniapp+ js-captcha_Lylovehyy的博客-程序员宅基地

前言使用uni-app在开发登录验证过程中,需用到验证码功能。虽说现在大部分使用短信验证或者滑动验证,但是少部分需求还是有的。封装组件的思路如下:生成验证码字符集 1~9 且 a~z(自行可排除1、l或0,o 容易混淆的字符)生成随机颜色 可通过生成 #0123ab 这种的十六进制的颜色创建画布并将上述的验证码及颜色带入画布中随机画n个直线可做干扰项点击验证码重新调用 达到换验证码效果,并赋值到父组件上子组件代码如下:<template> <view class=_uniapp+ js-captcha

MATSIM使用教程_400.184-程序员宅基地

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma..._400.184

如何在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用_暗诺星刻的博客-程序员宅基地

实现了在 Windows 上安装多个 MySQL、MySQL 跨电脑移植使用的标准是,如果在一个 Windows 上安装了一个 MySQL,然后将此 MySQL 数据拷贝到第二台没有安装过 MySQL 的 Windows 上,第二台 Windows 可以无附加条件地通过一定的方法来访问此 MySQL 数据库,且数据库中的数据没有损失。达到了上述的标准就认为实现了 MySQL 的跨电脑移植使用。MySQL 可以实现这样的技术。具体来说,如果可以将一台 Windows 上的数据库拷贝到第二台电脑上,第二台电脑

随便推点

【Java】java运行jar时,报 java.lang.UnsupportedClassVersionError-程序员宅基地

问题现象:java运行jar时,报 java.lang.UnsupportedClassVersionErrorjava -jar main.jar -h 192.168.221.171 -u tdmp -p tdmp -d orcl -t tdmptabinfoError: A JNI error has occurred, please check your installa...

浅析MySQL中exists与in的使用 (写的非常好)-程序员宅基地

转载于:https://www.cnblogs.com/beijingstruggle/p/5885137.html转自http://sunxiaqw.blog.163.com/blog/static/990654382013430105130443/ exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,当 exists里的条件语句能够返回记录行时(无论记录行是的多少,只...

Python openpyxl 实现Excel自适应列宽的N种方法,亲测可用_openpyxl设置列宽自适应_CDamogu的博客-程序员宅基地

openpyxl 实现Excel自适应列宽的2种方法1、手动设置行高、列宽数值2、自适应设置列宽2.1、复制即可使用,仅需要修改传入的Excel名及Sheet名即可(类)2.2、复制即可使用,仅需要修改传入的Excel名及Sheet名即可(简短)1、手动设置行高、列宽数值openpyxl 的 Worksheet 对象拥有 row_dimensions 和 column_dimensions 属性,可分别用于控制行高和列宽import openpyxlwb=openpyxl.Workbook()sh_openpyxl设置列宽自适应

基于STM32CubeMX的LL库学习记录(一)软件下载_stm32ll库下载-程序员宅基地

最早学习STM32F1还纠结于是从寄存器入手还是从标准库入手,捣鼓了一段时间寄存器后发现寄存器的配置太麻烦了,而且不容易移植,加上之前项目对于执行效率和ROM没有非常严格的要求,所以慢慢的还是用标准库进行开发,但是之前学习寄存器的过程还是积累了很多知识,所以推荐有看到这篇文章的朋友还是抽空看下寄存器的相关资料,推荐正点原子的教程。 最近要做一个产品,要用STM32F0..._stm32ll库下载

Improving Knowledge-aware Recommendation with Multi-levelInteractive Contrastive Learning_海 绵的博客-程序员宅基地

CIKM'22的一篇文章,关于知识感知推荐,对比学习_improving knowledge-aware recommendation with multi-level interactivecontras

苹果手机悬浮窗怎么打开_悬浮窗搜题神器_悬浮窗搜题神器app源码苹果软件预约 v1.0...-程序员宅基地

悬浮窗搜题神器,是一个非常不错的学习软件,它主要为中小学生打造,覆盖语数英理化地史政治生课程,学生可以随时在线学习,需要什么课程,直接搜索就可以快速找到,很方便,并且提供了大量的练习题,便于不断的巩固复习。悬浮窗搜题神器功能:1、答案全:语数英理化地史政治生,覆盖中小学全部年级全部学科95%以上练习题答案;2、查找快:扫码搜索,按书名搜,按年级搜,按学科搜,按版本搜,怎么搜都行..._苹果可以悬浮窗搜题吗