Matlab速查手册
Basic Operations
elementary operations
5+6 % 113-2 % 15*8 % 401/2 % 0.50002^6 % 641 == 2 % logical 01 ~= 2 % logical 11 && 0 % logical 01 || 0 % logical 1xor(1, 0) % logical 1
variable assignment
a = 3; %semicolon suppresses output 分号抑制输出b = 'hi,xiao' %字符串c = 3 >= 1; % c=logical 1
Displaying them
a = pi;disp(a) % 3.1416默认四位小数disp(sprintf('%0.2f', a)) % 类似C语言的风格,控制输出的小数位数 % 3.14format long % 15位小数a % 3.141592653589793format short % 4位小数a % 3.1416
vectors and matrices
直接定义vectors/matrices
% 每一个分号隔开各一行,空格隔开同一行的元素A = [1 2;3 4;5 6]A =1 23 45 6v = [1 2 3]v =1 2 3v = [1;2;3]v =123
特殊vectors/matrices
% 元素全为1的矩阵/向量W = ones(3, 4)W =1 1 1 11 1 1 11 1 1 1% 元素全为0的矩阵/向量O = zeros(3, 4)O =0 0 0 00 0 0 00 0 0 0% 单位矩阵/向量I = eye(4)I =1 0 0 00 1 0 00 0 1 00 0 0 1% 元素值0~1随机W = rand(2, 3)W =0.8147 0.1270 0.63240.9058 0.9134 0.0975% 元素值由标准正态分布取出的随机数组成W = randn(4)W =-0.4336 -1.3499 0.7147 1.40900.3426 3.0349 -0.2050 1.41723.5784 0.7254 -0.1241 0.67152.7694 -0.0631 1.4897 -1.2075W = randn(2,3)W =0.7172 0.4889 0.72691.6302 1.0347 -0.3034W = -5 + sqrt(10)*(randn(1,10000)) % 变为mean = -6,var = 10的正态分布随机数hist(W, 5000) % 5000表示条数 default 10bins

% 由 1 到 n^2 的整数构成并且总行数和总列数相等的 n×n 矩阵% n 的阶数必须是大于或等于 3 的标量才能创建有效的幻方矩阵M = magic(5)M =17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9
Moving Data Around(加载,移除数据)
dimensions
A = [1 3 4;5 6 0;6 6 6;8 1 4]sz = size(A) % 返回一个1*2的矩阵:[行数 列数]sz =4 3size(A, 1) % 行数ans =4size(A, 2) % 列数ans =3length(A) % size of longest dimensionans =4
indexing
(A:B:C),A表示起始index,B表示步长,C表示结尾index
省略A默认为begin处,省略B默认为1,省略C默认为end处
A(3,2) % A的第3行第2列的元素ans =6A(2,:) % 1*3的矩阵,包含A的第2行所有元素, :前后不加数字表示allans =5 6 0A(:,3) % 4*1的矩阵,包含A的第3列所有元素, 同理ans =4064A(:) % 将A的所有元素放入一个列向量ans =156836614064% 改变矩阵A(:,2) = [4;1;0];A =1 4 45 1 06 0 68 0 4% 扩展矩阵A = [A,[100;101;103;999]]A =1 4 4 1005 1 0 1016 0 6 1038 0 4 999
Putting data together
A = [1 2;3 4;5 6];B = [11 12;13 14;5 6]; % A和B的维度相同C = [A B] % A在左B在右,合并在一起C =1 2 11 123 4 13 145 6 5 6C = [A;B] % A在上B在下,合并在一起C =1 23 45 611 1213 145 6
Loading data
pwd % 显示当前路径cd 'C:\Users\ang\Octave files' % 改变当前路径ls % 显示当前路径下的文件和目录load q1y.dat % 等价于load('q1y.dat')加载数据load q1x.datwho % 列出工作区的变量whos % 列出工作区的变量和它们的详细属性clear q1y % 删除工作区指定变量v = q1x(1:10); % q1x的前10个元素save hello.mat v; % 保存变量v为文件hello.mat(一种压缩存储数据的格式,不能直接查看内容)save hello.txt v -ascii; % 也可以保存为方便查看的.txt格式
Computing on Data
% 初始化一些数据A = [1 2;3 4;5 6] % 3 * 2B = [11 12;13 14;15 16] % 3 * 2C = [1 1;2 2] % 2 * 2v = [1;2;3] % 3 * 1D = magic(5)
Matrix Operations
% 矩阵相乘A * C % 得到3 * 2的矩阵ans =5 511 1117 17% 对应位置的元素相乘,前提是相乘矩阵的维度相同A .* B % 得到3 * 2的矩阵ans =11 2439 5675 96% 下面同理,带‘.’都是对每个元素进行操作A .^ 3ans =1 827 64125 2161 ./ vans =1.00000.50000.3333% 下面这样的函数都是对每个元素进行操作log(v) % 自然对数exp(v) % 指数abs(v) % 绝对值% 实数与矩阵相乘-v % == -1*vans =-1-2-3% 矩阵与矩阵相加,矩阵与实数相加v + ones(length(v),1) %== v + 1ans =234% 矩阵的转置A'ans =1 3 52 4 6% 矩阵的求逆D =17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9inv(D)ans =-0.0049 0.0512 -0.0354 0.0012 0.00340.0431 -0.0373 -0.0046 0.0127 0.0015-0.0303 0.0031 0.0031 0.0031 0.03640.0047 -0.0065 0.0108 0.0435 -0.03700.0028 0.0050 0.0415 -0.0450 0.0111pinv(D) % 伪逆,如果是方阵则=inv(A'*A)*A'
一些有用的函数
% max(min 同理)a = [1 15 2 0.5]max(a) % 取出向量的最大元素,行向量和列向量都是这样ans = 15A = magic(4)max(A) % 取出矩阵每列的最大值,此处的结果就是一个1*4的行向量ans = [16 14 15 13]max(rand(3),rand(3)) % 取两个矩阵对应位置的较大者组成一个新矩阵ans =0.8331 0.5232 0.84920.1552 0.5528 0.42060.2614 0.7008 0.8110max(A,[],1) % 各列(维度为1)最大值ans = [16 14 15 13]max(A,[],2) % 各行(纬度为2)最大值ans =16111215A = magic(5)% >大于号(<小于号同理)A > 10ans =5×5 logical 数组1 1 0 0 11 0 0 1 10 0 1 1 10 1 1 1 01 1 1 0 0% find(条件) 寻找符合条件元素的位置,返回一个列向量罗列位置find(A > 20)ans =26151923[r,c] = find(A > 20) % 得到对应的行(5*1的列向量-r)坐标-对应的列(5*1的列向量-c)坐标r =21543c =12345% sum()对矩阵,求各列之和返回一个行向量;对向量,求所有元素之和sum(a)ans = 18.5000sum(A)ans = [65 65 65 65 65]% prod()对矩阵,求每列各个元素相乘的结果,返回一个行向量;对向量,求所有元素相乘的结果prod(a)ans = 15prod(A)ans = [172040 155520 43225 94080 142560]% floor()对每个元素去掉小数部分得到离它最近比它小的整数c = [0.9 9.1 0.4 9.8]floor(c)ans = [0 9 0 9]
Plotting Data
Plotting
t = [0:0.01:0.98];y1 = sin(2*pi*4*t);plot(t,y1); % 参数是横坐标,纵坐标

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

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

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

Display
figure;imagesc(rand(15)), colorbar, colormap gray;

Control statements: for, while, if statements
v = zeros(10, 1);for i=1:10v(i) = 2 ^ i;end;% 可以在循环中使用break,continue,和在C中的作用相同i = 1;while i <= 5,v(i) = 100;i = i + 1;endi = 1;while true,v(i) = 999;i = i + 1;if i == 6,break;end;endif v(1)==1,disp('The value is one!');elseif v(1)==2,disp('The value is two!');elsedisp('The value is not one or two!');end
Functions
% 创建函数function y = squareThisNumber(x)y = x^2;% 创建返回多个值的函数function [y1, y2] = squareCubeThisNo(x)y1 = x^2y2 = x^3% 使用函数[a,b] = squareandCubeThisNo(x)
Vectorization(向量化)
example:
%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
prediction = 0.0;for j = 1 : n+1,prediction = prediction + theta(j) * x(j)end;
Vectorized implementation
prediction = theta' * x;
