matlab如何定义函数:分脚本函数和独立m文件函数两种实操方式
最开始学MATLAB的时候,总卡在自定义代码模块上,搞不懂matlab如何定义函数,照着网上零散的代码抄,要么运行报错,要么参数调用完全失效,折腾了整整一下午才摸透两种最实用的定义方式,全是实打实踩坑试出来的操作,没有虚的理论。
一开始傻乎乎的以为所有函数都要单独建文件,每次写几行简单的计算代码,都新建一个m文件来存函数,来回切换文件特别麻烦,稍微改一点参数就要保存、重新运行,效率低到离谱。当时完全不知道脚本文件里可以直接嵌套函数,硬生生把简单的数值运算拆成好几个文件,最后代码混乱,连自己都分不清哪个函数对应哪个计算步骤。
后来才反应过来,日常简单运算、短代码复用,直接在脚本末尾写局部函数就够了。操作特别简单,在脚本代码全部写完之后,直接以function关键字开头定义,格式就是 函数输出值=函数名(输入参数),然后换行写具体的运算代码,最后以end收尾。这种脚本函数只能在当前文件调用,别的文件无法使用,刚好适合单次作业、临时计算的场景,不用频繁新建文件。
试过好几次参数匹配出错的问题。最常见的就是输入输出参数数量对不上,定义函数的时候写了两个输出参数,调用的时候只接收了一个,MATLAB直接弹窗报错。还有函数名和内置函数重名的情况,之前随便取名sum,直接覆盖了系统自带的求和函数,导致整篇代码运算结果全部出错,排查了好久才找到问题根源。
独立m文件函数是适配复杂项目的用法,这个是折腾最久的一个点。需要单独新建一个m文件,文件名必须和函数名完全一致,包括大小写,这是最核心的细节,也是大多数人报错的原因。文件开头第一行必须是函数定义语句,不能有多余的注释和代码前置,不然系统识别不到函数主体,直接运行失败。
单独建函数文件的时候踩过一个巨坑,保存文件的时候随手改了文件名,函数名没同步修改,不管怎么调用都提示未定义函数。反复测试后才确定,MATLAB识别外部函数的唯一标准就是文件名,二者必须一字不差,连空格都不能有,这一步错了,后续所有调用操作全部作废。
脚本函数和独立函数的适用场景完全不一样,不用混淆。几行代码的临时计算、课堂小作业,用脚本末尾的局部函数,省事高效。需要反复调用、多模块联动、代码量偏大的项目,就用独立m文件函数,方便后期修改和维护。
还有个容易忽略的细节,函数定义的时候,输入参数可以设置空值,但输出参数必须严格对应,不能多也不能少。之前写过一个无输出的判断函数,定义时保留了输出变量,运行后一直出现变量未赋值的警告,删掉多余输出参数后,所有问题直接解决。
那天晚上改完所有报错代码,关掉MATLAB的时候,电脑屏幕还停在干净无报错的命令行界面。第二天打开软件,第一件事就是新建脚本,分别试了两种函数定义方法,确认每一步操作都能稳定运行,才算彻底吃透了这个基础操作。