MATLAB自学笔记
MATLAB,即Matrix Laboratory。但是因为我非常讨厌矩阵运算,所以不会很好去工。对此软件的学习将会浮于表面,不求精通。
入门
MAT文件
matlab的数据存储在.mat
文件中,使用load myDataFile
可以将文件myDataFile.mat
的数据加载到工作区,使用save myDataFile
可以将当前数据存储到myDataFile.mat
。在上述代码后添加指定变量名,可以只存储该变量。
脚本文件.m
不能以数字开头,否则无法运行。
特殊变量和常数
ans
上一个结果,不能被赋值
eps
浮点数精度,很小
i, j
虚数单位
inf
Inf
pi
π
NaN
空
设置显示格式
默认short(四位小数)
format long/rat/shortE
,15位小数/分数/科学计数法
其他常用指令
命令行清屏:clc
清空工作区:clear
或在空格后指定要清楚的变量
向上取整:round()
向下:floor()
打印输出:disp()
计时:tic
toc
,用在需要计时的程序段两端
换行:...
向量和矩阵
矩阵的创建
行向量用空格或逗号隔开;列向量用分号隔开。
x=[1 2 3]
x=[1,2,3]
y=[1;2;3]
a=[1 3-1 3;4,5,sqrt(36)]
要创建等间距的数值组,可用:
和linspace()
x=2:4 % x=[2,3,4]
x=1:2:9 % x=[1 3 5 7 9]
x='a':2:'f' % x='ace'
x=linspace(1,10,5) % x=[1,3.25,5.5,7.75,10]
矩阵的转置
x=x'
x=(1:2:5)' % x=[1;3;5]
特殊矩阵
zeros(3) % 3*3的零矩阵
ones(3,2) % 3*2的全1矩阵
eye(3) % 3*3的单位阵
magic(3) % 3*3的幻方矩阵
rand(3,2) % 3*2的随机矩阵,范围(0,1)
randn(3,2) % 3*2随机矩阵~N(0,1)(标准正态)
矩阵的索引
从1开始;
访问使用小括号;
小括号内的逗号表示行列,先行后列;中括号内的逗号和空格一样,表示不同元素的分隔;
单用冒号就是全部,两个数之间用冒号就是excel
例如:
A=[1,2,3;
4,5,6;
7,8,9]
A(2)=4
A(8)=6
A(3,2)=8
A([2,3 4])=[7 4 2]
A([1 3;1 3])=[1 7;1 7]
A([1 3],[1,3])=[1 3;7 9]
A(2,1:3)=[4,5,6]
A(2,2:end)=[5,6]
可以认为,一个数是零维的,带冒号的表达式是一维的,向量是一维的,小括号直辖的逗号能让两个维度相加。
矩阵的内部排序
与C语言不同,单独使用排序函数后,原矩阵不会改变。或者说,它是一个有返回值的函数。
A=[8 7 6 5;
11 12 13 14;
4 3 2 1]
sort(A)=[4 3 2 1
8 7 6 5
11 12 13 14] % 每列内部排序
sortrows(A)=[4 3 2 1
8 7 6 5
11 12 13 14] % 按第一列大小进行整行之间的排序
sort(A,2)=[5 6 7 8
11 12 13 14
1 2 3 4] % 每行内部排序
矩阵的一些统计量
max(A) % 每一列的最大值
min(A) % 每一列的最小值
max(max(A)) % 最大值(二维矩阵)
mean(A) % 每列平均值
sum(A) % 每列和
size(A) % [行数,列数]
length(A) % 行数和列数的较大值
find(A) % 所有非零元素的索引值,列向量
A(find(A)) % 所有非零元素,列向量
ndims(A) % 维度数,一个数也是2维
numel(A) % 有几个数
std(A) % 标准差
var(A) % 方差
ttest(A) % T-Test(不知道是什么)
矩阵的拼接
A=zeros(2)
B=ones(2)
C=1:4
D=[A,B;C] % 结果很显然
A=[1,2;3,4]
B=[5,6;7,8]
cat(1,A,B) % 按列拼接,[1 2;3 4;5 6;7 8]
cat(2,A,B) % 按行拼接,[1 2 5 6;3 4 7 8]
cat(3,A,B) % 按层拼接,第一层[1 2;3 4]第二层[5 6;7 8]
三维矩阵
创建:先创建骨架,再写每一层内容
A=zeros(6,2,6)
A[:,:,1]=[1,2;3,4;1,2;3,4;5,6;4,5]
% 后略
矩阵的算术运算
% 以下大写代表向量/矩阵,小写代表一个数
A+a % 每个数加a
A-a % 每个数减a
A+B % 对应数相加,减同理
A*B % 矩阵乘法
A.*B % 对应数相乘,得一个矩阵
A./B % 对应数相除,A除以B
A.\B % 对应数相除,B除以A
A.^B % 对应数乘方,B是指数
rem(A,b) % 每个数对b取余
矩阵的逻辑运算
除了!
改成~
之外,和C完全一致(仅限基本运算)
判断和循环
没有冒号,没有大括号,结束语句用分号
判断:if-elseif-else-end
循环:while 1=1 - end
,for variable=atart:increment:end - end
使用for循环时,提前创建好矩阵骨架比逐渐扩展要快
可视化
勾始可视化,不如origin