我的Matlab入门笔记

我的Matlab入门笔记

By Paneer

关于注释

1
2
%% 这是一行注释(双百分号)
% 这也是一行注释(单百分号)

关于变量命名

% 变量名不能超过63个字符

1
datou = 'keai' % ' '之间为字符串,定义datou为keai

% 定义矩阵A 空格或逗号隔开,分号换行

1
2
3
4
5
6
7
A=[1 2 3;3 3 3;4 1 1] 

A =

1 2 3
3 3 3
4 1 1

% 对矩阵A转置

1
2
3
4
5
6
7
B=A'

B =

1 3 4
2 3 1
3 3 1

% 将矩阵A按列拉长

1
2
3
4
5
6
7
8
9
10
11
12
13
C=A(:)

C =

1
3
4
2
3
1
3
3
1

% 对矩阵A求逆

1
2
3
4
5
6
7
D=inv(A)

D =

-0.0000 -0.1111 0.3333
-1.0000 1.2222 -0.6667
1.0000 -0.7778 0.3333

% 矩阵之间的乘法运算

1
2
3
4
5
6
7
A*D

ans =

1.0000 0 -0.0000
0 1.0000 0
0 0.0000 1.0000

随机数部分

% 生成伪随机数,分布在(0-1)之间

1
rand

% 生成m行n列的均匀分布的伪随机数

1
rand(m.n)

% 生成指定精度的均匀分布的伪随机数,参数还可为’single’

1
rand(m,n,'double') 

% 利用指定的 RandStream(随机种子)生成伪随机数

1
rand(RandStream,m,n) 

% 生成标准正态分布的伪随机数(均值为0,方差为1)

1
randn % 主要语法同 rand

% 生成均匀分布的伪随机数

1
randi(n) 

% 在开区间(1,iMax)生成均匀分布的伪随机数

1
r=randi(iMax)

% 在开区间(1,iMax)生成m*n型随机矩阵

1
r=randi(iMax,m,n)

% 在开区间(iMin,iMax)生成m*n型随机矩阵

1
r=randi([iMin,iMax],m,n)

元胞数组

%% 元胞数组:Matlab中特有的一种数据类型,数组的一种。
% 其内部元素可以是属于不同的数据类型。

1
A = cell(1,6)

在Matlab中输出为

 A =

 1×6 cell 数组

 列 1 至 3

 {0×0 double}    {0×0 double}    {0×0 double}

 列 4 至 6

 {0×0 double}    {0×0 double}    {0×0 double}

% matlab索引从1开始,此处为第二个元胞为3x3型

1
A{2} = eye(3)

% 输出为
A =

 1×6 cell 数组

 列 1 至 3

 {0×0 double}    {3×3 double}    {0×0 double}

 列 4 至 6

 {0×0 double}    {0×0 double}    {0×0 double}

%% 在Matlab中生成n阶幻方:

1
magic(n)

% 幻方:三阶幻方为例,指1-9九个数字组成3*3的矩阵使得该矩阵任意横竖斜方向三个数的和总是相同。

1
A{5} = magic(5)

% 输出为

 A =

 1×6 cell 数组

 列 1 至 3

 {0×0 double}    {3×3 double}    {0×0 double}

 列 4 至 6

 {0×0 double}    {5×5 double}    {0×0 double}

结构体

1
books = struct('name',{{'Machine Learning','Date Mining'}},'price',[30 40])

% 可以理解为python中的字典

1
2
3
books.name %调用books中name这一属性
books.name(1) %调用books中第一个name的cell
books.name{1} %调用books中第一个name的字符串

Matlab矩阵操作

1.矩阵的定义与构造

% 构造一个一行六列的矩阵

 A = [1 2 3 4 5 6]

% 构造1-9区间内步长为3的矩阵即:B = 1 4 7

 B = 1:3:9

%将B矩阵重复,化为3行1列的分块矩阵C,每一块都是矩阵B

 C = repmat(B,3,1)

% 生成一个2行4列的每个值都是1的矩阵

 D = ones(2,4)

2.矩阵的四则运算

1
2
3
4
5
6
7
8
A = [1 2 3 4; 5 6 7 8]
B = [1 1 2 2; 2 2 1 1]
C = A + B
D = A - B
E = A * B' % A矩阵与B矩阵的转置相乘
F = A .* B % A矩阵与B矩阵所对应的项相乘
G = A / B % G * B = A 即 G = A * inv(B) (B的逆)
H = A ./ B % A矩阵与B的逆矩阵对应项相乘

3.矩阵的下标

1
2
3
4
5
A = magic(5) % 生成5阶幻方
B = A(2,3) % 将矩阵A的第二列第三行元素赋值给B
C = A(3,:) % 将矩阵A的第三行赋值给C
D = A(:,4) % 将矩阵A的第四列赋值给D
[m, n] = find(A > 20) % 寻找A中大于20的值,并将其行数列数分别赋值给 m、n

程序结构

循环结构

for循环:步长默认为1,可省略。其余符合数学逻辑即可

% for 循环变量 = 初值:步长:终值
     % 执行语句 1
     % ……
     % 执行语句 n
% end

示例:

1
2
3
4
sum = 0;
for n = 1:5
sum = sum + n^2
end % 输出得sum为55

% for循环求i!的累加,i=1:5

1
2
3
4
5
6
7
8
sum = 0;
for i =1:5;
p=1;
for j = 1:i;
p = p*j;
end
sum =sum+p;
end

while循环 当表达式为真时进入循环,为假时执行end之后的语句

 % while 条件表达式
 %    执行语句1
 %    ...
 %    执行语句n
 % end

% 求1+2+3+4+5+…+10的和

1
2
3
4
5
6
s = 0;
n = 1;
while n<=10
s = s+n;
n = n+1;
end

分支结构

1. if…end 结构

% 该结构只有一个判断语句,当条件表达式为真时,执行该语句;反之执行end后的语句

 % if 条件表达式
 %    ...
 %   语句体
 %    ...
 % end

% 满足条件时显示”成立”

1
2
3
4
5
a = 100;
b = 10;
if a>b
'成立'
end % 输出ans = 成立

2.if…else…end结构

% 若表达式为真,则执行语句体1,否则执行语句体2

 % if 表达式
 %       语句体1
 %   else
 %       语句体2
 % end

3.switch…case…end结构

% switch后表达式的值或字符串与case后的值或字符串进行比较,与哪一个case相同则执行哪一个case下的语句体。

% 若所有的case的值都不相同,则执行otherwise后的语句体。

 % switch 表达式(数值or字符串)
 %       case 数值或字符串1
 %           语句体1;
 %       case 数值或字符串2
 %           语句体2;
 %       ...
 %       otherwise
 %           语句体n;
 % end

二维平面绘图

1
2
3
4
5
6
7
8
x = 0:0.01:2*pi;
y = sin(x);
figure % 建立一个幕布,有时可省略
plot(x,y) % 画图命令
title('y=sin(x)') % 图像标题
xlabel('x') % x轴标题
ylabel('sin(x)') % y轴标题
xlim([0 2*pi]) % Matlab默认会另x范围增大,加上此语句可避免

% 颜色选项参数

绿
r g b y m c w k

% 线性选项参数

实线 虚线 冒号线 点画线
- -。
——————————— ———– ··· ··· ··· -·-·-·-·-·-

% 数据标记点选项参数

十字号 圆圈 星号 叉号 正方形 菱形 上三角 下三角 左三角
· + o * x s d ^ v <

% 例子

1
2
3
4
5
6
7
8
9
10
11
x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
set(get(AX(1),'ylabel'),'string','Slow Decay') % y1轴命名
set(get(AX(2),'ylabel'),'string','Fast Decay') % y2轴命名
xlabel('Time(\musec)') % X轴命名
title('Multiple Decay Rates')
set(H1,'linestyle','--') % 设置y1的线型
set(H2,'linestyle','-.') % 设置y2的线型

三维平面绘图

1
2
3
4
5
6
7
8
t = 0:pi/50:10*pi
plot3(sin(t),cos(t),t) % 三维绘图使用plot3,二维为plot
xlabel('sin(t)')
ylabel('cos(t)')
zlabel('t')
% hold on % 在同一张幕布下保持住,继续添加其他图像,hold off则是不保存清除幕布进行绘制
grid on % 在绘制的幕布中添加网格线
axis square % 将幕布的坐标变为一个正方形,美化图像

%% 图形窗口分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
x = linspace(0,2*pi,60) % 定义一个x
subplot(2,2,1) % 将画布分为两行两列四块,在第1块上绘图
plot(x,sin(x)-1);
title('sin(x)-1');
axis([0,2*pi,-2,0]) % 规定范围
subplot(2,1,2) % 将画布分为两行一列两块,在第2块上绘图
plot(x,cos(x)+1);
title('cos(x)+1');
axis([0,2*pi,0,2])
subplot(4,4,3) % 将画布分为四行四列16块,在第3块上绘图
plot(x,tan(x));
title('tan(x)');
axis([0,2*pi,-40,40])
subplot(4,4,8) % 将画布分为四行四列16块,在第8块上绘图
plot(x,cot(x));
title('cot(x)');
axis([0,2*pi,-35,35])

%% 完结撒花

1
2
3
4
% peaks & mesh
[x,y,z] = peaks(40)
mesh(x,y,z)
grid

参考视频地址:
https://www.bilibili.com/video/BV13D4y1Q7RS?p=15&share_source=copy_web