基本语法
1. 直接计算
>> 1+2
ans = 3
2. 变量计算(在最后加上分号";"可以不输出结果)
>> a=1;
>> b=2;
>> a+b
ans = 3
3. 矩阵赋值
>> a=[1 2;3 4; 5 6]
a =
1 2
3 4
5 6
4. 生成一个以0.2为间隔的1x6的行矩阵
>> a=[1:0.2:2]
a =
1.0000 1.2000 1.4000 1.6000 1.8000 2.0000
生成一个以1为间隔的1x5的行矩阵
>> v=1:5
v =
1 2 3 4 5
5. 生成矩阵的一些快捷方式
>> b=ones(2,3)
b =
1 1 1
1 1 1
>> b=2*ones(2,3)
b =
2 2 2
2 2 2
>> b=zeros(2,3)
b =
0 0 0
0 0 0
6. 随机生成矩阵
>> w=rand(3,3)
w =
0.416753 0.445458 0.465859
0.572142 0.242774 0.846336
0.067587 0.464393 0.494254
>> w=randn(1,3)
w =
0.060119 0.374436 -1.593184
7. 对应随机变量w绘制出直方图
>> w=-6+sqrt(10)*(randn(1,10000));
>> hist(w)
8. 单位矩阵
>> I=eye(3)
I =
Diagonal Matrix
1 0 0
0 1 0
0 0 1
9. 帮助
>> help eye
'eye' is a built-in function from the file libinterp/corefcn/data.cc
移动数据
1. 计算矩阵的大小size
>> A
A =
1 2
3 4
5 6
>> sz=size(A)
sz =
3 2
2. 计算的行/列大小,size(A,1)返回A的行数,size(A,2)返回A的列数
>> size(A,1)
ans = 3
>> size(A,2)
ans = 2
3. length返回较大的维数
>> length(A)
ans = 3
4. 一些基本的操作
函数 |
意义 |
pwd |
显示当前路径 |
cd‘xx’ |
改变当前路径 |
ls |
显示桌面路径 |
load |
读取文件 |
who |
显示当前Octave的所有变量 |
whos |
显示变量的详细信息 |
clear xx |
清除变量xx |
clear |
清空变量 |
save xx v -ascii |
将v以ASCII码的方式保存至xx文件中 |
5. 矩阵取值
①取某个具体的值
>> A
A =
1 2
3 4
5 6
>> A(3,2)
ans = 6
②取整列“:”冒号代表在该行/列的所有元素
>> A(2,:)
ans =
3 4
③同时取多列
>> A([1,3],:)
ans =
1 2
5 6
6. 矩阵赋值
>> A(:,2)=[10;11;12]
A =
1 10
3 11
5 12
7. 矩阵新增
>> A=[A,[100;101;102]]
A =
1 10 100
3 11 101
5 12 102
8. 矩阵合并
①C=[A B] (合并)
>> A
A =
1 10 100
3 11 101
5 12 102
>> B
B =
1
2
3
>> C=[A B]
C =
1 10 100 1
3 11 101 2
5 12 102 3
②C=[A;B] (上下合并)
>> A
A =
1 10 100
3 11 101
5 12 102
>> B=[1 3 6]
B =
1 3 6
>> C=[A;B]
C =
1 10 100
3 11 101
5 12 102
1 3 6
计算数据
1.A为一个矩阵
*注意:A*B做的是矩阵乘法,而A.B做的是元素间的乘法
操作 |
意义 |
A.*B |
将A的每个元素与B的每个元素相乘 |
A.^2 |
将A的每个元素平方 |
1./A |
将A的每个元素取倒数 |
log(A) |
将A的每个元素取对数 |
exp(A) |
将A的每个元素以e为底去对数 |
abs(A) |
取A的绝对值 |
-A |
取A的相反数 |
A’ |
A的转置 |
A+1 |
A的每个元素加1 |
pinv(A) |
求A的伪逆矩阵 |
2. 当a=[1 2 0.5 4 11]时
操作 |
意义 |
max(a) |
求得a中的最大值 |
[val,ind]=max(a) |
val为a中的最大值,ind为最大值的下标 |
a<3 |
对比a中每个元素与3的大小 |
find(a<3) |
找出比3小的元素 |
sum(a) |
求a的和 |
prod(a) |
求a的乘积 |
floor(a) |
对a向下取整 |
ceil(a) |
对a向上取整 |
注意:当a如果为一个矩阵的话,sum(a)得到的是每一列的最大值。默认是以列为单位的。
max(a,[],1)求a每列的最大值,max(a)默认就是求每列的最大值
max(a,[],2)求a每行的最大值
3. magic()函数,生成的矩阵每行、每列、对角线的元素的和为用一个值。一般用于快速生成一个矩阵。
>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2
>> sum(A)
ans =
15 15 15
数据绘制
- 首先我们来看一个实例:
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> plot(t,y1)
>> hold on;
>> y2=cos(2*pi*4*t);
>> plot(t,y2)
>> xlabel('time')
>> ylabel('value')
>> title('my plot')
>> legend('sin','cos')
>>> close
操作 |
意义 |
plot() |
plot函数常常被用于绘制各种二维图像 |
xlabel() |
设置x的坐标名 |
ylabel() |
设置y的坐标名 |
title() |
设置标题 |
legend() |
设置图标 |
close |
关闭图像 |
得到的图像为:
- 我们也可以将图像绘制成1*2的格子
>> subplot(1,2,1); #使用第一个格子
>> plot(t,y1)
>> subplot(1,2,2) #使用第二个格子
>> plot(t,y2)
> axis([0.5 1 -1 1]) #设置坐标
我们可以得到图像
- 来看一个有色彩的例子
>> A=magic(5)
>> imagesc(A)
得到的图像为:
我们也可以为之设定为特定的色系
>> imagesc(A),colorbar,colormap gray;
得到的图像为:
控制语句
1. for循环
>> for i=1:10,
v(i)=i^2;
end
>> v
v =
1 4 9 16 25 36 49 64 81 100
2. while循环
>> i=1;
>> while i<=5,
i=i+1;
v(i)=i;
end;
>> v
v =
0 2 3 4 5 6
3. if语句
>> for i=1:10,
w(i)=i;
if i==3,
break;
end;
end;
>> w
w =
1 2 3
4. elseif语句
︊>> if a==0,
disp('zero');
elseif a==1;
disp('one');
else,
disp('no');
end;
one
5. 函数的调用
先建立一个“.m”文件用于存放函数,然后在命令行中应用该路径地址
例如存放一个代价函数
function J = costFunction (x,y,theta)
m=size(x,1);
predictions=x*theta;
sqr =(predictions-y).^2;
J = 1/(2*m)*sum(sqr);
endfunction
然后引入路径
>> addpath('C:\Users\hp')
调用函数
>> x=[1 1; 1 2; 1 3];
>> y=[1;2;3];
>> theta=[0;1];
>> j=costFunction(x,y,theta)
j = 0