Matlab 基本用法整理

5 minute

基本语法方面

提取矩阵某行或某列

1A(:, [2 3]) 返回第 2 和第 3

获取随机数

1randi(100); % 1 到 100 之间的随机整数

初始化数组

1zeros(1, 30); % 1 行 30 列的全 0 数组

控制语句

 1for i = 0 : 100
 2    for j = 1 : 10
 3        if (...) 
 4          ...
 5        else 
 6          ...
 7        end
 8    end
 9    ...
10end

格式化输出

1fprintf("若选手选择改变,则成功次数为:%d, 成功率为:%f\n", count, count / SUM);

初等数学方面

求解方程组

注:solve 已经改版,不可传入字符串

实例:求解二元一次方程

1syms x y;
2s = x - 6 * y == 2;
3t = 5 * x + 4 * y == 3;
4result = solve(s, t);

求平均值,中值与标准差

1A = [12 13 7 18 16 21 9 10 2 18];
2A = sort(A);
3ave = mean(A);
4md = median(A);
5sigma = std(A);

解一阶导数方程

1syms x y;
2y = -0.0283 * x^2 + 0.7387 * x + 8.9191;
3my_x = solve(diff(y)); % diff(A)用于求导数
4my_y = subs(y, x, my_x); % 当x=my_x时求y的值
5fprintf("(%.2f, %.2f)\n", my_x, my_y);

基础绘图方面

绘制二维图

绘制二维图并设置x,y轴通过坐标原点

1x = [-2.5*pi:0.1:2.5*pi];
2y = [-1:0.1:1];
3y = cos(x);
4plot(x,y)
5ax = gca;
6ax.XAxisLocation = 'origin';
7ax.YAxisLocation = 'origin';

绘制三维图

使用 mesh 或 surf,subplot 进行分区

1[x, y] = meshgrid(-5:0.1:5, -3:0.1:3);
2z = x.^2 + y.^2;
3subplot(1,2,1)
4surf(x, y, z);
5subplot(1,2,2)
6mesh(x,y,z)

绘制等高线

1[x, y] = meshgrid(-5:0.1:5, -3:0.1:3);
2z = x.^2 + y.^2;%z就是高度
3contour(x,y,z)%绘制等高线
4subplot(2,2,1)
5[C,h] = contour(x,y,z, 'ShowText', 'on');
6% [M,c] = contour(___) 返回等高线矩阵和等高线对象 c。
7% 显示等高线图后,使用 c 设置属性。

高数和线代方面

泰勒级数第n项展开

1T = taylor(f, x, 'Order', n);

求极大线性无关组

 1A =
 2
 3     1     2     3     1
 4     0     1     2    -2
 5     2     1     0     8
 6
 7>> [R j] = rref(A)
 8
 9R =
10
11     1     0    -1     5
12     0     1     2    -2
13     0     0     0     0
14
15%主元所在列数
16j =
17
18     1     2
19
20% 即得到极大线性无关组
21
22>> M = A(:,[1,2])
23
24M =
25
26     1     2
27     0     1
28     2     1

求 Ax = 0 基础解系

 1A =
 2
 3     2    -2     1     3
 4     9    -5     2     8
 5
 6%求出最小有理数解
 7>> r = rank(A);
 8>> X = null(A, 'r')
 9
10X =
11
12    0.1250   -0.1250
13    0.6250    1.3750
14    1.0000         0
15         0    1.0000
16
17%求出规范正交基
18>> X = null(A)
19
20X =
21
22    0.1293   -0.1052
23    0.3860    0.7386
24    0.9041   -0.2092
25   -0.1302    0.6322

左除与右除

1右除正斜杠: A / B -> A * inv(B)
2左除反斜杠: A \ B -> inv(A) * B

求 Ax = b 特解

1A非方阵时,无法利用x = A^(-1) * b
2
3应该使用x = A \ b

计算特征多项式及特征值

 1>> A = [1 2 3; 2 1 3; 3 3 6]
 2
 3A =
 4
 5     1     2     3
 6     2     1     3
 7     3     3     6
 8
 9>> f = poly(A)
10
11f =
12
13    1.0000   -8.0000   -9.0000   -0.0000
14
15>> lamda = roots(f)
16
17lamda =
18
19    9.0000
20   -1.0000
21   -0.0000

计算特征值的简易方法

1>> eig(A)
2
3ans =
4
5   -1.0000
6   -0.0000
7    9.0000

计算特征值及对应特征向量

 1>> [Q, D] = eig(A)
 2
 3Q =
 4
 5    0.7071    0.5774    0.4082
 6   -0.7071    0.5774    0.4082
 7         0   -0.5774    0.8165
 8
 9
10D =
11
12   -1.0000         0         0
13         0   -0.0000         0
14         0         0    9.0000

使用命令 eig 把二次型标准化

1同上,由D可得标准型,由Q可得正交变换法。

使用命令 eig 判断二次型的正定性

1同上,观察D对角线元素正负性即可。

使用命令 orth 把向量组正交规范化

 1A =
 2
 3     2    -2     1     3
 4     9    -5     2     8
 5   
 6>> B = orth(A)
 7
 8B =
 9
10   -0.2982    0.9545
11   -0.9545   -0.2982
12
13%满足B * B' == eye(rank(A))
14
15>> B * B'
16
17ans =
18
19    1.0000    0.0000
20    0.0000    1.0000