Matlab 快速入门
因为书太厚了 做一个简单版的 希望实习能够有帮到 持续更新
1. 常用运算符
- 常用的运算符
加减:+ 和 - :含义比较直观- 标量和标量作用得到标量
标量和向量作用,对向量中每一维也生效
向量和向量作用,必须维度一致
向量和矩阵作用,对应的维度必须一致- 如果是列向量,则矩阵第i行每个元素加上向量第i行的数
- 如果是行向量,则矩阵第j列每个元素加上向量第j列的数
- 乘和幂:* 和 ^ 标量和矩阵乘法
- 点乘(数组乘法运算符): .* 和 .^ 矩阵对应元素的相乘
- 矩阵左除: \
矩阵右除: / - 矩阵生成:[] 我的理解是把包括里面的一个整体定义为一个矩阵
常用于函数返回很多值时 [output1, output2] = func(input1, input2, input3);
也用于创建矩阵 M = [1, 2; 3, 4];- 逗号或空格:分隔不同元素
- 分号:分隔不同的行
- 下标运算是() 用于取矩阵里的一部分,可能取出来的是数、向量或矩阵
- 取数:Matlab中A(3,5) 类似于C++里的A[3][5]
- 取向量:M(:, 1) 取矩阵M的第一列
- 取矩阵:M(a:b, c:d) 取矩阵M的子矩阵
- 花式取矩阵
A(1:10) 前10行的第一列组成列向量
A([1, 3], : ) 第一行和第三行的元素组成子矩阵
A(:, 2) 第二列
A(2: end, :) 取矩阵第二行及其之后组成子矩阵
- 转置:’
- 标量和标量作用得到标量
2. 常用的控制逻辑
高中数学告诉我们,程序一共三大控制逻辑:顺序执行,条件执行和循环。
条件执行:
1) If语句1
2
3
4
5
6
7if <加一个条件 score >= 90>
<sth happen>
elseif <score >= 60>
<sth happen>
else
<sth happen>
end
2) Switch 语句,不推荐,和if elseif 是等价的
3) While循环
1 | while (<condition>) |
4) For 循环1
2
3for i = 1:20 % 从1到20,以1递增
<cycle body>
end
其他用法:for i =1:
break退出这个循环
continue跳过本次循环
3. 常用的函数
运算部分:
1) find
找向量中符合条件的标号 find(V < 3)
- 找矩阵 [r, c] = find(A < 3)
2) linspace
3) max/min
- 向量最大值 [val, ind] = max(V) 对矩阵 返回最大值的一行
max(V, [], 1) 每列最大值
max(V, [], 2)每行最大值
4) size(A)
- 如果A是3行2列矩阵,返回[3 2]
size(A, 1) 返回 3
5) sort
6) sum
- 列求和sum(A, 1)
prod
- 求积
7) eye
ones(2, 3) 生成2×3的矩阵,每个元素都是1
zeros
8) rand(1, 3) 生成1×3的矩阵,元素服从标准高斯分布N(0, 1)
randn(1, 3)
9) det
10) inv/pinv
11) floor(A) / ceil(A):取整
其他部分:
1) fprintf/disp
- 格式化输出
绘图部分:
命令 | 作用/目的 |
---|---|
axis | 人工选择坐标轴尺寸 |
plot | 生成XY图 |
打印或绘图到文件 | |
title | 加一行顶部的title |
xlabel | 将文本标签添加到x轴 |
ylabel | 将文本标签添加到y轴 |
hold on | 保持当前图形 |
refresh | 重新绘制当前图形窗口 |
subplot | 在子窗口中创建图,比如左边一幅右边一幅那种 |
4. 骚气的向量化操作
作用:为了充分利用CPU性能,快速得到结果,一般避免for循环,采用向量化。
1) 不用for循环生成行向量?
- A = 1:0.1:2 中间是步长 省略则为1
2) 矩阵和向量的拼合
- 追加一列A = [A, [1; 2; 3]]
拼合矩阵C = [A B] C = [A; B] 两种拼接方法
从向量变到矩阵
reshape(向量V(a:b), n, m) 对向量中ab段重新划分为n*m矩阵
从矩阵变到向量 M(:)
3) 不用for得到向量V所有元素的平方和?
$$V’V$$
5. Notes
a. 句末有分号和没分号的区别?
- 不管加不加分号,操作都会执行(比如一个赋值a=1,则执行后a被赋值),但加引号会阻止执行的结果显示在控制台上。
比如执行上一句,会默认返回 a = 1。对于大部分非赋值语句,会返回 ANS = XXX
b. M(:) 是什么
- 如果M是一个矩阵,这将生成一个列向量,每个元素占一行。小技巧。
c. 对变量进行操作
- 快速查看我用了哪些变量了:用who或whos函数
删除变量: clear a
d. 怎么改当前的工作目录
- cd “
”
加引号的目的:万一目录名包含空格,如果不加引号,会引起歧义
打名字的时候善用tab键:打前两三个字符,按tab,可能就自动补全了
e. ‘和.’的区别
- 两个都是转置,对实数向量/矩阵作用一样。区别是’是共轭转置,虚部变符号; .’是真的转置,对虚部无影响