MATLAB学习笔记
基础知识向量及矩阵[重点]常见函数
特殊函数数学规划类程序涉及结构
设置函数使用m文件设置函数
参考笔记来源:清风数学建模
基础知识
m文件,即matlab程序的脚本,程序代码写在脚本文件里面。可以用记事本打开进行编辑和打开。命令行窗口用来执行命令,编辑器用来编辑代码,也可以使用编辑器直接运行代码,但是是一次性运行全部的代码。推荐两者配合,编辑器复制粘贴到命令行运行加上分号表示不显示,不加默认显示结果。注释使用 % ,使用编辑器中“注释”可以多行注释(ctrl + r)/ 取消注释(ctrl+t)。 所有的代码必须是英文字符。clear命令清除工作区变量,clc清除命令行窗口文本,两者不相互影响,可以连起来一起使用。clear;clc 这条命令可以作初始化的作用。
向量及矩阵[重点]
向量表示
1. a = [1 2 3] % 不加或者使用逗号表示行向量分割
2. a = [1;2;3] % 分号表示分割列向量
矩阵表示 = 向量表示 + 分号, 在matlab中矩阵是按照连续的列向量存储的,也就是说一个
3
×
4
3 \times 4
3×4 的矩阵第(2,1)个元素其实是按照列向量排序的第 5个元素矩阵拼接
3. new = [a, b] / [a;b] % 将同行或同列的矩阵拼接成新的矩阵
4. new = repmat(M, 2, 2) % 将M矩阵看成一个整体,形成一个2行2列的以M矩阵为元素的新矩阵
5. [r,c] = size(A) % 返回行数(r)和列数(c)
6. ones(x, y) % 形成一个x行y列的矩阵,用1填充
ones(size(A)) % 形成一个和A同样大小的矩阵
ones(n) % 形成一个n阶方阵
7. zeros... % 同ones
矩阵选择元素
8. M(2,1) % 选择第二行第一个元素,等价于 M(5)
9. M(:, 1) % ":"表示全选,这条语句表示选择第一列元素,选择某一行也是同理
10. M(2:1:5,:) % 选取第2到第5行的全部元素,默认为1可以省略不写
11. M(2:end,:) % 选取第2行到最后一行的全部元素
12. M(:) % 选择全部元素(以列向量表示),一般在求和的时候用的比较多(sum(M(:))
13. ind = find(A) % 它可以用来返回向量或者矩阵中不为0的元素的位置索引, 一个只有0和1的矩阵
ind = find(A,2) % 返回前两个不为0的元素位置索引
14. A(i, j) = M % 将A矩阵的(i,j)位置赋值为M
A(i) = M % 如果A是一个行或者列向量,直接用数字表示编号
矩阵的运算
15. C = A*B % 两个矩阵的乘积
16. C = A/B % 两个矩阵的除法(等于乘第二个矩阵的逆矩阵)
17. C = inv(B) % B的逆矩阵
18. C = A .* B % 两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”
19. C = A./B % 同上
20. [r, c] = eig(M) % 求矩阵M的全部特征值,构成对角阵r,并求M的特征向量构成c的列向量。(c的每一列都是r中与之相同列的特征值的特征向量)
21. %%矩阵的大小判断,共有4种运算符:大于> ;小于< ;等于 ==;不等于~=
X > 0 % 返回一个和A大小相同的矩阵,只有满足>0的元素位置才为1其余为0
X == 4 % 同上,只有元素为4的位置为1,其余为0
22. max(x) - x % 这里x是一个矩阵,4虽然是一个常数,但是matlab会自动扩展成与矩阵同样大小的由max(x)组成的矩阵,与x做减法运算
% 不仅是减法,对于乘除加都适用,但是这只适用于一个数自动扩展,而不适用于两个向量或者矩阵之间(矩阵之间用.-)
常见函数
1. disp("hello,world!") % 显示字符串、向量、矩阵等。
2. ans = [str1, str2, str3...] % 字符串连接
3. num2str(c) % 将数字变成字符串
disp(["该数字是:",num2str(c)]) % 拼接+展示字符串,记得中括号
4. A = input("enter A:") % 将输入的值赋给A, 可以是任意值,数字、矩阵、字符串皆可
5. s = sum(A) % 对矩阵求和(默认是按列求和),等价于 sum(A, 1), 得到一个行向量
s = sum(A, 2), 按行求和,得到一个行向量
6. A = 1:2:10 % 生成一个等差数列,从1到10公差为2
7. A = max(X) % 返回X矩阵中每列的最大元素,形成一个行向量
A = max(X(:)) % 返回X中最大的元素值
8. [m ,n] = size(A) % 返回A的行和列值, 如果是n = size(A)那么n就是一个行向量
9. A = sort(A) % 对A的每列进行按照升序排序,相当于sort(A, 1)
% 如果对列进行排序,相当于sort(A, 2)
% sort(A, 'descend', 2) 是按照行降序排序
[A, index] = sort(A, 'descend') % A是排好序的矩阵,index是每个元素在排好序后矩阵每列的位置 , 一般index用在向量比较多
10. x = abs(x) % 取x的绝对值
11. log(x) % 取x的对数
12. -10 + rand(n, 1) * 20 % 生成-10到10之间的随机数。rand(n,1)返回n行1列的0~1之间的随机数。
13. x = reshapre(x, 6, 2) % 将原来12*1的x矩阵转变为6*2的矩阵。
14. n=cumsum(x0) % 累加函数
举一个例子 这是TOPSIS中的一个函数,如何求出 Di+ 呢?
% 假设已知正向化矩阵为Z
[n, m] = size(Z);
D_P = (sum((repmat(max(Z),n,1)-Z).^2, 2)).^0.5;
特殊函数
数学规划类
线性规划 2.非线性规划
3.整数规划
程序涉及结构
顺序结构判断结构
if CR < 0.1
disp("yes!");
if CR>0.1
disp("prefect!");
end
else
disp("no~");
end
循环结构
S = []
for i = 1:n
S = [S;x] % 不断用x扩充S矩阵,扩充到n行
end
设置函数
使用m文件设置函数
单独新开一个m文件设置函数,然后在main函数中使用该函数。举一个例子来说明
function[x, y] = f(x1, x2)
M = max(abs(x1 - x2)); % 记得后面的分号
x = M + 1;
y = M - 1;
end
%% 参数表
% x, y为返回参数
% x1,x2为输入函数的参数
% f为函数名称
%% 函数作用
% 输入x1, x2 返回 x, y
函数之间可以嵌套,比如在 f1.m(函数)文件中可以使用 f2 函数