参考《MATLAB程序设计——重新定义科学计算工具学习方法》
由此,项目的工作目录比较复杂,在 脚本 中设置工作路径建议使用以下代码:
%define enviroment mfilepath = fileparts(which(mfilename)); addpath(fullfile(mfilepath),"./utils") addpath(fullfile(mfilepath),"./config") addpath(fullfile(mfilepath),"./pipeline") addpath(fullfile(mfilepath),"./modules")
小驼峰模式即首字母小写,单词与单词之间直接相连,从第二个单词开始就首字母大写,如:averageNumber,pixelLocation。遇到需要下角标的情况时,也建议使用 结构体 或者元胞矩阵来实现,这样便于后续的检索和循环。
一般在程序开头定义一些常量,使用全大写字母配下画线命名方法,如RED_NUM,YELLOW_NUM。
函数使用小驼峰命名法,并尽量以动词开头,如getLocation.m, plotPicture.m等。因为绝大多数MATLAB内置函数都是全小写命名,这样编程过程中可以一眼分辨函数是内置函数还是自建函数。
大驼峰模式即首字母大写,单词与单词之间直接相连,每单词的首字母都是大写,如 Main .m。用此方法简单区分脚本文件和函数文件。
MATLAB源文件称为M文件,M文件又分为脚本文件和函数文件。
脚本(script)是一系列指令的集合,类似于批处理文件,运行一个脚本文件(*.m)就相当于依次运行了其中每一条指令。脚本中可以再插入脚本,直接把脚本名作为一条指令即可,MATLAB解析时,会将脚本名替换为脚本中的所有语句再执行,所以脚本的意义就在于将多条指令放在一起,用一个名称来完成调用。
输入 edit 打开编辑器,输入以下代码并保存文件名为ScriptMain.m
%% 主脚本 ScriptMain a = 1; b = 2; ScriptAddAB c
再新建一个脚本,名为ScriptAddAB,代码如下:
%% 脚本ScriptAddAB c = a + b
注意事项:
(1)由于脚本的原理是替换,因此在调用子脚本之前的信息完全将被子脚本所用。
(2)建议将脚本名称的首字母大写。
(3)脚本的本意是可以将重复的代码打包以多次调用,但是脚本的性质决定它不具备良好的封装性,输入、输出变量不灵活;而且子脚本会依赖并修改主脚本的内存空间,往往会产生意想不到的后果,因此除一些不依赖和修改内存空间的代码外,不建议经常使用子脚本的方式,而是尽量使用“函数”。
函数(Function)的概念与数学中的函数非常相似,也是有输入变量和输出变量,输入变量和输出变量都可以是多个任意类型的变量。
%%主脚本 ScriptMain a = 1; b = 2; c = functionAdd(a,b)
新建函数文件,代码如下,保存时自动识别函数名称为functionAdd.m。
function output = functionAdd(input1, input2) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 将两个输入变量进行相加 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %创建人:Xiejiahuan %日 期:2022.11.14 %修改人: %日 期: %函数输入输入参数说明 % input1: 输入变量 % input2:输入变量 % output:输入变量的相加和 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% output = input1 + input2; end
注意事项:
(1)函数编写要注意其固定格式,因此在新建函数时,可以使用软件主界面中的“新增函数”按钮,这样产生的新建函数本身就拥有正确的格式。
(2)从函数第二行开始,建议使用注释将函数功能以及算法的思路进行较详细的说明。
(3)由于函数不依赖主程序的内存空间,因此在函数中无法直接使用主程序内存空间中的变量,且在函数内部生成的中间结果变量,只要不输出变量,则在退出函数时即被清除,内部变量是函数的局部变量,不会影响主程序内存空间。
(5)函数的命名建议形式上采用“小驼峰命名法”,并建议以动词开头,如getLocation, plotPicture等。
function [ 函数输出参数] = 函数名( 函数输入 ) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %此处为函数名,描述函数功能 %%%%%%%%%%%%%%%%%%%%%%%%%%%% %创建人: %日 期: %修改人: %日 期: %函数输入输入参数说明 %%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%% %此处脚本名,描述脚本功能 %%%%%%%%%%%%%%%%%%%%%%%% %创建人: %日 期: %修改人: %日 期: %%%%%%%%%%%%%%%%%%%%%%%% a = 1; b = 2; c = a + b;
矩阵编程是MATLAB中的核心特色,相比于常规的C语言代码风格,矩阵编程是一种非常可取的编程风格,具有接近数学语言,取代循环结构,提高计算速度的优点。
以下给出四个矩阵编程风格的实例:
(1)计算1001个从0~10定义域内的正弦值
| C语言风格: i = 0 for t = 0 : 0.01: 10 i = i + 1 y(i) = sin(t) end | MATLAB矩阵风格: t = 0 : 0.01 : 10 y = sin(t); |
(2)已知10000个圆锥体的直径D和高度H,求它们的体积和。
| C语言风格: for n = 1 : 10000 V(n) = 1/12 * pi * (D(n)^2) * H(n); end | MATLAB矩阵风格: V = 1/12 * pi * (D.^2). * H |
(3)假设矩阵A代表图像,计算图像的列均值和各像素与对应均值的差
| C语言风格: mA = mean(A); B = zeros(size(A)); for n = 1 : size(A,2) B(:,n) = A(:,n) - mA(n); end | MATLAB矩阵风格: devA = A - mean(A) |
(4)计算两个向量形成的所有组合乘积的正弦值
| C语言风格: x = -5: 0.1: 5; y = (-2.5: 0.1: 2.5)' N = length(x); M = length(y) for i = 1 : M for j = 1 : N Z(i,j) = sin(abs(x(i) * y(j))) end | MATLAB矩阵风格: [X,Y] = meshgrid(-5: 0.1: 5, -2.5: 0.1: 2.5); Z = sin(abs(X.*Y)); |
注意:
(1)编程前要对矩阵进行内存预分配。
(2)慎用循环语句。
(3)多向量计算时使用遍历网格化,灵活使用meshgrid和ndgrid。
(2)代码自动填充:对于代码中可能使用到的“名称”,如函数、模型、对象、文件、变量、结构体、图形属性等,只要输入前几个字符,按Tab键即可调出自动填充项,使用箭头键选择所需的名称,再次按Tab键确认。
(4)代码分析提示:在“ 编辑器 ”右侧的竖条,用颜色来表示代码状态,如红色表示语法错误,橙色表示警告或可改进,绿色则表示代码正常。
(5)注释及代码节功能:单百分号%后面所跟随的文字将被视为注释并标绿;双百分号加一空格“%% ”后面所跟随的文字也是注释,同时绿色加粗,作为“代码节”的标题,代码节的结束由下一组双百分号为标志。Ctrl+R快捷键为批量注释代码,Ctrl+T快捷键为批量取消注释。
(6)函数提示功能:输入函数名称及左括号,按Ctrl+F1快捷键,可以调出函数提示器。
(7)智能缩进功能:选择代码后,按Ctrl+I快捷键可以实现代码的智能缩进。
(8)变量自动识别与替换:光标处于某一变量时,所有同名变量均为天蓝色高亮显示,此时修改一处变量名,会有提示按Shift+Enter快捷键可以将其余所有实例同时修改。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删