数学运算
加、减、乘、除、指数运算
octave:1> 5+6
ans = 11
octave:2> 3-2
ans = 1
octave:3> 5*8
ans = 40
octave:4> 1/2
ans = 0.50000
octave:5> 2^6
ans = 64
逻辑运算
octave:6> 1 == 2 % false
ans = 0
octave:7> 1 ~= 2
ans = 1
octave:8> 1 && 0 % AND
ans = 0
octave:9> 1 || 0 % OR
ans = 1
octave:10> xor(1,0)
ans = 1
值得说明的是,其中%
代表注释符号,~=
代表不等于,xor()
是异或符号。
修改等待命令的快捷提示
octave:11> PS1(">> ")
>>
>>
>>
赋值运算
>> a = 3
a = 3
>>
如果不希望在屏幕上显示结果,只需要结尾加;
即可抑制打印输出。
>> a = 3; % semicolon supressing output
>>
变量的打印输出
>> b = "hi";
>> b
b = hi
>> c = (3>=1);
>> c
c = 1
>>
对于一些复杂的输出,可以使用disp
命令:
>> a = pi;
>> a
a = 3.1416
>> disp(a)
3.1416
>> disp(sprintf('2 decimals: %0.2f', a))
2 decimals: 3.14
>>
控制输出长短:
>> a
a = 3.1416
>> format long
>> a
a = 3.14159265358979
>> format short
>> a
a = 3.1416
>>
矩阵的表示
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
另外一种表示矩阵的方式:
>> A = [1 2;
> 3 4;
> 5 6]
A =
1 2
3 4
5 6
分配一个一行三列的行向量:
>> v = [1 2 3]
v =
1 2 3
分配一个三行一列的列向量:
>> v = [1; 2; 3]
v =
1
2
3
表示一个行向量,其中第一个值是起始值,中间的值是步长,最后一个值是终止值:
>> v = 1:0.1:2
v =
Columns 1 through 8:
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000
Columns 9 through 11:
1.8000 1.9000 2.000
也可以不写步长,这样默认步长是1:
>> v = 1:6
v =
1 2 3 4 5 6
生成元素为1的矩阵
>> ones(2,3)
ans =
1 1 1
1 1 1
生成一个2行3列,所有元素都为2的矩阵:
>> 2*ones(2,3)
ans =
2 2 2
2 2 2
生成0矩阵
>> w = zeros(1,3)
w =
0 0 0
生成随机数矩阵
>> w = rand(1,3)
w =
0.65555 0.77468 0.85729
-6加上根号10乘以一个一行10000列的正太分布的随机向量。
>> w = -6 + sqrt(10)*(randn(1,10000));
绘制函数
绘制这个直方图:
>> hist(w)
绘制有50条的直方图:
>>hist(w,50)
生成单位矩阵
生成矩阵的特殊命令:eye
可用来生成单位矩阵:
>> A = eye(5)
A =
Diagonal Matrix
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
查看矩阵尺寸
通过size
命令,我们能看到这个矩阵的尺寸:
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> size(A)
ans =
3 2
实际上size
的这个输出结果自身也是一个矩阵:
>> sz = size(A)
sz =
3 2
>> size(sz)
ans =
1 2
分别查看A向量的size的输出结果中的两个值:
>> size(A,1)
ans = 3
>> size(A,2)
ans = 2
查看矩阵最大维度
length
指令,来获取矩阵的最大维度,这个命令其实通常只对向量使用:
>> v = [1 2 3 4]
v =
1 2 3 4
>> length(v)
ans = 4
>> A
A =
1 2
3 4
5 6
>> length(A)
ans = 3
加载外部文件
通过load
命令,加载外部文件:
>> load featuresX.dat
>> load priceY.dat
查看存储变量
以使用who
命令来查看当前Octave中存储的变量:
>> who
Variables in the current scope:
A ans c priceY v
a b featuresX sz w
whos
命令可以查看更详细的信息,包括尺寸,内存占用,以及类型:
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x2 48 double
a 1x1 8 double
ans 1x2 16 double
b 1x2 2 char
c 1x1 1 logical
featuresX 47x2 752 double
priceY 47x1 376 double
sz 1x2 16 double
v 1x4 32 double
w 1x10000 80000 double
Total is 10159 elements using 81251 bytes
可以看到featuresX和priceY已经被成功的被作为一个变量加载进来了,我们可以直接输入featuresX来查看这个变量的内容:
>> featuresX
featuresX =
2104 3
1600 3
2400 3
1416 2
3000 4
1985 4
1534 3
1427 3
1380 3
1494 3
1940 4
2000 3
1890 3
...
通过size()
函数,我们可以看到featuresX是一个47行2列的矩阵,priceY是一个47行1列的矩阵:
>> size(featuresX)
ans =
47 2
>> size(priceY)
ans =
47 1
删除变量
使用clear
命令来删除某个变量
截取矩阵部分元素
将priceY的前10个元素存入变量V:
>> V = priceY(1:10)
V =
3999
3299
3690
2320
5399
2999
3149
1989
2120
2425
变量的存储
将变量V存入hello.mat文件中:
>> save hello.mat V
>> ls
FeaturesX.dat PriceY.dat hello.mat
这里其实是把V按照压缩的二进制的形式进行存储,如果说V的数据很大,那么压缩的幅度也很大。
如果想按照一个我们可以看得懂的格式进行存储的话,可以这样输入:save hello.txt V -ascii
清空所有变量
直接输入clear
命令,会清空所有的变量:
>> clear
>> whos
索引
用索引来查询
用索引来查询
首先创建矩阵A:
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
你可以通过A(3,2)来访问矩阵的第三行第二列的元素:
>> A(3,2)
ans = 6
你也可以通过A(2,:)来访问第二行的所有元素,其中:代表该行/列的所有元素:
>> A(2,:)
ans =
3 4
你可以通过A([1 3], :)来取矩阵第1行以及第3行的所有元素:
>> A([1 3], :)
ans =
1 2
5 6
通过A(:)来将所有的元素以一个列向量的形式展示:
>> A(:)
ans =
1
3
5
10
11
12
用索引来赋值
你也可以通过索引来进行复制操作:
>> A
A =
1 2
3 4
5 6
>> A(:,2) = [10; 11; 12]
A =
1 10
3 11
5 12
在矩阵的右侧新增一列:
>> A
A =
1 10
3 11
5 12
>> A = [A,[100; 101; 102]]
A =
1 10 100
3 11 101
5 12 102
将两个行相等的向量按照从左到右的顺序连在一起:
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> B = [11 12;13 14;15 16]
B =
11 12
13 14
15 16
>> C = [A B]
C =
1 2 11 12
3 4 13 14
5 6 15 16
将两个列数相等的向量按照从上到下的顺序连在一起:
>> A
A =
1 2
3 4
5 6
>> B
B =
11 12
13 14
15 16
>> C = [A;B]
C =
1 2
3 4
5 6
11 12
13 14
15 16
矩阵乘法
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> C = [1 1; 2 2]
C =
1 1
2 2
>> A*C
ans =
5 5
11 11
17 17
点乘操作
矩阵每个对应元素相乘。
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> B = [11 12; 13 14; 15 16]
B =
11 12
13 14
15 16
>> A.*B
ans =
11 24
39 56
75 96
对每个元素求平方
>> A .^ 2
ans =
1 4
9 16
25 36
对每个元素求倒数
>> v = [1; 2; 3]
v =
1
2
3
>> 1 ./ v
ans =
1.00000
0.50000
0.33333
对每个元素求对数
>> log(v)
ans =
0.00000
0.69315
1.09861
自然数e的幂次运算
以e为底,以每个元素为幂的运算:
>> exp(v)
ans =
2.7183
7.3891
20.0855
对每个元素求绝对值
>> abs([-1; 2; -3])
ans =
1
2
3
求相反数运算
>> -v
ans =
-1
-2
-3
对向量每个元素自增1
>> v + 1
ans =
2
3
4
矩阵的转置
>> A
A =
1 2
3 4
5 6
>> A'
ans =
1 3 5
2 4 6
获取向量中最大的元素
>> a = [1 15 2 0.5]
a =
1.00000 15.00000 2.00000 0.50000
>> val = max(a)
val = 15
也可以获取最大元素的索引:
>> [val, ind] = max(a)
val = 15
ind = 2
值得注意的是,如果这里不是向量,而是矩阵,那么将得到每一列的最大值
>> D = [1 5;2 4; 3 3]
D =
1 5
2 4
3 3
>> max(D)
ans =
3 5
判断矩阵中每个元素是否满足某条件
>> a
a =
1.00000 15.00000 2.00000 0.50000
>> a < 3
ans =
1 0 1 1
获取魔幻方针
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
找出矩阵中满足某条件元素的索引
>> A
A =
8 1 6
3 5 7
4 9 2
>> [r,c] = find(A >= 7)
r =
1
3
2
c =
1
2
3
求和函数
>> a
a =
1.00000 15.00000 2.00000 0.50000
>> sum(a)
ans = 18.500
求积函数
>> a
a =
1.00000 15.00000 2.00000 0.50000
>> prod(a)
ans = 15
四舍五入
>> a
a =
1.00000 15.00000 2.00000 0.50000
>> floor(a)
ans =
1 15 2 0
>> ceil(a)
ans =
1 15 2 1
max函数
获得一个3×3的方阵,元素为在0到1之间的随机数:
>> rand(3)
ans =
0.315556 0.669565 0.192329
0.449421 0.010167 0.389329
0.282657 0.761167 0.600949
分别取两个矩阵中对应位置较大的一个元素,组成新矩阵:
>> max(rand(3),rand(3))
ans =
0.53967 0.79306 0.62026
0.90069 0.70636 0.55156
0.98940 0.68021 0.85094
获取一个矩阵中每一列最大的元素组成的向量:
>> A
A =
8 1 6
3 5 7
4 9 2
>> max(A,[],1)
ans =
8 9 7
获取矩阵每一行的最大值:
>> max(A,[],2)
ans =
8
7
9
找出矩阵A中最大元素的两种方法:
>> max(max(A))
ans = 9
>> max(A(:))
ans = 9
对矩阵的每一行(列)求和
>> A = magic(9)
A =
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
>> sum(A,1)
ans =
369 369 369 369 369 369 369 369 369
>> sum(A,2)
ans =
369
369
369
369
369
369
369
369
369
求A的对角线元素的和:
>> A
A =
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
>> eye(9)
ans =
Diagonal Matrix
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
>> A.*eye(9)
ans =
47 0 0 0 0 0 0 0 0
0 68 0 0 0 0 0 0 0
0 0 8 0 0 0 0 0 0
0 0 0 20 0 0 0 0 0
0 0 0 0 41 0 0 0 0
0 0 0 0 0 62 0 0 0
0 0 0 0 0 0 74 0 0
0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 35
>> sum(sum(A.*eye(9)))
ans = 369
将矩阵上下翻转
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
>> flipud(magic(3))
ans =
4 9 2
3 5 7
8 1 6
求逆矩阵
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> temp = pinv(A)
temp =
0.147222 -0.144444 0.063889
-0.061111 0.022222 0.105556
-0.019444 0.188889 -0.102778
>> temp * A
ans =
1.00000 0.00000 -0.00000
-0.00000 1.00000 0.00000
0.00000 0.00000 1.00000
绘制正余弦函数
>> t=[0:0.01:0.98]; % 生成一个0到0.98的等差数列,差值为0.01
>> y1 = sin(8*pi*t)
>> plot(t,y1);
同理绘制余弦图:
>> y2 = cos(8*pi*t);
>> plot(t,y2)
图的标记
图片的保存与删除
为图像标记
使用subplot将图像分割显示
矩阵的可视化
for语句的使用
while的使用
if以及break的使用
else的使用
退出Octave
函数
使用函数求解代价函数值
向量化
网友评论