查看: 1528|回复: 20

用Matlab制作一个你专属的App!

[复制链接]

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
发表于 2018-7-27 19:46:17 | 显示全部楼层 |阅读模式
MATLAB是一款功能强大的软件,我们不仅可以通过编写代码来实现各种功能,还可以使用它的GUI(Graphical User Interface)界面,让我们编写的程序,通过图形直观地输出。接下来我就通过一个简单例子大概介绍介绍一下GUI界面的编写的过程,并进行封装生成exe文件,即使不打开Matlab也可以独立运行,真正打造属于你自己的App
首先,我们来新建一个GUI界面,我们可以通过再命令行窗口输入guide,来打开新建GUI界面或者通过依此点击>新建>App>GUIDE 来打开新建GUI界面的窗口,具体如下图所显示



已保存



新建一个空的GUI后,会弹出一个窗口,如下图所示



可以看可以看到界面的左边有很多的小图标,这些就是GUI中的控件也是我们要进行操作的对象。不同的控件具有不同的功能,有只用来显示文字的文本框、可编辑的文本框、按钮等等。我就不做一一介绍,在这里只介绍几个简单常用的控件,如下图所示。



图中列举了几个简单常用的控件,我们从上到下依次介绍

  • 按钮:顾名思义就像生活中的按钮一样,可以按下并实现某些功能,我们在GUI中的很多操作可以通过点击按钮来完成。
  • 可编辑文本:字面上就能看出来,在这个文本框内,里面的内容我们是可以编辑的。
  • 静态文本:不可编辑的文本,通常用来对某些控件进行说明。
  • 弹出式菜单:对它进行操作的时候会弹出我们事先设定的选项供我们选择。
  • 坐标轴:这个大家可以理解成一个用来显示图片,进行绘画的界面部分就行。
接下来就是在GUI中如何来操作这些控件,在此之前,我们需要先来了解,我们能操纵控件的什么(也就是控件的属性)。控件都有哪些属性呢,我们以可编辑文本为例做说明,当我们新建一个可编辑文本后,双击这个控件,就会弹出下图所示的界面



界面左侧就是可编辑文本框各个属性的名称如字体大小、字体颜色、‘String’等等,右边对应了属性的值或者内容,我们可以在这里进行直接编辑或者像通过代码进行编辑。同样的我们也可以通过代码来获取控件各个属性,正是基于这个我们才能通过GUI来实现各个控件的联动,从而实现我们想要达到的效果。在属性界面,尤其要注意的就是图上中红色框框标出的部分,见下图。



String的内容表示了控件显示出来的文本,Style则是控件的类型,Tag表示了控件的名称。在编写代码的时候我们通常会使用set这个语句来设置某个控件的属性或者使用get来获得某个控件的属性。下面我们以一个简单的例子来演示GUI界面的编写过程。
现如今房价越来越贵,大家买房子的时候很少有人会取全款买房,贷款买房是大多数人的选择。可是贷款的时候不同的利率,不同的还款方式,贷款的金额,年限等等都会影响我们最后的还款金额。那么我们在这里就用Matlab的GUI界面来做一个贷款App吧。考虑到贷款要考虑的因素,我们可以设计如下的GUI界面



红色框框用到了静态文本用来表明左侧的文本对应的内容是什么,绿色框框用到了可编辑文本,在运行GUI界面的时候我们可以改动里面的内容。蓝色的是
弹出式菜单,对应的里面设置的是还款方式(等额本金和等额本息),我们在其String属性里面设置
如下图:



在String里面每一行表示一个选项,我们对应的分别是等额本金和等额本息。黄色框框就是坐标轴控件,这里用来显示我们贷款后每个月还款的金额。紫色框框里面用到的是按钮控件,我们预计的结果就是所有参数输入完毕后点击一下按钮,就能在坐标轴里面显示每个月的还款额度,并在最下面输出我们总共要付的利息。对于可编辑的控件当我们使用鼠标右键单机的时候会弹出一个对话框,我们可以在“查看回调”对应的下拉选项中选择一个编程来实现功能,最长用到的就是callback。比如在我们的例子中要实现鼠标左键单击‘计算’按钮,在界面输出贷款结果,那么我们可以鼠标右键单击计算按钮,点开查看回调中的callback,来创建‘计算’这个按钮控件的回调函数。如下图:



点开之后就会出现一个代码框如下图



图中function pushbutton3_Callback(~,~handles)就是‘计算’按钮的的回调函数,由于我这之前没有更改计算按钮的Tag属性(也就是控件的ID),所以这里现实的是pushbutton3,当我们改表属性Tag为pushbutton_jisuan,然后显示就变成了下图所示



然后我们就可以在里面输入代码来实现我们想要的功能。在我们这个例子中,整个GUI只需要在这里编写代码,具体代码如下:
huankuan=get(handles.popupmenu_huankuan,'Value');%通过读取控件Value来获取贷款方式
r=str2double(get(handles.edit_lilv,'string'))*...%换行
(1+str2double(get(handles.edit_fudong,'string'))/100)/1200;%获取并计算月利率
yihang=get(handles.edit_yinhang,'String');%获取贷款银行
H=str2double(get(handles.edit_daikuannian,'string'))*12;%获取贷款期数
P=str2double(get(handles.edit_jine,'string'));
axes(handles.axes1);
switch huankuan
case 1 % 等额本金
for M=1:H
A(M)=P*10000/H+(1-(M-1)/H)*P*r*10000;%等额本金计算公式
end
plot([1:H],A)
% ylim([min(A)-500 max(A)+500]);
xlim([0 H]);
title(yihang);
ylabel('每月还款金额(元)');
xlabel('还款月份');
case 2 % 等额本息
for M=1:H
A(M)=P*10000*r*((1+r)^H/((1+r)^H-1));
end
plot([1:H],A)
xlim([0 H]);
title(yihang)
ylabel('每月还款金额(元)');
xlabel('还款月份');
end
L=(sum(A)-P*10000)/10000;%计算总利息
set(handles.text_lixi,'String',num2str(L));%在文本框lixi中显示总利息
对于新手来说一定要注意handles.xxx,这里的xxx对应的是每个控件的Tag。还有就是要注意数据的属性,要显示出来的都是字符型,我们直接从控件读取的都是字符型,需要使用str2double或者str2num函数转换成可以计算的数字型。同样的,当我们通过代码设置控件的‘String’属性的时候需要将计算的数字用num2str转换成字符型才能使用。
都弄好之后我们点击保存,命名为daikuan。然后我们就能看到有两个文件保存了下来,如下图



分别是m文件和fig文件,对应的是代码文件和图形界面文件,两个文件之间是相互联动的,想要运行我们刚刚编写好的GUI,这两个文件去缺一不可。
当这两个文件在Matlab的工作路径下的时候我们可以双击fig文件打开GUI或者双击m文件,然后点击编辑器里面的‘运行’按钮打开GUI。打开后的界面如下图所示



假如我们选择工商银行贷款,贷款金额为100万元,贷款期限为30年,年利率是4.9%,利率上浮20%。那么选用等额本金和等额本息的计算出来的还款图就如下图所示



最后我们把制作好的GUI界面封装成exe文件来脱离Matlab独立运行。

我们可以在命令行窗口输入deploytool这个代码或者通过Matlab>App>Application Compiler,来打开Application Compiler。打开后如下图所示



在选好daikuai.m文件后,我们还可以自己设置App图标以及各种软件信息,如下图



输出有两种,一种文件较小,运行的时候需要额外安装一些软件(如果已经装了Matlab则不需要),另一种文件很大是可以完全独立运行的(不需要安装Matlab)。这里我们选择最小的那个,然后点击Package进行封装生成EXE文件。然后找到生成文件路径,双击打开新生成for_test文件夹下的daikuan,同样也能够开始贷款计算啦,此时你不需要运行Matlab!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:02:01 | 显示全部楼层
混淆概念吧,app是指移动端应用的程序,狭义特指安卓系统的应用程序。而且matlab是实验型语言,生成的gui应用只能在安装了匹配版本的matlab运行环境的电脑上运行,根本不是真正的应用程序
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:05:09 | 显示全部楼层
app一般不是指手机上的软件吗?
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:08:46 | 显示全部楼层
matlab封装的软件装到别的电脑上,运行环境版本不对都跑不起来
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:11:46 | 显示全部楼层
GUI应该算是最简单的吧
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:14:53 | 显示全部楼层
Matlab与App
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:17:44 | 显示全部楼层
APP是指application,说得通!话说十年前我大学学的MATLAB还是专门画电路图的和你这是一个软件吗?
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:21:12 | 显示全部楼层
MFC[捂脸]
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:24:28 | 显示全部楼层
app 全称 application,译为:应用,应用程序,并不是特指安卓安装包,安卓只是其一种应用的展现,任何可运行,可复制的软件程序都可以称之为应用程序
回复 支持 反对

使用道具 举报

4301

主题

6529

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20323
 楼主| 发表于 2018-7-27 19:26:51 | 显示全部楼层
有matlab软件吗???分享一个一下呗,要破解版的!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表