Octave语法

来源:互联网 发布:随机抽奖软件 编辑:程序博客网 时间:2024/05/16 13:01

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) * Aans =   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的随机数,13列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上,再赋给AA =   1   2   >> A = [A; 3] % A有两列,3只有一列,规模不匹配error: vertical dimensions mismatch (1x2 vs 1x1)

添加行或列

>> A = [A; [3, 4]] % 将向量[3, 4],作为行,添加到A上,在赋给AA =   1   2   3   4   >> A = [A, [5; 6]] % 将向量[5, 6],作为列,添加到A上,在赋给AA =   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

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

>> AA =   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 + Bans =   3   3   3   3>> A - Bans =  -1  -1  -1  -1>> A - 1ans =  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 * Bans =   19   22   43   50>> -A % -1 * Aans =  -1  -2  -3  -4

点运算

对应元素运算

  • 维度相同:对应元素相乘

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

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

  • A .* B = B .* A

  • 乘 *;除 /; 平方 ^;等

维度相同

A =   1   1   1   1B =   2   3   2   3>> A .* Bans =   2   3   2   3

行维度相同

A =   1   1   1   1B =   5   6>> A .* Bans =   5   6   5   6

列维度相同

A =   1   1   1   1B =   5   6>> A .* Bans =   5   5   6   6

点除

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

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

A =   1   2   3   4>> 1 ./ Aans =   1.00000   0.50000   0.33333   0.25000

逻辑

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

  • &gt, <, ==, !=(或~=), &&, ||

A =   1   2   3   4>> A > 2ans =   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  doubleTotal is 10082 elements using 80516 bytes

clear

删除变量

>> clear featuresX>> whoVariables in the current scope:A      aSize  ans    w>> clear % 清除全部变量>> who % 一个变量都没有了

find

  • 返回符合条件元素的下标

A =   5   6   7   8>> [r, c] = find(A > 6) % 符合要求的是:第二行第一个和第二行第二个r =   2   2c =   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

求积

>> AA =   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 =  5ind =  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;endfunction [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>> pwdans = /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.1416disp(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
  • 2015年12月26日发布
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机做话筒连蓝牙音箱不同步怎么办 荣耀畅玩7x触屏不灵怎么办 华为6x屏幕点没反应怎么办 苹果耳机按一下就挂断电话怎么办 华为畅享7忘记账号密码怎么办 华为荣耀8手机外放声音小怎么办 安卓手机耳机减音量不能用怎么办 苹果手机微信语音是耳机模式怎么办 平果手机没声音出现耳机模式怎么办 苹果6s进水了一直耳机模式怎么办 华为手机没声音显示耳机模式怎么办 华为手机没声音出现耳机模式怎么办 安卓手机全民k歌耳返延迟怎么办 华为手机双清后手机开不了机怎么办 荣耀9上面有个耳机标志怎么办 华为p9耳机有一个没有声音怎么办 小米5c手机gps信号弱怎么办 华为8手机时常听常音乐声怎么办 手机用久了变慢了怎么办 免税店买的皮带太短了怎么办 小米手机自拍照片是反的怎么办 华为p20旅行助手被删了怎么办 假如手机点击一个链接是病毒怎么办 华为手机自带铃声没了怎么办 华为手机升级后铃声没了怎么办 华为平板电脑激活锁忘记了怎么办 华为手机不小心删了系统应用怎么办 华为畅想6s开机键坏了怎么办 浏览网页是进入有病毒的网页怎么办 华为荣耀7清理加速那么慢怎么办 华为手机自带天气卸载了怎么办 手机被病毒感染了开不了机了怎么办 小米手机系统桌面已停止运行怎么办 三星手机应用锁密码忘了怎么办 手机管家应用加密密码忘记了怎么办 下载东西呗安全管家制止了该怎么办 手机百度时不小心中毒扣话费怎么办 手机扫二维码中了木马病毒要怎么办 电脑管家微信扫描语音打不开怎么办 遇到花心老公又爱玩没有担当怎么办 软件全闪退返回键不管用了怎么办