当前位置: 首页 > news >正文

MATLAB函数文件编写规范

一、函数文件与脚本文件的区别(是什么?)

        如果 M 文件的第一个可执行语句以 function 开始,该文件就是函数文件,每一个函数文件都定义一个函数。事实上,MATLAB 提供的函数命令大部分都是由函数文件定义的,这足以说明函数文件的重要性。

        从使用的角度来看,函数是一个“黑箱”,把一些数据送进去,经加工处理,把结果送出来。

        从形式上看,函数文件区别于脚本文件之处在于:

  • 脚本文件的变量为命令工作空间变量,在文件执行完成后保留在命令工作空间中。
  • 而函数文件内定义的变量为局部变量,只在函数文件内部起作用,当函数文件执行完后,这些局部变量将被清除

        从结构上来看,脚本文件只比函数文件少了一个“函数声明行”,除此之外,二者的语法及构架等均相同。

二、函数文件的组成部分(怎么写?)

        下面将以一个计算平均值的函数为例做出阐述。

        在 M 文件编辑器窗口中编写 M 文件并命名为 average.m(文件名与函数名相同):

function y=average(x)
[a,b]=size(x);                        %判断输入量的大小
if ~((a==1)|(b==1))|((a==1) & (b==1)) %判断输入是否为向量error('必须输入向量。')
endy=sum(x)/length(x);                 %计算向量x所有元素的平均值

        保存 M 文件,函数 average() 接收一个输入参数并返回一个输出参数,该函数的用法与其他  MATLAB 函数一样。在 MATLAB 命令行窗口中运行以下语句,便可求得 1~9 的平均值。

>> x=1:9
x =1    2    3    4    5    6    7    8    9
>> average (x)
ans =5

        通常函数文件由以下几个基本部分组成:

1、函数定义行

        函数定义行由关键字 function 引导,指明这是一个函数文件,并定义函数名、输入参数和输出参数。函数定义行必须为文件的第一个可执行语句,函数名与文件名相同,可以是 MATLAB 中任何合法的字符。

        函数文件可以带有多个输入参数和输出参数,例如:

function [x,y,z]=sphere(theta,phi,rho)

        当然,也可以没有输出参数,例如:

function printresults(x)

2、H1 行

        H1 行就是帮助文本的第一行,是函数定义行下的第一个注释行,是供 lookfor 查询时使用的。一般来说,为了充分利用 MATLAB 的搜索功能,在编制 M 文件时,应在 H1 行中尽可能多地包含该函数的特征信息。由于在搜索路径上包含 average 的函数很多,因此用 lookfor average 语句可能会查询到多个有关的命令。例如:

>> lookfor average_2

3、帮助文本

        在函数定义行后面,连续的注释行不仅可以起到解释与提示作用,更重要的是为用户自己的函数文件建立在线查询信息,以供 help 命令在线查询时使用。例如:

>> help average_2

        函数 average_2(x) 用以计算向量元素的平均值。

        输入参数 x 为输入向量,输出参数 y 为计算的平均值。非向量输入将导致错误。

4、函数体

        函数体包含了全部的用于完成计算及给输出参数赋值等工作的语句,这些语句可以是调用函数、流程控制、交互式输入/输出、计算、赋值、注释和空行。

5、注释

        以 % 起始到行尾结束的部分为注释部分,MATLAB 的注释可以放置在程序的任何位置,可以单独占一行,也可以在一个语句之后。例如:

%非向量输入将导致错误
%判断输入量的大小
[m, n]=size(x);

总结        

        典型规范的函数文件的结构总结如下:

  • 函数声明行(必写):位于函数文件的首行,以 MATLAB 关键字 function 开头,定义函数名及函数的输入/输出变量。脚本文件无须函数声明行。
  • H1行(必写):紧随函数声明行之后的以 % 开头的第一注释行。H1 行包括大写的函数文件名运用关键词简要描述的函数功能。该行将提供 lookfor 命令作为关键词时查询使用。
  • 在线帮助文本区(必写):H1 行及其后的连续以 % 开头的注释行,通常包括函数输入/输出变量的含义调用说明
  • 编写和修改记录:与在线帮助文本区应以一个空行相隔;该行以 % 开头,记录编写及修改 M 文件的所有作者、日期及版本号,以方便后来的使用者查询、修改和使用。
  • 函数主体(必写):规范化的写法应与编写和修改记录以一个空行相隔;这部分内容包括所有实现该 M 函数文件功能的 MATLAB 指令、接收输入变量、进行程序流控制。

说明

  1. 函数定义名应和文件保存名一致。当两者不一致时,MATLAB 将忽视文件首行的函数定义名,而以文件保存名为准。
  2. MATLAB 中的函数文件名必须以字母开头,可以是字母、下画线及数字的任意组合,但不可以超过 31 个字符。
  3. 建议读者在编写 H1 行注释时,尽量采用英文表述方式,这是为了之后在使用过程中关键词检索方便。

三、参考标准案例(供模仿学习)

        下面给出一个标准案例供大家参考(本函数文件仅供格式参考):

function spir len = spirallength(d, n, lcolor)
% CIRCLE plot a circle of radius as r in the provided color and calculate its area
% d:螺旋的旋距;n:螺旋的圈数;lcolor:画图线的颜色;spirlen:螺旋的周长
% spirallength(d,n):利用蓝色以预设参数的螺旋线
% spirallength(d,n,lcolor):利用1color颜色以预设参数的螺旋线
% spir_len=spirallength(d,n):计算螺旋线的周长,并手用蓝色填充螺旋线
% spir_len=spirallength(d,n,lcolor):计算螺旋我的周长,并用lcolor颜色填充螺旋线% Jia-Hui Su编写于2025.8.24,Jia-Hui Su修改于2025.8.25if nargin > 3error('输入变量过多!');
elseif nargin == 2lcolor = 'b';
end
j = sqrt(-1);
phi = 0: pi/1000 : n*2*pi;
amp = 0: d/2000 : n*d;
spir = amp .* exp(j*phi);
if nargout == 1spir_len = sum(abs (diff(spir)));fill(real(spir), img(spir), lcolor)
elseif nargout == 0plot (spir, lcolor)
elseerror('输出变量过多!');
end
axis ('square')
end
http://www.dtcms.com/a/350244.html

相关文章:

  • imx6ull-驱动开发篇41——Linux RTC 驱动实验
  • 详解flink SQL基础(四)
  • 使用Docker+WordPress部署个人博客
  • 无人机和无人系统的计算机视觉-人工智能无人机
  • k8s的etcd备份脚本
  • 4G模块 EC200通过MQTT协议连接到阿里云
  • Java-面试八股文-Java高级篇
  • Springboot 集成 TraceID
  • 在react里使用路由,手动跳转
  • C++ 内存安全与智能指针深度解析
  • 【flutter对屏幕底部有手势区域(如:一条横杠)导致出现重叠遮挡】
  • YOLOv7:重新定义实时目标检测的技术突破
  • 浅聊RLVR
  • 绿色循环经济下的旧物回收App:重构闲置资源的价值链条
  • 设计仿真 | 从物理扫描到虚拟检具:Simufact Welding革新汽车零部件检测
  • 汽车零部件工厂ESOP系统工业一体机如何选型
  • 基于51单片机红外避障车辆高速汽车测速仪表设计
  • AEB 强制来临,东软睿驰Next-Cube-Lite有望成为汽车安全普惠“破局器”
  • kubeadm join 命令无法加入node节点,ip_forward 内核参数没有被正确设置
  • IIS 安装了.netcore运行时 还是报错 HTTP 错误 500.19
  • k8s笔记03-常用操作命令
  • Qt开发:智能指针的介绍和使用
  • 君正T31学习(二)- USB烧录
  • 支持指令流水的计算机系统设计与实现
  • mysql绿色版本教程
  • 【python断言插件responses_validator使用】
  • 校园科研自动气象站:藏在校园里的 “科研小站”
  • Nginx零拷贝技术深度解析
  • 【 Python程序员的Ubuntu入门指南】
  • Python二进制、八进制与十六进制高级操作指南:从底层处理到工程实践