目录
声明
笔者是2022级大一新生,刚接触过C语言课程,出于兴趣和社团活动需要想尝试上手自学MATLAB。此贴仅作为记录学习过程与结果之用,或供同为小白新手的初学者同好们参考。限于笔者水平,文中定有不妥和错误之处,恳请各位批评指正。
学习资料来源:https://www.bilibili.com/video/BV1nG4y1C7JL?p=3&vd_source=6a53e08a63c5f91458f89f0bef4ff1ea
1 系统环境与设置
1.1 MATLAB的功能
- 计算
包括数值计算、矩阵计算、符号计算等 - 绘图
- 编程
- 工具箱(Toolbox)
功能性:扩展计算、建模仿真、文字处理等
学科性:信号处理、图像处理、金融计算、神经网络等
1.2 路径设置及相关命令
MATLAB运行时对语句的搜寻顺序是:变量→函数→当前目录的文件→搜索目录的文件
与文件路径相关的几个命令:
- 显示或设置搜索路径
path 显示所有的搜索路径
path(path,'文件路径') 添加新的搜索路径
- 查看当前的工作目录(Current Directory)
cd
- 显示或设置用户路径
userpath 显示用户路径
userpath('文件路径') 更改用户路径
- 保存路径更改
savepath
- 路径工具
pathtool 直观设置MATLAB的路径
- 清空命令窗口
clc
- 获取命令、函数的解释
help 命令或函数
2 数据操作及语法
2.1 变量和语句
- 变量的命名规则:
(1)与C语言相似,变量名应以字母开头,可以包括数字、字母下划线,并且区分大小写
(2)与C语言的不同之处是,MATLAB中的变量不需要进行声明或定义
合法的变量名:
A (√) arr_1 (√) x1 (√)
不合法的变量名:
5abc (×) _arr (×)
- MATLAB的语句(命令行窗口输入):
(1)回车表示语句结束,同时输出执行结果
(2)有分号则该语句只执行、不输出
(3)注释以“%”开头,注释一行
(4)“...”用于续行,若不用“...”续行而是直接回车换行,则语句会直接被执行
(5)赋值语句: 变量名 = 表达式
将“=”后表达式的结果赋值给“=”前的变量
若直接输入表达式,则其结果会赋值给默认变量“ans”
2.2 变量管理
- 查看变量
(1)工作区:可以直观地显示变量名、值、类型等信息
(2)使用相关命令:
who
显示所有的变量名称
whos
显示变量的详细信息
- 清除变量
clear 变量1 变量2 ...
清除确定的一个或几个变量
clear 或 clear all
清除所有的变量
- 保存变量
将当前的变量保存为一个.mat文件,方便下次直接使用
save 文件名 变量1 变量2 ... -appen -ascii
(1)若无“文件名”则默认保存为“matlab.mat”;
(2)若不输入“变量1 变量2 ...”则默认全部保存;
(3)“-append”用于在已有的.mat文件中追加续写,若无则写入时会覆盖原文件;
(4)“-ascii”用于生成无后缀文件,其中数字被保存为数值,字符被保存为ASCII码;
(5)“-append”与“-ascii”的位置不限(只要在save后即可)
- 加载变量
将先前保存过的.mat文件中的变量加载到当前工作区
(1)若.mat文件在当前目录(Current Directory)中:
load 文件名 或 load '文件名.mat'
(2)若.mat文件在其他目录:
load '文件目录'
2.3 数据输出格式控制
format 格式符
用于控制输出数据的格式,默认是short格式
格式符 | 输出格式 |
---|---|
short | 定点数输出,保留小数点后4位 |
long | 定点数输出,双精度保留小数点后15位,单精度保留7位 |
shorte | 浮点数输出,尾数保留小数点后4位 |
longe | 浮点数输出,尾数双精度保留小数点后15位,单精度保留7位 |
shortg | 在short/shorte中视情况选择最佳的输出方式 |
longg | 在long/longe中视情况选择最佳的输出方式 |
shorteng | 工程格式,阶数较shorte更高 |
longeng | 工程格式,阶数较longe更高 |
bank | 货币格式,保留小数点后两位 |
hex | 十六进制格式 |
rat | 以分数的形式输出 |
尽管不同格式显示的精度可能会不同,但数据的计算和储存不会受到影响。
2.4 数据类型
- 数值
直接赋值:变量名=数值 默认数值为double型
查看数值类型:
class(变量)
数值类型的转换:
uintx(变量) 将数值转化为x位无符号整型,x为8,16,32,64
double(变量) 将数值转化为双精度浮点型
- 字符(串)
无论是单字符还是字符串,都用单引号''
(1)将字符转化为ASCII码:
double(‘字符串’) 或 abs(‘字符串’)
(2)将ASCII码转化为字符:
char(数值)
(3)数值与字符的转换:
num2str(数值) 将数值转换为字符
str2num(‘字符’) 将字符转换为数值
(4)将字符串的内容作为语句执行:
eval(’字符串‘)
- 结构体(structure)
(1)结构体的创建:
方式一:函数命令创建
struct('成员1',表达式1,'成员2',表达式2,...)
该函数的返回值是一个结构,
其中表达式1的结果赋值给成员1、表达式2的结果复制给成员2,以此类推。
方式二:直接创建成员
结构名.成员名=表达式
(2)与结构相关的函数:
isstruct(变量) 判断是否为结构体,返回1或0
fieldnames(结构名) 显示结构中的所有成员名
isfield(结构名,'字符串') 判断字符串内容是否为该结构中的成员
rmfield(结构名,‘字符串’) 将字符串内容所代表的成员从该结构中移除
getfield(结构名,'字符串') 等价于 结构名.成员名
- 单元(cell)
{元素1,元素2,......}
将多个数据集合成一个变量
3 矩阵操作
3.1 MATLAB的数据形式
MATLAB中的各种数据实际上均以矩阵的形式存在,矩阵是MATLAB最基本的数据对象
1*1——标量
m*1、1*n——向量
m*n——矩阵
3.2 矩阵的建立
- 命令窗口直接输入矩阵:
矩阵名=[元素11,元素12,……,元素1n;元素21……元素2n;……;元素m1,元素m2,……,元素mn]
同一行不同元素用空格或“,”分隔,不同行用“;”分隔
- .m文件建立:
点击按钮,或使用edit命令启动脚本编辑器,可同时编辑多个矩阵
可保存为.m文件
在命令窗口中直接输入文件名称即可运行.m文件(当前目录需包含该.m文件)
3.3 矩阵的简单操作
- 引用矩阵元素
使用下标或序号来引用元素:
(1)矩阵名(行标,列标)
(2)矩阵名(序号)
元素序号与行列标的关系:
(r为序号,M为总行数,m为行标,n为列标)
以3*3矩阵为例,各元素的序号是:
1 4 7
2 5 8
3 6 9
- 获取元素的标号:
find(表达式)
只有一个返回值时,返回元素的序号
有两个返回值时,返回元素的行标和列标
符合条件的元素有多个时,会将所有的结果集合成列向量:
- 重排矩阵
(1)将矩阵按顺序重排为等元素数的另一矩阵
reshape(矩阵名,新矩阵行数,新矩阵列数)
(2)将矩阵转换为列向量
矩阵名(:)
- 部分矩阵的引用
(1)“:”表示该行或列的全部
(2)“m:n”表示“第m行(或列)到第n行(或列)”
可以用“end”来代表最后一行(或列)
(3)引用不连续的行或列:
矩阵名(向量1,向量2)
如下图,表示引用第2、4行和第1、2、4列交叉所得的部分
- 删除矩阵元素:将矩阵赋为空值
引用矩阵=[]
- 扩展(重复)矩阵
repmat(矩阵,行数,列数)
- 压缩矩阵
相同的元素只保留一个,其余重复的元素被去除,同时所有元素顺序重新排列
unique(矩阵名)
4 矩阵处理基础
4.1 特殊矩阵的建立
- 零矩阵、幺矩阵与单位矩阵:
矩阵中所有元素均为0;
矩阵中所有元素均为1;
主对角线元素为,其余元素全为0;
建立零矩阵:
zeros 无参数为1*1矩阵(标量)
zeros(n) 一个参数,为n阶方阵
zeros(m,n) 两个参数,为m*n矩阵zeros(a1,a2,...,ak) k个参数,为k维矩阵
建立幺矩阵:
ones() 用法同zeros()
建立单位矩阵:
eye() 用法同zeros()
- 行向量(1*n矩阵)
(1)冒号表达式
e1:e2:e3
(三个参数分别表示初始值、步长、终止值)
(2)linspace函数
linespace(e1,e2,n)
(三个参数分别表示初值、终值、元素数)
元素数省略时默认为100,元素大小平均分布
- 随机矩阵(参数用法与零矩阵的建立相同)
rand() 产生0~1的随机矩阵
randn() 产生均值为0、方差为1的标准正态分布的随机矩阵
改变随机矩阵的范围:
(1)产生范围为a~b的随机数:a+(b-a)*rand()
(2)产生均值为u、方差为s的正态分布随机数:u+sqrt(s)*randn()
求算均值的函数:
mean(行或列)
求算方差的函数:
std(行或列)
- 魔方矩阵
magic(阶数)
返回方阵,该方阵的行、列、对角线之和为定值,该定值为:
- Hilbert矩阵
magic(阶数)
返回方阵,该方阵的各元素满足:
- Toeplitz矩阵
toeplitz()
以第一个向量作列、第二个向量作行生成矩阵,矩阵中各元素满足:
4.2 矩阵的基本运算
- 加法、减法、数乘与矩阵乘积
+ - *
- 转置
矩阵名'
- 行列式
det(矩阵名)
- 逆矩阵
inv(矩阵名)
- 向量内积
(1)按定义计算
(2)用函数计算
dot(向量1,向量2)
4.3 线性方程组的求解
4.4 矩阵的相似化简
- Jordan标准型(相似对角化)
jordan(矩阵)
只有一个返回值时,返回矩阵的相似对角形
有两个返回值时,返回相似变换矩阵和相似对角形
- 矩阵的特征值
eig(矩阵)
只有一个返回值时,返回矩阵的特征值(集合成一个列向量)
有两个返回值时,返回由特征向量构成的矩阵和对角形,两者按列一一对应
4.5 向量和矩阵的范数
- 行、列向量范数的类型
范数类型 计算公式 参数 1-范数 1 2-范数 2 r-范数 r ∞-范数 inf f范数 —— ‘fro’ - 求向量或矩阵的范数
norm(矩阵,r) (r是参数,默认为2)
4.6 矩阵分析
- 函数矩阵
(1)建立未知量(用于符号运算)
syms 符号名
(2)建立函数
矩阵名=[函数表达式]
每个函数作为矩阵中的一个元素
(3)函数求导
diff(矩阵,k) k为求导阶数,默认为1
- 矩阵函数
(1)指数矩阵函数:
expm(矩阵)
(2)通用矩阵函数:
funm(矩阵,@函数)