下载
第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 a t
e n g
m e x
在下面几节中将举一些例子。这些例子基本上说明了 M AT L A B和C或F O RT R A N是如何相
可操作的m x A r r a y s。
M AT文件。
M AT L A B工程文件。
M E X程序,在M A LTA B环境中完成一些操作的程序。
下载
第1 5章 M AT L A B与其他编程语言结合 3 0 5
互调用的。它们已在运行 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,也就是在程序的开始包含下面一行:
# i n c l u d e " m a t r i x . 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中的内存管理
v o i d * m x C a l l o c ( s i z e _ t n , s i z e _ t s i z e ) ;
分配内存。参数 n表示分配的元素个数, s i z e表示每个元素的字节数。如果分配成功,
返回一个指向已分配内存的开始位置的指针;否则返回 N U L L。在程序中必须嵌入库
文件< s t d l i b . h >。当不再使用时用 m x F r e e来释放内存。
v o i d m x S e t A l l o c F c n s ( c a l l o c _ p r o c c a l l o c f c n , f r e e _ p r o c
f r e e f c n , r e a l l o c _ p r o c r e a l l o c f c n , m a l l o c _ p r o c m a l l o c f c n ) ;
在非M E X程序中用来释放内存。使用 h e l p d e s k可得更多信息。
v o i d m x F r e e ( v o i d * p t r ) ;
释放p t r指向的内存空间。
v o i d * m x R e a l l o c ( v o i d * p t r , s i z e _ t s i z e ) ;
重新分配用 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来释放不再使用的内存。
v o i d m x D e s t r o y A r r a y ( m x A r r a y * a r r a y _ p t r ) ;
释放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
3 0 6 M ATLAB 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 ,
m x U I N T 8 _ C L A S S ,
m x I N T 1 6 _ C L A S S ,
m x U I N T 1 6 _ C L A S S ,
m x I N T 3 2 _ C L A S S ,
m x U I N T 3 2 _ C L A S S ,
m x U N K N O W N _ C L A S S ,
细胞类型。
结构类型。
用户自定义类型。
字符串类型。
稀疏矩阵。
双精度浮点小数。
单精度浮点小数。
8位整数。
8位无符号整数。
1 6位整数。
1 6位无符号整数。
3 2位整数。
3 2位无符号整数。
未知类型。
m x C l a s s I D m x G e t C l a s s I D ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回a rr a y_p t r指向的m x A r r a y类型;见上。
c o n s t c h a r * m x G e t C l a s s N a m e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
同上,返回字符串形式的类型。
b o o l m x I s C l a s s ( c o n s t m x A r r a y * a r r a y _ p t r , c o n s t c h a r * n a m e ) ;
如果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”。它还可以是自定义的类型名。
c o n s t c h a r * m x G e t N a m e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回包含a rr a y_p t r指向的m x A r r a y名字的字符串。
d o u b l e m x G e t S c a l a r ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回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为空,则返回一个不确定值。
m x A r r a y * m x D u p l i c a t e A r r a y ( c o n s t m x A r r a y * i n ) ;
复制 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。
i n t m x G e t N u m b e r O f E l e m e n t s ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回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来找出元素类型。
i n t m x G e t E l e m e n t S i z e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回保存 a rr a y_p t r指向的m x A r r a y中一个元素需要的字节数。如果 m x A r r a y是细胞或
结构类型,则返回指向它们的指针大小。如果操作失败,返回 0。
下载
第1 5章 M AT L A B与其他编程语言结合 3 0 7
i n t m x G e t N u m b e r O f D i m e n s i o n s ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回a rr a y_p t r指向的m x A r r a y中的维数,这个数总是不小于 2。
c o n s t i n t * m x G e t D i m e n s i o n s ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回一个整数向量的指针,包含 a rr a y_p t r指向的m x A r r a y的每一维的元素个数。
i n t m x S e t D i m e n s i o n s ( m x A r r a y * a r r a y _ p t r , c o n s t i n t * s i z e , i n t n d i m s ) ;
用来重构或增加 /减少 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
可得更多信息。
i n t m x G e t M ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回‘行’数,也就是 a rr a y_p t r指向的m x A r r a y的第一维中元素的个数。
v o i d m x S e t M ( m x A r r a y * a r r a y _ p t r , i n t 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。
i n t m x G e t N ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回‘列’数,也就是 a rr a y_p t r指向的m x A r r a y的第二维中元素的个数。
v o i d m x S e t N ( m x A r r a y * a r r a y _ p t r , i n t 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。
b o o l m x I s E m p t y ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y_p t r指向的m x A r r a y为空,就返回真。
b o o l m x I s F r o m G l o b a l W S ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y_p t r指向的m x A r r a y是从M AT L A B全局工作区中复制得到,则返回真。
b o o l m x I s N u m e r i c ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y _ p t r指向的m x A r r a y是数字或字符串类型,则返回真。
b o o l m x I s I n t 8 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
8位整数。
b o o l m x I s U i n t 8 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
8位无符号整数。
b o o l m x I s I n t 1 6 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
1 6位整数。
b o o l m x I s U i n t 1 6 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
1 6位无符号整数。
b o o l m x I s I n t 3 2 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
3 2位整数。
b o o l m x I s U i n t 3 2 ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
3 2位无符号整数。
b o o l m x I s S i n g l e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
3 0 8 M ATLAB 5 手册
下载
单精度浮点小数。
b o o l m x I s D o u b l e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
双精度浮点小数。
b o o l m x I s C o m p l e x ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
复数。如果 a rr a y _ p t r指向的m x A r r a y按函数指定的格式存储数据,则返回真。
i n t m x C a l c S i n g l e S u b s c r i p t ( ( c o n s t m x A r r a y * a r r a y _ p t r , i n t n s b u s , i n t * s u b s )
将多维中的坐标向量转换成字典序中的标量下标。参数 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中满矩阵的处理
m x A r r a y * m x C r e a t e D o u b l e M a t r i x ( i n t m , i n t n , m x C o m p l e x i t y C o m p l e x f l a g ) ;
和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类型。
d o u b l e * m x G e t P r ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回a rr a y_p t r指向的m x A r r a y中第一个实数元素的指针。如果矩阵中没有任何实数元
素,则返回 N U L L。
v o i d m x S e t P r ( m x A r r a y * a r r a y _ p t r , d o u b l e * p r ) ;
设置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。
d o u b l e * m x G e t P i ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
和m x G e t P r相似,但是是对虚数元素。
v o i d m x S e t P i ( m x A r r a y * a r r a y _ p t r , d o u b l e * p i ) ;
和m x S e t P r相似,但是是对虚数元素。
下面的程序用来创建和处理二维 m×n的稀疏矩阵,矩阵元素是双精度浮点小数。
命令集1 7 8 C中稀疏矩阵的处理
m x A r r a y * m x C r e a t e S p a r e s ( i n t m , i n t n i n t n z m a x , m x C o m p l e x i t y C o m p l e x F l a g ) ;
创建一个二维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。
i n t m x G e t N z m a x ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回a rr a y_p t r指向的稀疏矩阵 m x A r r a y中的n z m a x值(见上)。如果发生任何错误,都
返回一个不确定数。
v o i d m x S e t N z m a x ( m x A r r a y * a r r a y _ p t r , i n t n z m a x ) ;
下载
第1 5章 M AT L A B与其他编程语言结合 3 0 9
设置a rr a y_p t r指向的稀疏矩阵 m x A r r a y中的n z m a x值(见上)。如果n z m a x改变,那么向
量i r、p r和p i的大小(如果它们存在)也将随着改变。用 h e l p d e s k可得更多信息。
i n t * m x G e t I r ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回一个包含有行数的整数向量指针,其中第一行有数字 0,a rr a y_p t r指向的稀疏矩
阵m x A r r a y中有非零元素。如果操作失败,返回 N U L L。
v o i d m x S e t I r ( m x A r r a y * a r r a y _ p t r , i n t * i r ) ;
定义a rr a y_p t r指向的稀疏矩阵 m x A r r a y中有非零元素的行。参数 i r是一个整数向量指
针,包含使用的行数,这些行必须按列序来存储。在 0处开始行计数。用 h e l p d e s k
可得更多信息。
i n t * m x G e t J c ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
和m x G e t I r相似,但是返回的整数向量指针直接表示有非零元素的列来。用 h e l p d e s k
可得更多信息。
v o i d m x S e t J c ( m x A r r a y * a r r a y _ p t r , i n t * j c ) ;
和m x S e t I r相似,但是设置直接表示有非零元素列的向量。用h e l p d e s k可得更多信息。
b o o l m x I s S P a r s e ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y_p t r指向的m x A r r a y是稀疏矩阵类型,返回真。
下面的程序用来创建和处理字符串 m x A r r a y s。
命令集1 7 9 C中字符串的处理
m x C h a r
被字符串m x A r r a y用来存储数据元素的数据类型。
m x A r r a y * m x C r e a t e C h a r A r r a y ( i n t n d i m , c o n s t i n t * d i m s ) ;
和m x C r e a t e C e l l A r r a y相似,但是是创建 n维的字符矩阵,见命令集 1 8 1。
m x A r r a y * m x C r e a t e C h a r M a t r i x F r o m S t r i n g s ( i n t m , c h a r * * s t r ) ;
和m x C r e a t e C e l l M a t r i x相似(见命令集 1 8 1 ),但是是用 s t r指向的字符串向量创建
二维字符矩阵; m是字符串向量中的字符串数。
m x A r r a y * m x C r e a t e S t r i n g ( c o n s t c h a r * s t r ) ;
用字符串 s t r创建一个字符串矩阵 m x A r r a y。如果创建成功,则返回指向这个字符串
m x A r r a y的指针;否则返回N U L L。当字符串m x A r r a y不再使用时,应用m x D e s t r o y A r r a y
来释放所占内存;见命令集1 7 5。
i n t m x G e t S t r i n g ( c o n s t m x A r r a y * a r r a y _ p t r , c h a r * b u f , i n t b u f l e n ) ;
复制a rr a y_p t r指向的字符串 m x A r r a y,得到的字符串保存在 b u f中。b u f l e n是b u f中可
以存放的最大字符数。如果复制成功,返回 0;否则返回 1。
b o o l m x I s C h a r ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y_p t r指向的m x A r r a y是字符串类型,则返回真。
M ATLAB 5中一个新数据类型是多维数组;见 2 . 2节。用下面的程序来处理这种类型
的m x A r r a y。
3 1 0 M ATLAB 5 手册
下载
注意: C中可以使用 8 、 1 6 或 3 2 位的带符号或不带符号的整数和单精度浮点小数的
m x A r r a y来创建和计算。然而现在已不能在 M A LTA B环境中使用它们了。
命令集1 8 0 C中多维数组的处理
m x A r r a y * m x C r e a t e N u m e r i c A r r a y ( i n t n d i m , c o n s t i n t * d i m s , m x C l a s s I D c l a s s ,
M x C o m p l e x i t y C o m p l e x F l a g ) ;
和m x C r e a t e C e l l A r r a y相似,但是这里是创建 n维的数字矩阵。数字类型为 c l a s s,
见命令集 1 7 6中的m x C l a s s I D。如果有复数,则 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。
v o i d * m x G e t D a t a ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
和m x G e t P r相似,见命令集 1 7 7,但是返回一个 v o i d指针。更多的是用在除双精度浮
点小数以外的其他类型数字矩阵中。
v o i d m x S e t D a t a ( m x A r r a y * a r r a y _ p t r , v o i d * d a t a _ p t r ) ;
和m x S e t P r相似,见命令集 1 7 7,但是返回一个 v o i d指针。更多的是用在除双精度浮
点小数以外的其他类型数字矩阵中。
v o i d * m x G e t I m a g D a t a ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
和m x G e t P i相似,见命令集 1 7 7,但是返回一个 void 指针。更多的是用在除双精度
浮点小数以外的其他类型数字矩阵中。
v o i d m x S e t I m a g D a t a ( m x A r r a y * a r r a y _ p t r , v o i d * p i ) ;
和m x S e t P i相似,见命令集 1 7 7,但是返回一个 v o i d指针。更多的是用在除双精度
浮点小数以外的其他类型数字矩阵中。
v o i d m x S e t L o g i c a l ( m x A r r a y * a r r a y _ p t r ) ;
在a rr a y_p t r指向的数字m x A r r a y中设置逻辑标识符。 M AT L A B就会把m x A r r a y的数据
当作逻辑变量来对待,也就是 0是假,其他值是真。
v o i d m x C l e a r L o g i c a l ( m x A r r a y * a r r a y _ p t r ) ;
去掉数字m x A r r a y中的逻辑标识符,见上。
b o o l m x I s L o g i c a l ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
检查数字m x A r r a y中的逻辑标识符的设置,见上。如果设置了,就返回真;否则返回假。
M ATLAB 5中一新数据类型是细胞矩阵,也称细胞数组;见 5 . 5节。下面的程序用来处理
这种类型的 m x A r r a y:
命令集1 8 1 C中细胞矩阵的处理
m x A r r a y * m x C r e a t e C e l l A r r a y ( i n t n d i m , c o n s t i n t * d i m s ) ;
创建一个 n维的空细胞矩阵。参数 n d i m是维数, d i m s是表示每维大小的向量指针。如
果创建成功,就返回指向细胞矩阵的指针;否则返回 N U L L或停止程序运行。
m x A r r a y * m x C r e a t e C e l l M a t r i x ( i n t m , i n t n ) ;
和上个函数相似,但是是用来创建一个二维 m×n的细胞矩阵。
m x A r r a y * m x G e t C e l l ( c o n s t m x A r r a y * a r r a y _ p t r , i n t i n d e x ) ;
从细胞m x A r r a y中复制一个细胞。参数 a rr a y_p t r是指向细胞 m x A r r a y的指针,i n d e x表
下载
第1 5章 M AT L A B与其他编程语言结合 3 1 1
示第一个细胞与被复制细胞之间的细胞数;见命令集1 7 6中m x C a l c S i n g l e S u b s c r i p t。
如果复制成功,返回指向细胞m x A r r a y的指针;否则返回N U L L。
v o i d m x S e t C e l l ( m x A r r a y * a r r a y _ p t r , i n t i n d e x , m x A r r a y * v a l u e ) ;
设置细胞 m x A r r a y中的一个细胞。参数 i n d e x表示第一个细胞与被设置细胞之间的细
胞数;见命令集 1 7 6中m x C a l c S i n g l e S u b s c r i p t。参数v a l u e是细胞指针,细胞的
值将被设置在a rr a y_p t r指向的m x A r r a y中。
b o o l m x I s C e l l ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
如果a rr a y_p t r指向的m x A r r a y是细胞类型,则返回真。
M ATLAB 5 中另一新数据类型是结构;见 1 2 . 5节。下面的程序用来处理这种类型的
m x A r r a y:
命令集1 8 2 C中结构的处理
m x A r r a y * m x C r e a t e S t r u c t A r r a y ( i n t n d i m , c o n s t i n t * d i m s , i n t n f i e l d s , c o n s t
c h a r * * f i e l d _ n a m e s ) ;
和m x C r e a t e C e l l A r r a y相似 (见命令集 1 8 1 ),但是是创建 n维的结构矩阵。参数
n f i e l d s表示每个元素中的域数, f i e l d_n a m e s是字符串向量指针,表示域名。
m x A r r a y * m x C r e a t e S t r u c t M a t r i x ( i n t
* * f i e l d _ n a m e s ) ;
m , i n t n , i n t n f i e l d s , c o n s t c h a r
和上个函数相似,但是是用来创建二维 m×n的结构矩阵。
i n t m x G e t N u m b e r O f F i e l d s ( c o n s t m x A r r a y * a r r a y _ p t r ) ;
返回a rr a y_p t r指向的结构 m x A r r a y中的域数。如果操作失败,则返回 0。
m x A r r a y * m x G e t F i e l d ( c o n s t
* f i e l d _ n a m e ) ;
m x A r r a y * a r r a y _ p t r ,
i n t i n d e x , c o n s t c h a r
返回a rr a y_p t r指向的结构m x A r r a y中一个元素的一个域值。参数 i n d e x表示第一个元素
和返回的元素之间的元素个数;见命令集 1 7 6中m x C a l c S i n g l e S u b s c r i p t。参数
f i e l d_n a m e表示元素中域名的字符串,如果操作成功,返回指向这个域的指针;否则
返回N U L L。
v o i d m x S e t F i e l d ( m x A r r a y * a r r a y _ p t r , i n t i n d e x , c o n s t c h a r * f i e l d _ n a m e , m x A r r a y
* v a l u e ) ;
和上个函数相似,但是是用指针 v a l u e指向的值来设置域值。
i n t m x G e t F i e l d N u m b e r ( c o n s t m x A r r a y * a r r a y _ p t r , c o n s t c h a r * f i e l d _ n a m e ) ;
返回a rr a y_p t r指向的结构 m x A r r a y中一个域中的域数。字符串f i e l d _ n a m e表示域名字,
如果操作成功,则返回结构中域的个数 (从0开始);否则返回-1。
c o n s t c h a r * m x G e t F i e l d N a m e B y N u m b e r ( c o n s t
f i e l d _ n u m b e r ) ;
m x A r r a y * a r r a y _ p t r ,
i n t
返回a rr a y_p t r指向的结构 m x A r r a y中的域名。参数 f i e l d_n u m b e r表示结构中域的一个
数字序列(从0开始)。
m x A r r a y * m x G e t F i e l d B y N u m b e r ( c o n s t
f i e l d _ n u m b e r ) ;
m x A r r a y * a r r a y _ p t r ,
i n t i n d e x , i n t