用百分号表示注释,true为数值1,false为数值0,不等号表示为~=;例如,1 ~= 2,返回的结果为1,即true。
要改变Octave的提示符,代码为:PS1('>> '); 这样把Octave的提示符改为引号内的字符。
;可以不打印复制的变量,与C相同。
矩阵中;的意思表示切换到下一行。
Octave或Matlab中数组的索引是从1开始的,而不是从0开始。
Matlab默认将数学运算符解释为矩阵运算符,如果要指定为数值运算符,需要用点乘即 .*
disp(a);
disp(sprintf('2 decimals: %0.2f ', a))
disp(sprintf("6 decimals %0.6f " , a))
format long; 显示最长的数值显示
format short; 显示较短的数值显示
ones(2,3) 生成一个2行3列的全1矩阵
zeros(2,3) 生成一个2行3列的全0矩阵
rand(2,3) 生成一个2行3列的随机矩阵,矩阵中每一个元素都在0到1之间
randn(2,3) 生成一个2行3列的服从(0,1)高斯分布的矩阵
eye() 生成单位矩阵
hist() 绘制柱状图
hist(a,100) 绘制100个a的柱状图
矩阵乘法为*,例如A*B
size(A) 返回的是矩阵A的行数和列数,返回的其实是一个二维数组。
size(A,1);size(A,2) 返回的分别是矩阵A的行数和列数。
length(A) 返回的是矩阵A中维数最大的那个,如果A是3乘2的矩阵,则返回3。但是length一般对向量使用。
A(:) 把矩阵A按照向量化的形式转换成一个列向量,即按照列向量的形式。
pwd 显示当前Octave所在的目录。cd 可以改变当前目录,ls可以查看当前目录下的所有文件信息。
load 文件名.后缀名 或者 load(‘文件名.后缀名’) 可以将当前的文件加载到工作空间中。
who;whos who可以显示当前工作空间中所有的变量值,whos可以更详细的显示这些变量值的信息。
clear 变量名 清除某个变量的信息,直接输入clear可以清除所有变量。
save 文件名.后缀名 变量名 -ascii 将变量的值以ascii码的形式存储到该文件中,并保存在计算机上。
A.*B 即矩阵的H积,对应元素相乘。
A.^2 矩阵A中的元素都取平方;在Octave中,点号.一般表示元素的运算。
1./A 矩阵A中的元素取倒数。
log(A),exp(A) 对数和以e为底的指数
abs(A) 绝对值
a = [1, 15, 2, 0.5]
val = max(a) 返回a中最大的数
[val, ind] = max(a) 返回a中最大的数,和它对应的索引
a<3 返回的是布尔值:1, 0, 1 , 1
find(a<3) 找出a中所有小于3的数的索引: 1, 3, 4
sun(a) a中左右元素求和
prod(a) a中左右元素相乘,即product
floor(a),ceil(a) 向下和向上对a中元素取整
A = magic(3) 返回一个三阶的魔方矩阵
[r,c] = find( A>= 3) 返回A中大于等于3的数所在的行和列,r代表行,c代表列
max(A),max(A,[],1) 返回A中每一列的最大值
max(A,[],2) 返回A中每一行的最大值
max(max(A)) 返回矩阵A中所有元素的最大值
sum(A,1);sum(A,2) A中每一列的元素求和以及每一行的元素求和
flipup(A)flipud(A) 表示向上或者向下翻转。
pinv(A) 对A求逆,这个称为伪逆,但是不影响,还有一个叫做inv(A)。
t = [0:0.01:0.98]
y1 = sin(2*pi*4*t)
plot(t,y1) 绘制正弦函数
hold on 保留在当前函数上,绘制另一幅图画
xlabel('x轴标签') 给x轴加标签
ylabel(‘y轴标签’) 给y轴加标签
legend() 给图标中不同的线做标签
title() 给图表加标题
print -dpng ‘文件名.png’ 保存输出的图片
subplot(1,2,1)
subplot(1,2,2) 绘制一个1行2列的图集,然后分别在第一个和第二个图标中画图。
axis([xmin xmax ymin ymax]) 指定x轴,y轴坐标的取值范围
clf 清除图像
imagesc(A), colorbar, colormap gray; 画矩阵A的灰度图
注意循环后面加上end;
function y = squareThisNumber(x)
y = x^2
定义函数,函数要与Octave当前的工作目录一致,否则Octave会找不到函数的位置;也可以在Octave中增加路径
addpath('路径名称') 增加括号中的路径作为Octave的搜索路径。
代价函数:
% 代价函数的Octave代码
function J = costFunctionJ(X, y, theta)
% X is the "design matrix" containing our training examples.
% y is the class labels
m = size(X, 1); % number of training examples,即矩阵的行数
predictions = X*theta; % predictions of hypothesis on all m examples
sqrErrors = (predictions-y).^2; %squared errors,矩阵,所以用点乘
J = 1/(2*m) * sum(sqrErrors);
(待更新)
过程不是很懂,给出当特征n=1时的向量化的一种梯度更新的实现:
向量化的实现:
theta = theta - alpha/ m * X' * (X * theta)
批量更新的实现:
theta_temp = theta
theta(1) = theta(1) - alpha/ m * sum((X * theta_temp - y) .* X(:,1));
theta(2) = theta(2) - alpha/ m * sum((X * theta_temp - y) .* X(:,2));