octave安装和基本使用

[TOC]

Octabe install

推荐 使用Octave安装包安装.

On Ubuntu, you can use:

1
sudo apt-get update && sudo apt-get install octave

On Fedora, you can use:

1
sudo yum install octave-forge 

Octave 使用

官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
GNU Octave, version 4.2.2
Copyright (C) 2018 John W. Eaton and others.
Octave was configured for "x86_64-pc-linux-gnu".
...
For more information, visit http://www.octave.org/get-involved.html

>> 1 ==2
ans = 0
>> 1~=2
ans = 1
# 9x9 随机 0~1
>> rand(9,9)
ans =

0.3560386 0.4607871 0.8059847 0.2042094 0.2411058 0.9311803 0.8023873 0.8208079 0.9631931
0.4604231 0.0222901 0.6693275 0.5887816 0.0076518 0.1670580 0.6335819 0.1711659 0.1405882
0.0519485 0.3400714 0.2909762 0.3687556 0.7300303 0.3436051 0.1679526 0.2550348 0.0342722
0.9379501 0.7760394 0.0859048 0.3292712 0.2385854 0.8567406 0.2433711 0.8027390 0.4103872
0.8297066 0.5138018 0.3540072 0.7688630 0.7550758 0.0676738 0.3528168 0.5365513 0.8800598
0.3350162 0.8376844 0.7863446 0.6448189 0.1355422 0.0235755 0.2975952 0.2879286 0.8854084
0.2484960 0.2086548 0.4821656 0.5838678 0.2676164 0.8016253 0.5552146 0.2787187 0.7647289
0.7559019 0.2639478 0.4199944 0.5312557 0.5202589 0.7852354 0.5681352 0.1088001 0.6572705
0.9477478 0.4998028 0.4179308 0.0513819 0.8775790 0.5860457 0.3993368 0.3765168 0.2140254

>> ones(9,9)
ans =

1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1

>> W = zeros(9,9);
>> W
W =

0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

>> rand(1, 2)
ans =
0.76409 0.77792

>> sqrt(9)
ans = 3
1
2
3

>> A = rand(1, 100000);
>> hist(A, 20)

octave_04

1
2
3
# 符合正太分布的随机数,randn,  u=0,seigema=1
>> A = randn (1,10000);
>> hist(A, 50)

octave_03

1
2
3
4
# u= -10 , segema = 98
>> W = -10 + sqrt(98)*(randn(1,10000));
>> hist(W)
>> hist(W, 50)

octave_01

octave_02

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54

>> eye(5)
ans =

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 (W)
ans =

1 10000

>> length (W)
ans = 10000
>> W = zeros (5)
W =

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

>> length (W)
ans = 5

>> W = zeros (5, 4)
W =

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

>> length (W)
ans = 5

>> W = zeros (2, 4)
W =

0 0 0 0
0 0 0 0

>> length (W)
ans = 4

# 注意,length 表示 航和列中,较大的这个
# length (W) = max (size (A))

octave还可以执行部分shell命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

>> pwd
ans = /home/alex/data_files/software/xmind/xmind-8-update8-linux/XMind_amd64
>> cd
>> pwd
ans = /home/alex
>> ls
2018-10-16 18-01-44

>> load sogou-qimpanel:0.pid

>> who
Variables in the current scope:

W ans

举证其他表示方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

>> 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

>> D = [A; B]
D =

1 2
3 4
5 6
11 12
13 14
15 16

# transpose
>> D'
ans =

1 3 5 11 13 15
2 4 6 12 14 16

>> E = rand(5)
E =

0.382889 0.826820 0.143657 0.105050 0.799284
0.342433 0.729053 0.571096 0.498017 0.581522
0.299401 0.346902 0.273341 0.138887 0.505162
0.745145 0.132160 0.319004 0.978364 0.488847
0.368702 0.029850 0.391279 0.496332 0.533725

>> E = rand(5,1)
E =

0.99898
0.63184
0.95289
0.37744
0.91223

最大值

1
2
3
4
5
6
7
8
9
10
>> E = rand(1,10)
E =

0.790997 0.471432 0.598649 0.593467 0.342134 0.960598 0.752763 0.021469 0.271880 0.111108

>> max (E)
ans = 0.96060
>> [value, index] = max(E)
value = 0.96060
index = 6

过滤筛选

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

>> E < 0.5
ans =

0 1 0 0 1 0 0 1 1 1

>> find(E < 0.5)
ans =

2 5 8 9 10

>> E
E =

0.790997 0.471432 0.598649 0.593467 0.342134 0.960598 0.752763 0.021469 0.271880 0.111108

>> [value, index] = find(E<0.5)
value =

1 1 1 1 1

index =

2 5 8 9 10

>> E = rand(5,5)
E =

0.787163 0.617232 0.703976 0.436314 0.410497
0.440223 0.812849 0.242780 0.869555 0.278506
0.240996 0.931844 0.060643 0.612793 0.227300
0.451394 0.673056 0.184734 0.143215 0.803382
0.795615 0.979938 0.857430 0.963706 0.765059

>> [value, index] = find(E<0.5)
value =

2
3
4
2
3
4
1
4
1
2
3

index =

1
1
1
3
3
3
4
4
5
5
5

>> [rows, colums] = find(E<0.5)
rows =

2
3
4
2
3
4
1
4
1
2
3

colums =

1
1
1
3
3
3
4
4
5
5
5

相关计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128

>> sum(E)
ans =

2.9953 2.4057 2.3705 3.2331 2.2077

>> prod(E)
ans =

0.0337328 0.0098164 0.0058173 0.0925647 0.0138977

>> floor (E)
ans =

0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

>> ceil (E)
ans =

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

>> F = randn (5)
F =

1.73542 -0.97333 0.90465 0.28529 1.89615
-0.56606 -0.78233 -1.20289 0.77386 0.64770
-1.54203 0.49252 1.34071 1.56246 -1.48515
-1.82310 -1.68507 1.41672 -1.24164 -0.20081
1.12516 0.63253 -1.90412 -1.23104 0.66748

>> ceil (F)
ans =

2 -0 1 1 2
-0 -0 -1 1 1
-1 1 2 2 -1
-1 -1 2 -1 -0
2 1 -1 -1 1

>> floor (F)
ans =

1 -1 0 0 1
-1 -1 -2 0 0
-2 0 1 1 -2
-2 -2 1 -2 -1
1 0 -2 -2 0

>> prod(F)
ans =

-3.10731 -0.39973 3.93571 0.52725 0.24448

>> sum(F)
ans =

-1.07060 -2.31567 0.55507 0.14892 1.52537

>> G1 = rand(3)
G1 =

0.536005 0.039219 0.756845
0.378762 0.097467 0.124591
0.567407 0.395335 0.371280

>> G2 = rand(3)
G2 =

0.210937 0.263702 0.241626
0.191786 0.871084 0.903337
0.350747 0.768891 0.047243

>> max(G1,G2)
ans =

0.53601 0.26370 0.75684
0.37876 0.87108 0.90334
0.56741 0.76889 0.37128

>> max(G1)
ans =

0.56741 0.39533 0.75684

>> max(G1, [], 1)
ans =

0.56741 0.39533 0.75684

>> max(G1, [], 2)
ans =

0.75684
0.37876
0.56741

>> max(max(G1))
ans = 0.75684
>> max(G1(:))
ans = 0.75684
>> G1(:)
ans =

0.536005
0.378762
0.567407
0.039219
0.097467
0.395335
0.756845
0.124591
0.371280

>> A
A =

1 2
3 4
5 6

magic使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49


>> magic (9)
ans =

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

>> magic (9) .* 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(magic (9) .* eye(9)))
ans = 369
>> sum(magic (9) .* eye(9))
ans =

47 68 8 20 41 62 74 14 35

逆矩阵和转置

inverse and transport

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# θ = ( X^T X )^−1 X^T y 
# theta = pinv(X'*X)*X'*y
# inv pinv, pinv 可以处理逆矩阵不是线性相关的问题。
>> A
A =

30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20

>> pinv(A)
ans =

8.1633e-04 8.1633e-04 2.1165e-02 -1.9533e-02 -2.0907e-03 4.1386e-03 4.0104e-04
-2.0907e-03 2.4072e-02 -1.9533e-02 1.2316e-03 4.0104e-04 8.1633e-04 8.1633e-04
2.1165e-02 -1.9117e-02 4.0104e-04 -2.0907e-03 3.7233e-03 8.1633e-04 8.1633e-04
-1.7041e-02 8.1633e-04 8.1633e-04 8.1633e-04 8.1633e-04 8.1633e-04 1.8673e-02
8.1633e-04 8.1633e-04 -2.0907e-03 3.7233e-03 1.2316e-03 2.0750e-02 -1.9533e-02
8.1633e-04 8.1633e-04 1.2316e-03 4.0104e-04 2.1165e-02 -2.2439e-02 3.7233e-03
1.2316e-03 -2.5059e-03 3.7233e-03 2.1165e-02 -1.9533e-02 8.1633e-04 8.1633e-04

>> A * pinv(A)
ans =

1.0000e+00 -4.5103e-17 -1.5266e-16 -1.0408e-15 -4.4409e-16 5.5338e-16 7.6675e-16
-7.0907e-16 1.0000e+00 4.7878e-16 2.4633e-16 2.4980e-16 4.2067e-17 -7.4853e-16
7.4463e-16 -1.4485e-16 1.0000e+00 -8.9165e-16 2.4980e-16 1.1493e-16 4.3455e-16
-3.3437e-16 5.2822e-16 -4.3715e-16 1.0000e+00 2.7756e-17 1.6697e-16 -6.5052e-17
-1.2317e-16 2.1684e-16 -1.8908e-16 -5.9674e-16 1.0000e+00 2.5847e-16 9.9053e-16
-6.6787e-16 -3.0878e-16 1.0270e-15 6.9389e-17 -2.7756e-17 1.0000e+00 -5.2042e-16
-5.9501e-16 1.0408e-17 4.8572e-16 -1.3878e-17 3.3307e-16 -1.9082e-17 1.0000e+00

画图

1
2
3
4
5
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> plot(t,y1);
>> y2=cos(2*pi*4*t);
>> plot(t,y2)

octave_05

octave_06

一个图,多个曲线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> y2=cos(2*pi*4*t);
>> hold on; #保持上图
>> plot(t,y1);
>> plot(t,y2)
>> xlabel ('time')
>> ylabel ('value')
# 图例线
>> legend('sin', 'cos')
>> title('my plot')
# 导出
>> cd
>> print -dpng 'myplot.png'

octave_07

多个figure同时呈现

1
2
3
4
5
6
>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> y2=cos(2*pi*4*t);
>> hold on;
>> figure (1);plot(t,y1);
>> figure (2);plot(t,y2);

octave_09

子图显示

1
2
3
4
>> subplot (1,2,1);
>> plot(t,y1);
>> subplot (1,2,2);
>> plot(t,y2);

octave_08

imagesc

1
2
3
4
5
6
7
8
9
10
11
12
13
>> imagesc (magic (5))
>> imagesc (magic (15)), colorbar, colormap gray;
>> help imagesc
'imagesc' is a function from the file /usr/share/octave/4.2.2/m/image/imagesc.m

-- imagesc (IMG)
-- imagesc (X, Y, IMG)
-- imagesc (..., CLIMITS)
-- imagesc (..., "PROP", VAL, ...)
-- imagesc ("PROP1", VAL1, ...)
-- imagesc (HAX, ...)
-- H = imagesc (...)
Display a scaled version of the matrix IMG as a color image.

octave_10

octave_11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

>> for i=1:10, v(i)=2^i; end;
>> v
v =

2 4 8 16 32 64 128 256 512 1024

>> include=1:10;
>> for i=include , disp(i); end;
1
2
3
4
5
6
7
8
9
10
>> i=1; while i<=5. v(i) = 100; i=i+1; end
>> v
v =

100 100 100 100 100 64 128 256 512 1024


>> while true,
v(i) = 999;
if i ==7, break;
end; end;
>> v
v =

100 100 100 100 100 999 999 256 512 1024

>> i = 1;
>> while true,
v(i) = 999;
i = i+ 1;
if i ==7, break;
end; end;
>> v
v =

999 999 999 999 999 999 999 256 512 1024

>> x = 2; if x ==1 , disp('the value is one');
elseif x == 2, disp('the value is two');
else disp('the value is not one or two');
end;

好啦,有这些基础就够用啦。再加上有help的帮助,遇到上面问题就知道怎么找解决办法了。