matlab中数据类型与c语言数据类型的区别?
发布网友
发布时间:2022-04-26 22:56
我来回答
共4个回答
热心网友
时间:2022-06-19 13:43
简单谈一下。
1.好多类型是对应的。输入一个数,matlab里边默认的数据类型是double型,也就对应C里边的double型;你如果想让他对应C语言里边的float,那就得强制类型转换,用single(a),a表示要转换的数值,当然也可以转换成各种长度的int型(可以用到的函数有int64,int32,int16,int8等),当然也有无符号数(用函数unit64等进行转换),也可以转成char,还有logic类型对应C中的bool型。
2.matlab里边也有结构体,也有对象类。
3.matlab特有cell,处理起来比结构体什么的方便得多~
当然你遇到具体问题,可以具体的来问,要不回答你也很笼统~
热心网友
时间:2022-06-19 13:43
matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。定义基本上与c相同,但是matlab中数据是以矩阵形式存在的,在matlab中调用c程序时,需将c程序改写为专用的输入输出形式。
如果我有一个用c语言写的函数,实现了一个功能,如一个简单的函数:
double
add(double
x,
double
y)
{
return
x
+
y;
}
现在我想要在matlab中使用它,比如输入:
>>
a
=
add(1.1,
2.2)
3.3000
要得出以上的结果,那应该怎样做呢?
解决方法之一是要通过使用mex文件,mex文件使得调用c函数和调用matlab的内置函数一样方便。mex文件是由原c代码加上mex文件专用的接口函数后编译而成的。
可以这样理解,mex文件实现了一种接口,它把在matlab中调用函数时输入的自变量通过特定的接口调入了c函数,得出的结果再通过该接口调回matlab。该特定接口的操作,包含在mexfunction这个函数中,由使用者具体设定。
所以现在我们要写一个包含add和mexfunction的c文件,matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给mexfunction的一个参数,mexfunction把该值传给add,把得出的结果传回给mexfunction的另一个参数,matlab通过该参数来给出在matlab语句中调用函数时的输出值(如上例中的a)。
比如该c文件已写好,名为add.c。那么在matlab中,输入:
>>
mex
add.c
就能把add.c编译为mex文件(编译器的设置使用指令mex
-setup),在windows中,mex文件类型为mexw32,即现在我们得出add.mexw32文件。现在,我们就可以像调用m函数那样调用mex文件,如上面说到的例子。所以,通过mex文件,使用c函数就和使用m函数是一样的了。
我们现在来说mexfunction怎样写。
mexfunction的定义为:
void
mexfunction(
int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
}
可以看到,mexfunction是没返回值的,它不是通过返回值把结果传回matlab的,而是通过对参数plhs的赋值。mexfunction的四个参数皆是说明matlab调用mex文件时的具体信息,如这样调用函数时:
>>
b
=
1.1;
c
=
2.2;
>>
a
=
add(b,
c)
mexfunction四个参数的意思为:
nlhs
=
1,说明调用语句左手面(lhs-left
hand
side)有一个变量,即a。
nrhs
=
2,说明调用语句右手面(rhs-right
hand
side)有两个自变量,即b和c。
plhs是一个数组,其内容为指针,该指针指向数据类型mxarray。因为现在左手面只有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。
prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指针数组,即不能改变其指向内容。
因为matlab最基本的单元为array,无论是什么类型也好,如有double
array、
cell
array、
struct
array……所以a,b,c都是array,b
=
1.1便是一个1x1的double
array。而在c语言中,matlab的array使用mxarray类型来表示。所以就不难明白为什么plhs和prhs都是指向mxarray类型的指针数组。
完整的add.c如下:
//
add.c
#include
"mex.h"
//
使用mex文件必须包含的头文件
//
执行具体工作的c函数
double
add(double
x,
double
y)
{
return
x
+
y;
}
//
mex文件接口函数
void
mexfunction(
int
nlhs,
mxarray
*plhs[],
int
nrhs,
const
mxarray
*prhs[])
{
double
*a;
double
b,
c;
plhs[0]
=
mxcreatedoublematrix(1,
1,
mxreal);
a
=
mxgetpr(plhs[0]);
b
=
*(mxgetpr(prhs[0]));
c
=
*(mxgetpr(prhs[1]));
*a
=
add(b,
c);
}
mexfunction的内容是什么意思呢?我们知道,如果这样调用函数时:
>>
output
=
add(1.1,
2.2);
在未涉及具体的计算时,output的值是未知的,是未赋值的。所以在具体的程序中,我们建立一个1x1的实double矩阵(使用mxcreatedoublematrix函数,其返回指向刚建立的mxarray的指针),然后令plhs[0]指向它。接着令指针a指向plhs[0]所指向的mxarray的第一个元素(使用mxgetpr函数,返回指向mxarray的首元素的指针)。同样地,我们把prhs[0]和prhs[1]所指向的元素(即1.1和2.2)取出来赋给b和c。于是我们可以把b和c作自变量传给函数add,得出给果赋给指针a所指向的mxarray中的元素。因为a是指向plhs[0]所指向的mxarray的元素,所以最后作输出时,plhs[0]所指向的mxarray赋值给output,则output便是已计算好的结果了。
热心网友
时间:2022-06-19 13:44
其实 在matlab中不是特别的在意其数据类型,matlab的功能相当强大;C语言的数据类型就比较重要了,写程序的时候都要注意其语法....
热心网友
时间:2022-06-19 13:44
我觉得吧 其实差别不大 C语言要先定义再使用 Matlab只要想用随时可用 知识各自各自的语法