变量
变量赋值
a = 3 % 输出a = 3 a = 4; % 添加了“;”不会输出, %为注释符号
变量打印
a = pi % 输出a = 3.1416 disp(a) % 输出 3.1416 % disp为打印函数 disp(sprintf('2 decimals: %0.2f',a)) % 输出2 decimals: 3.14 format long a % a = 3.141592653589793 format short a % a = 3.1416
基本运算符
% +、-、*、/、^ 5+6 % ans = 11 3-2 % ans = 1 5*8 % ans = 40 1/2 %ans=0.50000 2^6 % ans = 64 % 等于、不等于 1 == 2 % ans = 0 1 ~= 2 % ans = 1 %与、或、异或 1&&0 % ans = 0 1||0 % ans = 1 xor(1, 0) % ans = 1
矩阵
创建矩阵
>> A = [1 2; 3 4; 5 6] %2X3矩阵," ;"的作用是矩阵换行 A = 1 2 3 4 5 6 >> V = 1:0.1:2 % 创建从1到2,间隔0.1的的行向量 V = Columns 1 through 8: 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 Columns 9 through 11: 1.8000 1.9000 2.0000 >> V = 1:6 %创建1-6的行向量 V = 1 2 3 4 5 6 >> ones(3) %创建全1的3x3矩阵,ones(行,列),如果只有一个就代表行列相同 ans = 1 1 1 1 1 1 1 1 1 >> ones(2,3) %创建全1的2x3矩阵 ans = 1 1 1 1 1 1 >> c = 2*ones(2,3) c = 2 2 2 2 2 2 >> zeros(3) ans = 0 0 0 0 0 0 0 0 0 >> zeros(2,3) ans = 0 0 0 0 0 0 >> rand(5) %随机生成元素在[0, 1]之间的矩阵 ans = 0.759038 0.356755 0.759957 0.765575 0.124526 0.478474 0.748071 0.348113 0.140318 0.735799 0.548857 0.919435 0.022937 0.766650 0.658001 0.282714 0.682380 0.333799 0.646410 0.045325 0.657188 0.273806 0.433459 0.812108 0.349532 >> rand(2,3) ans = 0.81680 0.65483 0.26669 0.23447 0.64541 0.73921 >> randn(3) %随机生成元素服从正态分布(高斯分布) ans = -1.772650 0.571952 2.728738 0.096214 0.996951 -1.083561 0.359641 -0.571054 -1.124300 >> randn(2,3) ans = 0.242999 0.326736 0.372448 -0.785784 -0.086886 -0.571480
>> eye(5) % 单位矩阵 ans = Diagonal Matrix 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 >> w = -6 + sqrt(10)*(randn(1,10000)); % sqrt开根号 >> hist(w) % 生成直方图 >> hist(w, 50) % 50代表生成50个直方柱形
help eye帮助函数
移动数据
>> A = [1 2; 3 4; 5 6] % 创建矩阵 A = 1 2 3 4 5 6 >> size(A) %返回矩阵的大小,返回结果也是一个矩阵 ans = 3 2 >> size(A, 1) % 返回矩阵的行数 ans = 3 >> size(A, 2) % 返回矩阵的列数 ans = 2 >> length(A) % 返回矩阵最大维度数 ans = 3
Pwd % 显示octave的当前所在目录 cd url %改变当前工作目录 ls % 显示当前目录下的路径和文件
>> load my.txt % 导入文件:load path 或者 load(‘path’) path文件路径 >> my % 文件名 my = 1 2 3 4 5 6 7 >> load('my.txt') >> my my = 1 2 3 4 5 6 7 >>
>> who % who查看octave当前工作空间存储的所有变量 Variables in the current scope: A ans my >> whos % whos查看octave当前工作空间存储的所有变量的详细信息 Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== A 3x2 48 double ans 1x17 17 char my 7x1 56 double Total is 30 elements using 121 bytes
clear 变量名称 %删除变量
clear %删除所有变量
% 把数据存入文件: save 文件名字 变量名称; >> A A = 1 2 3 4 5 6 >> save test.mat A; %二进制存储 >> save test.txt A -ascii; % 存储为ascii编码
取矩阵元素
>> A A = 1 2 3 4 5 6 >> A(1,1) ans = 1 >> A(2,:) %’:’表示取该行或者该列的所有元素 ans = 3 4 >> A(:,2) ans = 2 4 6 >> A([1 3], :) %取第1、3行的所有列元素 ans = 1 2 5 6
修改矩阵的值
>> A(:,2)=[10;11;12] %重新赋值A的第二列元素 A = 1 10 3 11 5 12 >> A = [A, [100;101;102]] %在A的后面再加一列元素 A = 1 10 100 3 11 101 5 12 102 >> A(:) %把A的所有元素放入一个列向量 ans = 1 3 5 10 11 12 100 101 102 >>
A = 1 2 3 4 5 6 >> B B = 11 12 13 14 15 16 >> C = [A B] %把AB矩阵左右结合为C矩阵 C = 1 2 11 12 3 4 13 14 5 6 15 16 >> D = [B A] D = 11 12 1 2 13 14 3 4 15 16 5 6 >> D = [B, A] D = 11 12 1 2 13 14 3 4 15 16 5 6 >> F = [A;B] %把AB矩阵上下结合为D矩阵 F = 1 2 3 4 5 6 11 12 13 14 15 16
矩阵运算
>> A A = 1 2 3 4 5 6 >> B B = 11 12 13 14 15 16 >> C = [1 1; 2 2] C = 1 1 2 2 >> A*C ans = 5 5 11 11 17 17 >> A.*B % A中对应元素乘B中对于元素,“.” 通常表示矩阵元素运算 ans = 11 24 39 56 75 96 >> A.^2 % A中元素各自的平方 ans = 1 4 9 16 25 36 >> 1./A % A中元素各自的倒数 ans = 1.00000 0.50000 0.33333 0.25000 0.20000 0.16667 >> log(A) % 对A中元素求对数 ans = 0.00000 0.69315 1.09861 1.38629 1.60944 1.79176 >> exp(A) % 以e为底A中元素为指数的幂运算 ans = 2.7183 7.3891 20.0855 54.5982 148.4132 403.4288 >> abs(A) % 对A中元素求绝对值 ans = 1 2 3 4 5 6 >> -A ans = -1 -2 -3 -4 -5 -6 >> abs(-A) ans = 1 2 3 4 5 6
>> A + 1 % 对A中的元素加1 ans = 2 3 4 5 6 7 >> A + ones(length(A), 2) ans = 2 3 4 5 6 7 >> A' %A的转置矩阵 ans = 1 3 5 2 4 6 >> val = max(A) %求A中的每一列的 最大元素 val = 5 6 >> [val, ind] = max(A) % 返回值和索引 val = 5 6 ind = 3 3 >> A < 3 % A中元素与3比较正确返回1,错误返回0 ans = 1 1 0 0 0 0 >> find(A < 3) %返回A中元素与3比较正确的索引 ans = 1 4 >> A A = 1 2 3 4 5 6 >> [r,c]=find(A<3) r = 1 1 c = 1 2
>> A = magic(3) %生成任意行、列和每个对角线相加都相等的矩阵 A = 8 1 6 3 5 7 4 9 2 >> sum(A) %每一列和 ans = 15 15 15 >> prod(A) %每一列乘积 ans = 96 45 84 >> floor(A) % 向下取整 ans = 8 1 6 3 5 7 4 9 2 >> ceil(A) % 向上取整 ans = 8 1 6 3 5 7 4 9 2 >> max(A) % 每一列的最大值 ans = 8 9 7 >> max(A, [], 1) % 1表示列 ans = 8 9 7 >> max(A, [], 2) % 2表示行 ans = 8 7 9 >> flipud(A) % 表示使矩阵垂直翻转 ans = 4 9 2 3 5 7 8 1 6 >> pinv(A) % A的逆矩阵 ans = 0.147222 -0.144444 0.063889 -0.061111 0.022222 0.105556 -0.019444 0.188889 -0.102778
数据可视化
>> t = [0:0.01:0.98]; %创建步长为0.01的矩阵 >> y1 = sin(2*pi*4*t); >> plot(t, y1) % 画图 >> y2 = cos(2*pi*4*t); >> plot(t, y2); % 两个图画一个页面上 >> plot(t, y1); >> hold on; >> plot(t, y2) >> plot(t, y2, 'r'); % 设置线颜色 >> xlabel('time'); % 设置x轴标签 >> ylabel('valve'); % 设置y轴标签 >> legend('sin','cos'); % 设置图形标签 >> print -dpng 'test.png'; % 保存图片为png
子图
>> t = [0:0.01:0.98]; >> y1 = sin(2*pi*4*t); >> y2 = cos(2*pi*4*t); >> subplot(1,2,1); % 前两个参数表示把图分成 1X2格, 最后一个参数是指定当前工作使用哪一格 >> plot(t, y1); >> subplot(1,2,2); % 当前工作使用第二格 >> plot(t, y2); >> axis([0.5 1 -1 1]); % 修改当前工作的图的坐标轴刻度,前两个表示x轴范围,后两个表示y轴范围 >> clf; % 清除图形
>> A = magic(5) A = 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 >> imagesc(A); % 可视化矩阵 >> imagesc(A), colorbar, colormap gray; % 修改颜色 灰度
close关闭图形窗口
控制语句
if...end;
if... else...end;
if...elseif..else...end;
>> a = 1; >> if a >0, disp(a); end; 1
>>a = 1; >> if a==1, disp('a=1');else disp('a~=1');end; a=1
>> a = 1; >> if a>1, disp('a>1'); elseif a<1, disp('a<1'); else disp('a==1'); end; a==1
for...end;
>> v = zeros(10,1); >> for i = 1:10, v(i)=2^i;end; >> v v = 2 4 8 16 32 64 128 256 512 1024
while...end;
>> i = 1; >> v = zeros(10,1) v = 0 0 0 0 0 0 0 0 0 0 >> while i <= 5, v(i) = 100; i = i + 1; end; >> v v = 100 100 100 100 100 0 0 0 0 0 >>
自定义函数:创建一个.m文件,文件名称和函数名称一样,文件内容如下:
function 返回值1,... = 函数名称(参数1,...)
函数主体;
% squareThisNumber.m文件 function y = squareThisNumber(x) y=x^2;
>> pwd % 查看当前工作目录 ans = /Users/huangjunyi >> cd Desktop; % 切换到函数文件目录 >> squareThisNumber(5) % 直接使用函数 ans = 25
返回多个值
% squareAndCubeThisNumber.m文件 function [y1, y2] = squareAndCubeThisNumber(x) y1 = x^2; y2 = x^3;
>> [y1, y2] = squareAndCubeThisNumber(5) y1 = 25 y2 = 125
计算损失函数
J(θ1, θ0) = ∑(θ1x+θ0-y)2/m
% costFunctionJ.m文件 function J = costFunctionJ(X, Y, theta) % X输入变量矩阵 % y标签 % 样本数量 m = size(X, 1); % 计算预测值 predictions = X*theta; % 计算平方差 sqrErrors = (predictions - Y).^2; %均方误差 MSE J = 1/(2*m)*sum(sqrErrors); endfunction
>> X = [1 1; 1 2; 1 3]; %特征 >> Y = [1;2;3]; % 标签 >> theta = [0;1]; % 权重 >> costFunctionJ(X, Y, theta) ans = 0
矢量化
多因素线性回归假设方程:h(x) = θ0x0+θ1x1+..+θnxn
未矢量化octave代码如下:
Prediction = 0.0 for j=1:n+1, % octave矩阵下标从1开始 prediction = prediction + theta(j)*x(j) end;
矢量化假设方程:h(x)=θTX
矢量化代码如下:
Prediction = theta’ * X;
梯度下降函数(没理解需要重看)