关于MATLAB入门的简单记录6 函数

m文件的分类:m文件分为脚本文件和函数文件,函数文件是通过调用使用的,不能直接运行。而脚本文件是可以直接运行的,其调用函数文件,使用函数功能.

函数的基本格式:

function[返回参数1,返回参数2...]=functionname(形参1,形参2...)%注意这里的函数名称和变量命名方式一致,没有形参时候 圆括号也不能省略。可以有多个返回值,让只有一个返回值的时候方括号可以省略。以上是函数头
%接下来就是H1注释行,意义在于使用lookfor命令查找该函数的时候H1也在搜索范围之内
%接下来的注释是其他注释
block
return;
函数命名之前最好使用which查找一下在硬盘中是否已将存在需要命名的名字,防止因为重名问题而出错

函数的调用和C语言完全一致,直接变量=函数名(实参列表)就可以。这里的传递变量是传参而不是传地址,与C语言不同的是matlab中数组也是传值不是传地址

MATLAB中选择性参数,类似于c中的接受可变数量的参数的函数。与C的通过宏定义实现或者C++通过函数重载实现的机制不同,matlab采用类似于javascript返回方法个数的方式实现功能。这里是nargin nargout。它们一般只出现在函数体内部在函数里用nargin判断输入参数数量,if语句决定执行的代码。注意在函数里形参列表是从前向后对应。matlab中还有一种类似于c语言的实现不定参数的形式:单元数组可以用在不定参数函数中,通过varargin实现,这个参数也是在输入参数列表中的最后一项,他返回一个单元阵列,所以一个输入实参可以包括任意数目的,每一个实参都是由varargin返回的

函数错误信息的检测与输出:

error('message')%用于将massage以错误的形式输出,给出错误信息后程序会终止运行
%nargchk函数用于检测出函数输入参数数与指定数量不匹配的问题
massage=nargchk(min args,max args,num args)%numagrs超过minmax后就会给出对应的出错信息,如果符合信息给出的是空字符串
%使用warning函数可以达到error的提示效果却不至于打断执行,执行用法可以是error直接提示也可以是fprintf的格式化输出方式,也可以加消息id

matlab拥有全局变量,使用global关键字定义。只能定义一次 可以用于传参,也可以用于提升传递速度,但是对于结构化程序设计是个糟糕的选择。使用clear后,global并不会撤销,因为不在同一个工作空间中。如果再次重新定义就会出错。多个函数修改或者清空使用之后,global里面的变量往往会变的很难理解,所以尽量不要使用全局变量,反例如下:

结果很容易发现,global使用了在函数中定义的值,而且有一点就是globle变量在函数中是无法初始化的,只能先定义然后再赋值操作

当需要保持局部变量的值却不使用全局变量的时候,matlab提供了一种类似于C语言中的static属性的变量,这称之为持久内存。解释是在函数上一次调用之后,下一次调用之前,局部变量被保存在持久内存中,值不变。用法:

persistent var1 var2 ..

利用这个特性可以实现计算器中类似M+的功能,对先后输入的数据进行处理

inputname函数用于判断输入的参数名字也就是获取变量名字。用法

name=inoutname(1)%这个数字1代表需要返回给name的参数在参数传递中的顺序


这个特性可以用于返回哪一个变量出错,从而实现判断。

在函数名字前面加@就代表函数的句柄

函数的函数定义:函数的输入参数中含有其它函数,产地给函数的函数的变量名一般情况应用于这个函数的执行过程中

举个例子:fzero函数有两个参数,第一个参数是一个函数句柄,第二个参数是一个数值,该函数的目的是寻求一个数值附近有前面给定对应函数的零点

X=fzero(@sin,3)%求3附近sin的零点值
当然通过这个可以灵活的计算sin在某一点附近任意函数值得近似值:

X=fzero(@(t)sin(t))-0.3,3)
子函数:一个函数文件中创建有多个函数,第一个函数被称为普通函数,其后的韩式被称为中间函数(子函数),二者形式并无差别不过子函数只能被该文件的其他函数调用,这里看有点类似于C++中类的private函数
什么时候使用呢?一般情况下当对外提供一个比较复杂的任务时候可以将函数文件内部模块化,令第一个普通函数实现一个接口调用的功能,该函数内部再去调用其他函数

值得提的是matlab也有私有函数。私有函数是指属于以private为名字的子目录的函数,它只对父目录中的函数可见,因此,它允许函数重名。matlab在标准函数之前优先查找私有函数,由于这一点所以尽量不要将私有文件夹设置到搜索路径之下,不仅破坏了搜索查找顺序而且有可能因为函数重名找不到需要的函数。还有就是父文件夹下是父函数,再上一层便不再是。

创建私有文件夹就是普通文件夹的创建方式,将名字写成private就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值