5.1 基本操作

5.1.1 PS1(‘>>’);

5 Octave教程(Octave Tutorial) - 图1

5.1.2 看手册

5.2 移动数据

  1. pwd %显示Octave当前路径
  2. ls
  3. load featuresX.dat
  4. load priceY.dat')
  5. %也可以写成
  6. load('featuresX.dat')
  7. load('priceY.dat')
  8. who %显示Octave中所有的变量
  9. whos %显示Octave中所有的变量的详细信息
  10. clear featuresX %删除变量featuresX
  11. v = priceY(1:10) %将priceY的前10个元素赋值给v
  12. save hello.mat v;
  13. clear %清楚Octave中的所有变量
  14. save hello.txt v -ascii;%储存成text(ASCII)
  15. A = [1 2;3 4;5 6]
  16. A(3,2) %索引A中第3行第2列的元素
  17. A(2,:) %该行/列的所有元素
  18. A(:,1) %该行/列的所有元素
  19. A([1 3],:) %第13行的所有元素
  20. A(:,2)=[10;11;12] %对第2列元素进行赋值
  21. A = [A,[100;101;102]]; %在右侧增加一列元素
  22. A(:) %将所有元素放入一个单独的列向量
  23. C = [A B] %将两个矩阵放在左右两边赋值给C
  24. C = [A; B] %将两个矩阵放在上下两边赋值给C

5.3 计算数据

两个矩阵的乘积,比如说5 Octave教程(Octave Tutorial) - 图2,我只需键入AC,这是一个 3×2 矩阵乘以 2×2矩阵,得到这样一个3×2矩阵
也可以对每一个元素,做运算方法是做点乘运算A.
B,这么做Octave将矩阵5 Octave教程(Octave Tutorial) - 图3中的每一个元素与矩阵5 Octave教程(Octave Tutorial) - 图4中的对应元素相乘:A.B
一个矩阵5 Octave教程(Octave Tutorial) - 图5,这里我输入A.^2,这将对矩阵5 Octave教程(Octave Tutorial) - 图6中每一个元素平方。
我们设5 Octave教程(Octave Tutorial) - 图7[1; 2; 3] 是列向量,你也可以输入1./A,得到每一个元素的倒数,所以这样一来,就会分别算出 1/1 1/2 1/3
对数运算,也就是对每个元素进行求对数运算,log(A)
以e为底的对数运算,exp(A)
我还可以用abs(A)来对5 Octave教程(Octave Tutorial) - 图8的每一个元素求绝对值
A+1也就等于把5 Octave教程(Octave Tutorial) - 图9中的每一个元素都加上
矩阵5 Octave教程(Octave Tutorial) - 图10如果你想要求它的转置,那么方法是用A’
A=[1 15 2 0.5],这是一个1行4列矩阵,val=max(A),这将返回矩阵5 Octave教程(Octave Tutorial) - 图11中的最大值15。还可以写 [val, ind] =max(a),这将返回5 Octave教程(Octave Tutorial) - 图12矩阵中的最大值存入val,以及该值对应的索引,元素15对应的索引值为2,存入ind,所以 ind =2。特别注意一下,如果你用命令 max(A),5 Octave教程(Octave Tutorial) - 图13是一个矩阵的话,这样做就是对每一列求最大值。
我们还是用这个例子,这个5 Octave教程(Octave Tutorial) - 图14矩阵A=[1 15 2 0.5],如果输入A<3,这将进行逐元素的运算,所以元素小于3的返回1,否则返回0。
如果我写 find(A<3),这将告诉我![](https://cdn.nlark.com/yuque/__latex/7fc56270e7a70fa81a5935b72eacbe29.svg#card=math&code=A&id=G5XnV)中的哪些元素是小于3的,并返回索引
A = magic(3),magic函数将返回一个矩阵,称为魔方阵或幻方 (magic squares),它们具有以下这样的数学性质:它们所有的行和列和对角线加起来都等于相同的值。
[r,c] = find(A>=7),这将找出所有5 Octave教程(Octave Tutorial) - 图15矩阵中大于等于7的元素,r和c分别表示行和列,第一行第一列的元素大于等于7,第三行第二列的元素大于等于7,第二行第三列的元素大于等于7。
键入 sum(a),就把 a 中所有元素加起来了。
键入 prod(a),prod 意思是product(乘积),它将返回所有元素的乘积。
floor(a) 是向下四舍五入,因此对于5 Octave教程(Octave Tutorial) - 图16中的元素0.5将被下舍入变成0。
ceil(a),表示向上取整,所以0.5将上舍入变为最接近的整数,也就是1。
max(rand(3),rand(3)),结果是返回两个3×3随机矩阵中逐元素相比较,取最大值所构成的矩阵。
max(A,[],1),这将得到每一列的最大值,这里的1表示取A矩阵第一个维度的最大值。max(A,[],2),这将得到每一行的最大值,这里的2表示取A矩阵第二个维度的最大值。特别注意一下,如果你用命令 max(A),默认对每一列求最大值。
取整个矩阵中的最大元素 max(max(A)),也可以用max(A(:)),这样做就是把5 Octave教程(Octave Tutorial) - 图17当做一个向量,并返回5 Octave教程(Octave Tutorial) - 图18向量中的最大值。
eye(9),生成9×9的单位矩阵
flipud(A),纵向反转矩阵5 Octave教程(Octave Tutorial) - 图19
pinv(A),伪逆矩阵
A
pinv(A)可以尝试运算一下,回得到近似的单位矩阵

5.4 数据绘制

  1. plot(x,y,'r')
  2. hold on
  3. xlable('time')
  4. ylable('value')
  5. legend('sin','cos')
  6. title('my plot')
  7. cd ' c:\users\ang\Desktop'; print -dpng 'myPlot.png'
  8. help plot
  9. close %关闭图像
  10. figure(1);plot(t,y1);
  11. figure(2);plot(t,y2);
  12. subplot(1,2,1); %1×2的格子,现在使用第一个
  13. plot(t,y1);
  14. subplot(1,2,2);
  15. plot(t,y2);
  16. axis([0.5 1 -1 1])
  17. help axis
  18. clf; %清除图像
  19. A = magic(5) %幻方矩阵
  20. imagesc(A)
  21. imagesc(A), colorbar, colormap gray;
  22. imagesc(magic(15)), colorbar, colormap gray;
  23. a=1,b=2,c=3 %可以用,连接多条语句,并打印出变量的值,这与;连接有什么区别?

5.5 控制语句和函数

5.5.1 控制语句for,while,if语句

5 Octave教程(Octave Tutorial) - 图20
5 Octave教程(Octave Tutorial) - 图21
5 Octave教程(Octave Tutorial) - 图22
5 Octave教程(Octave Tutorial) - 图23
5 Octave教程(Octave Tutorial) - 图24
最后,提醒一件事:如果你需要退出 Octave,你可以键入exit命令然后回车就会退出 Octave,或者命令quit也可以。

5.5.2 函数 (functions)

在调用一个编写好的函数之前,要添加路径。例如在桌面上,那么可以cd ‘C:\Users\ang\desktop’添加路径,也可以直接添加路径addpath(‘C:\Users\ang\desktop’)
Octave还有一个其他许多编程语言都没有的概念,那就是它可以允许你定义一个函数,使得返回值是多个值或多个参数

5.6 向量化

是简化算法的重要方式,运行速度更快。 实现的方式越简单,代码出现问题的有可能性也就越小。
举例:这是一个常见的线性回归假设函数:5 Octave教程(Octave Tutorial) - 图25
未向量化的实现方式: 向量化后:
5 Octave教程(Octave Tutorial) - 图265 Octave教程(Octave Tutorial) - 图27

尝试使用向量化将下式一步实现:
5 Octave教程(Octave Tutorial) - 图28