基本运算
octave:3> 5+6
ans = 11
octave:4> 3-2
ans = 1
octave:5> 8*9
ans = 72
octave:6> 8/4
ans = 2
octave:7> 6/4
ans = 1.5000
octave:8> 2^6
ans = 64
octave:9>
注释:% 表示注释符号
octave:9> 1 == 2 %false
ans = 0
octave:10> 1~=2
ans = 1
octave:11> 1 && 0 % AND
ans = 0
octave:12> 1 || 0 % OR
ans = 1
octave:13> xor(1,0) % 异或
ans = 1
octave:14>
改变提示符:octave:14> PS1('>> '); ,' ' 内表示所选提示符
>> a=3
a = 3
>> a=3;%加上分号将不会显示
>> a
a = 3
>> a=3;
>> a=2
a = 2
>> a=2;%加上分号将不会显示
>> b='hi'
b = hi
>> c=(3>=1)
c = 1
>> a=pi
a = 3.1416
>> disp(a)
3.1416
>> disp(sprintf('2 decimals: %0.2f',a)) % 类似于C语言的输出语句
decimals: 3.14
矩阵和向量:
>> A = [1 2; 3 4; 5 6]
A =
4
>> A=[1 2;
4;
6]
A =
4
>> V=[1 2 3]
V =
3
>> V=[1;2;3]
V =
>> V=1:0.1:2
V =
Columns 1 through 7:
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000
Columns 8 through 11:
1.7000 1.8000 1.9000 2.0000
>> V=1:6
V =
3 4 5 6
>> ones(2,3) % 生成全1矩阵
ans =
1
1
>> 2*ones(2,3)
ans =
2
2
>> C=[2 2 2;2 2 2]
C =
2
2
>> w=ones(1,3)
w =
1
>> w=zeros(1,3) % 生成全0矩阵
w =
0
>> w=rand(1,3) % 生成随机数矩阵
w =
0.76244 0.97843 0.82005
>> w=rand(3,3) %产生随机数矩阵,范围0~1
w =
0.844846 0.070033 0.276175
0.330128 0.777480 0.369802
0.015571 0.482700 0.163547
>> w = randn(1,3) %产生服从高斯分量的随机矩阵
w =
0.63218 0.16167 -0.34970
>>
绘制直方图:
>> w=-6 + sqrt(10)*(randn(1,10000));
>> hist(w)
绘制更多竖条的直方图(50个):
>> hist(w,50) % hist绘图
单位矩阵:
>> i=eye(4) % 单位矩阵
i =
Diagonal Matrix
0 0
0 0
1 0
0 1
可输入help命令获得帮助,如:
help eye
help rand
>> size(A) % 矩阵A的大小 长 宽
>> length(B) % 矩阵B的长度
>> pwd % 当前路径
>>cd % 切换目录
>> ls % 当前路径下的文件
>> load featuresX.dat % 加载featuresX.dat文件
>> who % 显示当前所有变量
>> whos % 显示当前所有变量
>> save hello.mat v -ascii; % 把变量v中的数据存到hello.mat 文件中 以ascii编码
>> A(3,2) %获取第三行第二列元素
>> A(3,:) %获取第三行所有元素
# 高级索引
>> A([1 3 ],:) %第一行 第三行所有元素
>> A(:,2)=[10;11;12] %把第二列换成 10 11 12
>> A = [A,[100;101;102]] % 个数组A追加一列
>> A(:) % 把矩阵A中元素列优先 ,全部存成一列
>> C=[A B] % [A,B]把A B 矩阵合并成C(横着)
>> C=[A; B] % 把A B 矩阵合并成C(竖着)
>>
矩阵运算
>> A*B % 传统的矩阵乘法
>> A .*B % 对应位置元素相乘
>> A .^B % 每个元素平方
>> 1 ./ A % 数组A的倒数
>> log(A) % 对A内元素取对数
>> exp(A) % 以e为底幂运算
>>abs(A) % 取绝对值
>> v + ones(length(v),1) % 所有元素加1
>> A ’ % A的转置
>> [val ,ind] = max(A) % A的最大值放在val中 A的最大值的索引放在ind中
>> A<3 % A中元素小于3时为1 大于3时为0 返回整个数组的结果
>> B = masgic(3) %生成幻方矩阵 (行列斜 元素之和相等)
>> sum(A) % A中元素求和
>> prod(A) % A中元素求积
>> floor(A) % 向下取整
>> ceil(A) % 向上取整
>> max(A,[],1) % 每列最大值
>> max(A,[],2) % 每行最大值
>> sum(A,1) % 每一列的总和
>> eye(3) % 三阶单位阵
>> pinv(A) % 求逆矩阵(伪)
>> t= [0:0.01:0.98] % 0.00到0.98的99个数据
>> y1=sin(2*pi*4*t);
>> plot(t,y1);
>> y2=cos(2*pi*4*t);
>> plot(t,y2);
>> plot(t,y1);
hold on; % 多幅图显示在同一图片里
>> plot(t,y2,'r'); %red红色曲线
>> xlabel('time')
>> ylabel('value') % xy轴的标签
>> legend('sin','cos')
>> title('my plot') % 标题以及标注
>> print -dpng 'myplot.png' % 把图片存下来
>> figure(1); plot(t,y1);
>> figure(1); plot(t,y1); % 同时显示两幅图
>> subplot(1,2,1);
>> plot(t,y1)
>> subplot(1,2,2);
>> plot(t,y2) % 将两幅图显示在一幅图片上
>> axis([1.5 1 -1 1]) % 坐标的范围
>> A=magic(5)
>> imagesc(A) % 把矩阵用色块展示
>> imagesc(A),colorbar,colormap gray; % 用灰色色块展示矩阵
>>a=1,b=2,c=3 %逗号:命令一个一个的执行
循环
>> for i=1:10,
> v(i) = 2^i;
> end;
>> v
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
>> v
v =
2 4 8 16 32 64 128 256 512 1024
>> i=1;
>> while i <=5,
> v(i)=100;
> i=i+1;
> end;
>> v
v =
100 100 100 100 100 64 128 256 512 1024
>>
>> 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
>>
>> v(1)
ans = 999
>> v(1)=2;
>> 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;
the value is two
>>
如何定义和调用函数
1.新建squareThisNumber.m文件,内容如下:
function y = squareThisNumber(x)
y = x^2;
把搜索路径加上
>> % Octave search path (advanced/optional)
>> addpath('D:\06AI\octave')
运行函数
>> squareThisNumber(5)
ans = 25
- 多返回值
新建squareAndCubeThisNumber.m文件,内容如下
function [y1,y2]=squareAndCubeThisNumber(x)
y1=x^2;
y2=x^3;
执行结果
>> [a,b]= squareAndCubeThisNumber(5)
a = 25
b = 125
- costfunction
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 or training examples
predictions = X*theta; % predictions or hypothesis on all m
examples
sqrErrors= (predictions-y).^2;
J = 1/(2*m)*sum(sqrErrors);
运行
>> X=[1 1 ; 1 2; 1 3]
X =
1 1
1 2
1 3
>> y=[1;2;3]
y =
1
2
3
>> J = costFunctionJ(X,y,theta)
J = 0
>>
>> theta =[0;0];
>> J = costFunctionJ(X,y,theta)
J = 2.3333
>> (1^2 + 2^2 + 3^2)/(2*3)
ans = 2.3333
6-6高级优化
新建costFunction.m文件,内容如下
function [jVal,gradient] =costFunction(theta)
jVal = (theta(1)-5)^2+(theta(2)-5)^2;
gradient = zeros(2,1);
gradient(1)=2*(theta(1)-5);
gradient(2)=2*(theta(2)-5);
octave窗口执行
>> options = optimset('GradObj','on','MaxIter','100'); % 100次迭代
>> initialTheta = zeros(2,1) % 猜测theta的初始值 必须大于1维
initialTheta =
0
0
>> [optTheta,functionVal,exitFlag]=fminunc(@costFunction,initialTheta,options) % 优化算法找到theta的最优解
optTheta =
5.0000
5.0000
functionVal = 7.8886e-31
exitFlag = 1 % exitflag告诉你算法是否收敛
>>