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 编程基本原则
- 养成在主程序开头用
clear指令清楚变量的习惯,以消除工作区中其他变量对程序运行的影响.但注意在子程序中不要使用clear. - 参数值要集中放在程序的开头部分,以便维护.
- 程序尽量模块化,也就是采用主程序调用子程序的方法,将所有子程序合并在一起来执行全部的操作.
- 充分利用debugger来进行程序的调试(设置断点、单步执行、连续执行),并利用其他工具箱或用户图形界面(GUI)的设计技巧,将设计结果集成在一起
- 合理添加注释
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 ...; endfor循环语句
for x=array(1:n) commands; end
- 最简单的if-else-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++)