Matlab脚本和函数编程入门

简介

若您需要重复执行一系列命令或希望将其保存供以后引用,请将其存储在程序文件中。MATLAB® 程序的最简单类型是脚本,其中包含一组命令,这些命令与您在命令行中键入的命令完全相同。要获得更高的编程灵活性,请创建接受输入并返回输出的函数。要将代码与嵌入式输出、格式化文本、方程和图像合并到一个交互式环境中,请创建实时脚本或实时函数(MATLAB R2016a或更高的版本)。

循环控制语句

for 语句

循环特定次数,并通过递增的索引变量跟踪每次迭代。
例如,预分配一个 10 元素向量并计算五个值:

x = ones(1,10);
for n = 2:6
    x(n) = 2 * x(n - 1);
end

while 语句

只要条件仍然为 true 就进行循环。
例如,计算使 factorial(n) 成为 100 位数的第一个整数 n:

n = 1;
nFactorial = 1;
while nFactorial < 1e100
    n = n + 1;
    nFactorial = nFactorial * n;
end

每个循环都需要 end 关键字。最好对循环进行缩进处理以便于阅读,特别是使用嵌套循环时(也即一个循环包含另一个循环)。您可以使用 break 语句以编程方式退出循环,也可以使用 continue 语句跳到循环的下一次迭代。
注意:如果意外创建了一个无限循环(永远不会自行结束的循环),请按 Ctrl+C 停止执行循环。

条件语句

if 语句

% Generate a random number
a = randi(100, 1);

% If it is even, divide by 2
if rem(a, 2) == 0
    disp('a is even')
    b = a/2;
end

通过使用可选关键字 elseif 或 else,if 语句可以包含备用选项。例如:

a = randi(100, 1);

if a < 30
    disp('small')
elseif a < 80
    disp('medium')
else
    disp('large')
end

switch 语句

当您希望针对一组已知值测试相等性时,请使用 switch 语句。例如:

[dayNum, dayString] = weekday(date, 'long', 'en_US');

switch dayString
   case 'Monday'
      disp('Start of the work week')
   case 'Tuesday'
      disp('Day 2')
   case 'Wednesday'
      disp('Day 3')
   case 'Thursday'
      disp('Day 4')
   case 'Friday'
      disp('Last day of the work week')
   otherwise
      disp('Weekend!')
end

对于 if 和 switch,MATLAB® 执行与第一个 true 条件相对应的代码,然后退出该代码块。每个条件语句都需要 end 关键字。

一般而言,如果您具有多个可能的离散已知值,读取 switch 语句比读取 if 语句更容易。但是,无法测试 switch 和 case 值之间的不相等性。例如,无法使用 switch 实现以下类型的条件:

yourNumber = input('Enter a number: ');

if yourNumber < 0
    disp('Negative')
elseif yourNumber > 0
    disp('Positive')
else
    disp('Zero')
end

向程序中添加注释

使用百分比 (%) 符号向 MATLAB® 代码中添加注释。在实时脚本和函数中,您还可以通过在代码前后插入文本行来描述过程或代码。文本行还提供其他灵活的功能,例如标准格式选项以及插入图像、超链接和方程。
注意:如果您 MATLAB 代码文件 (.m) 中的文本所包含的字符编码与您的平台编码不同,则在您保存或发布文件时,MATLAB 会将这些字符显示为乱码。实时脚本和函数 (.mlx) 支持所有区域设置的存储和字符显示。
注释还可用于程序开发和测试,注释掉无需运行的任何代码。要注释掉多个代码行,可以使用块注释运算符,%{ 和 %}:

a = magic(3);
%{
sum(a)
diag(a)
sum(diag(a))
%}
sum(diag(fliplr(a)))

%{ 和 %} 运算符必须单独显示在帮助文本块前后紧邻的行上。不要在这些行中包括任何其他文本。
要注释掉跨多行的部分语句,请使用省略号 (…) 代替百分比符号。例如,

header = ['Last Name, ',      ...
          'First Name, ',     ...
      ... 'Middle Initial, ', ...
          'Title']

运行代码节

将您的文件分为多个代码节

MATLAB® 文件通常包含多个命令。您通常一次仅专注于程序中的某个部分,分块操作代码。同样,向其他人解释您的文件时,通常分块介绍您的程序。为帮助介绍这些过程,使用代码节,也称为代码单元或单元模式。代码节包含 MATLAB 脚本中您想要作为一组求值的连续代码行,以两个注释字符 (%%) 开头。与 %% 位于同一行中的文本称为节标题。可以选择是否包含节标题,不过,节标题可提高文件的可读性并在您发布代码时显示为题头。

执行代码节

编写 MATLAB 程序文件时,可以使用编辑器中“节”(“单元”)的功能逐节执行程序文件。该方法有助于您试用和微调您的程序。您可以在各节之间导航并单独执行每节。要执行某节,该节必须包含它需要的所有值,或这些值必须存在于 MATLAB 工作区中。

节执行功能运行当前以黄色高亮显示的代码节。MATLAB 在执行某个代码节时不会自动保存您的文件。文件无需位于您的搜索路径下。

同时使用代码节与控制语句和函数

在控制语句和函数内使用代码节时会产生意外结果,因为 MATLAB 自动插入编辑器中未显示的分节符,除非您显式插入分节符。涉及嵌套代码时尤其如此。在控制语句或函数的范围内放置另一个控制语句或函数时产生嵌套代码。

MATLAB 根据以下条件自动定义代码块中的节界限:

  • MATLAB 在文件顶端和底端插入分节符,创建包含整个文件的代码节。但是,编辑器不会高亮显示包含整个文件的生成节,除非您将一个或多个显式代码节添加到文件中。
  • 如果您定义控制流语句(例如 if 或 while 语句)内的分节符,MATLAB 会自动将分节符插入包含语句开始和结束的行。
  • 如果您在函数内定义分节符,MATLAB 会将分节符插入函数声明和函数结束语句中。如果您没有用 end 语句结束函数,MATLAB将视该函数的结尾紧发生在下个函数的开头前。

如果在您插入分节符的同一行中自动插入分节符,它们会折叠为一个分节符。

脚本与函数

脚本和函数都允许您通过将命令序列存储在程序文件中来重用它们。脚本是最简单的程序类型,因为它们存储命令的方式与您在命令行中键入命令完全相同。但是,函数更灵活,更容易扩展。注意:在脚本中包含函数需要 MATLAB R2016b 或更高版本。

函数具有它们自己的工作区,与基础工作区隔开。

基础工作区与函数工作区

基础工作区存储您在命令行中创建的变量。这包括脚本创建的任何变量(假定您从命令行或编辑器中运行脚本)。在您清除基础工作区中的变量或结束您的 MATLAB® 会话之前,这些变量一直存在。

函数不使用基础工作区。每个函数都有自己的函数工作区。每个函数工作区都与基础工作区和所有其他工作区分开以保护数据的完整性。即使普通文件中的局部函数也有它们自己的工作区。某函数工作区的特定变量称为局部变量。在一个函数调用转到下一个函数调用时,局部变量通常不保留在内存中。
从函数中调用脚本时,脚本使用函数工作区。

和局部函数一样,嵌套函数也有它们自己的工作区。但是,这些工作区从以下两个重要的独特之处:

  • 嵌套函数可以访问和修改它们所在的函数工作区中的变量。
  • 嵌套函数或包含嵌套函数的函数中的所有变量都必须显式定义。即,除非变量已存在于函数工作区中,否则无法调用函数或脚本向那些变量赋值。

猜你喜欢

转载自blog.csdn.net/weixin_44256803/article/details/88662463
今日推荐