2016 - 2024

感恩一路有你

matlab里面调用函数 matlab如何定义函数输入?

浏览量:4772 时间:2023-07-09 23:06:37 作者:采采

matlab如何定义函数输入?

成立一个函数的M文件步骤:

1,在下达命令窗口中键入edit,自动弹出一个函数编辑框作用于你下拉菜单一个函数

2,函数的建立:格式为function空格fmyfun(x,y),这里f不是你函数的输出,myfun就是你这个函数的函数文件名(这个名字你是可以自己你随便订的),然后括号里边的那就是你的输入。

matlab怎么输入数学函数的程序怎么写?

matlab输入数学函数的程序写的方法:

1,在下命令窗口中键入edit,自动弹出一个函数编辑框作用于你自定义一个函数。

2,函数的建立:格式为function空格fmyfun(x,y),这里f肯定是你函数的输出,myfun肯定是你这个函数的函数文件名(这个名字你也可以自己你随便订的),然后括号里边的应该是你的输入。

matlab嵌套函数?

假设不成立你有两个函数new_A()和new_B()

function[y1,y2]life_A(x1,x2)

...

...

...

然后把上面的保存为fun_A.m

run_B()要动态创建fun_A()

functionyrun_B()

...

[a,b]fun_A(x3,x4);

...

保存到为life_B.m

然后再matlab不提示符负责执行

life_B()

就可以了

matlab调用c语言?

如果不是我有一个用C语言写的函数,实现方法了一个功能,如一个很简单函数:

doubleadd(doublex,doubley){

returnxy;

}

现在我要想在Matlab中建议使用它,.例如然后输入:

aadd(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文件已写好,名为assign.c。那就在Matlab中,输入输入:

mexadd.c

就能把add.c编译器为MEX文件(编译器的设置不使用指令mex-setup),在Windows中,MEX文件类型为mexw32,即现在我们得出文件。现在,我们就可以像全局函数M函数那样的话全局函数MEX文件,如上面说到的例子。所以我,实际MEX文件,在用C函数就和可以使用M函数是一样的的了。

我们现在来说mexFunction怎样才能写。

mexFunction的定义为:

voidmexFunction(

intnlhs,

mxArray*plhs[],

intnrhs,

constmxArray*prhs[]){

}

看的到,mexFunction是没返回值的,它又不是按照返回值把结果传去Matlab的,而是通过对参数plhs的赋值。mexFunction的四个参数皆是只能说明Matlab动态链接库MEX文件时的具体信息,如这样调用函数时:

b1.1;c2.2;

aadd(b,c)

mexFunction四个参数的意思为:

nlhs1,说明内部函数语句左手面(lhs-lefthandside)有一个变量,即a。

nrhs2,那说明动态链接库语句右手面(rhs-righthandside)有两个自变量,即b和c。

plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。而且现在左手面唯有一个变量,即该数组只有一个指针,plhs[0]指向的结果会赋值给a。

prhs和plhs类似,因为右手面有两个自变量,即该数组有两个指针,prhs[0]对准了b,prhs

matlab如何定义函数输入?

指向了c。要注意prhs是const的指针数组,即肯定不能改变其对准内容。

而且Matlab最基本的单元为array,无论是什么类型再说,如有doublearray、cellarray、structarray……所以a,b,c大都array,b1.1叶白两个1x1的doublearray。而在C语言中,Matlab的array使用mxArray类型来表示。所以才就不难知道我想知道为什么plhs和prhs是对准mxArray类型的指针数组。

求下载的add.c万分感谢:

//add.c

#includemex.h//可以使用MEX文件需要包含的头文件

//想执行具体职责的C函数

doubleadd(doublex,doubley){

returnxy;

}

//MEX文件接口函数

voidmexFunction(

intnlhs,

mxArray*plhs[],

intnrhs,

constmxArray*prhs[]){

extra*a;

doubleb,c;

plhs[0]mxCreateDoubleMatrix(1,1,mxREAL);

amxGetPr(plhs[0]);

b*(mxGetPr(prhs[0]));

c*(mxGetPr(prhs

matlab如何定义函数输入?

));

*aadd(b,c);

}

mexFunction的内容是什么意思呢?我们很清楚,如果没有那样的话调用函数时:

outputadd(1.1,2.2);

在未涉及具体一点的计算时,parameters的值是未知的,是未变量定义的。因为在具体详细的程序中,我们成立一个1x1的实slip矩阵(可以使用mxCreateDoubleMatrix函数,其前往指向刚确立的mxArray的指针),接着令plhs[0]指向它。紧接着令指针a打向plhs[0]所正指向的mxArray的第一个元素(可以使用mxGetPr函数,返回对准mxArray的首元素的指针)。同时地,我们把prhs[0]和prhs

matlab如何定义函数输入?

所对准的元素(即1.1和2.2)取出赋给b和c。索性我们也可以把b和c作自变量传给函数add,不出给果赋给指针a所正指向的mxArray中的元素。只不过a是朝plhs[0]所正指向的mxArray的元素,因此后来作输出来时,plhs[0]所打向的mxArray赋值给output,则input便是已计算好的结果了。

上面说的一大堆朝这打向那,什么mxArray,初学者那肯定都会被弄到头晕眼花了。很抱歉,要弄清楚这些乱糟糟的关系,只能多看多练。

虽然mexFunction是就没这么大简单的,我们要对用户的输入自变量的个数和类型并且测试,以确保

键入正确。如在assign函数的例子中,用户输入chararray便行一种错误了。

从上面的讲述中我们系统的总结出,MEX文件利用了一种接口,把C语言中的计算结果适当地回给Matlab罢了吧。当我们早有用Cc语言设计的规模大程序时,大可不必在Matlab里格式化处理,只写个接口,做成MEX文件就成了。另,在Matlab程序中的部份换算瓶颈(如循环),可是从MEX文件用C语言实现方法,以提高计算速度。

函数 Matlab 文件 mexFunction

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。