octave之基础
1. v = [1:0.1:2] : 表示从1到2 步长为0.1
v = [1:6] :表示[1 2 3 4 5 6]
2. C = ones(2, 3) : 生成2×3的全1矩阵
C = 2 * ones(2, 3) : 生成2×3的全2矩阵 类似的用法还有zeros()
3. rand(a, b) : 随机生成 a*b的矩阵 生成的数值全部介于0-1之间
rand(3,3) :生成3×3的矩阵 -----》符合高斯分布
4. hist()用于绘制直方图
eg:hist(rand(3,3))
5. eye(n); :生成n阶单位矩阵
6. help name 用于查找对应帮助信息
eg:help eye;
A为矩阵
7. size(A); :返回矩阵A的大小
eg:
A =
1 2
1 3
1 1
>> size(A)
ans =
3 2
8. size(A, 1); :返回第一维度的大小 结果 3
size(A,2); :返回第二维度的大小 结果 2
9.length(A); :对于矩阵则返回最大维度的大小 向量则返回其长度
10. 读取数据文件:
load featureX.dat 或 load('featureX.dat ')
使用 who 可以显示 octave当前的变量
使用 whos 可以更详细地显示 octave当前的变量
clear featureX :表示删除featureX变量
只输入clear 会清楚当前所有变量
11. 只提取 文件部分元素
V = featureX(1:10); :将前10个元素赋给v
怎样将保存至硬盘呢?
12. save hello.mat V; ; 表示 将变量V的内容保存至 hello.mat文件
注意 当使用load读取文件后 仍可以使用V变量 不个人感觉 这种意义大 长时间未使用 不一定会记得变量
以易读的方式保存
13. save hello.txt V -ascii : 表示保存为txt文件 相应的压缩比会小很多
14. A(2,:) : 代表矩阵第二行的所有元素 注意是有逗号的
15. A(,:2) :代表矩阵第二列的所有元素
16. A([1,3].:) :代表第1,3行的所有元素
17. A = [A, [100; 101; 102]] : 在A的左侧加上一列元素
18 A( : ); : 表示把A中的所有元素转换成列向量
>> A
A =
1 2
1 3
1 1
>> A(:)
ans =
1
1
1
2
3
1
19. A , B 均为矩阵
A =
1 2
3 4
B =
5 6
7 8
>> C = [A, B] = [A B]
结果:
C =
1 2 5 6
3 4 7 8
octave之计算数据
A = [1 2 B = [11 12 C = [ 1 1
3 4 13 14 2 2]
5 6] 15 16]
. 表示取矩阵中每个元素
1. 矩阵乘法: A*B
2. A.*B :表示A中的元素乘以B中对应的元素。
=[11 24;39 56; 75 96]
3. A.^2 :表示对A中每个元素求平方。
=[1 4;9 16;25 36]
4. 1./V :对V中每个元素取倒数
V = [1; 2; 3] 1./V = [1;1/2; 1/3]
5. log(V) : 对矩阵中的每个元素求对数
6.exp(V) :以e为底的指数运算
7.abs(V) :求绝对值
8. -V : 等价于-1×V
9. ones(长度,1) : 表示长度指定的全1列向量
V + ones(length(V), 1) :表示V中每个元素+1
ones(M, N) : 表示返回一个M×N的全1矩阵
注意: length(V) 若V为向量则表示该向量的长度,如果V为矩阵则返回最大维度。
10. A' : 表示矩阵(向量)A的转置。
11. a = [1 15 2 0.5]
max[a] = 15 [结果]
[val, ind] = max(a) 结果: val = 15 ind = 2[下标]
注意: 如果对矩阵使用 则默认会得到每一列的最大值。
12. a < 3 : a = [1 15 2 0.5] 实际上是对a中的每个元素进行对比
返回结果 : [ 1 0 1 1]
13. find(a<3) : 找到a中元素小于3的下标返回
[1 3 4]
14. A = magic(3) :幻方 它的任一行任一列,对角线中的元素加起来都等于相同值。
[ 8 1 6
3 5 7
4 9 2]
15. [r, c] = find(A>=7) : 返回矩阵A 中 >=7 的元素的行和列
16. sum(a) : 对a中元素求和
17. prod(a) : 对a中元素求积
18. floor(a) : 向下取整 0.9 取为0
19. ceil(a) : 向上取整 0.1 取为1
20. rand(3) :返回一个3*3的随机矩阵
21. max(rand(3), rand(3)) :两个矩阵对应元素相互比较,返回较大那个矩阵。
注意:
取矩阵中最大值 max(A(:)) 其中A(:) 表示将矩阵转换成列向量
22. sum(A, 1) : 对A的每一列求和
sum(A, 2) : 对A的每一行求和
sum(sum(A.*eye(3))) : 对对角线元素求和
sum(sum(A.*flipud(eye(3)))) :对副对角线元素求和 其中 flipud表示 是矩阵垂直翻转
举个栗子:
>> A = [1 2 7; 3 4 8; 5 6 9]
A =
1 2 7
3 4 8
5 6 9
>> flipud(A)
ans =
5 6 9
3 4 8
1 2 7
add:
pinv(A) : 求伪逆矩阵
inv(A) : 求真实矩阵
octave数据可视化(数据绘制)
t = [0:0.01:0.98] : 表示 从0到0.98 步长为0.01
y1 = sin(2*pi*4*t)
>>plot(t, y1)
结果如图:
>>y2 = cos(2*pi*4*t)
>>plot(t, y2)
如何同时画在一张图上?
>>plot(t, y2);
>>hold on;
>>plot(t, y1,'r'); % r 表示用颜色(红)区分
丰富图纸内容
>>xlabel('time') :为横坐标(x轴) 添加 time 标签
>>ylabel('value') :为纵坐标(y轴) 添加 value 标签
>>legend('sin', 'cos') : 标记说明曲线 右上角
>>title('my plot') :加上标题 【图像正上方】
如何保存图像?
cd '路径名'+文件名 print -dpng 'myplot'
或者 print -dpng 'myplot'【保存在当前目录】
注意保存图片格式为 png
>>figure(1);plot(t, y1); :为图像编号
>> 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轴的范围 axis([0 1]) 只设置x轴的范围
>> clf; // 清空当前图像
>>imagesc(A); :用不同颜色的格子描述矩阵A的数值
>>imagesc(A),colorbar; : 加上颜色对应区域
>>imagesc(A),colorbar,colormap gray; : 将上图变成灰阶图 其中逗号,表示同时运行
octave的if for while
for i = 1:10,
v(i) = 2^i;
end;
结果:
v =
2 4 8 16 32 64 128 256 512 1024
>>indices = 1:10;
>>indices
indices =
1 2 3 4 5 6 7 8 9 10
>> for i = indices,
disp(i);
end;
1
2
3
4
5
6
7
8
9
10
>>i=1;
while true,
v(i) = 999;
i = i + 1;
if i==6,
break;
end;
end;
>> v
v =
999 999 999 999 999 64 128 256 512 1024
octave之函数
SquareThisNumber.m 文件 octave可调用文件
function y = SqureThisNumber(X);
y = X^2;
第一行表示 返回一个值 将其存放在变量y中
第二行 函数主体内容 y = X^2
注意:
可以通过 addpath('函数文件所在目录') :这样在其他目录也可以直接调用函数
Especially: 它能够返回多个值
定义一个文件 SqureAndCubeThisNumber.m
function [y1,y2] = SqureAndCubeThisNumber(X);
y1 = X^2;
y2 = X^3;