目录
Octave 控制语句,定义和使用函数
for
首先初始化一个10行1列的列向量v:
for循环语句:
v输出结果为:
即,把从1到10的2^i存放到列向量v中。
或者,先初始化一个序列indices(英文,索引):
while
break
(以v为10*1的零向量为例)
或者可以让语句结构看起来更清晰些,添加一些空格:
(e...好像tab键不能用?...)
if-else
最后一行为输出结果
定义和调用函数
在Octave环境下定义函数,需要创建一个文件,用函数名来命名,以 ' .m ' 的后缀结尾。
当Octave发现这个文件,它知道应该在什么位置查找该函数的定义。
如,创建一个 ‘squareThisNumber.m’ 文件
打开这个文件,写入函数定义
第一行告诉Octave,我希望这个函数返回一个值,将它存放在变量y中;并且,还告诉Octave,这个函数有一个自变量x。
在这个文件中,函数定义的主体就是第二行
(目前使用的是notepad++,其他记事本、写字板也可以,写字板更好)
调用该函数
首先要把Octave的路径换成函数定义文件所在的路径,否则Octave会认为函数没有被定义。
添加Octave查找路径
即可以使在添加路径(如桌面)到Octave的查找路径之后,就算不在该目录下,也能找到该目录下的文件(如C盘)
Octave还可以定义有多个返回值的函数
一个更复杂的例子
现在要定义一个Octave函数来计算对于不同theta取值的代价函数J。假设有如下数据集。
X(设计矩阵)的第一列代表x_0,第二列为训练集的样本
y代表每个训练数据对应的输出,即y轴坐标
代价函数 ' costFunctionJ.m '的函数定义为:
theta为theta_0、theta_1等组成的向量。下图为不同theta向量取值时,代价函数 j 的值:
(因为正确的回归的theta的取值正好为[0;1],因此当theta=[0;1]时,代价函数 j 值为0)