matlab里面调用函数 matlab如何定义函数输入?
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语言实现方法,以提高计算速度。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。