Matlab 基本用法整理
基本语法方面
提取矩阵某行或某列
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