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语言的数据类型就比较重要了,写程序的时候都要注意其语法....

我要举报

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

点此我要举报以上信息!

推荐资讯

大家都在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mie散射粒子消光系数 matlab代码,一种球形粒子GMie散射效率极值的算法

一种球形粒子G Mie散射效率极值的算法【专利摘要】球形粒子的G?Mie散射问题属于物理光学领域,涉及光与原子的相互作用。G?Mie理论在有着广泛的用途,如分析激光衍射粒度,光镊,激光制冷,大气理论和温室效应分析等。目前…

oracle util_mail,Oracle UTL_MAIL邮件包程序使用实践

在《使用包实现存储过程邮件发送》(http://space.itpub.net/17203031/viewspace-700327)中,笔者已经初步介绍了使用UTL_MAIL包实现系统邮件发送功能。UTL_MAIL包较传统的PL/SQL邮件发送已经有很大改进和简化。但是对于一般系统而言,邮件功能设置(如发送、…

oracle+内存错误,oracle使用内存的错误,ORA-27102: out of memory

网上参阅资料,整理到这里,以备查阅。主要由于内存的分配问题,导致oracle数据库启动失败。数据库关闭之后重新启动,出现下面的错误:SQL> startup;ORA-27102: out of memoryLinux-x86_64 Error: 28: No space left on…

oracle连接数达不到上限,Oracle超出最大连接数问题及解决(转)

用过Oracle的应该都熟悉如何查看和设置Oracle数据库的最大连接数。这里就再啰嗦一遍。查看当前的连接数,可以用select count(*) from v$process;设置的最大连接数(默认值为150)select value from v$parameter where name ‘processes’;修改最大连接数alter system …

oracle批量把小写转换成大写,oracle数据库批量将表名小写转大写

ORACLE10g数据库,Sqlserver通过DTS导出数据到ORACLE后。查询表数据时输入:select * from "表名" ;查询数据执行正常。如果输入:select * from 表名;提示ORA-000942表或视图不存在后来发现原因是:导入oracle数…

oracle数据库安装提示M,Python第13课:oracle数据库的安装

Python第13课:oracle数据库的安装时间 2019-01-22下午4:30主讲 罗恒丰地点 四楼电教室版本:11.2大小:2.06G安装文件在专班ftp里python安装文件的文件夹。一.找到 stage/cvu/cvu_prereq.xml ,编辑系统名,以适…

linux 文件怎么不让删,请问如何设置权限,可以禁止用户删除文件

原帖由 WHITLACK 于 2009-9-28 08:48 发表 针对某个文件,如何设置权限,可以禁止删除?文件权限的r-w-x好像不能禁止删除的啊,谢谢指教!1:使用粘滞位可以做到,下面是介绍.强制位与冒险位、粘滞位针对u,g&…

linux查看etl进程,常见ETL工具

【国外】datastage点评:最专业的ETL工具,价格不菲,使用难度一般-------------&#xf…

linux运行中望cad,国产CAD软件中望的Linux版适配UOS, 我在国产系统里试了试

可能大家都知道,以往我们在国产操作里运行的软件,很多都是国外开源的软件。在以前很长一段时间里,国产操作中,国内企业很少去适配的。据说,国产深度之所以有很多国产软件,其中一个原因就是他们一家一家去拜…

linux内核死锁检测机制 | oenhan,Linux内核CPU负载均衡机制 | OenHan

还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是load_balance触发的,怀疑当时的核间…

linux适应环境,Linux从入门到适应(一):VSCode C++环境配置

作为在Windows环境下习惯使用Visual Studio IDE的人,对于Linux环境下的Vim编辑使用十分难受,虽然网上很多人说vim非常牛逼和强大,但是我更加习惯于使用VS code的界面,所以我选择VS code作为编辑器使用。VS code本身是一个编辑器&a…

linux指令能回滚么,如何在Ubuntu上撤消或回滚“ apt-get upgrade”命令?

我今天必须在Debian系统上执行此操作。首先,我确定了有问题的升级发生的时间范围,并检索了给出升级包的新旧版本号的日志条目:$ awk $1"2016-03-20" && $3"upgrade" /var/log/dpkg.log2016-03-20 16:58:22 upgra…

linux文件名过长无法删除,不能删除文件,出现“源文件名长度大于系统支持的长度...

有时候删除windows中的目录的时候,会出现"源文件名长度大于系统支持的长度", 而导致不能删除, 作为一个程序猿, 怎么可以被这个折服呢, 上代码:import java.io.File;/*** author 吴庆龙* 2015年10月13日 下午1:22:33*/public class DeleteFiles {public static void …

cpu system linux,LINUX system BOOT

64位处理器指的是CPU GPRs(General-Purpose Registers 通用寄存器)的数据宽度为64位计算机在接通电源的瞬间,CPU处于16位实模式,20位的寻址空间,即1MB,此时内存里没有任何数据对CPU来讲,系统中所有的存储器(含BIOS的RO…

linux下IPROTO_TCP,TCP/IP协议栈在Linux内核中的运行时序分析

可选题目三:TCP/IP协议栈在Linux内核中的运行时序分析在深入理解Linux内核任务调度(中断处理、softirg、tasklet、wq、内核线程等)机制的基础上,分析梳理send和recv过程中TCP/IP协议栈相关的运行任务实体及相互协作的时序分析。编译、部署、运行、测评、…

vs2019Linux守护,Visual Studio 2019将支援Ninja显着提升Linux专案建置效率

微软更新Visual Studio 2019,新增多个可提升Linux开发体验的功能,包括在Linux上支援建置系统Ninja,以及更完整地支援gdbserver,而且现在开发者也可以使用连接管理器(Connection Manager),编辑和配置预设的远端连接。使…

三个数比较大小函数调用c语言,C语言函数的调用——比较两个数的大小

**目录**一、先写好框架二、然后定义我们需要的变量三、这里就要写函数的部分四、函数部分写完了,但是还一个地方,要值得注意一、常规方法比较大小二、指针操作比较大小--------------------今天我们要写的是用**调用函数**的方法来 比较两个数字的大小我…

c语言爱心代码空心,c语言心形图案代码,是什么?

#include int main(){int i,j;printf(" ****** ******\n"" ********** **********\n"" ************* *************\n");//前三排的规律性不强 所以直接显示就好了for(i0;i<3;i)//显示中间三排{for(j0;j<29;j)printf(&quo…

c语言程序中必不可少的,C语言程序设计(第3章程序控制语句)2

3.2 数据的输入与输出在程序的运行过程中&#xff0c;往往需要由用户输入一些数据&#xff0c;而程序运算所得到的计算结果等又需要输出给用户&#xff0c;由此实现人与计算机之间的交互&#xff0c;所以在程序设计中&#xff0c;输入输出语句是一类必不可少的重要语句&#xf…

快速排序c语言实现,快速排序的C语言代码实现

快速排序实质上是对“冒泡排序”的一种改进&#xff0c;整个排序过程可概括为&#xff1a;通过N趟的排序将原本的排序数据分为若干块进行分块排序&#xff0c;而在每趟排序过程中&#xff0c;以指定的关键字将待排数据分别分为比关键字大的部分和比关键字小的部分&#xff0c;反…