MATLAB学习笔记

"MATLAB Learning Notes"

Posted by Summer on February 21, 2025

MATLAB使用笔记

1 MATLAB软件使用

1.1 文件

m文件可以分为脚本文件函数文件

  • 脚本文件
    • 可类比为c语言中的主函数文件(main.c)
    • 可以单独执行
    • 可以处理工作区的数据
  • 函数文件
    • 接受输入参数返回输出参数的文件,类比于c语言中的函数
    • 一般不能单独执行,但可以被脚本调用
    • 不能处理工作区的数据,可以处理函数内部变量

1.2 命令行

科学计算器

  • 输入数据
    • 将变量a添加到工作区,并在命令行窗口显示结果
  • 算数运算
    • 加减乘除幂
  • 函数调用
    • 返回值=函数名(参数1,参数2,…)

执行系统命令

  • 加载运行文件,保存和关闭
    • 在命令行直接输入脚本文件名,可以运行脚本
    • 保存文件:save + 文件名
    • 关闭文件:close + 文件名
    • 关闭窗口:close + 窗口名
  • 获取帮助文档
    • help + 函数名
命令 含义
help 在线帮助
clear 清空工作区的内存
load 把文件调入变量到工作区
save 把变量存入文件中
quit/exit 退出MATLAB
pwd 显示当前的工作目录
cd 改变当前的工作目录

调试程序

  • 在程序运行过程中,打印变量值,或者使用表达式对变量进行评估
    • 查看变量值:运行至断点处,可以在命令行输入变量名查看数值
    • 评估变量:输入变量到表达式,判断变量的正确性.如size(A)判断矩阵的维数.det(A)求行列式,也可以判断奇异性
    • 画图:plot(变量)可以画成散点图或者曲线图

1.3 工作区

查看变量值、可视化

  • 双击工作区变量,可以查看具体数值
  • 右键单击工作区变量,可以对其进行plot, scatter等可视化操作

保存工作区变量

  • 保存所有工作区变量:save 文件名.mat
  • 保存特定工作区变量:save 文件名.mat 变量1 变量2

将数据文件加载到工作区

  • 使用load命令:load 文件名.mat

1.4 菜单

打开matlab就可以看到菜单,没啥好说的

2 MATLAB编程入门

2.1 编程基本原则

  1. 养成在主程序开头用clear指令清楚变量的习惯,以消除工作区中其他变量对程序运行的影响.但注意在子程序中不要使用clear.
  2. 参数值要集中放在程序的开头部分,以便维护.
  3. 程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作.
  4. 充分利用debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或用户图形界面(GUI)的设计技巧,将设计结果集成在一起
  5. 合理添加注释

2.2 控制语句

2.2.1 赋值语句

  • 直接赋值语句:赋值变量=赋值表达式
  • 函数调用语句:[返回变量列表]=函数名(输入变量列表)
  • 如果不想MATLAB每次都显示运算结果,只需要在运算式后面加上分号(\;)

2.2.2 流程控制语句

if-else语句
  • if-else-esleif分支结构
    • 最简单的if-else-end结构
      if expression
      commands;
      end
      
    • if-else-elseif分支结构
      if expression
      commands 1;
      else
      commands 2;
      end
      
    • 当有三个或者更多的选择.注意,这种形式只和所碰到的,与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的if-else-end结构,而且最后的else可有可无
      if expression1
      ...;
      elseif expression2
      ...;
      elseif expression3
      ...;
      else
      ...;
      end
      
      for循环语句
      for x=array(1:n)
      commands;
      end
      
  • 步长缺省值为1,可以在正实数或负实数范围内任意指定
  • 对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束.
  • 循环结构可以被嵌套使用
  • 可以使用break语句跳出循环
while循环语句
while expression
    commands;
end
switch语句
switch 表达式(可以是标量或字符串)
case 值1
    语句1;
case 值2
    语句2;
.....
otherwise
    语句n;
end
  • 表达式的值与case的值相同,就执行哪种情况的语句;如果不同,就执行otherwise的语句
  • 格式中也可以不包括otherwise,这时如果表达式的值与列出的各种情况都不相同,则继续往下执行

2.3 变量及其作用域

2.3.1 MATLAB中预定义常量

ans 分配最新计算表达式的值,这个表达式并没有给定一个名字

eps 返回机器精度(2.2204*10e-16)

realmax 返回计算机能处理的最大浮点数

realmin 返回计算机能处理的最小非零浮点数

pi $\pi$=3.14159265

Inf 定义为1/0.当出现被零除时,MATLAB就返回inf,不中断而继续计算

NaN 定义为Not a number,这个非数值要么是0/0类型,要么是inf/inf

==尽量避免对这些量重新赋值==

2.3.2 MATLAB函数内的特殊变量

nargin,nargou 分别等于函数的实际输入输出的个数 varargin,varargout 表示可以有任意多的输入和输出变量,例如

1
function[varagout]=f_name(varargin)

2.3.3 matlab中的数据类型

变量 类型
double 一般为矩阵,多维数组等
char 字符串变量和矩阵
sparse 稀疏矩阵
struct 结构体型
cell 单元型变量

2.3.4 全局变量,子函数,私有函数

  • global 全局变量列表
    • 全局变量是可以从函数或命令行中访问的变量。它们拥有自己的工作区,这些工作区与基础和函数工作区分开。但是,全局变量具有显著风险。例如:
    • 任何函数都可以访问和更新全局变量。使用此类变量的其他函数可能返回意外结果。
    • 如果您无意间提供与现有全局变量同名的“新”全局变量,一个函数可能覆盖另一个函数预期的值。此类错误很难诊断。
    • 请尽可能谨慎使用全局变量。各变量名不能用逗号分隔,用空格,否则不能识别。同时在MATLAB工作空间申明、在函数前面申请。
  • 子函数
    • 在函数中专门有该函数调用的下一级函数。
  • 私有目录
    • 当前目录下建一个private子目录只能由当前目录下的函数调用。

2.4 程序调试

2.4.1 M文件错误的种类

  • 语法错误:发生在程序代码的解释过程中,一般由函数参数输入类型有误或矩阵运算阶数不符等引起
  • 执行错误:发生在程序运行过程中,出现溢出或死循环等,与程序本身有关。一般应在设计程序过程中避免出现NaN、Inf或空矩阵等。

2.4.2 警告

  • 一般不影响程序的执行,提示某些不合理或过时的用法,一般可以不予理会,要关闭警告可输入命令warning off。

2.5 加快MATLAB程序执行速度

  • 尽量避免使用循环
    • 尽量用向量化的运算来代替循环操作(如:平方和用向量内积代替)
    • 多重循环,将执行次数少循环的放在外环
  • 大型矩阵的预先定维
  • 优先考虑内在函数(built-in function)
  • 采用有效的算法
  • 应用Mex技术(在matlab中使用C/C++)