【安装】
https://ftp.gnu.org/gnu/octave/windows/
【基本操作】
octave基本操作
https://www.cnblogs.com/zhxuxu/p/9473385.html
1、基本计算
1)、加、减、乘、除
2 + 2
3 - 2
5 * 8
1 / 2
2)、平方、立方
2^2
2^3
2、逻辑运算
等于(==)、不等于(~=)、并(&&)、或(||)四种,1表示成立,0表示不成立
1 == 2
1 == 1
1 ~= 2
1 && 0
1 || 0
或运算就可以用xor函数来代替
3、变量
1)、末尾添加;号只会执行赋值语句,不再打印
a = 3
a = 3;
2)、变量输出
a = pi;
a
disp(a)
disp(sprintf('2 decimals: %0.2f', a))
【向量/矩阵】
1、初始化
1)、基本方式
A = [1 2; 3 4; 5 6]
V1 = [1 2 3]
V2 = [1; 2; 3]
V = 1: 0.2: 2
v = 1: 5
2)、内置函数
ones(m, n)生成一个m行n列每个元的值为1的矩阵
zeros(m, n)生成一个m行n列每个元的值为0的矩阵
rand(m, n) 生成一个m行n列每个元是0到1之间的一个随机数的矩阵
eye(m) 生成大小为m的单位矩阵
ones(2, 3)
w = zeros(1, 3)
w = rand(1, 3)
eye(4)
2、属性
size(A) 行数、列数
size(A, 1) 行数 或者 size(A)(1)
size(A, 2) 列数 size(A)(2)
length(V) % 向量维数
length(A)% 行数和列数中的最大值
3、向量/矩阵的运算
1)、索引
A(3, 2) % 3行2列
A(3,:) % 3行
A(:, 2) % 2列
A([1, 3],:) % 1、3行
A(:,[1, 2]) % 1、2列
2)、组合
A = [1 2; 3 4; 5 6]
B = [11 12; 13 14; 15 16]
[A B] % 列相加
[A; B] % 行相加
A(:) % 多列合成一列
3)、矩阵乘法
C = [1 2; 2 2]
A * C % 行*列
4)、点运算即元素运算
A .* B % 点乘
A .^ 2 % 元素取平方
1 ./ [1; 2; 3] % 元素取倒数
4)、矩阵加法
V + ones(length(V), 1)
5)、转秩矩阵
A'
6)、逆矩阵
pinv(A)
7)、其他运算
a = [1 15 2 0.5]
val = max(a) % 最大值
[val, idx] = max(a) % 求最大值,并返回最大值的索引
a <= 1 % 矩阵对应元素的逻辑运算
find(a < 3)
sum(a) % 计算之和
prod(a) % 计算乘积
floor(a) % 向下取整
ceil(a) % 向上取整
rand(3) % 生成一个随机矩阵,矩阵元素的值位于0-1之间
flipud(eye(4)) % 矩阵按行上下对换
【控制语句】
1、for
1)、
for i=1:10,
V(i) = 2^i;
end;
V
2)、
indices = 1:10;
for i=indices,
disp(i);
end;
2、while
1)、
i = 1;
while i <= 5,
disp(V(i));
i = i+1;
end;
2)、
i = 1;
while true,
disp(V(i));
if i > 5,
break;
end;
i = i + 1;
end;
3、if
while和if语句同样需要使用end来表示完结
在for或while中也可以使用break关键词来提前退出循环
【函数】
function [y1, y2] = calVal(x)
y1 = x^2;
y2 = x^3;
end;
[a, b] = calVal(3)
【加载和保存数据】
load featuresX.dat
who % 查看当前工作空间下都有哪些变量
whos % 查看详细的变量信息
clear ans % 清除变量
save hello.mat V; % 保存变量V到hello.mat文件
【绘制图形】
绘图指南(https://blog.youkuaiyun.com/benzhujie1245com/article/details/83117637)
1、sin、cos函数曲线
t = [0:0.01:0.98];
y1 = sin(2*pi*4*t);
y2 = cos(2*pi*4*t);
plot(t, y1);
hold on; % 将新图像画在旧图像上面,而不是覆盖旧图像
plot(t,y2, 'r');
xlabel('time'); % 指定X轴的名称
ylabel('value'); % 指定Y轴的名称
legend('sin', 'cos'); % 标识第一条曲线是sin,第二条曲线是cos
title('sin and cos function'); % 给图片附一个标题
print -dpng 'sin_cos.png' % 作为一个图片保存下来
2、只要输入clf命令,Octave会将绘图框中的图形全部清空。
不论何时,输入close命令,Octave会关闭该绘图窗口。
figure(1);plot(t,y1);
figure(2);plot(t,y2);
subplot(1,2,1); %这样做是把窗口分成一个1*2的格子,使用第一个格子;
plot(t,y1);
subplot(1,2,2);
plot(t,y2);
axis(0.5 1 -1 1) %调整右边图像的x,y坐标的范围。
A = magic(5);
imagesc(A); %生成一个5*5 的色块
【矢量】
有道时候方程向量化,计算起来会更加高效。
A = [a1;a2;a3;........;an]
X = [x1;x2;x3;..........xn]
例子:h(x) = a1x1 + a2x2 + a3x3 + .........+ anxn = AX'(X的转置);
没有向量化之前可能会使用for循环的方式实现求和函数
但是转换成向量来做只需要一条语句就能实现 p = A * X‘;