前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Octave的基本语句及函数的使用入门—ML Note 31

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

作者头像
讲编程的高老师
发布2020-08-16 23:50:27
1.1K0
发布2020-08-16 23:50:27
举报

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

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

01

笔记

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

For循环

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

代码语言:javascript
复制
>>v = zeros(10,1)
v =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0

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

代码语言:javascript
复制
>>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.

代码语言:javascript
复制
>>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跳出循环,比如:

代码语言:javascript
复制
>>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,比如:

代码语言:javascript
复制
>>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为:

代码语言:javascript
复制
>>X=[1 1; 1 2; 1 3]
X =

   1   1
   1   2
   1   3

y为训练数据的实际值:

代码语言:javascript
复制
>>y=[1;2;3]
y =

   1
   2
   3

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

代码语言:javascript
复制
>>theta=[0;2]
theta =

   0
   2

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 讲编程的高老师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • For循环
  • while循环
  • if语句
  • 函数
  • Octave返回两个值的函数
  • 一个复杂一点的函数的例子
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档