Octave常用语法

大体内容是转的,但是绘图部分做了补充和修改。

向量


  • 分号:分割行
  • 空格或逗号:分割列

创建与访问

行向量

空格或逗号分割

>> 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
  • &gt, <, ==, !=(或~=), &&, ||
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:标记大小
t = [0:0.1:0.98];
y1 = sin(2*pi*4*t);
plot(t,y1);
y2 = cos(2*pi*4t);

hold on ;  %  使用 hold on 可以将接下来绘制的函数放在一张图里

plot(t, y2, 'r'); % 第三个参数,表示颜色

xlabel('time');
ylabel('value');  %  标记出x和y轴

legend('sin','cos') %  在图像右上角,用来区分多个函数的图例,依次表示两个曲线所表示的内容

tiitle('my plot') %  在图像的正上方给图像加上标题

print -dpng 'myPlot.png'  % 输出图像,保存在'pwd'目录下

close % 关闭图像

figure(1); plot(t,y1); % 新开第一个窗口绘制y1
figure(2); plot(t,y1); % 新开第二个窗口绘制y2

% pos为向量中为1的行序号组成的向量,neg为向量中为0的行序号组成的向量 
plot(X(pos,1),X(pos,2),'k+','LineWidth',2,'MarkerSize',7); 
plot(X(neg,1),X(neg,2),'ko','markerFaceColor','y','MarkerSize',7);
Paste_Image.png
 Format arguments:
    linestyle
          '-'  Use solid lines (default).
          '--' Use dashed lines.`
          ':'  Use dotted lines.
          '-.' Use dash-dotted lines.
    markerstyle
          '+'  crosshair
          'o'  circle
          '*'  star
          '.'  point
          'x'  cross
          's'  square
          'd'  diamond
          '^'  upward-facing triangle
          'v'  downward-facing triangle
          '>'  right-facing triangle
          '<'  left-facing triangle
          'p'  pentagram
          'h'  hexagram
    color
          'k'  blacK
          'r'  Red
          'g'  Green
          'b'  Blue
          'm'  Magenta
          'c'  Cyan
          'w'  White 

常用的修改属性有: 
 "linestyle", 
 "linewidth",
 "color",
 "marker",
 "markersize",
 "markeredgecolor",
 "markerfacecolor".

直方图


>> w = -6 + sqrt(10)*randn(1, 10000);
>> hist(w)
>> hist(w, 30) % 30组
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容