Matlab快速入门(一)

Matlab 快速入门

因为书太厚了 做一个简单版的 希望实习能够有帮到 持续更新

1. 常用运算符

  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
7
if <加一个条件 score >= 90>
<sth happen>
elseif <score >= 60>
<sth happen>
else
<sth happen>
end

2)    Switch 语句,不推荐,和if elseif 是等价的

3)    While循环
1
2
3
while (<condition>)
<cycle body>
End

4) For 循环

1
2
3
for i = 1:20 % 从1到20,以1递增
<cycle body>
end

其他用法:for i =1::20 %从1到20,以step递增
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图
print 打印或绘图到文件
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. ‘和.’的区别

  • 两个都是转置,对实数向量/矩阵作用一样。区别是’是共轭转置,虚部变符号; .’是真的转置,对虚部无影响
---以上---