第十二章metlab 应用程序接口API
【Matlab 参考教程】第十二章 MATLAB编译器和API

12MATLAB编译器和API 几乎所有使用过MATLAB的科技人员,无不为该软件的简洁、便捷和功能之强大和可靠所震撼,同时也对MATLAB产生了新的期望:一,希望程序能运行得更快;二,希望获得可摆脱MATLAB环境而独立运行的可执行软件;三,希望从其他“非MATLAB”的外部程序中调用MATLAB。
本章前6节介绍MATLAB版编译器(Compiler)。
由于1.2版与2.0版差异较大,又由于2.0版缺少1.2版具有的优化功能,因此内容安排上将兼顾地论及两个版本。
值得指出的是:除Mathworks外,还有其他一些公司生产的编译器,其中比较著名的是MathTools公司的Mediva;据该公司自称,性能优于Mathworks的,且具有绘图功能。
本章第7节论及API应用程序接口,扼要地介绍不同平台间的数据传送和MATLAB引擎技术。
节后算例演示了,如何从外部调用MATLAB引擎。
12.1编译器2.0概述12.1.1编译器2.0的功能12.1.2编译器2.0的性能改进12.1.3编译器2.0的局限性12.1.4把脚本文件改写为函数文件【例12.1.4-1】有一个绘圆的M脚本文件circle.m如下。
希望获得一个MEX绘圆程序。
(1)原始的绘圆脚本文件[circle.m]clf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t);plot(x,'r*');axis('square')(2)对这脚本文件直接编译将因错误而失败mcc -x circle??? Error: File "circle" is a Script M-file and cannot be compiled with the current Compiler.Error in ==> H:\MATLAB53\toolbox\compiler\mcc.dll(3)把脚本文件改写成函数文件。
第12章 关系数据库提供的应用程序接口

12.1 ODBC 12.2 OLE DB 12.3 ADO
第12章 关系数据库提供的应用程序接口 本章重点介绍了ODBC(Open Database Connectivity, 开放数据库互连)的特点、体系结构、ODBC DSN的创建 过程,以及UDA(Universal Data Access,一致数据访问) 技术的两层标准接口OLE DB和ADO。 OLE DB是系统级的编程接口,它定义了一组COM接口, 这组接口封装各种数据库系统的访问操作,为数据处理方 和数据提供方建立了标准。OLE DB还提供了一组标准的 服务组件,用于提供查询、缓存、数据更新、事务处理等 操作。 ADO是应用层级的编程接口。它利用OLE DB 提供的 COM接口来访问数据,因此它适合于C/S(客户/服务器) 系统和基于Web的应用,尤其在一些脚本语言中进行数据 库访问操作是ADO主要优势。
下面对ADO的各个对象进行讨论。 (1)Connection对象。利用Connection对象可以实现与 数据源建立连接。 (2)Command对象。Command对象代表一个操作命令, 主要是通过调用其各种方法来执行针对数据源的有关 操作。 (3)Recordset对象。Recordset对象代表一个表的记录 集或命令执行的结果,在记录集中,总有一个当前记 录。记录集是ADO管理数据的基本对象,它是一种表 状结构,每一行对应一个记录(Record),每一列对 应一个域(Field)。Recordset对象也可通过游标对记 录进行访问,在ADO中,游标分为四种: ① 静态游标。提供对数据集的一个静态拷贝,允许各 种移动操作,包括前移、后移等等,但其他用户所做 的操作反映不出来。
图12.5 “ODBC 数据源管理器”对话框
MATLAB简介

7
9
11
6
4
2
4
5
6
线性等分向量生成
y=linspace(x1,x2) y=linspace(x1,x2,n) 生成100维行向量 生成n维行向量
>>a=linspace(1,100,6) a= 1.0000 20.8000 40.6000 60.4000 80.2000 100.0000
扩展搜索路径
将新目录扩展到搜索路径中 1、用path命令
>>path(path,'e:\matlab\works')
2、用addpath命令 将新目录加到搜索路径的末尾
>>addpath e:\matlab\works –end
将新目录加到搜索路径的开始
>>addpath e:\matlab\works -begin
>>format long;pi ans = 3.14159265358979 >>format long e;pi ans = 3.141592653589793e+000 >>format long g;pi ans = 3.14159265358979
字符串 字符串的约定
字符串用单引号输入或赋值; 字符串的每个字符都是都是字符数组的一个元素; 字符串和字符数组基本上等价。
MATLAB系统组成
(1) MATLAB语言体系
MATLAB是高层次的矩阵/数组语言.具有条件控制、函数调用、 数据结构、输入输出、面向对象等程序语言特性。利用它既可以进行小 规模编程,完成算法设计和算法实验的基本任务,也可以进行大规模编 程,开发复杂的应用程序。
MATLAB在中学物理教学中的应用

MATLAB在中学物理教学中的应用目录1 MATLAB软件简介 (3)1.1M ATLAB的功能 (4)1.2M ATLAB的特点 (5) (5) (5) (6)2 MATLAB在物理教学中的应用 (6)2.1M ATLAB在中学物理教学中的应用具有可行性 (6)2.2M ATLAB在中学物理教学中的应用具有优越性 (7)3 MATLAB在物理教学中的具体应用 (8)3.1多普勒效应的验证 (8) (9) (10) (10)3.2重力随地球纬度变化规律 (11) (11) (12) (12) (13)3.3M ATLAB求解中学物理极值的应用 (15) (15) (15) (16)4 结束语 (17)参考文献: (17)MATLAB在中学物理教学中的应用张铖(宁德师范高等专科学校物理系福建宁德 352100)摘要:根据中学物理新课程标准要求以及多媒体教学受到人们的日益重视程度,制作多媒体课件的能力日趋成为衡量一个教师教学能力的标准之一。
Matlab功能强大且简单易用,本文首先对Matlab的历史及主要组成框架进行了简单介绍,根据MabLab的功能和特点,分析了Matlab对物理教学的影响,并通过利用Matlab对中学物理中典型案例教学进行演示得出结论认为,Matlab适用于中学物理教学。
关键词:MATLAB 物理教学应用随着信息技术的发展,多媒体教学越来越受到人们的关注与重视。
中学物理《课程标准》指出:现代信息技术的发展对物理教育的价值、目标、内容以及学与教的方式产生了重大的影响、物理课程的设计与实施应重视运用现代信息技术、特别要充分考虑计算机对物理学习内容和方式的影响。
大力的开发并向学生提供更为丰富的学习资源,把现代信息技术作为学生学习物理和解决问题的强有力工具,致力于改变学生的学习方式,使学生乐意并有更多的精力投入到现实的、探索性的物理学习活动中去。
Matlab 是美国 MathWorks 公司从 20 世纪 80 年代中期推出的数学软件,具有优秀的数值计算能力,卓越的数据可视化能力及声音处理能力的高性能语言[1],是当今国际上公认的科技领域方面最为优秀应用软件和开发环境。
MATLAB外部接口

在如下图所示的对话框中输入 “MATLABinit”,单击【执行】按钮后即 可启动Excel link,并同时启动MATLAB。
3.Excel link的终止
当终止 Excel 的时候, Excel link 和 MATLAB会被同时终止。
如果需要在Excel环境中终止MATLAB和
Excel link的运行,则在工作表单元中输
2 编 译 器
2.1 编译器概述 2.2 编译器的安装和配置 2.3 编译器的使用
MATLAB编译器是指将M文件作为 其输入,同时生成独立的可执行文件 或相关软件组件的程序,它可以由命 令mcc调出。
2.1 编译器概述
MATLAB编译器4.0版本采用了MATLAB
Component Runtime(MCR)技术。 MCR提供了对MATLAB语言的完全支 持。
入“=MLClose()”即可,如下图所示。 当 需要重新启动Excel link和MATLAB时,
可以使用MATLABinit命令。
4.Excel link使用时需要注意的 几个问题
Excel link函数名对字母的大小写不作区
ቤተ መጻሕፍቲ ባይዱ
分,而MATLAB函数名是区分大小写的。
Excel工作表等式通常以“+”或“=” 作为起 始标记。
情况:代码以命令clear开始;重新启动 计算机后,再执行M-book文档中的程 序;将M-book文档的代码拷贝到M文 件,再到MATLAB的命令窗口执行。
M-book文档的代码运行速度要比在
MATLAB命令窗口中执行慢很多。
当编辑科技论文或其他文档时,最后可将
细胞转换为普通文本。
可使用Notebook菜单中的【Bring
matlab在电路分析和仿真中的应用

MATLAB/SIMULNK的主要产品及其相互关系
2024/7/15
MATLAB的优点
• 1. 容易使用 • 2. 可以由多种操作系统支持 • 3. 丰富的内部函数 • 4. 强大的图形和符号功能 • 5. 可以自动选择算法 • 6. 与其他软件和语言有良好的对接性
2024/7/15
2024/7/15
Matlab 的安装
2 输入名字和公司名称 3 在第三个空白处(PLP)输入软件的序列号sn 4 继续安装,直到安装完成。
2024/7/15
5 安装帮助 将安装目录中的help文件夹替换为安装包中的 help文件夹
MATLAB 7用户界面概述
MATLAB 7的用户界 面主要包括以下三个 方面的内容: • MATLAB 7的主菜单 • MATLAB 7的工具栏 • MATLAB 7的窗口
matlab自定义的函数文件称内置函数文件
调用内置函数的方法:使用函数名并给出相应的入 口、出口参数即可。
例如:sin.m函数——用type sin查不到。
调用格式:y=sin(2*x)
1
实际应用中:
0.8
x=0:2*pi/180:2*pi;
0.6
y=sin(2*x)
0.4
0.2
plot(x,y)
0
-0.2
2024/7/15
-0.4
-0.6
取R=255欧,L=125uH,C=6800pF,则:
H (s)
sRC s2LC sRC
1
85s2
1734000s 1734000s
1014
m文件如下: % LCR串联谐振电路 R=255; L=125*10^(-6); C=6800*10^(-12);
第20章 matlab应用程序接口

engPutVariable
√ √ √ √ √ √
√ √ √
engEvalString engOutputBuffer
engOpenSiGetVisible
engSetVisible
技术凝聚实力 专业创新出版
20.3.3 MATLAB引擎应用示例
前面介绍了MATLAB引擎应用程序的基本原理, 基本结构及引擎函数,下面以一个具体的例子 说明创建MATLAB引擎应用程序的完整过程.
技术凝聚实力 专业创新出版
20.1 mxArray数据结构
数组是MATLAB程序基本的数据组织形式,也是大部分 MATLAB运算的基本运算单位.MATLAB中数组与 C/FORTRAN中数组的存储方式是不同的,而且MATLAB和 C/FORTRAN对基本数据类型,如双精度类型浮点数,整 数类型,字符类型等的定义也是不同的.为了能够在C 中表示MATLAB数据结构,MATLAB提供了一种特殊的C语 言结构——mxArray.本节首先简要介绍MATLAB和 C/FORTRAN中数组存储方式的不同,然后详细讨论 mxArray数据结构及相关的操作函数——mx函数.
技术凝聚实力 专业创新出版
20.4 C读写MAT文件
MAT文件是MATLAB用于存储数据的一种特殊二进制文件,利用 MATLAB API提供的接口函数(mat函数),C/FORTRAN可以方便地读 写MAT文件,从而实现C/FORTRAN程序和MATLAB的数据通信. 本节首先简要介绍MAT文件的结构及其在MATLAB中的应用,20.4.2 介绍C读写MAT文件的接口函数(MAT函数),最后给出了一个C读写 MAT文件的应用示例. 说明:MATLAB为用户提供了丰富的数据I/O接口,可以读取各种数 据文件,如文本文件,二进制文件,图像文件,声音文件,视频文 件等,详细内容可以参考本书第18章.
matlab命令简单介绍

SOUTHEAST UNIVERSITY
• 如果在矩阵下标的表达式中包含了冒号的 话,它表示矩阵的一部分内容。如: B(1:2,3) 表示的是矩阵B的第3列的前2个元素。 • 冒号本身表示矩阵的一行或一列的所有元素。 Hale Waihona Puke : B(:,2) 表示矩阵B的第2列。
Matlab中的表达式
包括变量、数值、函数和运算符 SOUTHEAST UNIVERSITY 变量:在Matlab中并不需要对变量的类型和大 小进行预先定义。当Matlab遇到一个新变量名 称时,它自动建立一个新的变量并给这个变量 分配适当的存储单元。如果这个变量已经存 在,那么Matlab将改变它的内容。 Matlab中的变量命名遵循以下规则: 变量名称必须以字母开头,后面可以跟任意 的字母、数字和下划线。 Matlab中变量名称的最大有效长度为31。 Matlab区分大小写。A和a表示不同的变量。
x=[4/3 -1.2345e-6]
指令调用格式 X的输出结果 1.3333 1.3333 1.3333 1.3333e+000 1.3333 1.33333333333333 1.333333333333333e+0 00 1.33333333333333 1.33 4/3 3ff5555555555555 + -0.0000 -0.0000 -0.0000 -1.2345e-006 -1.2345e-006 -0.00000123450000 -1.234500000000000e-006 -1.2345e-006 -0.00 -1/810045 beb4b6231abfd271 默认格式 format format short format short e format short g format long format long e format long g format bank format rat format hex format +
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十二章应用程序接口API前面章节主要叙述MATLAB自身的各种功能和使用方法。
作为优秀软件,MATLAB 不仅自身功能强大、环境友善、能十分有效地处理各种科学和工程问题,而且具有极好的开放性。
这开放性表现在两方面:一,MATLAB适应各科学、专业研究的需要,提供了各种专业性的工具包;二,MATLAB为实现与外部应用程序的“无缝”结合,提供了专门的应用程序接口API。
遵循本书“淡化专业,面向通用”的宗旨,本章将集中阐述MATLAB 的应用程序接口。
本章分五节,各节内容简述如下。
第12.1节集中介绍:如何编写C MEX源码程序,也就是如何为现有的C程序编写接口程序,使之成为MATLAB函数文件;运用这种技术,读者可以把积累的优秀C程序改造成可在MATLAB中方便调用的指令。
第12.2节用于演示:如何编写产生MAT数据文件的C源码程序。
读者通过算例入门,就不难借助MAT文件实现MATLAB与外部应用程序的数据交换。
第12.3节围绕MATLAB引擎技术展开。
借助这种技术,前台可以是各种外部应用程序编写的界面,而后台计算则可完全交由MATLAB进行。
第12.4节用三个算例来说明如何应用ActiveX实现MATLAB与外部应用程序的通信。
在第一个算例中,MATLAB用作为客户,服务器是Excel。
在后两个算例中,服务器是MATLAB,而客户是PowerPoint。
由此产生的PPT文件,可以在放映过程中,实时地进行MATLAB调用。
第12.5节的内容是:如何借助DDE技术在MATLAB与其他外部程序间进行通信。
该节的一个算例演示:VB制作的界面如何借助DDE建立的对话通道调用服务器MATLAB 进行计算和显示结果图形。
而另一个算例则演示:MATLAB如何以客户身份与服务器Excel建立DDE“热连接”,使MATLAB图形实时地跟随电子表格数据的改变而变化。
值得指出:MATLAB6.0, 6.1版用于API的(MEX、MAT、及引擎)库函数许多已经被废止。
本章内容是根据MATLAB6.5编写的。
12.1C语言MEX文件的编写12.1.1关于MEX文件的一般性说明12.1.2MEX文件中的MATLAB数据A=['abcd';'1234';'ABCD']A =abcd1234ABCD12.1.3C语言MEX文件源程序的构成【例12.1.3-1】列出具有相同运算功能(实现两个双精度实数标量加法)的C++源码程序和C++ MEX源码程序;对C++ MEX源码程序进行编译链接;在MATLAB中调用生成的DLL文件。
通过本例,从感性上认识:(A)一般C源码文件如何改写成具有约定格式的C MEX源码文件;(B)C MEX 源码文件的基本结构;(C)基本的编译链接方法;(D)DLL文件的调用方法。
(1)#include <math.h>void myplus(double y[],double x[],double z[]){y[0]=x[0]+z[0];return;}(2)[exm12013_1.cpp]#include "mex.h" // <1>//-------------------------------------------------void myplus(double y[],double x[],double z[]){y[0]=x[0]+z[0];}//-------------------------------------------------void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) //<8> {double *x,*y,*z; //int mrows0,ncols0; //int mrows1,ncols1; //if (nrhs!=2) //<13> mexErrMsgTxt("Two inputs required."); //<16> else if (nlhs>1) //<15> mexErrMsgTxt("Too many output arguments"); //<16>mrows0=mxGetM(prhs[0]); //<17> ncols0=mxGetN(prhs[0]);mrows1=mxGetM(prhs[1]);ncols1=mxGetN(prhs[1]); //<20>//if (!mxIsDouble(prhs[0])||mxIsComplex(prhs[0])||!(mrows0==1 && ncols0==1)) //<22>mexErrMsgTxt("Inputs must be all noncomplex scalar double.");//if (!mxIsDouble(prhs[1])||mxIsComplex(prhs[1])||!(mrows1==1 && ncols1==1)) //<25> mexErrMsgTxt("Inputs must be all noncomplex scalar double.");//if (mrows0!=mrows1||ncols0!=ncols1) //<28> mexErrMsgTxt("Inputs must be same dimension."); //<29>//plhs[0]=mxCreateDoubleMatrix(mrows0,ncols0,mxREAL); //<31>x=mxGetPr(prhs[0]); //<32> z=mxGetPr(prhs[1]); //<33> y=mxGetPr(plhs[0]); //<34>myplus(y,x,z);}(3)cd D:\myworkmex exm12013_1.cppdir exm12013_1.*exm1213_1.cpp exm1213_1.dll(4)a=0.111;b=0.222;c=exm12013_1(a,b)c =0.333012.1.4C MEX文件的执行流程12.1.5编写C MEX文件的常用库函数和示例12.1.5.1常用的MEX库函数(1)#include "mex.h"void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])/* 其他C源码……*/}(2)#include "mex.h"void mexErrMsgTxt(const char *error_msg);void mexWarnMsgTxt(const char *warning_msg);(3)#include "mex.h"int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs,mxArray *prhs[], const char *command_name);(4)#include "mex.h"int mexEvalString(const char *command);(5)#include "mex.h"mxArray *mexGetVariable(const char *workspace, const char *var_name);int mexPutVariable(const char *workspace, const char *var_name, mxArray *array_ptr);12.1.5.2常用的MX函数(1)#include "matrix.h"mxArray *mxCreateNumericMatrix(int m, int n, mxClassID class,mxComplexity ComplexFlag);(2)#include "matrix.h"int mxGetM(const mxArray *array_ptr);int mxGetN(const mxArray *array_ptr);void mxSetM(mxArray *array_ptr, int m);void mxSetN(mxArray *array_ptr, int m);(3)#include "matrix.h"double *mxGetPr(const mxArray *array_ptr);double *mxGetPi(const mxArray *array_ptr);void mxSetPr(mxArray *array_ptr, double *pr);void mxSetPi(mxArray *array_ptr, double *pr);(4)#include "matrix.h"#include <stdlib.h>void *mxCalloc(size_t n, size_t size);12.1.5.3编程示例【例12.1.5.3-1】创建一个C语言MEX文件,实现对MATLAB两个“单行”字符串的合并。
本例演示:(A)如何根据MATLAB约定的规则编写C MEX源码;(B)如何构成该文件的调用指令;(C)如何为MEX文件编写在线帮助文件。
(1)#include "mex.h" //<1>#include "string.h" //<2>//-------------------------------------------------void stringplus(char *input_buf0,char *input_buf1,char *output_buf){strcat(output_buf,input_buf0);strcat(output_buf,input_buf1);}//-------------------------------------------------void mexFunction(int nlhs,mxArray *plhs[], int nrhs,const mxArray *prhs[]) //<10>{char *input_buf0,*input_buf1,*output_buf;int buflen,buflen0,buflen1,status;if (nrhs!=2) //<13>mexErrMsgTxt("Two inputs inquired."); //<14>else if (nlhs>1) //<15>mexErrMsgTxt("Too many output arguments."); //<16>if (mxIsChar(prhs[0])!=1||mxIsChar(prhs[1])!=1) //<17>mexErrMsgTxt("Inputs must be a string.");if (mxGetM(prhs[0])!=1||mxGetM(prhs[1])!=1) //<19>mexErrMsgTxt("Inputs must be a row vector.");buflen0=(mxGetM(prhs[0])*mxGetN(prhs[0]))+1; //<21>buflen1=(mxGetM(prhs[1])*mxGetN(prhs[1]))+1; //<22>buflen=buflen0+buflen1-1;input_buf0=(char *)mxCalloc(buflen0,sizeof(char));input_buf1=(char *)mxCalloc(buflen1,sizeof(char));output_buf=(char *)mxCalloc(buflen,sizeof(char));//status=mxGetString(prhs[0],input_buf0,buflen0); //<30> if (status!=0)mexWarnMsgTxt("Not enough space,String is truncated.");//status=mxGetString(prhs[1],input_buf1,buflen1); //<34> if (status!=0)mexWarnMsgTxt("Not enough space,String is truncated.");stringplus(input_buf0,input_buf1,output_buf);//plhs[0]=mxCreateString(output_buf); //<39> return;}(3)cd d:\myworkmex exm120153_1.cpp(4)根据以上分析,就可以写出下列exm120153_1.m文件:% exm120153_1.m Two strings are concatenated into a larger string.% Cstr=exm120153_1(Astr, Bstr) 把字符串Astr和Bstr水平串联% Astr 被串联的“单行”字符串% Bstr 被串联的“单行”字符串% Cstr 由Astr在前,Bstr在后,串联而成的字符串。