您的位置:首页 > 其它

Octave语法

2016-05-09 20:13 811 查看


向量

分号:分割行

空格或逗号:分割列


创建与访问


行向量

空格或逗号分割

>> v = [1 2 3] % 等效:v = [1, 2, 3]
v =

1   2   3

>> v(2) % 只有一行,所以指定就是列
ans =  2


列向量

分号分割

>> v = [1; 2; 3]
v =

1
2
3

>> v(2) % 只有一列,所以指定就是行
ans =  2


矩阵

与向量一样,空格或逗号分割列,分号分割行

冒号:代表所有,所有行或所有列


创建

>>   A = [1, 2; 3, 4] % 一行写完
A =

1   2
3   4

>> A = [1, 2; % 分行写
> 3, 4]
A =

1   2
3   4


创建技巧

a:c --- 从a到c

a:b:c --- 从a,间隔b,到c

向量也可以用这样的方法创建

>> A = [1:3; 4:6]
A =

1   2   3
4   5   6

>> A = [1:2:5; 2:2:6]
A =

1   3   5
2   4   6


特殊矩阵


单位矩阵

>> eye(3) % 单位矩阵
ans =

Diagonal Matrix

1   0   0
0   1   0
0   0   1

>> flipud(eye(3))
ans =

Permutation Matrix

0   0   1
0   1   0
1   0   0


转置矩阵

A =

1   2
3   4

>> A'
ans =

1   3
2   4


逆矩阵

A =

1   2
3   4

>> pinv(A)
ans =

-2.00000   1.00000
1.50000  -0.50000

>> pinv(A) * A
ans =

1.00000   0.00000
-0.00000   1.00000


全1矩阵

>> ones(2, 3)
ans =

1   1   1
1   1   1


全0矩阵

>> 0*ones(2, 3)
ans =

0   0   0
0   0   0
>> zeros(2, 3)
ans =

0   0   0
0   0   0


随机矩阵

>> rand(1, 3) % 0~1的随机数,1行3列
ans =

0.99291   0.65946   0.95102


高斯分布矩阵

>> randn(1, 3) % 高斯分布
ans =

0.14646   2.02587   1.33266


访问

冒号:代表所有,所有行或所有列


访问元素

A =

1   2   3
4   5   6
7   8   9

>> A(2, 2) % 第二行,第二列,先定行再定列
ans =  5


访问单行或单列

>> A(1, :) % 第一行,所有,元素
ans =

1   2   3

>> A(:, 2) % 第二列,所有,元素
ans =

2
5
8


访问多行或多列

>> A(:, [1, 3]) % 第一列和第三列,所有,元素
ans =

1   3
4   6
7   9

>> A([1, 3], :) % 第一行和第三行,所有,元素
ans =

1   2   3
7   8   9


连接

C = [A B],把B按列加到A上,生成C

C = [A; B],把B按行加到A上,生成C


添加元素

>> A = [1]
A =  1

>> A = [A, 2] % 把2,按列,添加到A上,再赋给A
A =

1   2

>> A = [A; 3] % A有两列,3只有一列,规模不匹配
error: vertical dimensions mismatch (1x2 vs 1x1)


添加行或列

>> A = [A; [3, 4]] % 将向量[3, 4],作为行,添加到A上,在赋给A
A =

1   2
3   4

>> A = [A, [5; 6]] % 将向量[5, 6],作为列,添加到A上,在赋给A
A =

1   2   5
3   4   6


矩阵连接

>> A = [1, 2; 3, 4]
A =

1   2
3   4

>> B = [5, 6; 7 ,8]
B =

5   6
7   8

>> [A; B] % 将B,作为行,添加到A上
ans =

1   2
3   4
5   6
7   8


所有的数据放入一个向量中

>> A
A =

1   2
3   4

>> A(:)
ans =

1
3
2
4

>> A(:)'
ans =

1   3   2   4


赋值

在访问基础上,给定相同规模的数据

A =

1   2   3
4   5   6
7   8   9

>> A(3, 3) = 10 % 修改单个元素的值
A =

1    2    3
4    5    6
7    8   10

>> A(1, :) = [0, 0, 0] % 修改一行的值
A =

0    0    0
4    5    6
7    8   10

>> A(2:3, 2:3)
ans =

5    6
8   10

>> A(2:3, 2:3) = [0, 0; 0, 0] % 修改指定矩阵的值
A =

0   0   0
4   0   0
7   0   0


运算


加,减

>> A = [1 1; 1 1]
A =

1   1
1   1

>> B = [2 2; 2 2]
B =

2   2
2   2

>> A + B
ans =

3   3
3   3

>> A - B
ans =

-1  -1
-1  -1

>> A - 1
ans =

0  0
0  0


相乘

>> A = [1 2; 3 4]
A =

1   2
3   4

>> B = [5 6; 7 8]
B =

5   6
7   8

>> A * B
ans =

19   22
43   50

>> -A % -1 * A
ans =

-1  -2
-3  -4


点运算

对应元素运算

维度相同:对应元素相乘

行维度相同:每行对应元素相乘

列维度相同:每列对应元素相乘

A .* B = B .* A

乘 *;除 /; 平方 ^;等


维度相同

A =

1   1
1   1

B =

2   3
2   3

>> A .* B
ans =

2   3
2   3


行维度相同

A =

1   1
1   1

B =

5   6

>> A .* B
ans =

5   6
5   6


列维度相同

A =

1   1
1   1

B =

5
6

>> A .* B
ans =

5   5
6   6


点除

矩阵乘以常数,A * 2,除可以是,A / 2

反过来,2 * A没问题,2 / A 就不行,要用2 ./ A

A =

1   2
3   4

>> 1 ./ A
ans =

1.00000   0.50000
0.33333   0.25000


逻辑

每一个元素做比较,标记0或1

>, <, ==, !=(或~=), &&, ||

A =

1   2
3   4

>> A > 2
ans =

0   0
1   1


位运算

或 | ,函数xor

且 &

非 ~

异或 ^


控制语句


if

i =  1
>> if i == 1
>     disp(1)
>  elseif i == 2
>     disp(2)
>  else
>     disp(3)
>  end


for

>> for i = 1:3 % 从1到3
>     disp(i)
>  end
1
2
3


while

>> while i <= 3
>     disp(i)
>     i = i + 1
>  end
1
2
3


break,continue

与C、C++、Java没有区别


函数

size:获取矩阵维度

length:获取最大维度

who:变量列表

whos:变量详情

clear 变量名:删除指定变量

clear:删除所有变量

find:返回符合条件元素的下标

log:log以e为底

exp:e的多少次方

abs:绝对值

floor:向下取整

ceil:向上取整

sum:求和

prop:求积


size

获取矩阵维度

A =

1   2
3   4
5   6
>> aSize = size(A)
aSize =

3   2

>> size(A, 1) % 3行
ans =  3

>> size(A, 2) % 2列
ans =  2


length

获取最大维度

A =

1   2
3   4
5   6

>> length(A) % 输出最大维度
ans =  3


who

变量列表
>> who % 现在都有哪里变量
Variables in the current scope:

A          aSize      ans        featuresX  w


whos

变量详情
>> whos % 变量详情
Variables in the current scope:

Attr Name           Size                     Bytes  Class
==== ====           ====                     =====  =====
A              3x2                         48  double
aSize          1x2                         16  double
ans            1x20                        20  char
featuresX     27x2                        432  double
w              1x10000                  80000  double

Total is 10082 elements using 80516 bytes


clear

删除变量
>> clear featuresX
>> who
Variables in the current scope:

A      aSize  ans    w
>> clear % 清除全部变量
>> who % 一个变量都没有了


find

返回符合条件元素的下标

A =

5   6
7   8

>> [r, c] = find(A > 6) % 符合要求的是:第二行第一个和第二行第二个
r =

2
2

c =

1
2


sum

求和
>> A = [1, 2; 3, 4]
A =

1   2
3   4

>> sum(A) % 等效:sum(A, 1)
ans =

4   6

>> sum(A, 2)
ans =

3
7


prod

求积
>> A
A =

1   2
3   4

>> prod(A) % 等效:prod(A, 1)
ans =

3   8

>> prod(A, 2)
ans =

2
12


max


向量

>> a = [1 5 2 3.3]
a =

1.0000   5.0000   2.0000   3.3000

>> max(a)
ans =  5

>> [val, ind] = max(a)
val =  5
ind =  2


矩阵比较

两个矩阵比较每个元素,保留大的
>> A = rand(3)
A =

0.2620788   0.6346345   0.4659161
0.0880455   0.1258945   0.0079559
0.0296765   0.7917592   0.4321800

>> B = rand(3)
B =

0.039237   0.672424   0.214649
0.491320   0.362929   0.197626
0.821090   0.675265   0.698960

>> max(A, B)
ans =

0.26208   0.67242   0.46592
0.49132   0.36293   0.19763
0.82109   0.79176   0.69896


行与列的最大值

参数二:与之比较的矩阵

参数三:按行还是按列
>> A = [1 2; 3 4]
A =

1   2
3   4

>> max(A) % 每列最大值
ans =

3   4

>> max(A, [], 1) % 每列最大值
ans =

3   4

>> max(A, [], 2) % 每行最大值
ans =

2
4


randperm

生成乱序序列
>> A = [2, 3, 4 ,5 ,6]
A =

2   3   4   5   6
>> rand_indices = randperm(length(A))
rand_indices =

1   2   4   5   3
>> A(:, rand_indices(1:3))
ans =

5   6   2


自定义函数


创建步骤

创建存放函数的文件(文件名要与函数名相同,.m结尾)

square.m


创建函数

% 一个返回值
function 返回值 = 函数名(参数列表)
函数体
end

% 多个返回值
function [返回值1, 返回值2] = 函数名(参数列表)
函数体
end

function y = square(x)
y = x^2;
end

function [y1, y2] = squareAndCube(x)
y1 = x^2;
y2 = x^3;
end


调用

进入到存放函数文件的目录

添加存放函数文件的目录,到,搜索路径

>> cd Downloads/ % 进入存放函数文件的目录
>> square(2)
ans =  4

>> addpath('~/Downloads') % 添加到搜索路径
>> cd ..
>> square(2)
ans =  4


数据


路径

与Linux命令一样
>> pwd % 当前路径
ans = /Users/XXX

>> cd ~/Developer

>> pwd
ans = /Users/XXX/Developer

>> ls % 列出目录文件和文件夹

>> cd .. % 回到上级目录


载入与保存

>> load featuresX.dat % 载入数据,变量名为featuresX
>> data = load('ex1data1.txt'); % 变量名为data

>> save featuresX.mat featuresX; % 将featuresX中的数据保存到featuresX文件中
>> save hello.txt v -ascii % 将变量v中得数据已ascii编码方式保存到hello.txt中


其他


命令

简化命令行:PS1('>> ');

关闭图表:close或close all

命令行清屏:clc


注释

%后为注释


打印


自动打印

a = 3 % 会打印数据
a = 3; % 不会打印数据,分号可以防止输出


格式化

disp(pi) % 输出:3.1416
disp(sprintf('pi is %.2f', pi)) % c语言风格


默认格式

format long % 修改默认打印格式


帮助

help size % 查看size函数的帮助文档
help help % 查看help函数的帮助文档



plot


属性

LineWidth:线宽

MarkerFaceColor:标记颜色

MarkerSize:标记大小


x,y轴

ylabel('x');

xlabel('y');


直方图

>> w = -6 + sqrt(10)*randn(1, 10000);
>> hist(w)
>> hist(w, 30) % 30组

from: https://segmentfault.com/a/1190000004204177[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: