没有合适的资源?快使用搜索试试~ 我知道了~
MATLAB与其他编程语言结合.pdf
需积分: 0 12 下载量 90 浏览量
2008-01-03
15:19:11
上传
评论 1
收藏 1.33MB PDF 举报
温馨提示
试读
43页
讲MATLAB与其他编程语言结合的。
资源详情
资源评论
资源推荐
下载
第1 5 章 M AT L A B与其他编程语言结合
M AT L A B 可以和其他编程语言一起使用,可以调用 F O RT R A N或C程序。反过来
F O RT R A N 或C也可以调用M AT L A B程序。这样,快速的编译程序就可以利用 M AT L A B 中强大
的矩阵或图形命令,通过编写部分的 C或F O RT R A N程序,并进行编译,就可以避免 M A LTA B
程序的瓶颈现象。
M AT L A B还可以结合使用其他的应用程序,如 Microsoft Word for Wi n d o w s。这将在本章
的最后一节讨论,这主要取决于计算机的系统和安装的应用程序。
15.1 介绍M AT L A B 和F O RT R A N 或C
M AT L A B 可以被F O RT R A N 或C语言程序调用,它也可以调用 F O RT R A N 或C语言程序。
如果M AT L A B程序运行速度很慢,后者对此很有用。因为 M AT L A B 是一个解释性语言,所以
当运行程序时就是解释它的命令。这样有时会导致程序的运行速度很慢,如 f o r- l o o p s 循环。
在F O RTRAN 77和C中可以使用M AT L A B 库,也可以用F O RTRAN 90或C + +对它们进行链接。
除非特别需要,一般不推荐编写 F O RT R A N 或C程序。M AT L A B的优点在于可以用高级的
形式描述出操作,而程序员不必担心循环的次数和一些其他细节问题。
被M AT L A B调用的程序必须在编译后转换成 M E X 文件,这样才能被M AT L A B调用。在编
译时它们和M文件一样使用。
在2 . 8 节中讲到了由M AT L A B创建的二进制文件。它们是以 M AT文件形式被调用的,在 C
或F O RT R A N语言的库中有用来读和写二进制文件的程序。注意,这些文件可以在不同的平台
间传递,例如,用户可以读取在 Wi n d o w s 环境下建立的M AT 文件到U N I X环境中。在1 5 . 4节中
介绍了如何在M AT L A B中读或写其他的二进制文件。这对有特殊格式要求的程序很有用。
M AT L A B 编译器、 C数学库和C + + 数学库可以从M a t h Wo r k s 公司买到。首先可以作为自动
M E X 文件生成器或C源代码生成器使用,结合C数学库一起生成应用程序。
在C中编写M AT L A B程序,数据通过指针来访问。在其他编程语言中调用 M A LTA B程序,
就要求使用指针。
在M ATLAB 5中,所有变量类型,如标量、向量、矩阵、字符串、细胞矩阵和结构,都
以m x A r r a y s形式来保存,所有的数据操作都通过这些 m x A r r a y s来完成。
M ATLAB 5中新的数据类型,也就是多维数组、细胞矩阵和结构只能在 C中使用,而不能
在F O RT R A N中使用。
在C或F O RT R A N中使用的M AT L A B程序主要分四类:
m x 可操作的m x A r r a y s。
m a t M AT 文件。
e n g M AT L A B工程文件。
m e x M E X 程序,在M A LTA B环境中完成一些操作的程序。
在下面几节中将举一些例子。这些例子基本上说明了 M AT L A B和C或F O RT R A N是如何相
互调用的。它们已在运行 Sun OS 5.5.1的工作站上和Soloais CDE 1.0.2版的Wi n d o w s 系统中编
译通过。对于每一种系统而言,编程的思想都是一样的。然而还是有一些重要的细节方面是
不相同的。这就是为什么M AT L A B中的例程很有趣的原因,它们可以在库中找到:
. . . / m a t l a b 5 2 / e x t e r n / e x a m p l e s
路径中的三个点,. . . ,表示这部分路径与系统有关。
例程的文档可以用 M AT L A B 命令h e l p d e s k 获得。而且还有M AT L A B 手册《应用程序接
口指南》。
15.2 MAT L A B 和C
为了使C和M AT L A B混合编程,重要的是使用的 C编译器以ANSI C标准进行编译。
15.2.1 C中对m x A r r a y的操作
用下面描述的程序可以对 m x A r r a y进行操作。为了使用这些程序,在程序中必须嵌入头文
件m a t r i x . h ,也就是在程序的开始包含下面一行:
#include "matrix.h"
下面表中的程序用来分配和释放内存。一个好的编程习惯就是及时释放不再使用的内存。
不必使用M AT L A B程序来创建数据结构,因为在程序结束时 M AT L A B会自动地来完成(可见命
令集1 9 5 中程序m e x M a k e A r r a y P e r s i s t e n t和m e x M a k e M e m o r y P e r s i s t e n t ) 。
命令集1 7 5 C 中的内存管理
void *mxCalloc(size_t n, size_t size);
分配内存。参数n表示分配的元素个数, s i z e表示每个元素的字节数。如果分配成功,
返回一个指向已分配内存的开始位置的指针;否则返回 N U L L 。在程序中必须嵌入库
文件< s t d l i b . h > 。当不再使用时用m x F r e e 来释放内存。
void mxSetAllocFcns(calloc_proc callocfcn,free_proc
freefcn,realloc_proc reallocfcn, malloc_proc mallocfcn);
在非M E X 程序中用来释放内存。使用 h e l p d e s k 可得更多信息。
void mxFree(void *ptr);
释放p t r指向的内存空间。
void *mxRealloc(void *ptr, size_t size);
重新分配用m x C a l l o c分配的内存。参数p t r是指向内存开始位置的指针, s i z e 是分配
元素的个数。如果分配成功,返回得到指向分配内存开始位置的指针;否则返回
N U L L。在程序中必须嵌入库文件< s t d l i b . h >。用m x F r e e来释放不再使用的内存。
void mxDestroyArray(mxArray *array_ptr);
释放a rr a y _ p t r 指向的m x A r r a y内存。
下面的常用程序用来管理和检查 m x A r r a y,如命名、重构和检查它们的类型。
命令集1 7 6 C 中处理m x A r r a y 的常用程序
m x C o m p l e x i t y
第1 5章 M AT L A B与其他编程语言结合 3 0 5
下载
是一个枚举数据类型,用来表示 m x A r r a y的虚数元素。它的值可以为 m x C O M P L E X (复
数m x A r r a y )或m x R E A L(其他)。
m x C l a s s I D
是一个枚举数据类型,用来表示 m x A r r a y 的类型。有下列选项:
m x C E L L _ C L A S S , 细胞类型。
m x S T R U C T _ C L A S S , 结构类型。
m x O B J E C T _ C L A S S , 用户自定义类型。
m x C H A R _ C L A S S , 字符串类型。
m x S P A R S E _ C L A S S , 稀疏矩阵。
m x D O U B L E _ C L A S S , 双精度浮点小数。
m x S I N G L E _ C L A S S , 单精度浮点小数。
m x I N T 8 _ C L A S S , 8位整数。
m x U I N T 8 _ C L A S S , 8 位无符号整数。
m x I N T 1 6 _ C L A S S , 1 6 位整数。
m x U I N T 1 6 _ C L A S S , 1 6 位无符号整数。
m x I N T 3 2 _ C L A S S , 3 2位整数。
m x U I N T 3 2 _ C L A S S , 3 2位无符号整数。
m x U N K N O W N _ C L A S S , 未知类型。
mxClassID mxGetClassID(const mxArray *array_ptr);
返回a rr a y_p t r指向的m x A r r a y类型;见上。
const char *mxGetClassName(const mxArray *array_ptr);
同上,返回字符串形式的类型。
bool mxIsClass(const mxArray *array_ptr, const char *name);
如果a rr a y _ p t r 指向的m x A r r a y有字符串n a m e表示的类型,则返回真。字符串 n a m e相
对应于上面的类型 (见m x C l a s s I D):“c e l l ”、“s t r u c t ”、“c h a r”、“s p a r s e ”、
“d o u b l e ”、“s i n g l e”、“i n t 8 ”、“u i n t 8 ”、“i n t 1 6”、“u i n t 1 6 ”、“i n t 3 2”
和“u i n t 3 2”。它还可以是自定义的类型名。
const char *mxGetName(const mxArray *array_ptr);
返回包含a rr a y _p t r 指向的m x A r r a y 名字的字符串。
double mxGetScalar(const mxArray *array_ptr);
返回a rr a y _p t r指向的m x A r r a y的第一个实数元素的值。总是返回一个 d o u b l e 型值。如
果m x A r r a y 是一个结构或细胞类型,则返回 0 . 0 ;如果m x A r r a y 是一个稀疏矩阵类型,
则返回第一个非零实数元素的值;如果 m x A r r a y为空,则返回一个不确定值。
mxArray *mxDuplicateArray(const mxArray *in);
复制 i n 指向的 m x A r r a y ,并返回指向复制 m x A r r a y 的指针。当它不再使用时,用
m x D e s t r o y A r r a y来释放它;见命令集1 7 5 。
int mxGetNumberOfElements(const mxArray *array_ptr);
返回a rr a y _ p t r 指向的m x A r r a y 的元素个数。使用m x G e t C l a s s I D 来找出元素类型。
int mxGetElementSize(const mxArray *array_ptr);
返回保存a rr a y _ p t r 指向的m x A r r a y 中一个元素需要的字节数。如果 m x A r r a y 是细胞或
结构类型,则返回指向它们的指针大小。如果操作失败,返回 0。
3 0 6 M ATLAB 5 手册
下载
int mxGetNumberOfDimensions(const mxArray *array_ptr);
返回a rr a y_p t r指向的m x A r r a y 中的维数,这个数总是不小于 2。
const int *mxGetDimensions(const mxArray *array_ptr);
返回一个整数向量的指针,包含 a rr a y_p t r指向的m x A r r a y的每一维的元素个数。
int mxSetDimensions(mxArray *array_ptr, const int *size, int ndims);
用来重构或增加 /减少 a rr a y _ p t r 指向的m x A r r a y 的元素。参数 n d i m s 表示维数范围,
s i z e表示一个整数向量的指针,包含每维中需要的元素个数。如果操作成功,返回
0;否则返回1。如果要增加或减少元素,则必须进行分配 /释放内存。用h e l p d e s k
可得更多信息。
int mxGetM(const mxArray *array_ptr);
返回‘行’数,也就是a rr a y _ p t r指向的m x A r r a y 的第一维中元素的个数。
void mxSetM(mxArray *array_ptr, int m);
用来重构或增加/减少a rr a y _ p t r指向的m x A r r a y中的‘行’数。参数m表示规定的‘行’
数,见m x S e t D i m e n s i o n s 。
int mxGetN(const mxArray *array_ptr);
返回‘列’数,也就是a rr a y_p t r指向的m x A r r a y的第二维中元素的个数。
void mxSetN(mxArray *array_ptr,int n);
用来重构或增加/减少a rr a y _ p t r指向的m x A r r a y中的‘列’数。参数n表示规定的‘列’
数,见m x S e t D i m e n s i o n s。
bool mxIsEmpty(const mxArray *array_ptr);
如果a rr a y_p t r指向的m x A r r a y为空,就返回真。
bool mxIsFromGlobalWS(const mxArray *array_ptr);
如果a rr a y _ p t r 指向的m x A r r a y 是从M AT L A B全局工作区中复制得到,则返回真。
bool mxIsNumeric(const mxArray *array_ptr);
如果a rr a y _ p t r 指向的m x A r r a y是数字或字符串类型,则返回真。
bool mxIsInt8(const mxArray *array_ptr);
8位整数。
bool mxIsUint8(const mxArray *array_ptr);
8位无符号整数。
bool mxIsInt16(const mxArray *array_ptr);
1 6 位整数。
bool mxIsUint16(const mxArray *array_ptr);
1 6 位无符号整数。
bool mxIsInt32(const mxArray *array_ptr);
3 2位整数。
bool mxIsUint32(const mxArray *array_ptr);
3 2 位无符号整数。
bool mxIsSingle(const mxArray *array_ptr);
第1 5章 M AT L A B与其他编程语言结合 3 0 7
下载
单精度浮点小数。
bool mxIsDouble(const mxArray *array_ptr);
双精度浮点小数。
bool mxIsComplex(const mxArray *array_ptr);
复数。如果a rr a y _ p t r 指向的m x A r r a y 按函数指定的格式存储数据,则返回真。
int mxCalcSingleSubscript((const mxArray *array_ptr,int nsbus,int *subs)
将多维中的坐标向量转换成字典序中的标量下标。参数 n s u b s 通常表示 a rr a y_ p t r指向
的m x A r r a y中的维数,s u b s表示要转换坐标向量的指针。用 h e l p d e s k 可得更多信息。
下面的程序用来创建和处理二维 m×n满矩阵,矩阵的元素是双精度浮点小数。
命令集1 7 7 C 中满矩阵的处理
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity Complexflag);
和m x C r e a t e C e l l M a t r i x 相似(见命令集1 8 1 ) ,但是这里创建的是二维 m×n双精度浮点
小数矩阵。如果矩阵中元素有复数,则参数 C o m p l e x f l a g是m x C O M P L E X类型,否则是
m x R E A L类型。
double *mxGetPr(const mxArray *array_ptr);
返回a rr a y _ p t r指向的m x A r r a y 中第一个实数元素的指针。如果矩阵中没有任何实数元
素,则返回N U L L。
void mxSetPr(mxArray *array_ptr, double *pr);
设置a rr a y _ p t r指向的m x A r r a y 中的实数元素。参数 p r包含应该使用值的向量指针,这
个向量必须用m x C a l l o c来动态地分配;见命令集 1 7 5 。
double *mxGetPi(const mxArray *array_ptr);
和m x G e t P r相似,但是是对虚数元素。
void mxSetPi(mxArray *array_ptr, double *pi);
和m x S e t P r 相似,但是是对虚数元素。
下面的程序用来创建和处理二维 m×n的稀疏矩阵,矩阵元素是双精度浮点小数。
命令集1 7 8 C 中稀疏矩阵的处理
mxArray *mxCreateSpares(int m, int n int nzmax, mxComplexity ComplexFlag);
创建一个二维m×n的稀疏矩阵。参数n z m a x 表示矩阵中非零元素的个数。如果矩阵中
有复数元素,则参数C o m p l e x F l a g是m x C O M P L E X类型;否则是m x R E A L 类型。如果创
建成功,返回指向这个矩阵的指针;否则返回 N U L L。当它不再使用时,用
m x D e s t r o y A r r a y来释放所占内存;见命令集1 7 5 。
int mxGetNzmax(const mxArray *array_ptr);
返回a rr a y _ p t r 指向的稀疏矩阵 m x A r r a y 中的n z m a x 值(见上)。如果发生任何错误,都
返回一个不确定数。
void mxSetNzmax(mxArray *array_ptr, int nzmax);
3 0 8 M ATLAB 5 手册
下载
剩余42页未读,继续阅读
zzylmt
- 粉丝: 4
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 机器学习和数据挖掘课程设计-米其林餐厅数据挖掘管理系统源码+使用文档说明.zip
- html html html展示我与ai的对化
- 数据结构课程设计-全国交通出行咨询模拟系统C语言实现源码.zip
- cef-binary-109.0.1+gcd5e37a+chromium-109.0.5414.8-windows32
- 基于C语言的全国交通咨询系统模拟源码.zip
- 正点原子HAL库 STM32F4 DMA(学习自用附源码)
- 炫酷代码雨,超级炫酷哦!!!
- 基于物联网MQTT协议的智能停车场管理系统
- POETIZE个人博客系统源码 - 最美博客
- 基于深度学习的行人检测系统源码+项目说明(YoloV3+Tensorflow).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0