octave简明教程

吴恩达的机器学习课程的作业可以使用Matlab或者octave,这里记录一下octave的基本操作。

Contents

符号

符号解释
%注释
~=不等于
;结束符
>大于
<小于
=等于
+
-
*
/
转置

> , < , =这些符号可以应用到矩阵中,可以将矩阵中的每一个元素和符号后的数字进行比较,最终判断成立返回1, 判断错误返回0.

示例:

>> 1+1
ans = 2
>> 1*8
ans = 8
>> a = 3
a = 3
>> a~=1
ans = 1
>> a~=3
ans = 0
>> a = [11 2 3; 1 21 3 ; 1 2 32]
a =

   11    2    3
    1   21    3
    1    2   32

>> a >10
ans =

  1  0  0
  0  1  0
  0  0  1
>> a == 10
ans =

  0  0  0
  0  0  0
  0  0  0

>> a == 1
ans =

  0  0  0
  1  0  0
  1  0  0
>> a'
ans =

   11    1    1
    2   21    2
    3    3   32

矩阵

矩阵初始化
>> a  = [1 2 3; 4 5 6; 7 8 9]
a =

   1   2   3
   4   5   6
   7   8   9

注:;代表的是换行,每一行中可以拿,隔开也可以不用,直接空开就可以。

特殊矩阵初始化

单位阵:

>> eye(3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

全一阵:

>> ones(3,3) % 前一个3为行数,后一个3为列数
ans =

   1   1   1
   1   1   1
   1   1   1

全零阵:

>> zeros(2,3)
ans =

   0   0   0
   0   0   0

随机矩阵:

>> rand(3,3)
ans =

   0.1583   0.6459   0.4255
   0.4938   0.3079   0.2308
   0.1299   0.7594   0.4041

魔法矩阵:每行,每列,对角的和都相等的矩阵

>> magic(3)
ans =

   8   1   6
   3   5   7
   4   9   2
矩阵索引

:冒号表示从…到…,单独的冒号表示所有

︋>> a  = [1 2 3; 4 5 6; 7 8 9]
>> a(1, 1)  %第一行第一列
ans = 1
>> a(2, 2)   %第二行第二列
ans = 5
>> a(1:2, 1:2)   %1到2行,1到2列
ans =

   1   2
   4   5

>> a(:, 1:2)     %所有行,1到2列
ans =

   1   2
   4   5
   7   8

矩阵变化

以下示例均使用a = [1 2 3; 4 5 6; 7 8 9]

重新赋值
>> a(1,:) = [7 8 9] %将第一行改为 7 8 9 
a =

   7   8   9
   4   5   6
   7   8   9
添加到新行/列
>> a = [a, [10; 11; 12]] %添加列
a =

    7    8    9   10
    4    5    6   11
    7    8    9   12

>> a  = [1 2 3; 4 5 6; 7 8 9];
>> a = [a ;[1 2 3]]  %添加行
a =

   1   2   3
   4   5   6
   7   8   9
   1   2   3
矩阵向量化

按照列的顺序排布:

>> a  = [1 2 3; 4 5 6; 7 8 9];
>> a(:)
ans =

   1
   4
   7
   2
   5
   8
   3
   6
   9

如果想按行排布,可以使用转置:

>> a'(:)
ans =

   1
   2
   3
   4
   5
   6
   7
   8
   9

矩阵计算

矩阵相加减
>> a+1  
ans =

    2    3    4
    5    6    7
    8    9   10
>> a+a
ans =

    2    4    6
    8   10   12
   14   16   18
>> a-a
ans =

   0   0   0
   0   0   0
   0   0   0

>> a-1
ans =

   0   1   2
   3   4   5
   6   7   8

矩阵相乘除
>> a *a   %叉乘:线性代数中的叉乘
ans =

    30    36    42
    66    81    96
   102   126   150

>> a.*a    %点乘:对应位置相乘
ans =

    1    4    9
   16   25   36
   49   64   81
>> a./2    %点除:同上
ans =

   0.5000   1.0000   1.5000
   2.0000   2.5000   3.0000
   3.5000   4.0000   4.5000
矩阵运算
>> a.^2    %幂运算
ans =

    1    4    9
   16   25   36
   49   64   81

>> exp(a)    %指数运算:每个数都求以e为底的指数
ans =

   2.7183e+00   7.3891e+00   2.0086e+01
   5.4598e+01   1.4841e+02   4.0343e+02
   1.0966e+03   2.9810e+03   8.1031e+03

>> log(a)    %对数运算:以e为底
ans =

        0   0.6931   1.0986
   1.3863   1.6094   1.7918
   1.9459   2.0794   2.1972

>> log2(a)    %对数运算:以2为底(以什么为底就log什么)
ans =

        0   1.0000   1.5850
   2.0000   2.3219   2.5850
   2.8074   3.0000   3.1699

>> log10(a)    %对数运算:以10为底
ans =

        0   0.3010   0.4771
   0.6021   0.6990   0.7782
   0.8451   0.9031   0.9542

内建函数

length():返回的是长度,有可能是行的个数有,可能是列的个数。这取决于那个时候更大

>> length(a)
ans = 3
>> length(rand(5,7))
ans = 7

max():对于向量来说会返回其中最大的一个数字,对矩阵来说会返回一个向量,向量的每一列对应原来矩阵每一列的最大值

>> max([ 7 8 9 ])
ans = 9
>> max(a)
ans =

   7   8   9
>> max(a, [], 2)   %第三个参数表示按行找最大值(若为1则是按列找,默认为1)
ans =

   3
   6
   9

floor():向下取整
ceil():向上取整

>> floor(10.12)
ans = 10
>> ceil(10.12)
ans = 11

sum():按行/列相加

︋>> sum(a,1)   %第二个参数为1时,按列加(默认为1)
ans =

   12   15   18

>> sum(a,2)    %第二个参数为2时,按行加
ans =

    6
   15
   24

flipud():将矩阵上下颠倒

>> flipud(a)
ans =

   7   8   9
   4   5   6
   1   2   3

rank():求矩阵的秩

>> rank(a)
ans = 2

rref():将矩阵化为行最简

>> rref(a)
ans =

   1.0000        0  -1.0000
        0   1.0000   2.0000
        0        0        0

pinv():求矩阵的逆矩阵

>> a=[3,4;2,16]
a =

    3    4
    2   16

>> pinv(a)*a
ans =

   1.0000  -0.0000
        0   1.0000

>> pinv(a)
ans =

   0.400000  -0.100000
  -0.050000   0.075000

画图

>> x = -1:0.1:1;
>> y = x.^2;
>> plot(x, y)

hold on %若要保留上一次的结果就hold on
y2 = -x .^ 2 + 1;
plot(x, y2, 'r');

% 加标签
xlabel("x value");
ylabel("y value");
legend("x^2", "-x^2+1"); % 对应图中的颜色线条注释
title("first plot");
cd Desktop; print -dpng "firstPlot.png" %会保存到桌面上

语法

for循环:

for i=1:10
  disp("Hello world");
end;

while循环:

a = 10;
while a > 0
  disp("HI");
  a -= 1;
end;

if/else:

> if a > 1
>   disp("a is bigger than 1");
> else
>   disp("a is smaller than 1");
> endif;

>> a is smaller than 1

创建函数:

function val = func(x, y)    %x,y是函数传入的参数,val是返回值
    ...
end

个人博客地址:https://callmelp.github.io/
github原文地址:https://github.com/callmeLP/Octave_Tutorials

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tracking_light

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值