Octave的基本语句及函数的使用入门—ML Note 31

时间:2022-07-23
本文章向大家介绍Octave的基本语句及函数的使用入门—ML Note 31,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本文是吴恩达《机器学习》视频笔记第31篇,对应第2周第13个视频。

“Octave Tutorial——For, while, if statements, and functions”

01

笔记

本节的内容,还是很简单的。如果学过C语言的,基本可以跳过了,但为了保证课程的整体性,还是把这个小文贴在专辑里。

For循环

先定义一个10*1的全0列向量。

>>v = zeros(10,1)
v =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0

如果我想按照一定规则对上面的向量的值进行更改,而这个更改和v的元素的位置有关,比如:

>>for i=1:10,  %注意,这里的后面是个逗号
>    v(i)=2^i; %2的i次方,注意前面的空格不是必须的,和python不一样
> end          %for循环的结束
>>v
v =

      2
      4
      8
     16
     32
     64
    128
    256
    512
   1024

这里的for循环很有意思,它以for开头(循环条件的后面是个逗号),以end结尾,循环体里面是分号结尾的语句。Octave for循环的写法比较有个性。

while循环

我们通过一个while循环将上面的列向量v的前5个元素置为100.

>>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循环比for循环麻烦一点。还有一点要注意的是,Octave中的向量元素的标号是从1开始的,不是从0开始的,这个和其它语言不一样。

另外,我们可以用break跳出循环,比如:

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

这个循环体里面如果不加break的话就是个死循环,因为循环条件一直都是true的。但是加了break之后,等i到6的时候就跳出循环。

上面的代码还用到了if语句,if的条件后面也是跟的逗号。

if语句

当然,if后面还可以跟else或者elseif,比如:

>>if v(1)==1,
>  disp('value is 1');
> elseif v(1)==2,
>  disp('value is 2');
> else,
>  disp('value is not 1 or 2');
> end;
value is not 1 or 2

函数

怎样定义和使用函数呢?

首先呢,要先创建一个以函数名为文件名、以“.m”为扩展名的*.m文件。比如:squareThisNumber.m文件。

可以用微软的写字板打开,然后编辑为:

函数的定义方式还是比较简洁的,关键字function后面跟一个y表示函数的返回变量,squareThisNumber为函数名,后面跟着小括号里面的x表示这个函数会有一个输入值,后面的一句为函数体,函数体当然也可以很复杂。

这个时候如果我们在Octave的命令行里面调用这个函数会报错:

说我们的squareThisNumber函数没定义。是因为我们没有把刚刚定义的函数的m文件放到当前的工作路径下,只要把m文件移过去就可以了。

用pwd命令看一下工作路径,然后把m文件移动过去即可。

还有一种办法,就是用命令把我们存放函数文件的路径加到Octave的搜索路径中,如下图。

另外一种办法,是用cd命令将Octave的工作路径改为函数文件的存放路径。

Octave返回两个值的函数

很多计算机语言要想让函数返回多个值是很麻烦的,但是Octave就方便了。

方法是:

调用也很简单:

一个复杂一点的函数的例子

假设我们在二维直角坐标系中有三个点,(1,1)、(2,2)、(3,3)。

我们用一个直线去拟合这三个点,直线的方程为:

我们给定一组theta,就可以算出预测值,然后根据预测值和真实值的方差,即Cost函数。

那我们先来定义设计矩阵,上面的y的式子中theta1的x_0是1,所以设计矩阵X为:

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

   1   1
   1   2
   1   3

y为训练数据的实际值:

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

   1
   2
   3

我们任意设置一个系数向量theta,然后计算这个theta向量对应的cost函数。假设:

>>theta=[0;2]
theta =

   0
   2

所以cost函数定义为costFunctionJ,如下:

然后,调用这个函数算一下,得出cost函数的值:

如果改一下theta,又可以得到不一样的cost值。

好了,Octave的基本语句和函数的使用就介绍到这里,下一个视频是第二周的最后一个视频,将介绍Octave中的矢量。