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 3 4;5 6 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 - endfor variable=atart:increment:end - end

使用for循环时,提前创建好矩阵骨架比逐渐扩展要快

可视化

勾始可视化,不如origin

0%