c matlab 数据类型,matlab中数据类型与c语言数据类型的区别?

matlab中数据类型与c语言数据类型的区别?

mip版  关注:233  答案:3  悬赏:0

解决时间 2021-02-23 08:46

2e26111b6dc091e13640991499b67d37.png

已解决

2021-02-22 22:32

matlab中数据类型与c语言数据类型的区别?

最佳答案

408c3edab2bd577fc6555f0a7fd8baa8.png

2021-02-22 22:42

简单谈一下。

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,处理起来比结构体什么的方便得多~

当然你遇到具体问题,可以具体的来问,要不回答你也很笼统~

全部回答

a06347a48c7e54641f3ce21e93bbba37.png

1楼

2021-02-22 23:39

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便是已计算好的结果了。

bc3b5cbaa65d00ffaaa5505d99f83032.png

2楼

2021-02-22 23:24

其实 在matlab中不是特别的在意其数据类型,matlab的功能相当强大;C语言的数据类型就比较重要了,写程序的时候都要注意其语法....

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

点此我要举报以上信息!

推荐资讯

大家都在看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值