"高级系统设置"——>“环境变量”——>系统变量中“Path”中添加:C:\ProgramFiles\MATLAB\R2016a\bin\win64。我的Path:C:\ProgramFiles\Broadcom\Broadcom802.11NetworkAdapter\Driver;C:\Pr" />
当前位置:文档之家› vs2015调用matlab 2016a教程

vs2015调用matlab 2016a教程

vs2015调用matlab 2016a教程
vs2015调用matlab 2016a教程

VS2015调用Matlab r2016a函数的混合编程方法1.环境配置

1.1.配置环境变量:

右击桌面“计算机”——>"属性"——>"高级系统设置"——>“环境变量”——>系统变量中“P ath”中添加:C:\Program Files\MATLAB\R2016a\bin\win64。

我的Path:C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\Sy stem32\WindowsPowerShell\v1.0\;C:\Program Files\Lenovo\Bluetooth Software\;C:\Program Files\Lenovo\Bluetooth Software\syswow64;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\3.0\bin\x64;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\IDM Computer Solutions\UltraCompare;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;D:\MATHWORK_R2014A\runtime\win64;D:\MATHWORK_R2014A\ bin;D:\MATHWORK_R2014A\polyspace\bin;C:\Program

Files\MATLAB\R2016a\runtime\win64;C:\Program

Files\MATLAB\R2016a\bin;%USERPROFILE%\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\MATLAB\R2016a\polyspace\bin;C:\Program Files\MATLAB\R2016a\bin\win64。

1.2.注册matlab /regserver

在命令行以管理员权限启动cmd.exe,

cd "C:\Program Files\MATLAB\R2016a\bin\win64"

matlab.exe /regserver

或者以管理员权限运行matlab regserver.bat

1.3.设置vs2015

要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的

库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置:

vs2008:

1) 通过菜单工具/选项,打开选项页,点击项目和解决方案,然后在页面右面“显示以下内容的目录”下拉列表框中选择“包含文件”,添加路径:C:\Program Files\MATLAB\R2016a\extern\include。

2) 选择“库文件”,添加路径:C:\Program Files\MATLAB\R2016a\extern\lib\win64。

vs2015:

1)右击工程/属性,打开项目属性页,选择vc++目录,在包含目录和库目录分别添

加C:\Program Files\MATLAB\R2016a\extern\include和C:\Program

Files\MATLAB\R2016a\extern\lib\win64。如下图

2.混合编程指令

在调用Matlab引擎之前,首先应在相关文件中加入一行:#include "enging.h",该文件包含了引擎API函数的说明和所需数据结构的定义。

2.1.引擎的打开和关闭

engOpen-打开Matlab engine

函数声明:

Engine *engOpen(const char *startcmd);

参数startcmd是用来启动Matlab引擎的字符串参数,在Windows操作系统中只能为NULL。

函数返回值是一个Engine类型的指针,它是在engine.h中定义的engine数据结构。

EngClose-关闭Matlab 引擎

函数声明:

int engClose(Engine *ep);

参数ep代表要被关闭的引擎指针。

函数返回值为0表示关闭成功,返回1表示发生错误。

例如,通常用来打开/关闭Matlab引擎的代码如下:

Engine *ep; //定义Matlab引擎指针。

if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。

{

MessageBox("Can't start Matlab engine!" );

exit(1);

}

. …………

engClose(ep); //关闭Matlab引擎。

2.2.向Matlab发送命令字符串

engString-发送命令让Matlab执行。

函数声明:

int engEvalString(Engine *ep, Const char *string);

参数ep为函数engOpen返回的引擎指针,字符串string为要matlab执行的命令。

函数返回值为0表示成功执行,返回1说明执行失败(如命令不能被Matlab正确解释或Matlab引擎已经关闭了)。

2.3.获取Matlab命令窗口的输出

要在VC中获得函数engString发送的命令字符串被Matlab执行后在matlab窗口中的输出,可以调用engOUtputBuffer函数。

函数声明:

int engOutputBuffer(Engine *ep, char *p, int n);

参数ep为Matlab引擎指针,p为用来保存输出结构的缓冲区,n为最大保存的字符个数,通常就是缓冲区p的大小。该函数执行后,接下来的engString函数所引起的命令行输出结果会在缓冲区p中保存。如果要停止保存,只需调用代码:engOutputBuffer(ep, NULL, 0)。

2.4.读写Matlab数据

从Matlab引擎工作空间中获取变量。

mxArray *engGetVariable(Engine *ep, const char *name);

参数ep为打开的Matlab引擎指针,name为以字符串形式指定的数组名。

函数返回值是指向name数组的指针,类型为mxArray*(mxArray数据类型在本文第4节详细简介)。

向Matlab引擎工作空间写入变量。

int engPutVariable(Engine *ep, const char *name, const mxArray *mp);

参数ep为打开的Matlab引擎指针,mp为指向被写入变量的指针,name为变量写入后在Matlab引擎工作空间中的变量名。

函数返回值为0表示写入变量成功,返回值为1表示发生错误。

2.5.调用引擎时显示/隐藏Matlab主窗口

默认情况下,以engine方式调用Matlab的时候,会打开Matlab主窗口,可在其中随意操作。但有时也会干扰应用程序的运行,可用以下设置是否显示该窗口。

int engSetVisible(Engine *ep, bool value);

参数ep为打开的Matlab引擎指针,value为是否显示的标志,取值true(或1)表示显示Matlab窗口,取值false(或0)表示隐藏Matlab窗口。

函数返回值为0表示设置成功,为1表示有错误发生。

要获得当前Matlab窗口的显示/隐藏情况,可以调用函数:

int engGetVisible(Engine *ep, bool *value);

参数ep为打开的Matlab引擎指针,Value为用来保存显示/隐藏情况的变量(采用指针方式传递)。

函数返回值为0表示获取成功,为1表示有错误发生。

2.6.数据类型mxArray的操作

在上节的Matlab引擎函数中,所有与变量有关的数据类型都是mxArray类型。数据结构mxArray以及大量的mx开头的函数,广泛用于Matlab 引擎程序和Matlab C数学库中。mxArray是一种很复杂的数据结构,与Matlab中的array相对应,我们只需熟悉Matlab 的array类型和几个常用的mxArray函数即可。

在VC中,所有和Matlab的数据交互都是通过mxArray来实现的,在使用mxArray类型的程序中,应包含头文件matrix.h,不过在引擎程序中,一般会包含头文件engine.h,该文件里面已经包含了matrix.h,因此无需重复包含。

创建和清除mxArray型数据

Matlab有很多种变量类型,对应于每种类型,基本上都有一个函数用于创建,但它们都有相同的数据结构,就是mxArray。

数组的建立采用mxCreatexxx形式的函数,例如新建一个double类型数组,可用函数mxCreateDoubleMatrix,函数形式如下:

mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);

参数m和n为矩阵的函数和列数。ComplexFlag为常数,用来区分矩阵中元素是实数还是复数,取值分别为mxREAL和mxCOMPLEX。

例如,创建一个3行5列的二维实数数组,可用如下语句:

mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);

对应的,要删除一个数组mxDestroyArray,该函数声明如下:

void mxDestroyArray(mxArray *array_ptr);

参数array_ptr为要删除的数组指针。

例如,要删除上面创建的数组T,可用如下语句:

mxDestroyArray(T);

类似的创建函数还有:

mxArray *mxCreateString(const char *str);

创建一个字符串类型并初始化为str字符串。

一般的在VC与Matlab交互中,以上两种类型就够了,其它类型数组的创建这里不再介绍。

管理mxArray数据类型

要获得mxArray数组每一维上元素的个数,可以用mxGetM和mxGetN函数。其中mxGetM用来获得数组第一维的元素个数,对于矩阵来说就是行数。

int mxGetM(const mxArray *array_ptr); //返回array_ptr对应数组第一维的元素个数(行数)int mxGetN(const mxArray *array_ptr); //返回array_ptr对应数组其它维的元素个数,对于矩阵来说是列数。对于多维数组来说是从第2维到最后一维的各维元素个数的乘积。

要获得某一特定维的元素个数,则要用函数:

const int *mxGetDimensions(const mxArray *array_ptr);

该函数返回array_ptr各维的元素个数保存在一个int数组中返回。对于常用的矩阵来说,用mxGetM和mxGetN两个函数就可以了。

另外还可以通过mxGetNumberOfDimensions来获得数组的总的维数,用mxSetM、mxSetN设置矩阵的行数和列数,函数说明如下:

mxGetNumberOfDimensions(const mxArray *array_ptr); //返回数组的维数

void mxSetM(mxArray *array_ptr, int m); //设置数组为m行

void mxSetN(mxArray *array_ptr, int n); //设置数组为n列

判断mxArray数组类型

在对mxArray类型的变量进行操作之前,可以验证以下其中的数组的数据类型,比如是否为double数组、整数、字符串、逻辑值等,以及是否为某种结构、类、或者是特殊类型,比如是否为空数组,是否为inf、NaN等。常见的判断函数有:

bool mxIsDouble(const mxArray *array_ptr);

bool mxIsComplex(const mxArray *array_ptr);

bool mxIsChar(const mxArray *array_ptr);

bool mxIsEmpty(const mxArray *array_ptr);

bool mxIsInf(double value);

…… ……

这些函数比较简单,意义自明,不再解释。

管理mxArray数组的数据

对于常用的double类型的数组,可以用mxGetPr和mxGetPi两个函数分别获得其实部和虚部的数据指针,这两个函数的声明如下:

double *mxGetPr(const mxArray *array_ptr); //返回数组array_ptr的实部指针

double *mxGetPi(const mxArray *array_ptr); //返回数组array_ptr的虚部指针

这样,就可以通过获得的指针对mxArray类型的数组中的数据进行读写操作。例如可以用函数engGetVariable从Matlab工作空间读入mxArray类型的数组,然后用mxGetPr和mxGetPi获得数据指针,对并其中的数据进行处理,最后调用engPutVariable函数将修改后的数组重新写入到Matlab工作空间。具体实现见第5节程序实例。

3.实例

#include

#include

#include

#include"engine.h"

#pragmacomment (lib,"libmat.lib")

#pragmacomment (lib,"libeng.lib")

#pragmacomment (lib,"libmx.lib")

usingnamespace std;

int main(int argc, char *argv[])

{

constint N = 50;

double x[N], y[N];

int j = 1;

for (int i = 0; i

{

x[i] = (i + 1);

y[i] = sin(x[i]) + j * log(x[i]);

j *= -1;

}

Engine *ep; //定义Matlab引擎指针。

if (!(ep = engOpen(NULL))) //测试是否启动Matlab引擎成功。

{

cout <<"Can't start Matlab engine!"<< endl;

return 0;

}

//定义mxArray,为行,N列的实数数组。

mxArray *xx = mxCreateDoubleMatrix(1, N, mxREAL);

mxArray *yy = mxCreateDoubleMatrix(1, N, mxREAL); //同上。

memcpy(mxGetPr(xx), x, N * sizeof(double)); //将数组x复制到mxarray数组xx中。

memcpy(mxGetPr(yy), y, N * sizeof(double)); //将数组x复制到mxarray数组yy中。

engPutVariable(ep, "xx", xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。

engPutVariable(ep, "yy", yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。

//向Matlab引擎发送画图命令。plot为Matlab的画图函数,参见Matlab相关文档。

engEvalString(ep, "plot(xx, yy); ");

mxDestroyArray(xx); //销毁mxArray数组xx和yy.

mxDestroyArray(yy);

cout <<"Press any key to exit!"<< endl;

engClose(ep); //关闭Matlab引擎。

system("pause");

return 0;

}

Matlab GUI编程教程

Matlab GUI编程教程 介绍 什么是GUI呢 ? GUI是Graphical User Interface 图形用户界面的意思,象很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,从原来的命令行通讯方式(例如很早的DOS系统)变化到了现在的图形界面下的交互方式,而现在绝大多数的应用程序都是在图形化用户界面下运行的。 记得读书的时候,大学开学不久,学校很多同学就开始报考全国计算机等级考试了,当然我也是其中的一分子,其中C语言是大多数人选择的科目,当时在学C 语言的时候,经常也会遇到人机交互的例子,譬如一个计算两个数相加的程序,运行程序后便切换到了Dos模式,然后在此模式下输入两个数,再回车,才能返回运算结果。当时就觉得很不方便,也不友好,后来才得知C语言是面向过程的语言,是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default)

2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。 3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB

MATLAB基础教程 薛山第二版 课后习题答案

《MATLAB及应用》实验指导书《MATLAB及应用》实验指导书 班级:T1243-7 姓名:柏元强 学号:20120430724 总评成绩: 汽车工程学院 电测与汽车数字应用中心

目录 实验04051001 MATLAB语言基础 (1) 实验04051002 MATLAB科学计算及绘图 (18) 实验04051003 MATLAB综合实例编程 (31)

实验04051001 MATLAB语言基础 1实验目的 1)熟悉MATLAB的运行环境 2)掌握MATLAB的矩阵和数组的运算 3)掌握MATLAB符号表达式的创建 4)熟悉符号方程的求解 2实验内容 第二章 1.创建double的变量,并进行计算。 (1)a=87,b=190,计算 a+b、a-b、a*b。 clear,clc a=double(87); b=double(190); a+b,a-b,a*b (2)创建 uint8 类型的变量,数值与(1)中相同,进行相同的计算。 clear,clc a=uint8(87); b=uint8(190); a+b,a-b,a*b 2.计算:

(1) () sin 60 (2) e3 (3) 3cos 4??π ??? clear,clc a=sind(60) b=exp(3) c=cos(3*pi/4) 3.设2u =,3v =,计算: (1) 4 log uv v (2) () 2 2 e u v v u +- (3) clear,clc u=2;v=3; a=(4*u*v)/log(v) b=((exp(u)+v)^2)/(v^2-u) c=(sqrt(u-3*v))/(u*v) 4.计算如下表达式: (1) ()() 3542i i -+ (2) () sin 28i - clear,clc (3-5*i)*(4+2*i) sin(2-8*i)

一个简单的Matlab_GUI编程实例

Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下

图所示; 布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。 1. 2. 3.function edit1_Callback(hObject, eventdata, handles) 4.% hObject handle to edit1 (see GCBO) 5.% eventdata reserved - to be defined in a future version of MATLAB

6.% handles structure with handles and user data (see GUIDATA) 7.% Hints: get(hObject,'String') returns contents of edit1 as text 8.% str2double(get(hObject,'String')) returns contents of edit1 as a double 复制代码 然后在上面这段代码的下面插入如下代码: 1. 2.%以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0if (isempty(input)) set(hObject,'String','0')endguidata(hObject, handles); 复制代码 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4.为edit2_Callback添加同样一段代码 5 现在我们为计算按钮添加代码来实现把数据1和数据2相加的目的。 用3中同样的方法在m文件中找到pushbutton1_Callback代码段 如下; 1.function pushbutton1_Callback(hObject, eventdata, handles) 2.% hObject handle to pushbutton1 (see GCBO) 3.% eventdata reserved - to be defined in a future version of MATLAB 4.% handles structure with handles and user data (see GUIDATA) 复制代码

薛山matlab基础教程第三版习题解答2

第2章习题参考答案 1.创建double的变量,并进行计算。 (1)a=87,b=190,计算a+b、a-b、a*b。 (2) 创建uint8 类型的变量,数值与(1)中相同,进行相同的计算。参考答案: (1) >> a=87 a = 87 >> b=190 b = 190 >> a+b ans = 277 >> a-b ans = -103 >> a*b ans = 16530 (2) >> c=uint8(87) c = 87 >> d=uint8(190) d = 190 >> c+d ans = 255 >> c-d ans = >> c*d ans = 255 2.计算: (1) () sin60o (2) e3

(3) 3cos 4??π ??? 参考答案: (1) >> sind(60) ans = 0.8660 (2) >> exp(3) ans = 20.0855 (3) >> cos(3*pi/4) ans = -0.7071 3.设2u =,3v =,计算: (1) 4log uv v (2) ()22e u v v u +- (3) 参考答案: (1) >> u=2; >> v=3; >> 4*u*v/log(v) ans = 21.8457 (2) >> (exp(u)+v)^2/(v^2-u) ans = 15.4189 (3) >> sqrt(u-3*v)/(u*v) ans = 0 + 0.4410i

4.计算如下表达式: (1) ()() i i -+ 3542 (2) () - sin28i 参考答案: (1) >> (3-5*i)*(4+2*i) ans = 22.0000 -14.0000i (2) >> sin(2-8*i) ans = 1.3553e+03 + 6.2026e+02i 5.判断下面语句的运算结果。 (1)4 < 20 (2)4 <= 20 (3)4 == 20 (4)4 ~= 20 (5)'b'<'B' 参考答案: (1) >> 4<20 ans = 1 (2) >> 4<=20 ans = 1 (3) >> 4==20 ans = (4) >> 4~=20 ans = 1 (5) >> 'b'<'B'

Matlab gui新手入门指南

1、从最简单的开始 编程最基本的目的就是——我执行一个操作,程序做出一个反应。 “一个操作”包括:点击鼠标,拖动滑块,填写数据,选择选项…… “做出一个反应”包括:计算一些东西,然后储存在哪里,或者贴个图出来,或者显示在哪里…… -------------------------------------------------------------------------------------------------------------------编程的基本思想: 目的->当点击按钮A时,然后执行任务C, 则->进入按钮A的回调函数callback里,写下任务C的代码。 -------------------------------------------------------------------------------------------------------------------a:不知道callback在哪??右键单击按钮,view callbacks->选择callback)别的控件也一样。 a:不同的回调函数啥意思?? callBack 最常用的就是它。如果控件是按钮,那点击按钮时,则按钮下的Callback就会执行;如果是滑块,则拖动滑块时,滑块名下的callback就会执行;总之,就是对控件默认操作时,matlab后台就会自动调用它名下的的callback。正常用途,全放在callback下就够了。如果其他的,实在是想知道,了解一下也未尝不可。 ButtonDownFcn 就是鼠标在它(代指各种控件)上面点击一下,你放在这个函数名下的代码就会执行。(ps:按钮的callback也是点击,所以会覆盖掉这个buttondownfcn。) CreateFcn 顾名思义,在生成这个控件,显示之前,执行你放在这个函数名下的代码; DeleteFcn 一样。在控件要销毁,但是被毁灭之前执行这个函数名下的代码。貌似“真的要退出吗”这一类就是写在这里。 KeyPressFcn 当前控件获得焦点且有按键按下时执行。(什么是焦点?就是这个控件被鼠标点了(或者是tab轮选到了)。你打开一个记事本,然后再点这个网页,再随便按几个按键,记事本上有字不?没有对吧。因为它没获得焦点,所以你的按键它不会反应的。只有你最后再点它一下,再按几个按键,结果怎么样?有字了吧?)这里的KeyPressFcn也是一样的道理。 一般在这下面的代码还会判断下按键是什么,然后执行相应的代码。 ResizeFcn,SelectionChangeFcn不常用。也懒得去看了。附几句,控件都有Resize的属性,好像默认是不可调整,如果要用到这个函数,去把它打开先。 SelectionChangeFcn 是在群按钮组件中,改变选择时,所执行的函数。 哪些控件支持哪些回调函数?很简单,你在它上面右键就可以看到了,点进去就可以编辑了。 可以在property inspect中在需要的回调函数下设置%automatic就可以自动添加相应的回调函数框架。 2、常用控件代码框架参考 --------------------------------------------------------------------- Toggle Button的callback一般写法

matlab中gui教程

11 图形用户界面(GUI )制作 用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。 图形用户界面(Graphical User Interfaces ,GUI )则是由窗口、光标、按键、菜单、文字说明等对象(Objects )构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。 假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI 的制作。但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。 MATLAB 为表现其基本功能而设计的演示程序demo 是使用图形界面的最好范例。MATLAB 的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。 即便比较熟悉MATLAB 的读者,在他初次编写GUI 程序时,也会感到棘手。为使读者获得制作自己GUI 的体验,本章“入门”节提供了一个简单的示例。读者只要输入所提供的程序,就可引出相应的界面。 本章第2节叙述图形用户界面的设计原则和一般制作步骤。第3、4节分别介绍用户菜单、用户控件的制作。出于“由浅入深”的考虑,前4节制作GUI 是通过M 脚本文件实现的。利用M 函数文件制作GUI ,需要解决数据传递问题,为此专设第5节给予阐述和示例。MATLAB 5.x 版为方便用户制作图形界面,提供了一个交互式的设计工具guide 。关于该工具的使用方法,被放在第6节中,以一个综合例题为设计目标逐步展开。 在此提醒读者,假如要比较准确的理解本章程序和掌握本章内容,请先阅读第10章关于图柄的内容。 11.1 入门 【*例11.1-1】对于传递函数为1 212++=s s G ζ的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。本例演示:(A )图形界面的大致生成过程;(B )静态文本和编辑框的生成;(C )坐标方格控制键的形成;(D )如何使用该界面。 (1)产生图形窗和轴位框: clf reset H=axes('unit','normalized','position',[0,0,1,1],'visible','off'); set(gcf,'currentaxes',H); str='\fontname{隶书}归一化二阶系统的阶跃响应曲线'; text(0.12,0.93,str,'fontsize',13); h_fig=get(H,'parent'); set(h_fig,'unit','normalized','position',[0.1,0.2,0.7,0.4]); h_axes=axes('parent',h_fig,... 'unit','normalized','position',[0.1,0.15,0.55,0.7],... 'xlim',[0 15],'ylim',[0 1.8],'fontsize',8);

Matlab基础教程

1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。 我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 x = 42 此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。 小提示: MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例: y = sin(10)*exp(-0.3*4^2);

若要显示变数y的值,直接键入y即可: >>y y =-0.0045 在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。 下表即为MATLAB常用的基本数学函数及三角函数: 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开

matlab gui教程

什么是GUI呢? GUI是Graphical User Interface 图形用户界面的意思,象很多高级编程语言一样,Matlab也有图形用户界面开发环境,随着计算机技术的飞速发展,人与计算机的通信方式也发生的很大的变化,从原来的命令行通讯方式(例如很早的DOS系统)变化到了现在的图形界面下的交互方式,而现在绝大多数的应用程序都是在图形化用户界面下运行的。 记得读书的时候,大学开学不久,学校很多同学就开始报考全国计算机等级考试了,当然我也是其中的一分子,其中C语言是大多数人选择的科目,当时在学C语言的时候,经常也会遇到人机交互的例子,譬如一个计算两个数相加的程序,运行程序后便切换到了Dos模式,然后在此模式下输入两个数,再回车,才能返回运算结果。当时就觉得很不方便,也不友好,后来才得知C语言是面向过程的语言,是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者) 1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;

布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of edit1 as text % str2double(get(hObject,'String')) returns contents of edit1 as a double 然后在上面这段代码的下面插入如下代码: %以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字, 则现实空白内容 input = str2num(get(hObject,'String')); %检查输入是否为空. 如果为空,则默认显示为0 if(isempty(input)) set(hObject,'String','0')

一个实例搞定MATLAB界面编程(最好的matlab gui界面编程入门教程)

一个实例搞定MATLAB界面编程 作者:彭军 邮件:pjun9@https://www.doczj.com/doc/ee4551167.html, 博客:https://www.doczj.com/doc/ee4551167.html,/pengjun 下面请跟我一步一步做一个图像处理的程序,如果您坚持做完这个实例,我想MATLAB界面编程对您而言,就没有什么难度了。当然,我这里说的是,您首先要有一定的MATLAB 编程基础。还有,我的MATLAB版本是2008a。在2008a以前的版本中没有工具栏编辑器,如果需要工具栏要手动写程序,这个我就不多讲了。好了,废话少说,跟我来吧! 在MATLAB的命令窗口(Command Window)中运行guide命令,来打开GUIDE界面,如下: 然后,选择空模板(Blang GUI),点击OK,即可打开GUIDE的设计界面,如下:

点击工具栏上的菜单编辑器(Menu Editor),打开菜单编辑器,如下: 在Menu Bar中新建一个菜单项,名字为“文件”,其他设置请看下图: 在“文件”菜单下添加菜单项:“打开”,“保存”,“退出”。见下图:

如果需要在菜单项“退出”上面添加一个分割线的话,选中“Separator above this item”就行了。

保存我的界面为pjimage.fig.保存完毕之后,会自动打开pjimage.m文件,而我们所有的程序都是要写在这个M文件里面的。在编程中,我们的每一个鼠标动作都对应一个Callback 函数。那么我们的菜单项也是如此的。 在界面上,单击鼠标右键选择“Property Inspector”,即可打开属性窗口。当我们点击不同的控件时,其对应的属性都会在这里显示,我们可以进行修改。最主要的属性莫过于Tag属性和String属性。 设置当前Figure窗口的Tag属性为:figure_pjimage,窗口的标题(Name属性)为:图像处理实例。如下: 然后,点击工具栏的保存按钮。之后,点击工具栏的运行按钮(Run Figure)。注意,工具栏的图标都会有提示的,像运行按钮的提示就是Run Figure.我们会看到如下的界面: 那说明,我们保存的.fig文件的目录不是当前目录,但是没关系啊,我们只要点击“Change Directory”来改变当前目录。当然,如果你想把当前目录添加到MATLAB路径也可以,那就点击“Add to Path”就OK了。我在这里推荐点击“Change Directory”,因为没有什么太大必要把其添加到MATLAB路径中,一般是工具箱需要添加或者我们的函数或程序写完了,而在MATLAB的命令窗口找不到我们的函数的时候,我们可以将函数或程序所在的目录添加到MATLAB路径。 总之吧,点那个按钮,要看个人的爱好了。不管点击两个按钮的那一个按钮,都会正确的运行程序的。 我们的程序运行时的样子,是这样的:

MATLAB基础及其应用教程周开利邓春晖课后答案

第三章习题及参考答案 解答: >> p=[1 -1 -1]; >> roots(p) ans = -0.6180 1.6180 解答: 取n=5,m=61 >> x=linspace(0,2*pi,5); y=sin(x); >> xi=linspace(0,2*pi,61); >> y0=sin(xi); >> y1=interp1(x,y,xi); >> y2=interp1(x,y,xi,'spline'); >> plot(xi,y0,'o',xi,y1,xi,y2,'-.'); >> subplot(2,1,1); plot(xi,y1-y0);grid on >> subplot(2,1,2); plot(xi,y2-y0);grid on

分段线性和三次样条插值方法与精确值之差取n=11,m=61 >> x=linspace(0,2*pi,11); y=sin(x); >> xi=linspace(0,2*pi,61); >> y0=sin(xi); >> y1=interp1(x,y,xi); >> y2=interp1(x,y,xi,'spline'); >> plot(xi,y0,'o',xi,y1,xi,y2,'-.'); >> subplot(2,1,1); plot(xi,y1-y0);grid on >> subplot(2,1,2); plot(xi,y2-y0);grid on 分段线性和三次样条插值方法与精确值之差

解答: >> x=[0,300,600,1000,1500,2000]; >> y=[0.9689,0.9322,0.8969,0.8519,0.7989,0.7491]; >> xi=0:100:2000; >> y0=1.0332*exp(-(xi+500)/7756); >> y1=interp1(x,y,xi,'spline'); >> p3=polyfit(x,y,3); >> y3=polyval(p3,xi); >> subplot(2,1,1);plot(xi,y0,'o',xi,y1,xi,y3,'-.'); >> subplot(2,1,2);plot(xi,y1-y0,xi,y3-y0);grid on 插值和拟合方法相比较,都合理,误差也相近。 解答: 梯形法积分 >> x=-3:0.01:3;

经典GUI基础入门:MATLAB中GUI用户图形界面学习

GUI指导教程系列(1):GUI入门基本操作 为什么在MATLAB中要使用GUI呢?其实GUI就是Matlab中的Visual Basic,是面向对象的编程,可以使Matlab程序的终端用户,即使不懂的Matlab也可以轻易操作该程序! 如果没有图形用户界面(GUI)我们只能从命令行(Command Window)中调用相关程序,这相对比较繁琐,并且不是所有用户都是这个能力。就好比计算机的DOS 系统,在有windows的情况下,您会选择DOS吗?当然我们也不排除骨灰级的人物! 在本节教程我们主要针对没有GUI创建和使用经历的网友,但是必要的MATLAB 基础知识是需要的。在教程中我们将创建一个简单的GUI程序,它执行两个数的加法运行,然后显示其运算结果。 好下面开始我们的教程! 一、打开和创建GUI界面 1、首先打开Matlab,在Command Window中输入guide回车 2、此时打开GUI编辑器GUIDE(GUI Developer的缩写) 2.1 界面上有两个标签也“Creat New GUI”和“Open Existing GUI” 如果创建新的GUI此时我们选择第一个标签页,但如果打开其它已经存在的GUI 就点击第二个标签吧

2.2 这里我们选择第一个标签下的“Blank GUI”(空白GUI),下面还有几个系统GUI模版,你可以根据需要选择其它的。 2.3 点击“OK”我们正式进入GUIDE界面,呵呵,是不是感觉似曾相识 3、添加你需要的控件到figure中 在添加控件之前,您最好对您的GUI界面布局已经有一定的构思了,否则盲目性太大了不利于您的编程。下面是我们构思的布局。

MATLAB+GUI入门实例

1.首先我们新建一个GUI文件:File/New/GUI 如下图所示; 选择Blank GUI(Default) 2.进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;

布置好各控件以后,我们就可以来为这些控件编写程序来实现两数相加的功能了。 3.我们先为数据1文本框添加代码; 点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。function edit1_Callback(hObject, eventdata, handles) % hObject handle to edit1 (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,’String’) returns contents of edit1 as text % str2double(get(hObject,’String’)) returns contents of edit1 as a

double 然后在上面这段代码的下面插入如下代码: %以字符串的形式来存储数据文本框1的内容. 如果字符串不是数字,则现实空白内容input= str2num(get(hObject,’String‘)); %检查输入是否为空. 如果为空,则默认显示为0 if(isempty(input)) set(hObject,’String‘,’0‘) end guidata(hObject, handles); 这段代码使得输入被严格限制,我们不能试图输入一个非数字。 4.为edit2_Callback添加同样一段代码 5 现在我们为计算按钮添加代码来实现把数据1和数据2相加的目的。 用3中同样的方法在m文件中找到pushbutton1_Callback代码段如下; 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) 在上面这段代码后添加以下代码; a = get(handles.edit1,’String‘); b = get(handles.edit12,’String‘); % a and b are variables of Strings type, and need to be converted % to variables of Number type before they can be added together total = str2num(a) + str2num(b);

matlab基础与应用教程答案

8-1建立一个图形窗口,使之背景颜色为红色,并在窗口上保留原有的菜单项,而且在按下鼠标左键之后显示出Left Button Pressed 字样。 本体程序: clc; hf=figure('color','r','windowbuttondownfcn','axis off;text(0.1,0.5,''Left Button Pressed'',''fontsize'',30)') 运行结果: hf = 1 8-3利用图形对象绘制下列曲线,要求先利用默认属性绘制曲线,然后通过图形句柄操作来改变曲线的颜色、线型和线宽,并利用文字对象给曲线添加文字标注。 (1)2)cos(2.0+=-x e y x clc; x=0:5*pi; y=exp(-0.2*x).*cos(x)+2; h=plot(x,y); set(h,'Color',[1,0,0],'LineStyle',':','LineWidth',2);

(2)?????==325t y t x 程序: t=0:2:100; x=t.*t; y=5*t.^3; hf=plot(x,y); set(hf,'color','b','linestyle',':','marker','p','linewidth',0.3);

8-4利用图形对象绘制下列三维图形,要求与上题相同。 (1)?? ???===t z t y t x sin cos 程序: t=0:0.1:2*pi; x=cos(t); y=sin(t); z=t; hf=plot3(x,y,z); 运行结果:

8-5以任意位置子图形式绘制出正弦、余弦、正切和余切函数曲线。clc; x=-2*pi:0.01:2*pi; y1=sin(x); y2=cos(x); axes('Position',[0.1,0.6,0.2,0.2]) plot(x,y1); ht=get(gca,'Title');set(ht,'Color','r');title('y=sin(x)') hc=get(gca,'Children'),set(hc,'Color','b','LineWidth',1.5) axes('Position',[0.6,0.6,0.2,0.2]) plot(x,y2,'r'); ht=get(gca,'Title');set(ht,'Color','r');title('y=cos(x)') axes('Position',[0.1,0.1,0.2,0.2]) fplot('tan(x)',[-1.5,1.5]); ht=get(gca,'Title');set(ht,'Color','r');title('y=tan(x)') axes('Position',[0.6,0.1,0.2,0.2]) fplot('cot(x)',[0,1,3]); ht=get(gca,'Title');set(ht,'Color','r');title('y=cot(x)')

matlabgui初学者教程

什么是GUI呢? GUI是Graphical User Inteface 图形用户界面的意思。象很多高级编程 语言一样。Matlab也有图形用户界面开发环境。随着计算机技术的飞速发展。人与计算机 的通信方式也发生的很大的变化。从原来的命令行通讯方式(例如很早的DOS系统)变化到 了现在的图形界面下的交互方式。而现在绝大多数的应用程序都是在图形化用户界面下运行 的。 记得读书的时候。大学开学不久。学校很多同学就开始报考全国计算机等级考试了。当然我也是其中的一分子。其中C语言是大多数人选择的科目。当时在学C语言的时候。经常也会遇到人机交互的例子。譬如一个计算两个数相加的程序。运行程序后便切换到了Dos模式。然后在此模式下输入两个数。再回车。才能返回运算结果。当时就觉得很不方便。也不友好。后来才得知C语言是面向过程的语言。是非面向对象的语言(VC++,VB,Matlab等是面向对象的)。那么下面我们就来看看Matlab是如何简单、快速而友好地解决这类问题的吧。 Matlab GUI编程教程(适用于初学者)1首先我们新建一个GUI文件:File/New/GUI如下图所示; 选择Blank GUI(Default) 2?进入GUI开发环境以后添加两个编辑文本框。6个静态文本框。和一个按钮。布置如下 图所示;

布置好各控件以后。我们就可以来为这些控件编写程序来实现两数相加的功能了。 3 ?我们先为数据1文本框添加代码; 点击上图所示红色方框。选择edit1_Callback 。光标便立刻移到下面这段代码的位置。function edit1_Callback(hObject, eve ntdata, han dies) % hObject han dle to editl (see GCBO) % even tdata reserved - to be defi ned in a future version of MATLAB % han dles structure with han dles and user data (see GUIDATA) % Hin ts: get(hObject,'Stri ng') retur ns contents of editl as text % str2double(get(hObject,'Stri ng')) retur ns contents of editl as a double 然后在上面这段代码的下面插入如下代码: 9以字符串的形式来存储数据文本框1的内容?如果字符串不是数字。 则现实空白内容 in put = str2 num ( get ( hObject,' Stri ng ')); %佥查输入是否为空?如果为空,则默认显示为0 if (isempty (input )) set (hObject,' String ',' 0') end guidata ( hObject, han dies );

《matlab基础及其应用教程》笔记

《matlab基础及其应用教程》笔记 前提:已经学过matlab很久了,但是将近半年没有再碰,打算接下去继续学习matlab,并在帮忙增加国内关于matlab资料较少的simmechanics物理建模仿真部分,因此继续开始学matlab,打算重新看基本基础的书回顾一下,并做简单笔记。 plus:括号内是自己加的,自己的经验以及想法等 第一章:基础 1、b='Hi,Miss Black';可以直接用于表示字符串 2、cd可以设置路径;和DOS系统下一样,但是不够直观,推荐直接使用GUI的路径设置 3、clf:清除图像内容;cla:清除坐标内容(GUI会用到);clc,clear 4、lookfor:寻找函数名称;doc:直接打开某个函数的帮助文档(doc quad:打开积分的帮助文档) 第二章:matlab语言基础 1、matlab主要数据类型.pdf(matlab的数据类型,十分重要) 2、&与&&区别:&左右两边都比较;&&只要左边不对,就不进行比较(表示右边有错误也不会管) 3、各种函数比较的最好加上(),以防止因为优先级的问题而被吞 4、线性等分:linspace;对数等分:logspace 5、矩阵标志:①,单下标;②,多下标;③,:表示整行或者整列;④,删除直接使用[]; 6、cat:行/列拼接;reshape:矩阵变换;repmat:行列拼接; 7、一般的函数:matlab函数(自己总结).xls里面有 8、多维数组(三维,图片数组) 第三章:matlab运算 1、polyadd:相加;conv:相乘/卷积;deconv:相除 2、polyval:多项式带入求解;polyvalm:矩阵带入求解 3、roots:多项式求根; 4、poly2sym:多项式转为字符形式;poly:构造多项式 5、interpX:插值与拟合(和《数值计算方法》对应,X不同而采取不同的差值拟合方法) 6、polyfit:生成多项式拟合(偶尔两端会出现Roung现象,使整个设计出现偏差) 7、diff:微分;quad:积分 8、cumsum:积分矩形计算法;trapz:积分梯形计算法;quad:辛普森积分法;quad1:科茨积分法; 9、rref:解矩阵方程 10、jacobi:雅克比迭代法;gseidel:Gauss-Seidel 迭代法; 11、sparse:稀疏矩阵;full:全矩阵;spdiags:对角稀疏矩阵 12、spalloc:分配存储空间(对稀疏矩阵而言) 13、Euler:欧拉法解微分(1:前插;2:后插) 14、ode23:二三阶龙科库塔公式解偏微分;ode45:三四阶龙科库塔公式 第四章:结构数组与细胞数组(感觉暂时用到比较少,所以只是简单浏览了一下) 1、结构数组和C语言的一样,后面加. 2、或者使用struct构建结构数组

Matlab GUI教程

Matlab GUI教程 北京索为高科系统技术有限公司雒海涛2011-02-11 学习目的: 学会用matlab gui设计用户界面,并编写响应程序。 学习步骤: 一、启动matlab,打开gui编辑器 弹出下面对话框 有四种GUI类型,我们这儿先选择第一种,点击OK按钮。

二、在弹出的gui设计器中按照如下步骤设计初步界面 拖入第一个控件后界面就可以保存了,点击存盘按钮进行保存,双击生成的标签控件按照图示步骤修改属性值。

点击保存后自动弹出生成的一个m文件,这儿叫MyT est.m文件,如下图,在里面添加对应的界面响应程序。 同时可以看到存储目录下会生成两个文件,一个是刚才弹出的m文件,另外一个就是界面文件.fig,所有界面相关的代码都放在该文件内,如下图:

三、设计一个完整的界面 在主窗口上绘制两个标签(static text),三个文本框(edit text)以及一个按钮(push button),如下图: 对界面进行一下修改,双击各个控件在弹出的属性窗口,将三个文本框的string属性都修改为0,将两个标签修改为“+”和“=”,将按钮的string属性修改为“计算”,修改完成后界面如下图所示,界面字体可以通过控件的fontsize属性修改。

为了便于在编写程序的时候区分各个控件,可以修改各个控件的唯一标示(tag属性),三个文本框默认是(edit1,edit2和edit3),修改为edit_num1, edit_num2和edit_total,修改完 成后,可以运行预览一下界面了,点击下图所示的绿色箭头 弹出提示,当前目录不是工作目录, 弹出设计窗口如下图:

MATLAB基础及应用教程

第4章程序设计 在前面我们已经看到,MATLAB不但可以在命令窗直接输入命令并运行,而且还可以生成自己的程序文件,这就是我们通常说的一类以M为后缀的M文件,本章我们就来研究这类文件的形成方法。 M文件可分分为两大类,一是命令式M文件(也称为脚本文件,script),二是函数式M 文件(function)。两类文件的区别在于: (1)命令式文件可以直接运行,函数式文件不能直接运行,只能调用。 (2)命令式文件运行时没有输入输出参量,函数式文件在调用时需要进行输入输出参量设置。 (3)命令式文件运行中可以调用工作空间的数据,运行中产生的所有变量为全局变量。 (4)函数式文件不能调用工作空间的数据,运行中产生的所有变量为局部变量。命令式文件运行中产生的所有变量为全局变量,可以调用和存储到工作空间的数据。 4.1 MATLAB的程序文件-M文件 4.1.1 脚本文件(Scripts) 当我们需要在命令窗进行大量的命令集合运行时,直接从命令窗口输入比较麻烦,这时就可以将这些命令集合存放在一个脚本文件(Scripts)中,运行时只需要输入其文件名就可以自动执行这些命令集合。需要注意的是,脚本文件运行所产生的变量都驻留在MATLAB 的工作空间中,同时脚本文件也可以调用工作空间中的数据。因此,脚本文件所涉及的变量是全局变量。前几章所涉及到的M文件都是这类脚本文件。 编辑一个脚本文件可以直接在命令窗口的左上角打开编辑窗进行编辑。 4.1.2 函数文件(function) 函数式文件(function)的构成 (1)函数定义行: Function [输出参量]=gauss(输入参量) (2): 完成函数的功能。 (3)函数说明。 (4)函数行注。 从上面构成的情况看,函数式文件实际上是完成输入参量与输出参量的转换,这样的转换是由函数文件名为gauss的文件来完成的。函数体的功能必须说明清楚输入参量与输出参量的关系。函数说明是用来解释该函数的功能的,函数行注是对程序行进行说明的。上面(1)和(2)是必须的。 【例4-1】分析下面函数文件。 %一个数列,任意项等于前两项之和,输入项数可以给出这个数列

相关主题
文本预览
相关文档 最新文档