mat

阅读 / 问答 / 标签

Mate10使用第三方一键锁屏应用锁屏后,无法用指纹解锁

可以换成这软件锁屏,可以解决无法指纹辨识的问题https://sj.qq.com/myapp/detail.htm?apkName=com.simi.screenlock

polymer material是什么意思

聚合材料polymer: n. 【化学】聚合体,聚合物,多聚物。 material: adj. 物质的例:High strength polymer materials for making space cable制造太空缆的高强度聚合物材料

求16QAM的映射与软解调(LLR)matlab代码,谢谢了!!!论文做不出来,,求大神帮助

你可以用矩阵,而不要用switch16QAM就是个4*4的矩阵然后只要横纵坐标两个参数,就能确定一个星座点的值了.注意归一化,你的程序没有做

yamato为什么翻译成大和

“yamato”最初直意可能是“山人”,yamato 在今天的日语中就是“大和”的训读,yamato就源自《三国志》中《魏书·东夷传》倭人条记载的倭女王国名——邪马台。扶余语演化到日语的过程中,“yapma”的第一个音节的元音逐渐往后挪动,演变成了“yama”,用汉字表音可以读作“亚马”,“yama”在日语中也是“山”的意思,有褒义的意境,可以表示雄伟之意,而且高频用于日本武家的姓氏:比如二战期间大规模搜刮东南亚华人财富的日本将领山下奉文(Yamashita Tomoyuki),再比如策划偷袭珍珠港的日本将领山本五十六(Yamamoto Isoroku)。“to”可表示“XX的人”,“yamato”最初直意可能是“山人”,yamato 在今天的日语中就是“大和”的训读,yamato就源自《三国志》中《魏书·东夷传》倭人条记载的倭女王国名——邪马台。日本人在后来的飞鸟时代才引进汉字的,邪马台国的书面汉字写法就采用了“大和”二字。“大”字容易理解,很多民族都喜欢在自己名称国名上加“大”这个意境,标榜自己伟大牛逼,比如“大不列颠”、“大韩民国”等等。至于为什么“大和国”国名的汉字写法采用“和”字,“和”与“倭”之间是否有什么词源联系,现在还有很多的争论,主要原因还是史料的缺失。总之,“大和”这个写法是到飞鸟时代才有的事了(距离曹魏已经过了300多年了),为方便起见,史学界仍然称呼在此之前的大和政权为“大和国”。

shipment information是什么意思

货运信息~~~~~~~~~~~~

英语Nothing else matters怎么翻译?

你好。其他都不重要。希望可以帮助到你。

Matlab中A=zeros(2,4);A(:)=1:8则A为??

A=[1,2;3,4;5,6;7,8]

matlab 写出指令运行结果 1。 A=zeros(2,4); A(:)=1:8; S=[2 3

好难呀。。。。。

matlab addpow=zeros(1,10)是什么语句

赋值语句,将addpow变成 一行十列的向量,每个元素都是零

matlab中下列程序是什么意思? d=zeros(2,2); d(:,1)=[1;0]; 我知道b=a(:,j)是把矩阵a的第j列存入b

d=zeros(2,2)%创建一个两行两列的全零矩阵d(:,1)=[1;0]%把d矩阵的第一列,设置为1,0相当于0 00 0变成1 00 0

matlab中c=zeros(30,1)+1是什么意思

相当于c=ones(30,1)

matlab中 h=zeros(a,x,y,z) 是什么意思?a,x,y,z分别代表什么?

1维数组叫矢量,2维数组叫矩阵,3维及大于3维的数组就叫多维数组了。你这就是多维0数组。

matlab中zeros最多包括多少个元素?为何定义了zeros(65536)提示超范围,想创建这么多元素零矩阵怎么办

取决于内存

matlab中的zeros(n,n)是什么n*n的零矩阵?

是啊,zeros(n,n)就是产生n行n列的零矩阵

MATLAB中,a=zeros(5),a(1,3)=1,b(1,1)={a}是什么意思?

a=zeros(5)的意思是,将5×5的零矩阵(数组)赋值给a变量a(1,3)=1的意思是,将5×5的a矩阵(数组)中的第一行第五列用1替代0b(1,1)={a}的意思是,将元胞数组{a}赋值给b变量

matlab里面 Q=zeros(n(1)) 是什么意思??

x=ones(1,n)的意思是生成1行n列的元素为1的矩阵赋给xq=zeros(1,n)是一个1行n列的0矩阵赋给q

请问matlab里用zeros创建零矩阵有何用处呢?

最重要的一个用处就是预分配内存,加快程序速度,在老版本MATLAB中,一些程序预分配内存与否前后速度会差n多倍.

MATLAB中x=zeros(n+1,

zeros的用法如下 :参数可为变量 zeros(m,n)产生一个mxn的全零矩阵 zeros(m)产生一个mxm的全零方阵

MATLAB中x=zeros(n+1,2)是什么意思

zeros的用法如下 : 参数可为变量zeros(m,n)产生一个mxn的全零矩阵zeros(m)产生一个mxm的全零方阵

在matlab求解线性规划问题中zeros是什么作用?

zeros(3,1)就是下界,表示所有的决策量都大于零吧

Matlab中 函数zeroS(1,8) 代表什么意思??

创建一行八列的零矩阵。

matlab里面zeros(2:4)是什么意思?

learneroner解释的很好了。我再补充一下matlab中的zeros是定义一个空“矩阵”,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

matlab中zeros(3,0)什么意思

生成一个3×3阶0矩阵

MATLAB中zeros表示表示什么意思

matlab中的zeros是定义一个空矩阵,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

matlab中zeros函数是什么含义

matlab中的zeros是定义一个空“矩阵”,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

matlab中z=z[zreos(1,30);zeros(1,30)]是什么意思

可能写错了吧,不是zreos,是zeros.zreos(1,30)是生成1行30列元素都为0数组,故整个是生成一个2行30列的0数组。可以直接用z=zeros[2,30];

用matlab做线性规划 中lb=zeros(3,1)是什么意思啊

前面的答主已经说了是一个三个零的列向量,那我来具体阐释一下在lb中的含义。即第一个零对应x1,第二个零对应x2,第三个零对应x3。这里应该明白了,x其实在这个限制中分有三个单个变量受到影响(很可能X就是一个三行的列向量)那么整体含义就是x1,x2,x3下限都是0,即x1,x2,x3都大于等于0。

在matlab中,变量 x =zeros(3,1); 是什么意思?

楼上说的对,再补充一下。matlab中的zeros是定义一个空“矩阵”,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

在matlab中kk=zeros(k,1); 是什么意思 zeros是啥意思 KK呢

全是0的矩阵 k,1表示k行一列的矩阵元素全是1

zeros (2,3,4) 怎么有三个参数 是什么意思 matlab

tinystarlove说的简明易懂,我来再补充一下。matlab中的zeros是定义一个空矩阵,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

zeros(1:n)什么意思,我碰到这个问题了,麻烦你弄一下zeros(1:4),为什么是matlab算出来的结果。

用matlab帮助就可以,help zeros allhelp zeros all ZEROS Zeros array. ZEROS(N) is an N-by-N matrix of zeros. ZEROS(M,N) or ZEROS([M,N]) is an M-by-N matrix of zeros. ZEROS(M,N,P,...) or ZEROS([M N P ...]) is an M-by-N-by-P-by-... array of zeros. ZEROS(SIZE(A)) is the same size as A and all zeros. ZEROS with no arguments is the scalar 0. ZEROS(M,N,...,CLASSNAME) or ZEROS([M,N,...],CLASSNAME) is an M-by-N-by-... array of zeros of class CLASSNAME. Example: x = zeros(2,3,"int8");zeros函数有几种用法zeros(N)为一个N*N的0矩阵zeros(M,N)或zeros[M,N]是一个M*N的0矩阵zeros(M,N,P,...) 或 zeros([M N P ...])是一个M*N*P的多维0矩阵zeros(size(A))是一个大小和A相同的0矩阵zeros不带参数是个1*1的矩阵也就是一个数0。zeros(1:4)是一个四维的0矩阵,第一维为1,第二维为2,第三维为3,第四维为4。

matlab中zeros函数的问题,求大侠解答

input=round(i);这句话改成input=double(i);round是四舍五入,imread读出来的矩阵本来就是unsignedint。错误是因为zeros的输入不可以是uint的,改成double就OK了

用matlab中,在解微分方程组时,dydt=zeros(2,1) 这个式子表示什么意思

就是给dydt这个变量赋值语句啊。把这个语句赋值到matlab运行就可以看到。

请问matlab里用zeros创建零矩阵有何用处呢?

最重要的一个用处就是预分配内存,加快程序速度,在老版本MATLAB中,一些程序预分配内存与否前后速度会差n多倍.

matlab中zeros是什么意思

matlab中的zeros是定义一个空矩阵,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

matlab中zeros是什么意思

matlab中的zeros是定义一个空“矩阵”,是为了给以后往里存放数值预留的”磁盘空间“,告诉计算机,我要用的是这么大的矩阵,给我留好了。计算机就会空出这么大的空间,不用担心留的过多或过少而影响后期计算。你可以想象成现实生活中给饭店打电话预定多少人的餐位。以合理安排,不必造成资源的浪费。

matlab中zeros是什么意思

创建全零数组的命令,例如zeros(2)ans = 0 0 0 0就是建立一个2X2的全0数组

matlab中zeros是什么意思

创建一个元素全为0的矩阵,比如a=zeros(3,5);就是创建一个3行5列的0矩阵。希望能帮到你。

MATLAB程序中zeros 这是什么意思

zeros是用来创建全0矩阵的命令。zeros(a,b)就是创建一个a行b列的全0矩阵。如zeros(2,3)会输出0 0 00 0 0

GMAT考试多长时间

2017年改革之后,GMAT考试时间和题量都有所变化,具体每部分考试时间如下:1、作文:一篇作文,30分钟;2、IR:12题,30分钟;休息时间:8分钟3、数学:由37题减少到31题,时间由75分钟减少至62分钟;休息时间:8分钟4、Verbal:由41题减少到36题,时间由75分钟减少至65分钟;整场考试时间持续3个半小时

matlab中的rem怎么用

R=rem(X,Y),求余数函数,X,Y应该为正数。

matlab中rem语句什么作用啊

取余函数,如10除以3余1,rem(10,3)=1

在matlab中rem表示什么意思

求余数啊~~~~注意使用matlab的帮助~~Remainder after divisionSyntax R = rem(X,Y)Description R = rem(X,Y) if Y ~= 0, returns X - n.*Y where n = fix(X./Y). If Y is not an integer and the quotient X./Y is within roundoff error of an integer, then n is that integer. The inputs X and Y must be real arrays of the same size, or real scalars

ola is my classmate改为一般疑问句做出肯定和否定回答

Is your classmate from Japan?Yes,he/she is.No,he/she is not.

Materials studio的reflex怎么点不开

需要设置。reflex技术打开需要后台进行设置,然后把文件导入到系统里自动打开。Materialsstudio可以进行构型优化、性质预测和X射线衍射分析,以及复杂的动力学模拟和量子力学等方面的计算。

国外Andymation插画师在国外哪个社交软件?

Andymation是一个著名的插画师,他在国外的社交软件有许多,其中比较常见的包括:1. Instagram(ins账号:@andymation2001):Andymation在Instagram上发布了许多短动画和插画作品,可以在这里关注他的最新动态。2. YouTube(账号:Andymation):Andymation在YouTube上发布了许多有趣的短动画教程和作品展示视频,可以在这里学习他的创作技巧。3. TikTok(账号:@andymation):Andymation在TikTok上发布了许多有趣的短视频,展示了他独特的创意和技巧,非常受年轻人的欢迎。4. Twitter(账号:@andymation):Andymation在Twitter上发布了更多的个人动态和想法,同时与其他插画师和粉丝进行交流。除此之外,Andymation在其他社交媒体平台上也有一些活跃的账号,如Tumblr、Reddit等,感兴趣的可以自行搜索。

matlab如何使用mdb格式的数据库

请看一下对不对 最后想调用是用load么 回答: 配置好环境后,运行。查看数据Data是否与数据库内容一致。 追问: 具体操作能不能指明一下啊 谢谢啦 回答: 你运行看一下上述代码是否报错。然后在command窗口显示一下Data数据,看是否与数据库一致。 追问: 运行后没有错误,但是显示data时显示‘? Undefined function or variable "Data"."这可能是什么原因啊?另外,现在我用了另一种方法,先把mdb数据打开导出转为xls文件,然后在matlab中的m文件使用xlsread()函数调用xls文件,不知道这样做正确不正确啊,谢谢了

机械工业出版社的matlab数据分析与挖掘实战这本书的代码和课件怎么获取

  网上直接在电子版可以下载。  本书共16章,共三篇。基础篇(第1~5章),第1章的主要内容是数据挖掘概述;第2章对本书所用到的数据挖掘建模工具MATALB进行了简明扼要的说明;第3章、第4章、第5章对数据挖掘的建模过程,包括数据探索、数据预处理及挖掘建模的常用算法与原理进行了介绍。实战篇(第6~15章),重点对数据挖掘技术在电力、航空、医疗、互联网、生产制造以及公共服务等行业的应用进行了分析。

要生成一个用来编译成mex文件的.cpp文件,在Matlab输入mex -setup

错误提示很明显了。你当前工作路径下没有mexGrabCut.cpp文件

matlab gui程序中调用./mex文件,如何打包

回答 - 回答时间:2017年12月15日[最佳答案]通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现...

请问有大佬知道为什么MATLAB里面mex可以找到编译器但是mbuild不行

MATLAB会列出当前机器上已经安装的、且与当前MATLAB版本兼容的所有C编译器,一般而言,MATLAB都会自带一个LCC编译器,然而LCC目前仅支持32位的MATLAB,所以你的机器上没有。

matlab mex -setup执行出错,这是什么错误?应该怎么操作?

是要装libsvm吗?这问题是缺乏对应的编译器,可以到windows官网上去下。

急!!!matlab调用VC产生的mex函数运行过程中经常弹出一个窗口报错然后强制你退出matlab软件。

你检查过mexfunction函数内层语句有问题没?还有你不能设置只有mex这三个单词的程序,会与matlab内置函数有冲突。

c++ 编辑的.cpp文件如何在matlab中mex编译报错

你好,我也是这个问题,请问您解决了吗

matlab中mex-file文件是什么文件,有什么用?怎样看其中的代码?谢谢

程序源文件编译后的文件。相比m文件,mex文件执行速度更快。不能像查看m文件一样查看mex文件,原因是mex文件是二进制文件。

matlab 中mex -setup 编译器怎么弄?

这个需要你的电脑上安装有C++6.0才能出来,mex -setup列出的编译器都是你电脑上的,你图上的[1] Lcc-win32是matlab自带的编译器。由于你电脑上没安装其他的编译器,当然就检测不到C++6.0

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

我觉得吧 其实差别不大 C语言要先定义再使用 Matlab只要想用随时可用 知识各自各自的语法

如何让matlab用mex与C连接使用有例子 PDF

如果我有一个用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)。值得注意的是,mex文件是与平台有关的,以我的理解,mex文件就是另类的动态链接库。在matlab6.5中使用mex -v 选项,你可以看到最后mex阶段有类似如下的信息:--> "del _lib94902.obj" --> "del "test.exp"" --> "del "test.lib""也就是说,虽然在matlab6.5生成的是dll文件,但是中间确实有过lib文件生成。比如该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如下:#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便是已计算好的结果了。上面说的一大堆指向这指向那,什么mxArray,初学者肯定都会被弄到头晕眼花了。很抱歉,要搞清楚这些乱糟糟的关系,只有多看多练。实际上mexFunction是没有这么简单的,我们要对用户的输入自变量的个数和类型进行测试,以确保输入正确。如在add函数的例子中,用户输入char array便是一种错误了。从上面的讲述中我们总结出,MEX文件实现了一种接口,把C语言中的计算结果适当地返回给Matlab罢了。当我们已经有用C编写的大型程序时,大可不必在 Matlab里重写,只写个接口,做成MEX文件就成了。另外,在Matlab程序中的部份计算瓶颈(如循环),可通过MEX文件用C语言实现,以提高计算速度。以上是对mex文件的初步认识,下面详细介绍如何用c语言编写mex文件:1 为什么要用C语言编写MEX文件MATLAB是矩阵语言,是为向量和矩阵操作设计的,一般来说,如果运算可以用向量或矩阵实现,其运算速度是非常快的。但若运算中涉及到大量的循环处理,MATLAB的速度的令人难以忍受的。解决方法之一为,当必须使用for循环时,把它写为MEX文件,这样不必在每次运行循环中的语句时MATLAB都对它们进行解释。2 编译器的安装与配置要使用MATLAB编译器,用户计算机上应用事先安装与MATLAB适配的以下任何一种ANSI C/C++编译器:5.0、6.0版的MicroSoft Visual C++(MSVC)5.0、5.2、5.3、5.4、5.5版的Borland C++LCC(由MATLAB自带,只能用来产生MEX文件)下面是安装与配置MATLAB编译器应用程序MEX的设置的步骤:(1)在MATLAB命令窗口中运行mex –setup,出现下列提示:Please choose your compiler for building external interface (MEX) files:Would you like mex to locate installed compilers [y]/n?(2)选择y,MATLAB将自动搜索计算机上已安装的外部编译器的类型、版本及所在路径,并列出来让用户选择:Select a compiler:[1] Borland C++Builder version 6.0 in C:Program FilesBorland[2] Digital Visual Fortran version 6.0 in C:Program FilesMicrosoft Visual Studio[3] Lcc C version 2.4 in D:MATLAB6P5P1syslcc[4] Microsoft Visual C/C++ version 6.0 in C:Program FilesMicrosoft Visual Studio[0] NoneCompiler:(3)选择其中一种(在这里选择了3),MATLAB让用户进行确认:Please verify your choices:Compiler: Lcc C 2.4Location: D:MATLAB6P5P1syslccAre these correct?([y]/n):(4)选择y,结束MATLAB编译器的配置。3 一个简单的MEX文件例子【例1】用m文件建立一个1000×1000的Hilbert矩阵。ticm=1000;n=1000;a=zeros(m,n);for i=1:1000 for j=1:1000 a(i,j)=1/(i+j); endendtoc在matlab中新建一个Matlab_1.cpp 文件并输入以下程序:#include "mex.h"//计算过程void hilb(double *y,int n){ int i,j; for(i=0;i for(j=0;j *(y+j+i*n)=1/((double)i+(double)j+1);}//接口过程void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]){ double x,*y; int n; if (nrhs!=1) mexErrMsgTxt("One inputs required."); if (nlhs != 1) mexErrMsgTxt("One output required."); if (!mxIsDouble(prhs[0])||mxGetN(prhs[0])*mxGetM(prhs[0])!=1) mexErrMsgTxt("Input must be scalars."); x=mxGetScalar(prhs[0]); plhs[0]=mxCreateDoubleMatrix(x,x,mxREAL); n=mxGetM(plhs[0]); y=mxGetPr(plhs[0]); hilb(y,n);}该程序是一个C语言程序,它也实现了建立Hilbert矩阵的功能。在MATLAB命令窗口输入以下命令:mex Matlab_1.cpp,即可编译成功。进入该文件夹,会发现多了两个文件:Matlab_1.asv和Matlab_1.dll,其中Matlab_1.dll即是MEX文件。运行下面程序:tica=Matlab_1(1000);tocelapsed_time = 0.0470由上面看出,同样功能的MEX文件比m文件快得多。4 MEX文件的组成与参数MEX文件的源代码一般由两部分组成:(1)计算过程。该过程包含了MEX文件实现计算功能的代码,是标准的C语言子程序。(2)入口过程。该过程提供计算过程与MATLAB之间的接口,以入口函数mxFunction实现。在该过程中,通常所做的工作是检测输入、输出参数个数和类型的正确性,然后利用mx-函数得到MATLAB传递过来的变量(比如矩阵的维数、向量的地址等),传递给计算过程。MEX文件的计算过程和入口过程也可以合并在一起。但不管那种情况,都要包含#include "mex.h",以保证入口点和接口过程的正确声明。注意,入口过程的名称必须是mexFunction,并且包含四个参数,即:void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])其中,参数nlhs和nrhs表示MATLAB在调用该MEX文件时等式左端和右端变量的个数,例如在MATLAB命令窗口中输入以下命令:[a,b,c]=Matlab_1(d,e,f,g)则nlhs为3,nrhs为4。MATLAB在调用MEX文件时,输入和输出参数保存在两个mxArray*类型的指针数组中,分别为prhs[]和plhs[]。prhs[0]表示第一个输入参数,prhs[1]表示第二个输入参数,…,以此类推。如上例中,d→prhs[0],e→prhs[1],f→prhs[2],f→prhs[3]。同时注意,这些参数的类型都是mxArray *。接口过程要把参数传递给计算过程,还需要从prhs中读出矩阵的信息,这就要用到下面的mx-函数和mex-函数。5 常用的mex-函数和mx-函数在MATLAB6.5版本中,提供的mx-函数有106个,mex-函数有38个,下面我们仅介绍常用的函数。5.1入口函数mexFunction该函数是C MEX文件的入口函数,它的格式是固定的:void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])说明:MATLAB函数的调用方式一般为:[a,b,c,…]=被调用函数名称(d,e,f,…),nlhs保存了等号左端输出参数的个数,指针数组plhs具体保存了等号左端各参数的地址,注意在plhs各元素针向的mxArray内存未分配,需在接口过程中分配内存;prhs保存了等号右端输入参数的个数,指针数组prhs具体保存了等号右端各参数的地址,注意MATLAB在调用该MEX文件时,各输入参数已存在,所以在接口过程中不需要再为这些参数分配内存。

MATLAB编译器配置mex -v 出错

我碰到的也是类似的问题~

matlab如何编译mex文件

先用mbuild-setup选择安装编译器再用指令mexc文件件名编译

Matlab 中为什么调用不了MEX文件?

首先,要保证MEX文件编译成功,这个可以从编译的返回字串中看到。其次,MEX所在的路径必须正确,要在Matlab的路径或你添加的路径中。最后,MEX文件的入口函数一定要正确,参考例子程序。希望能帮助你。

matlab中,如何加快数据运算速度?

通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或WatcomC中的一种。如果你在安装Matlab时已经设置过编译器,那么现在你应该就可以使用mex命令来编译c语言的程序了。如果当时没有选,就在Matlab里键入mex-setup,下面只要根据提示一步步设置就可以了。需要注意的是,较低版本的在设置编译器路径时,只能使用路径名称的8字符形式。比如我用的VC装在路径C:PROGRAMFILESDEVSTUDIO下,那在设置路径时就要写成:“C:PROGRA~1”这样设置完之后,mex就可以执行了。为了测试你的路径设置正确与否,把下面的程序存为hello.c。/*hello.c*/#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){mexPrintf("hello,world! ");}假设你把hello.c放在了C:TEST下,在Matlab里用CDC:TEST将当前目录改为C:TEST(注意,仅将C:TEST加入搜索路径是没有用的)。现在敲:mexhello.c如果一切顺利,编译应该在出现编译器提示信息后正常退出。如果你已将C:TEST加入了搜索路径,现在键入hello,程序会在屏幕上打出一行:hello,world!看看CTEST目录下,你会发现多了一个文件:HELLO.DLL。这样,第一个mex函数就算完成了。分析hello.c,可以看到程序的结构是十分简单的,整个程序由一个接口子过程mexFunction构成。voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])前面提到过,Matlab的mex函数有一定的接口规范,就是指这nlhs:输出参数数目plhs:指向输出参数的指针nrhs:输入参数数目例如,使用[a,b]=test(c,d,e)调用mex函数test时,传给test的这四个参数分别是2,plhs,3,prhs其中:prhs[0]=cprhs[1]=dprhs[2]=e当函数返回时,将会把你放在plhs[0],plhs[1]里的地址赋给a和b,达到返回数据的目的。细心的你也许已经注意到,prhs[i]和plhs[i]都是指向类型mxArray类型数据的指针。这个类型是在mex.h中定义的,事实上,在Matlab里大多数数据都是以这种类型存在。当然还有其他的数据类型,可以参考Apiguide.pdf里的介绍。为了让大家能更直观地了解参数传递的过程,我们把hello.c改写一下,使它能根据输入参数的变化给出不同的屏幕输出://hello.c2.0#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){inti;i=mxGetScalar(prhs[0]);if(i==1)mexPrintf("hello,world! ");elsemexPrintf("大家好! ");}将这个程序编译通过后,执行hello(1),屏幕上会打出:hello,world!而hello(0)将会得到:大家好!现在,程序hello已经可以根据输入参数来给出相应的屏幕输出。在这个程序里,除了用到了屏幕输出函数mexPrintf(用法跟c里的printf函数几乎完全一样)外,还用到了一个函数:mxGetScalar,调用方式如下:i=mxGetScalar(prhs[0]);"Scalar"就是标量的意思。在Matlab里数据都是以数组的形式存在的,mxGetScalar的作用就是把通过prhs[0]传递进来的mxArray类型的指针指向的数据(标量)赋给C程序里的变量。这个变量本来应该是double类型的,通过强制类型转换赋给了整形变量i。既然有标量,显然还应该有矢量,否则矩阵就没法传了。看下面的程序://hello.c2.1#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){int*i;i=mxGetPr(prhs[0]);if(i[0]==1)mexPrintf("hello,world! ");elsemexPrintf("大家好! ");}这样,就通过mxGetPr函数从指向mxArray类型数据的prhs[0]获得了指向double类型的指针。但是,还有个问题,如果输入的不是单个的数据,而是向量或矩阵,那该怎么处理呢?通过mxGetPr只能得到指向这个矩阵的指针,如果我们不知道这个矩阵的确切大小,就没法对它进行计算。为了解决这个问题,Matlab提供了两个函数mxGetM和mxGetN来获得传进来参数的行数和列数。下面例程的功能很简单,就是获得输入的矩阵,把它在屏幕上显示出来://show.c1.0#include"mex.h"#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*data;intM,N;inti,j;data=mxGetPr(prhs[0]);//获得指向矩阵的指针M=mxGetM(prhs[0]);//获得矩阵的行数N=mxGetN(prhs[0]);//获得矩阵的列数for(i=0;i<M;i++){for(j=0;j<N;j++)mexPrintf("%4.3f",data[j*M+i]);mexPrintf(" ");}}编译完成后,用下面的命令测试一下:a=1:10;b=[a;a+1];show(a)show(b)需要注意的是,在Matlab里,矩阵第一行是从1开始的,而在C语言中,第一行的序数为零,Matlab里的矩阵元素b(i,j)在传递到C中的一维数组大data后对应于data[j*M+i]。输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数却需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内存的申请,函数原型如下:mxArray*mxCreateDoubleMatrix(intm,intn,mxComplexityComplexFlag)m:待申请矩阵的行数n:待申请矩阵的列数为矩阵申请内存后,得到的是mxArray类型的指针,就可以放在plhs[]里传递回去了。但是对这个新矩阵的处理,却要在函数内完成,这时就需要用到前面介绍的mxGetPr。使用mxGetPr获得指向这个矩阵中数据区的指针(double类型)后,就可以对这个矩阵进行各种操作和运算了。下面的程序是在上面的show.c的基础上稍作改变得到的,功能是将输//reverse.c1.0#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*inData;double*outData;intM,N;inti,j;inData=mxGetPr(prhs[0]);M=mxGetM(prhs[0]);N=mxGetN(prhs[0]);plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);outData=mxGetPr(plhs[0]);for(i=0;i<M;i++)for(j=0;j<N;j++)outData[j*M+i]=inData[(N-1-j)*M+i];}当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到的一些函数,其余的详细情况清参考Apiref.pdf。通过前面两部分的介绍,大家对参数的输入和输出方法应该有了基本的了解。具备了这些知识,就能够满足一般的编程需要了。但这些程序还有些小的缺陷,以前面介绍的re由于前面的例程中没有对输入、输出参数的数目及类型进行检查,导致程序的容错性很差,以下程序则容错性较好#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*inData;double*outData;intM,N;//异常处理//异常处理if(nrhs!=1)mexErrMsgTxt("USAGE:b=reverse(a) ");if(!mxIsDouble(prhs[0]))mexErrMsgTxt("theInputMatrixmustbedouble! ");inData=mxGetPr(prhs[0]);M=mxGetM(prhs[0]);N=mxGetN(prhs[0]);plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);outData=mxGetPr(plhs[0]);for(i=0;i<M;i++)for(j=0;j<N;j++)outData[j*M+i]=inData[(N-1-j)*M+i];}在上面的异常处理中,使用了两个新的函数:mexErrMsgTxt和mxIsDouble。MexErrMsgTxt在给出出错提示的同时退出当前程序的运行。MxIsDouble则用于判断mxArray中的数据是否double类型。当然Matlab还提供了许多用于判断其他数据类型的函数,这里不加详述。需要说明的是,Matlab提供的API中,函数前缀有mex-和mx-两种。带mx-前缀的大多是对mxArray数据进行操作的函数,如mxIsDouble,mxCreateDoubleMatrix等等。而带mx前缀的则大多是与Matlab环境进行交互的函数,如mexPrintf,mxErrMsgTxt等等。了解了这一点,对在Apiref.pdf中查找所需的函数很有帮助。至此为止,使用C编写mex函数的基本过程已经介绍完了。

MATLAB mex 找不到编译器怎么办?

.M文件是保存一段代码的文件,类似于C语言中的一个函数体; 这也是MATLAB中最常见的文件保存格式之一.MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序”。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是ddl文件。.mat是matlab的数据存储的标准格式。也就是你操作产生的数据的一个集合包,可以把一次处理的结果保存,供下一次使用。你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。有几种方法可以打开1.matlab中可以用load命令读取.mat文件 2.C语言中有API读取.mat文件,如matOpen, matClose等等 3.用记事本就可以打开.mat文件,.mat文件格式是公开的,你可以自己解析里面的内容葛源及树管毋活垦季活服舜峻尉卉毫绥羽稀互趁

matlab怎么调用mex文件

编译器必须安装在C盘嘛????

MATLAB的M文件、MEX文件、MAT文件是什么

.M文件是保存一段代码的文件,类似于C语言中的一个函数体; 这也是MATLAB中最常见的文件保存格式之一 .MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序”。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是ddl文件。.mat是matlab的数据存储的标准格式。也就是你操作产生的数据的一个集合包,可以把一次处理的结果保存,供下一次使用。你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。有几种方法可以打开1.matlab中可以用load命令读取.mat文件 2.C语言中有API读取.mat文件,如matOpen, matClose等等 3.用记事本就可以打开.mat文件,.mat文件格式是公开的,你可以自己解析里面的内容

matlab mex文件无法删除

不是,是因为matlab对mex文件做了缓存。可以尝试一下 clear all; fclose all; 执行这两个命令后应该就可以了

matlab mex 编译器怎么编译文件

通过MEX文件可以在MATLAB中像调用内嵌函数一样调用现有的使用C语言和Fortran等语言编写的函数,实现了代码重用,同时也能解决MATLAB循环效率低的缺点,提高MATLAB环境中数据处理的效率。MEX文件的后缀名为 .mexw32MEX文件的编写和编译需要两个基本条件:一是必须按照MATLAB应用程序接口组件和相关工具,二是要有C语言或Fortran语言的编译器。需要对MATLAB系统进行设置,使MATLAB系统知道使用系统的哪一个C语言编译器,以及其参数和路径。MEX文件系统设置:>> mex –setup按照提示进行,最后出现Done…系统配置完毕。C语言MEX文件的建立C语言MEX文件的建立1. MEX文件的结构a) 计算子程序b) 入口子程序,void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[]){ /*用户特定的代码….*/ }2. 创建timestwoalt.c#include "mex.h"void timestwo_alt(double *y, double x){*y = 2.0*x;}void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ){double *y;doublex;/* 检查参数 */if (nrhs != 1) { mexErrMsgTxt("One input argument required.");} else if (nlhs > 1) { mexErrMsgTxt("Too many output arguments.");} else if (!mxIsNumeric(prhs[0])) { mexErrMsgTxt("Argument must be numeric.");} else if (mxGetNumberOfElements(prhs[0]) != 1 || mxIsComplex(prhs[0])) { mexErrMsgTxt("Argument must be non-complex scalar.");}/* 为输出参数创建变量 */plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL); /* 为参数 x、y赋值,x为值,而y为指针 (由于MATLAB没有值传递,所以用指针才能得到修改后的y值, 不然修改的是y的一个副本,为临时变量,在函数返回时,y值没有变化, 不能得到希望的结果) */x = mxGetScalar(prhs[0]);y = mxGetPr(plhs[0]);/* 调用timestwo_alt 子函数 */timestwo_alt(y,x);}3. 编译链接C语言的MEX文件源程序,在MATLAB的控制窗口中输入:mex timestwoalt.c生成一个名为timestwoalt.mexw32的MEX文件4. 运行:在MATLAB的控制窗口中输入x=2;y=timestwoalt(x)输出:y=4MEX文件实现了一种C语言与MATLAB的接口,其实际的计算功能仍在C语言形式的计算子程序中完成,而入口子程序的功能是检查参数以匹配C语言的参数规范(how to?)。当有C语言编写的大型程序时,不必用MATLAB语言重新编写,只要将此C语言程序作为一个计算子程序,然后编写一个入口子程序,完成参数的匹配,然后编译成MEX文件即可。MEX文件的另外一个功能是可以将MATLAB编程中的瓶颈问题,如多重循环等,将此类费时的指令用C语言实现,然后作必要的入口子程序,编译成MEX文件,可以有效地提高MATLAB的效率。S-函数创建器限制了C语言S-函数的功能:只能有一个输入信号和一个输出信号,而且只能处理double类型的数据!所以,可用性不大。

MATLAB的M文件、MEX文件、MAT文件是什么

.M文件是保存一段代码的文件,类似于C语言中的一个函数体;这也是MATLAB中最常见的文件保存格式之一.MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序”。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是ddl文件。.mat是matlab的数据存储的标准格式。也就是你操作产生的数据的一个集合包,可以把一次处理的结果保存,供下一次使用。你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。有几种方法可以打开1.matlab中可以用load命令读取.mat文件2.C语言中有API读取.mat文件,如matOpen,matClose等等3.用记事本就可以打开.mat文件,.mat文件格式是公开的,你可以自己解析里面的内容

MATLAB的M文件、MEX文件、MAT文件是什么

.m文件是保存一段代码的文件,类似于c语言中的一个函数体; 这也是matlab中最常见的文件保存格式之一.mex文件是一种“可在matlab环境中调用的c(或fortran)语言衍生程序”。也就是说,mex文件的源码文件是由c或fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是ddl文件。.mat是matlab的数据存储的标准格式。也就是你操作产生的数据的一个集合包,可以把一次处理的结果保存,供下一次使用。你可以调用matlab的子程序库,用c或fortan调用mat格式的数据。有几种方法可以打开1.matlab中可以用load命令读取.mat文件2.c语言中有api读取.mat文件,如matopen,matclose等等3.用记事本就可以打开.mat文件,.mat文件格式是公开的,你可以自己解析里面的内容

如何快速的调用Matlab中的Mex函数

通过把耗时长的函数用c语言实现,并编译成mex函数可以加快执行速度。Matlab本身是不带c语言的编译器的,所以要求你的机器上已经安装有VC,BC或WatcomC中的一种。如果你在安装Matlab时已经设置过编译器,那么现在你应该就可以使用mex命令来编译c语言的程序了。如果当时没有选,就在Matlab里键入mex-setup,下面只要根据提示一步步设置就可以了。需要注意的是,较低版本的在设置编译器路径时,只能使用路径名称的8字符形式。比如我用的VC装在路径C:PROGRAMFILESDEVSTUDIO下,那在设置路径时就要写成:“C:PROGRA~1”这样设置完之后,mex就可以执行了。为了测试你的路径设置正确与否,把下面的程序存为hello.c。/*hello.c*/#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){mexPrintf("hello,world! ");}假设你把hello.c放在了C:TEST下,在Matlab里用CDC:TEST将当前目录改为C:TEST(注意,仅将C:TEST加入搜索路径是没有用的)。现在敲:mexhello.c如果一切顺利,编译应该在出现编译器提示信息后正常退出。如果你已将C:TEST加入了搜索路径,现在键入hello,程序会在屏幕上打出一行:hello,world!看看CTEST目录下,你会发现多了一个文件:HELLO.DLL。这样,第一个mex函数就算完成了。分析hello.c,可以看到程序的结构是十分简单的,整个程序由一个接口子过程mexFunction构成。voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[])前面提到过,Matlab的mex函数有一定的接口规范,就是指这nlhs:输出参数数目plhs:指向输出参数的指针nrhs:输入参数数目例如,使用[a,b]=test(c,d,e)调用mex函数test时,传给test的这四个参数分别是2,plhs,3,prhs其中:prhs[0]=cprhs[1]=dprhs[2]=e当函数返回时,将会把你放在plhs[0],plhs[1]里的地址赋给a和b,达到返回数据的目的。细心的你也许已经注意到,prhs[i]和plhs[i]都是指向类型mxArray类型数据的指针。这个类型是在mex.h中定义的,事实上,在Matlab里大多数数据都是以这种类型存在。当然还有其他的数据类型,可以参考Apiguide.pdf里的介绍。为了让大家能更直观地了解参数传递的过程,我们把hello.c改写一下,使它能根据输入参数的变化给出不同的屏幕输出://hello.c2.0#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){inti;i=mxGetScalar(prhs[0]);if(i==1)mexPrintf("hello,world! ");elsemexPrintf("大家好! ");}将这个程序编译通过后,执行hello(1),屏幕上会打出:hello,world!而hello(0)将会得到:大家好!现在,程序hello已经可以根据输入参数来给出相应的屏幕输出。在这个程序里,除了用到了屏幕输出函数mexPrintf(用法跟c里的printf函数几乎完全一样)外,还用到了一个函数:mxGetScalar,调用方式如下:i=mxGetScalar(prhs[0]);"Scalar"就是标量的意思。在Matlab里数据都是以数组的形式存在的,mxGetScalar的作用就是把通过prhs[0]传递进来的mxArray类型的指针指向的数据(标量)赋给C程序里的变量。这个变量本来应该是double类型的,通过强制类型转换赋给了整形变量i。既然有标量,显然还应该有矢量,否则矩阵就没法传了。看下面的程序://hello.c2.1#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){int*i;i=mxGetPr(prhs[0]);if(i[0]==1)mexPrintf("hello,world! ");elsemexPrintf("大家好! ");}这样,就通过mxGetPr函数从指向mxArray类型数据的prhs[0]获得了指向double类型的指针。但是,还有个问题,如果输入的不是单个的数据,而是向量或矩阵,那该怎么处理呢?通过mxGetPr只能得到指向这个矩阵的指针,如果我们不知道这个矩阵的确切大小,就没法对它进行计算。为了解决这个问题,Matlab提供了两个函数mxGetM和mxGetN来获得传进来参数的行数和列数。下面例程的功能很简单,就是获得输入的矩阵,把它在屏幕上显示出来://show.c1.0#include"mex.h"#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*data;intM,N;inti,j;data=mxGetPr(prhs[0]);//获得指向矩阵的指针M=mxGetM(prhs[0]);//获得矩阵的行数N=mxGetN(prhs[0]);//获得矩阵的列数for(i=0;i<M;i++){for(j=0;j<N;j++)mexPrintf("%4.3f",data[j*M+i]);mexPrintf(" ");}}编译完成后,用下面的命令测试一下:a=1:10;b=[a;a+1];show(a)show(b)需要注意的是,在Matlab里,矩阵第一行是从1开始的,而在C语言中,第一行的序数为零,Matlab里的矩阵元素b(i,j)在传递到C中的一维数组大data后对应于data[j*M+i]。输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数却需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内存的申请,函数原型如下:mxArray*mxCreateDoubleMatrix(intm,intn,mxComplexityComplexFlag)m:待申请矩阵的行数n:待申请矩阵的列数为矩阵申请内存后,得到的是mxArray类型的指针,就可以放在plhs[]里传递回去了。但是对这个新矩阵的处理,却要在函数内完成,这时就需要用到前面介绍的mxGetPr。使用mxGetPr获得指向这个矩阵中数据区的指针(double类型)后,就可以对这个矩阵进行各种操作和运算了。下面的程序是在上面的show.c的基础上稍作改变得到的,功能是将输//reverse.c1.0#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*inData;double*outData;intM,N;inti,j;inData=mxGetPr(prhs[0]);M=mxGetM(prhs[0]);N=mxGetN(prhs[0]);plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);outData=mxGetPr(plhs[0]);for(i=0;i<M;i++)for(j=0;j<N;j++)outData[j*M+i]=inData[(N-1-j)*M+i];}当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到的一些函数,其余的详细情况清参考Apiref.pdf。通过前面两部分的介绍,大家对参数的输入和输出方法应该有了基本的了解。具备了这些知识,就能够满足一般的编程需要了。但这些程序还有些小的缺陷,以前面介绍的re由于前面的例程中没有对输入、输出参数的数目及类型进行检查,导致程序的容错性很差,以下程序则容错性较好#include"mex.h"voidmexFunction(intnlhs,mxArray*plhs[],intnrhs,constmxArray*prhs[]){double*inData;double*outData;intM,N;//异常处理//异常处理if(nrhs!=1)mexErrMsgTxt("USAGE:b=reverse(a) ");if(!mxIsDouble(prhs[0]))mexErrMsgTxt("theInputMatrixmustbedouble! ");inData=mxGetPr(prhs[0]);M=mxGetM(prhs[0]);N=mxGetN(prhs[0]);plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL);outData=mxGetPr(plhs[0]);for(i=0;i<M;i++)for(j=0;j<N;j++)outData[j*M+i]=inData[(N-1-j)*M+i];}在上面的异常处理中,使用了两个新的函数:mexErrMsgTxt和mxIsDouble。MexErrMsgTxt在给出出错提示的同时退出当前程序的运行。MxIsDouble则用于判断mxArray中的数据是否double类型。当然Matlab还提供了许多用于判断其他数据类型的函数,这里不加详述。需要说明的是,Matlab提供的API中,函数前缀有mex-和mx-两种。带mx-前缀的大多是对mxArray数据进行操作的函数,如mxIsDouble,mxCreateDoubleMatrix等等。而带mx前缀的则大多是与Matlab环境进行交互的函数,如mexPrintf,mxErrMsgTxt等等。了解了这一点,对在Apiref.pdf中查找所需的函数很有帮助。至此为止,使用C编写mex函数的基本过程已经介绍完了。

如何设置matlab 编译器 mex

通常有兰特(平均随机数),randn(正态分布的随机数),并依此类推。点击看详细种子属性可以通过种子进行设定,如:点击看详细>> randn(“种子”,0); >> randn(5)ANS =点击看详细1.1650 1.6961 -1.4462 -0.3600 -0.0449 0.6268 0.0591 -0.7012 -0.1356 -0.7989 0.0751 1.7971 1.2460 -1.3493 -0.7652 0.3516 0.2641 -0.6390 -1.2704 0.8617 -0.6965 0.8717 0.5774 0.9846 -0.0562 中国这通常使用来设置随机数生成。

MATLAB2014b怎么在Linux14.04下编译mex文件

.M文件是保存一段代码的文件,类似于C语言中的一个函数体; 这也是MATLAB中最常见的文件保存格式之一 .MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序”。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编。

如何在matlab中运行mex文件

把file.mex放到路径里,然后file(参数列表)就可以,具体要看帮助

matlab进行mex-setup设置,出现错误,怎么解决?

mex后面需要一个空格

matlab调用c或c++源程序,能够头文件和源文件分开写,然后mex文件调用头文件

具体描述一下

MATLAB mex 找不到编译器怎么办?

①选y后,MATLAB会列出当前机器上已经安装的、且与当前MATLAB版本兼容的所有C编译器,一般而言,MATLAB都会自带一个LCC编译器,然而LCC目前仅支持32位的MATLAB,所以你的机器上没有。②选n后,MATLAB会列出所有与当前MATLAB版本兼容的C编译器类型(不管你是否已经安装,用于帮助用户选择合适的C编译器),你机器上已经安装的2个编译器,VC6.0:MATLAB从R2010b之后不再支持,所以选项里看不到;而SDK7.1选n时可以看到([11]),但选y时没有跳出,是因为MATLAB没有正确定位SDK。③解决方法:方法一:如果以缺省选项安装了SDK7.1(不改变默认安装路径),可以尝试输入n后,选择 [14] (注意:是14,不是11!),强制定位该编译器(网上有人用这种方法成功了:http://mlinking.blog.163.com/blog/static/185801922201331464626365/)方法二:重新安装MATLAB,安装时选择32位进行安装,则自带LCC编译器。方法三:选择适配的VS版本,下载安装后,重新配置MEX命令。简单讲,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。对于C#、VB等高级语言而言,此时编译器完成的功能是把源码(SourceCode)编译成通用中间语言(MSIL/CIL)的字节码(ByteCode)。最后运行的时候通过通用语言运行库的转换,编程最终可以被CPU直接计算的机器码(NativeCode)。

matlab如何编译mex文件

先用mbuild -setup选择安装编译器再用指令mex c文件件名编译

请教关于利用Matlab中“mex”命令编译C程序的问题

1.准备好C语言程序,清楚C语言的入口函数2.编写mexfunction函数。mexfunction函数为C语言与MATLAB语言的接口函数。调用实例在mylinedetect.c文件中.在MATLAB中调用mex指令编译相关文件,将C语言编译为MEX文件。3.编译完成后,生成mylinedetect.mexw32或mylinedetect.mexw64文件,此文件即mex文件,用于MATLAB与C语言接口函数.4.编译完成之后,编写MATLAB函数,调用MEX文件。以MEX文件的形式调用编译完成的C语言函数[o1,o2]=mylinedetect(double(X).");......5.输出结果,上述linedetect函数完成图像中直线检测功能,带入MATLAB中调用后形成结果。

已知一个离散序列,怎么用matlab求他的共轭对称分量,还有共轭反对称分量?最好举个例子,思路也行。

请参考 http://wenku.baidu.com/view/a659673283c4bb4cf7ecd1fc.html

With prices rising sharply, we now have to spend _______ three months ago on basic living materials.

修饰的是materials.意思是材料是三个月前的两倍
 首页 上一页  1 2 3 4 5 6 7 8 9  下一页  尾页