目录
Octave
基操,勿6
运算
5+6
3-2
5*8
1/2
2^6
1 == 2 %等于, false 逻辑值,0
1 ~= 2 %不等于, true. 逻辑值,1 note, not "!="
1 && 0 %逻辑与
1 || 0 %逻辑或
xor(1,0) %异或
赋值
a = 3; % semicolon suppresses output
b = 'hi';
c = 3>=1; %输出逻辑值,true,1
列出数值
a = pi
disp(a)
disp(sprintf('2 decimals: %0.2f', a))
disp(sprintf('6 decimals: %0.6f', a))
format long
a
format short
a
向量和矩阵
A = [1 2; 3 4; 5 6]
v = [1 2 3]
v = [1; 2; 3]
v = 1:0.1:2 % from 1 to 2, 步长0.1. 有效设定绘图坐标轴
v = 1:6 % from 1 to 6, 步长为1 (行向量)
C = 2*ones(2,3) % same as C = [2 2 2; 2 2 2]
w = ones(1,3) % 1x3 vector of ones
w = zeros(1,3) % same as w = [0 0 0]
w = rand(1,3) % 均匀分布得出
w = randn(1,3)% 正态分布得出 (mean=0, var=1)
w = -6 + sqrt(10)*(randn(1,10000)); % (mean = -6, var = 10) - note: add the semicolon
hist(w) % plot histogram using 10 bins (default)
hist(w,50) % plot histogram using 50 bins
% note: if hist() crashes, try "graphics_toolkit('gnu_plot')"
out(:, end+1) = ... %end表示最后一列,也即要往out向量或矩阵的右面添加新的列(新的列在右式列出)
I = eye(4) % 4x4 单位矩阵
移动数据
尺寸
sz = size(A) % 1x2 matrix: [(number of rows) (number of columns)]
size(A,1) % 行数
size(A,2) % 列数
length(v) % 最长尺寸的大小(行数和列数中取最大)
加载数据
pwd % 显示当前目录
cd 'C:\Users\ang\Octave files' % 变更目录
ls % 列出当前目录的文件
load q1y.dat % 相当于, load('q1y.dat')
load q1x.dat
who % 列出工作空间中的所有变量
whos % 更详细地列出所有变量
clear q1y % clear command without any args clears all vars
v = q1x(1:10); % q1x的前10个变量
save hello.mat v; % 将变量v保存为hello.mat文件
save hello.txt v -ascii; % 保存为ascii格式
索引
A(3,2) % (行,列)的索引
A(2,:) % 第二行
% ":" 指一个维度中所有元素
A(:,2) % 第二列
A([1 3],:) % 第一行和第三行的所有元素
A(:,2) = [10; 11; 12] % 将右式赋值到A的第二列
A = [A, [100; 101; 102]]; % 增加右式作为新的一列,注意右式本来就是列向量
A(:) % A所有元素排列成一列列向量
组合
A = [1 2; 3 4; 5 6]
B = [11 12; 13 14; 15 16] % same dims as A
C = [A B] % 左右结合
C = [A, B] % 同上
C = [A; B] % 上下结合
计算数据
初始化
A = [1 2;3 4;5 6]
B = [11 12;13 14;15 16]
C = [1 1;2 2]
v = [1;2;3]
y = linspace(-10, 10, 100); %-10到10之间的100个均分数值
计算矩阵
A * C % 矩阵乘法
A .* B % 元素乘法
A .^ 2 % A中每个元素进行平方计算
1./v % A中每个元素进行倒数计算
log(v) % 底是e,对所有元素进行对数运算 log e n
exp(v) % 底是e,对所有元素进行指数运算 e^n
abs(v) %对所有元素求绝对值
-v % 等于-1*v
v + ones(length(v), 1) % 等于 v+1
A' % 转置矩阵
最大、最小值
a = [1 15 2 0.5]
val = max(a)
[val,ind] = max(a) % val - 向量a的最大值,ind - 最大值的索引(在向量a中的位置)
val = max(A) % 如果A是矩阵,则返回每列的最大值
比较矩阵数据并寻找
a < 3 % 检查矩阵a中小于3的数值,为真时1,为假时0
find(a < 3) % 找出矩阵a中小于3的元素的位置(每一列从上到下数,返回一个值)
A = magic(3) % 生成魔方阵(每行每列的和相同)
[r,c] = find(A>=7) % 找到矩阵A中大于等于7的元素,并标出对应的坐标(索引),r为行数,c为一一对应r的列数,如【1,2】、【3,6】等
相加和相乘
sum(a) % a中每列的和
prod(a) %a中每列的积
floor(a) % or ceil(a) floor向下取整,ceil是向上取整
max(rand(3),rand(3)) 两个矩阵中的元素一一比较,取其中最大的值,组成新的矩阵
max(A,[],1) % 每列的最大值
max(A,[],2) % 每行的最大值
A = magic(9)
sum(A,1) %每列的和
sum(A,2) %每行的和
sum(sum( A .* eye(9) ))
sum(sum( A .* flipud(eye(9)) )) %flipud - 矩阵的上下翻转,比如第一行变成最后一行
矩阵的逆和转置
A' %转置
inv(A) %逆矩阵
pinv(A) %伪逆矩阵,等于:inv(A'*A)*A'
展示数据
画图
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" to turn off
plot(t,y2,'r'); %红色
plot(u,v,'rx','MarkerSize',10) % rx为用十字符号标出离散数值,MarkerSize 和 10 表示选择十字符号的大小为10
xlabel('time');
ylabel('value');
legend('sin','cos'); %列出不同线表示的含义
title('my plot');
print -dpng 'myPlot.png' %保存格式为png的图片
close; % or, "close all" to close all figs
figure(1); plot(t, y1);
figure(2); plot(t, y2);
figure(2), clf; % 清空图线
subplot(1,2,1); % 一个视窗内两个并排的图,取第一个
plot(t,y1);
subplot(1,2,2); % 一个视窗内两个并排的图,取第二个
axis([0.5 1 -1 1]); % 改变坐标,X坐标范围为0.5至1,Y坐标范围为-1至1
更详细的plot使用,请点击链接:https://www.cnblogs.com/douyamv/p/4239994.html
矩阵(图像)展示
figure;
imagesc(magic(15)), colorbar, colormap gray;
% 逗号连接-函数调用 colorbar是色彩条,colormap 是色彩表。用灰度来展示矩阵
a=1,b=2,c=3
a=1;b=2;c=3;
控制语句
v = zeros(10,1);
for i=1:10,
v(i) = 2^i;
end;
% Can also use "break" and "continue" inside for and while loops to control execution.
i = 1;
while i <= 5,
v(i) = 100;
i = i+1;
end
i = 1;
while true,
v(i) = 999;
i = i+1;
if i == 6,
break;
end;
end
if v(1)==1,
disp('The value is one!');
elseif v(1)==2,
disp('The value is two!');
else
disp('The value is not one or two!');
end
功能集成
建立功能文件
将功能代码输入到文本编辑器(例如写字板)中,并保存文件为“functionName.m”。
功能代码如下:
function y = squareThisNumber(x)
y = x^2;
调用功能文件
- 需要导航到“functionName.m”文件的目录,并调用该功能,如下:
% 导航到目录
cd /path/to/function
% 调用该功能
functionName(args)
- 另一种导航,添加文件夹
% 在octave的会话中添加文件夹:
addpath('/path/to/function/')
% 为了在下次使用时也能包括添加的目录,但一般不使用,保存多了可能会导致路径错乱,建议还是用'cd'导航到目录中:
savepath
% 去除保存的路径:
rmpath
- 功能中可以返回多种值
在功能文件中:
function [y1, y2] = squareandCubeThisNo(x)
y1 = x^2
y2 = x^3
在调用时:
[a,b] = squareandCubeThisNo(x)
矢量
矢量化是一种采用依赖循环并将其转换为矩阵运算的代码的过程。 它更高效,更优雅,更简洁。
正常代码:
prediction = 0.0;
for j = 1:n+1,
prediction += theta(j) * x(j);
end;
矢量代码:
prediction = theta' * x;