Matlab速查手册

Basic Operations

elementary operations

  1. 5+6 % 11
  2. 3-2 % 1
  3. 5*8 % 40
  4. 1/2 % 0.5000
  5. 2^6 % 64
  6. 1 == 2 % logical 0
  7. 1 ~= 2 % logical 1
  8. 1 && 0 % logical 0
  9. 1 || 0 % logical 1
  10. xor(1, 0) % logical 1

variable assignment

  1. a = 3; %semicolon suppresses output 分号抑制输出
  2. b = 'hi,xiao' %字符串
  3. c = 3 >= 1; % c=logical 1

Displaying them

  1. a = pi;
  2. disp(a) % 3.1416默认四位小数
  3. disp(sprintf('%0.2f', a)) % 类似C语言的风格,控制输出的小数位数 % 3.14
  4. format long % 15位小数
  5. a % 3.141592653589793
  6. format short % 4位小数
  7. a % 3.1416

vectors and matrices

直接定义vectors/matrices

  1. % 每一个分号隔开各一行,空格隔开同一行的元素
  2. A = [1 2;3 4;5 6]
  3. A =
  4. 1 2
  5. 3 4
  6. 5 6
  7. v = [1 2 3]
  8. v =
  9. 1 2 3
  10. v = [1;2;3]
  11. v =
  12. 1
  13. 2
  14. 3

特殊vectors/matrices

  1. % 元素全为1的矩阵/向量
  2. W = ones(3, 4)
  3. W =
  4. 1 1 1 1
  5. 1 1 1 1
  6. 1 1 1 1
  7. % 元素全为0的矩阵/向量
  8. O = zeros(3, 4)
  9. O =
  10. 0 0 0 0
  11. 0 0 0 0
  12. 0 0 0 0
  13. % 单位矩阵/向量
  14. I = eye(4)
  15. I =
  16. 1 0 0 0
  17. 0 1 0 0
  18. 0 0 1 0
  19. 0 0 0 1
  20. % 元素值0~1随机
  21. W = rand(2, 3)
  22. W =
  23. 0.8147 0.1270 0.6324
  24. 0.9058 0.9134 0.0975
  25. % 元素值由标准正态分布取出的随机数组成
  26. W = randn(4)
  27. W =
  28. -0.4336 -1.3499 0.7147 1.4090
  29. 0.3426 3.0349 -0.2050 1.4172
  30. 3.5784 0.7254 -0.1241 0.6715
  31. 2.7694 -0.0631 1.4897 -1.2075
  32. W = randn(2,3)
  33. W =
  34. 0.7172 0.4889 0.7269
  35. 1.6302 1.0347 -0.3034
  36. W = -5 + sqrt(10)*(randn(1,10000)) % 变为mean = -6,var = 10的正态分布随机数
  37. hist(W, 5000) % 5000表示条数 default 10bins

2.3 Matlab速查手册 - 图1

  1. % 1 n^2 的整数构成并且总行数和总列数相等的 n×n 矩阵
  2. % n 的阶数必须是大于或等于 3 的标量才能创建有效的幻方矩阵
  3. M = magic(5)
  4. M =
  5. 17 24 1 8 15
  6. 23 5 7 14 16
  7. 4 6 13 20 22
  8. 10 12 19 21 3
  9. 11 18 25 2 9

Moving Data Around(加载,移除数据)

dimensions

  1. A = [1 3 4;5 6 0;6 6 6;8 1 4]
  2. sz = size(A) % 返回一个1*2的矩阵:[行数 列数]
  3. sz =
  4. 4 3
  5. size(A, 1) % 行数
  6. ans =
  7. 4
  8. size(A, 2) % 列数
  9. ans =
  10. 3
  11. length(A) % size of longest dimension
  12. ans =
  13. 4

indexing

(A:B:C),A表示起始index,B表示步长,C表示结尾index

省略A默认为begin处,省略B默认为1,省略C默认为end处

  1. A(3,2) % A的第3行第2列的元素
  2. ans =
  3. 6
  4. A(2,:) % 1*3的矩阵,包含A的第2行所有元素, :前后不加数字表示all
  5. ans =
  6. 5 6 0
  7. A(:,3) % 4*1的矩阵,包含A的第3列所有元素, 同理
  8. ans =
  9. 4
  10. 0
  11. 6
  12. 4
  13. A(:) % A的所有元素放入一个列向量
  14. ans =
  15. 1
  16. 5
  17. 6
  18. 8
  19. 3
  20. 6
  21. 6
  22. 1
  23. 4
  24. 0
  25. 6
  26. 4
  27. % 改变矩阵
  28. A(:,2) = [4;1;0];
  29. A =
  30. 1 4 4
  31. 5 1 0
  32. 6 0 6
  33. 8 0 4
  34. % 扩展矩阵
  35. A = [A,[100;101;103;999]]
  36. A =
  37. 1 4 4 100
  38. 5 1 0 101
  39. 6 0 6 103
  40. 8 0 4 999

Putting data together

  1. A = [1 2;3 4;5 6];
  2. B = [11 12;13 14;5 6]; % AB的维度相同
  3. C = [A B] % A在左B在右,合并在一起
  4. C =
  5. 1 2 11 12
  6. 3 4 13 14
  7. 5 6 5 6
  8. C = [A;B] % A在上B在下,合并在一起
  9. C =
  10. 1 2
  11. 3 4
  12. 5 6
  13. 11 12
  14. 13 14
  15. 5 6

Loading data

  1. pwd % 显示当前路径
  2. cd 'C:\Users\ang\Octave files' % 改变当前路径
  3. ls % 显示当前路径下的文件和目录
  4. load q1y.dat % 等价于load('q1y.dat')加载数据
  5. load q1x.dat
  6. who % 列出工作区的变量
  7. whos % 列出工作区的变量和它们的详细属性
  8. clear q1y % 删除工作区指定变量
  9. v = q1x(1:10); % q1x的前10个元素
  10. save hello.mat v; % 保存变量v为文件hello.mat(一种压缩存储数据的格式,不能直接查看内容)
  11. save hello.txt v -ascii; % 也可以保存为方便查看的.txt格式

Computing on Data

  1. % 初始化一些数据
  2. A = [1 2;3 4;5 6] % 3 * 2
  3. B = [11 12;13 14;15 16] % 3 * 2
  4. C = [1 1;2 2] % 2 * 2
  5. v = [1;2;3] % 3 * 1
  6. D = magic(5)

Matrix Operations

  1. % 矩阵相乘
  2. A * C % 得到3 * 2的矩阵
  3. ans =
  4. 5 5
  5. 11 11
  6. 17 17
  7. % 对应位置的元素相乘,前提是相乘矩阵的维度相同
  8. A .* B % 得到3 * 2的矩阵
  9. ans =
  10. 11 24
  11. 39 56
  12. 75 96
  13. % 下面同理,带‘.’都是对每个元素进行操作
  14. A .^ 3
  15. ans =
  16. 1 8
  17. 27 64
  18. 125 216
  19. 1 ./ v
  20. ans =
  21. 1.0000
  22. 0.5000
  23. 0.3333
  24. % 下面这样的函数都是对每个元素进行操作
  25. log(v) % 自然对数
  26. exp(v) % 指数
  27. abs(v) % 绝对值
  28. % 实数与矩阵相乘
  29. -v % == -1*v
  30. ans =
  31. -1
  32. -2
  33. -3
  34. % 矩阵与矩阵相加,矩阵与实数相加
  35. v + ones(length(v),1) %== v + 1
  36. ans =
  37. 2
  38. 3
  39. 4
  40. % 矩阵的转置
  41. A'
  42. ans =
  43. 1 3 5
  44. 2 4 6
  45. % 矩阵的求逆
  46. D =
  47. 17 24 1 8 15
  48. 23 5 7 14 16
  49. 4 6 13 20 22
  50. 10 12 19 21 3
  51. 11 18 25 2 9
  52. inv(D)
  53. ans =
  54. -0.0049 0.0512 -0.0354 0.0012 0.0034
  55. 0.0431 -0.0373 -0.0046 0.0127 0.0015
  56. -0.0303 0.0031 0.0031 0.0031 0.0364
  57. 0.0047 -0.0065 0.0108 0.0435 -0.0370
  58. 0.0028 0.0050 0.0415 -0.0450 0.0111
  59. pinv(D) % 伪逆,如果是方阵则=inv(A'*A)*A'

一些有用的函数

  1. % max(min 同理)
  2. a = [1 15 2 0.5]
  3. max(a) % 取出向量的最大元素,行向量和列向量都是这样
  4. ans = 15
  5. A = magic(4)
  6. max(A) % 取出矩阵每列的最大值,此处的结果就是一个1*4的行向量
  7. ans = [16 14 15 13]
  8. max(rand(3),rand(3)) % 取两个矩阵对应位置的较大者组成一个新矩阵
  9. ans =
  10. 0.8331 0.5232 0.8492
  11. 0.1552 0.5528 0.4206
  12. 0.2614 0.7008 0.8110
  13. max(A,[],1) % 各列(维度为1)最大值
  14. ans = [16 14 15 13]
  15. max(A,[],2) % 各行(纬度为2)最大值
  16. ans =
  17. 16
  18. 11
  19. 12
  20. 15
  21. A = magic(5)
  22. % >大于号(<小于号同理)
  23. A > 10
  24. ans =
  25. 5×5 logical 数组
  26. 1 1 0 0 1
  27. 1 0 0 1 1
  28. 0 0 1 1 1
  29. 0 1 1 1 0
  30. 1 1 1 0 0
  31. % find(条件) 寻找符合条件元素的位置,返回一个列向量罗列位置
  32. find(A > 20)
  33. ans =
  34. 2
  35. 6
  36. 15
  37. 19
  38. 23
  39. [r,c] = find(A > 20) % 得到对应的行(5*1的列向量-r)坐标-对应的列(5*1的列向量-c)坐标
  40. r =
  41. 2
  42. 1
  43. 5
  44. 4
  45. 3
  46. c =
  47. 1
  48. 2
  49. 3
  50. 4
  51. 5
  52. % sum()对矩阵,求各列之和返回一个行向量;对向量,求所有元素之和
  53. sum(a)
  54. ans = 18.5000
  55. sum(A)
  56. ans = [65 65 65 65 65]
  57. % prod()对矩阵,求每列各个元素相乘的结果,返回一个行向量;对向量,求所有元素相乘的结果
  58. prod(a)
  59. ans = 15
  60. prod(A)
  61. ans = [172040 155520 43225 94080 142560]
  62. % floor()对每个元素去掉小数部分得到离它最近比它小的整数
  63. c = [0.9 9.1 0.4 9.8]
  64. floor(c)
  65. ans = [0 9 0 9]

Plotting Data

Plotting

  1. t = [0:0.01:0.98];
  2. y1 = sin(2*pi*4*t);
  3. plot(t,y1); % 参数是横坐标,纵坐标

2.3 Matlab速查手册 - 图2

  1. y2 = cos(2*pi*4*t);
  2. hold on; % 叠加多条曲线在一张图上,设定hold off则删除之前的曲线
  3. plot(t,y2,'r'); % 第三个参数用来设定颜色
  4. xlabel('time'); % x轴标签
  5. ylabel('value'); % y轴标签
  6. legend('sin','cos');% 图示
  7. title('my plot') % 图的标题

2.3 Matlab速查手册 - 图3

  1. print -dpng 'myPlot.png' % 保存图片以png格式
  2. close; % 关闭绘图窗口(可以选用close all关闭所有窗口)
  3. % 绘图窗口多开
  4. figure(1); plot(t,y1);
  5. figure(2); plot(t,y2);
  6. figure(2),clf; % 清空指定绘图窗口
  7. % 一个绘图窗口放多个图片
  8. figure(1);
  9. subplot(1,2,1); % 将绘图区分为1*2,即左右两部分,并指向第1部分
  10. plot(t,y1);
  11. subplot(1,2,2); % 指向第2部分
  12. plot(t,y2);

2.3 Matlab速查手册 - 图4

  1. axis([0.5 1 -1 1]); % 轴刻度范围,前两个数为x轴范围,后两个数为y轴范围

2.3 Matlab速查手册 - 图5

Display

  1. figure;
  2. imagesc(rand(15)), colorbar, colormap gray;

2.3 Matlab速查手册 - 图6

Control statements: for, while, if statements

  1. v = zeros(10, 1);
  2. for i=1:10
  3. v(i) = 2 ^ i;
  4. end;
  5. % 可以在循环中使用break,continue,和在C中的作用相同
  6. i = 1;
  7. while i <= 5,
  8. v(i) = 100;
  9. i = i + 1;
  10. end
  11. i = 1;
  12. while true,
  13. v(i) = 999;
  14. i = i + 1;
  15. if i == 6,
  16. break;
  17. end;
  18. end
  19. if v(1)==1,
  20. disp('The value is one!');
  21. elseif v(1)==2,
  22. disp('The value is two!');
  23. else
  24. disp('The value is not one or two!');
  25. end

Functions

  1. % 创建函数
  2. function y = squareThisNumber(x)
  3. y = x^2;
  4. % 创建返回多个值的函数
  5. function [y1, y2] = squareCubeThisNo(x)
  6. y1 = x^2
  7. y2 = x^3
  8. % 使用函数
  9. [a,b] = squareandCubeThisNo(x)

Vectorization(向量化)

example:

2.3 Matlab速查手册 - 图7%3D%5Csum%7Bj%3D0%7D%5E%7Bn%7D%20%5Ctheta%7Bj%7D%20x%7Bj%7D%3D%5Ctheta%5E%7BT%7D%20x%0A#card=math&code=h%7B%5Ctheta%7D%28x%29%3D%5Csum%7Bj%3D0%7D%5E%7Bn%7D%20%5Ctheta%7Bj%7D%20x_%7Bj%7D%3D%5Ctheta%5E%7BT%7D%20x%0A)

Unvectorized implementation

  1. prediction = 0.0;
  2. for j = 1 : n+1,
  3. prediction = prediction + theta(j) * x(j)
  4. end;

Vectorized implementation

  1. prediction = theta' * x;