基础

注释

%我是注释

帮助

help 函数名或命令名

清理窗口信息的命令

  • clc:清除命令窗口内的内容,即只清扫屏幕,但不清除内存中已存在的变量
  • clf:擦除 Matlab 的当前图形窗口中的图形
  • clear:清除内存中的指定变量或函数
  • clear all:清除内存中所有的变量和函数

已预定义的常量

  • eps :计算机的最小整数
  • pi :圆周率 \(pi\)
  • infInf:无穷大 \(∞\)
  • NaN :不定量
  • ij :虚数单位,但可以重新被定义为别的变量(如果没有赋值就直接使用,则默认为是虚数单位)

数组

一维数组

  • X = A :step :B

当没有指定step时,系统默认 step=1

  • 生成4个数,起始为1,末尾为2的等差数列
1
2
3
4
5
>> linspace(1,2,4)

ans =

1.0000 1.3333 1.6667 2.0000
  • x=logspace(a, b, n)

功能:logspace(a, b, n)生成一个(1xn)数组,数据的第一个元素值为a,最后一个元素为b,n是总采样点数。需要注意的是,此时产生的数组元素在10^a 到10^b上并不是均匀分布的,而形成一个对数曲线。

二维数组

1
2
3
4
5
6
7
>> [1 2 3; 4 5 6; 7 8 9]

ans =

1 2 3
4 5 6
7 8 9

三维数组

xxx

多维数组操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>> a = [1 2 3];
>> b = [4 5 6];

>> [a,b]
>>
ans =

1 2 3 4 5 6

>> [a;b]

ans =

1 2 3
4 5 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> A = [1 2; 3 4];
>> B = [5 6; 7 8];
>> [A, B]

ans =

1 2 5 6
3 4 7 8

>> [A;B]

ans =

1 2
3 4
5 6
7 8

cat()

用来联结数组

C = cat(dim, A, B) 按dim来联结A和B两个数组。

C = cat(dim, A1, A2, A3, ...) 按dim联结所有输入的数组。

a=cat(3,A,B) 左括号后的3表示构造出的矩阵维数;在新的矩阵中第1、2维就是A和B这两个矩阵的行数和列数,第3维是A和B这两个矩阵的矩阵个数,即为2

cat(2, A, B) 相当于 [A, B];

at(1, A, B) 相当于 [A; B].

size()

按照行-列-页的顺序,返回数组A每一维上的大小

1
2
3
4
5
6
7
8
9
10
11
>> a

a =

1 2 3

>> size(a)

ans =

1 3

ndims()

1
2
3
4
5
6
7
8
9
10
11
>> a

a =

1 2 3

>> ndims(a)

ans =

2

返回数组A具有的维度值

whos

返回当前工作区的各个变量的详细信息

1
2
3
4
5
6
7
8
>> whos
Name Size Bytes Class Attributes

A 2x2 32 double
B 2x2 32 double
a 1x3 24 double
ans 1x1 8 double
b 1x3 24 double

线性代数

常量矩阵命令

zeros(m,n):产生一个 \(m\times n\) 零矩阵
zeros(n):产生一个 \(n\) 阶零方阵
ones(m,n):产生一个所有元素为 \(1\) 的 \(m\times n\) 矩阵
ones(n):产生一个所有元素为 \(1\) 的 \(n\) 阶方阵
eye(n):产生一个 \(n\) 阶单位阵

运算符

Matlab 最擅长于线性代数中关于矩阵的各种运算,常用的运算符有:

  1. + :两矩阵和的运算
  2. - :两矩阵减的运算
  3. * :两矩阵乘积的运算
  4. .* :两矩阵各相应位置元素乘积的运算
  5. ./ :两矩阵各相应位置元素相除的运算
  6. A' :矩阵 A 的转置
  7. inv(A) :矩阵 A 的逆阵
  8. eig(A) :矩阵 A 的特征值
  9. [V,D]=eig(A):给出由矩阵 A 的特征向量组成的矩阵 V(以列向量排列)和由对应的特征值组成的对角阵 D(特征值为对角线元素)
  10. sum(A,1):对矩阵 A 的每列元素求和,给出求和值的行向量
  11. sum(A,2):对矩阵 A 的每行元素求和,给出求和值的列向量
  12. sum(X):对向量 X=(x1,x2,…….,xn)的分量求和
  13. cumsum(X):给出向量 X 的累加和
  14. length(X):给出向量 X 的维数,即其分量的个数
  15. norm(X):给出向量 X 的范数,即向量的长度

字符串

字符串连接

方法一:[str1,str2]

1
2
3
4
5
6
7
8
9
str1 =  'save ';

str2 = '.mat uData';

>> [str1,str2]

ans =

'save .mat uData'

结构

if

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
格式1
if 条件
语句组
end

格式2
if 条件
语句组1
else
语句组2
end

格式3
if 条件1
语句组1
elseif 条件2
语句组2
.....
elseif 条件m
语句组m
else
语句组m+1
end

switch

1
2
3
4
5
6
7
8
9
10
11
switch 表达式
case1
语句组1
case2
语句组2
....
case 值m
语句组m
otherwise %其他值
语句组m+1
end

for

表达式1 的值是循环变量的初值,表达式2 的值是循环变量的增量,表达式3 的值为循环变量的终值。如果增量为1 时,表达式2 可以省略不写

1
2
3
for 循环变量=表达式1:表达式2:表达式3
循环体语句
end

while

1
2
3
while 条件
循环体语句
end

画图

二维

plot(x, y)

例:在区间 [0,2π] 内绘制正弦曲线 y=sinx 的语句

1
2
3
x=0:pi/100:2*pi;
y=sin(x);
plot(x,y)

指定线型与颜色

plot(x,y1,'cs1',x,y2,'cs2',....)

它以公共向量 x 为 X 轴,分别以 y1,y2,… 为 Y 轴在同一幅图内绘制出多条曲线,同时可以指定它们的不同颜色与不同线性。

每条曲线的颜色和线型用字符串 ‘cs’ 来指定,其中 c 表示颜色,而 s 表示线型,线型可以是线或者标记,线和标记可同时使用。它们的位置次序可随意,如缺省的话,则默认颜色为蓝色、线型为实型。它们的符号如下所示。

函数

添加图例

使用 hold on

1
2
3
4
>> plot(x,y);
>> hold on
>> plot(x,y2);
>> plot(x,y3);

正态分布

1
2
Y = normpdf(X,mu,sigma)   %pdf mu 均值 sigma 方差
p = normcdf(x,mu,sigma) %cdf

泊松分布

1
2
3
4
5
R = poissrnd(LAMBDA,m,n)  % 产生以Lambda为平均值的m行n列Poisson 随机数

Y = poisspdf(X,lambda) % 由x产生mean是lambda的泊松分布的pdf

Y = poisscdf(X,lambda) % 由x产生mean是lambda的泊松分布的cdf

文件操作

读取文件

指定文件格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
%%% read images
folderTest = '/Users/haoyu/data'; %%% test dataset
folderResultCur = '/Users/haoyu/results';

ext = {'*.jpg','*.png','*.bmp'};
filePaths = [];
for i = 1 : length(ext)
a = dir(fullfile(folderTest,ext{i}));
filePaths = cat(1,filePaths, dir(fullfile(folderTest,ext{i})));
end

for i = 1:length(filePaths)
[~,imageName,ext] = fileparts(filePaths(i).name);
%%% read current image
file_path = fullfile(folderTest,filePaths(i).name);
I = imread(file_path);

imwrite(I, fullfile(folderResultCur,[imageName,'_1','.bmp']));
end

写入文件

保存单行、单列数据

1
2
3
4
5
fid=fopen(['d:\','A.txt'],'w');%写入文件路径
for jj=1:length(A)
fprintf(fid,'%.4f\r\n',A(jj)); %按列输出,若要按行输出:fprintf(fid,'%.4\t',A(jj));
end
fclose(fid);

保存一个矩阵

1
2
3
4
5
6
7
8
9
fid=fopen(['d:\','B.txt'],'w');%写入文件路径
[r,c]=size(B); % 得到矩阵的行数和列数
for i=1:r
for j=1:c
fprintf(fid,'%f\t',B(i,j));
end
fprintf(fid,'\r\n');
end
fclose(fid);

手动保存到指定位置,指定文件名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'choose a File');  %% pathname获取保存数据路径, filename获取保存数据名称
if ~FileName
return;
else
str= [PathName,FileName];
end
fid = fopen(char(str), 'w'); % 要想存的文件名是自己输入的,这个地方就得这样写
[r,c]=size(C); % 得到矩阵的行数和列数,C为要保持的矩阵
for i=1:r
for j=1:c
fprintf(fid,'%f\t',C(i,j));
end
fprintf(fid,'\r\n');
end
fclose(fid);