octave入门教程Word下载.docx
《octave入门教程Word下载.docx》由会员分享,可在线阅读,更多相关《octave入门教程Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
+ln(2.42)),输入octave:
1.2*sin(40*pi/180+log(2.4^2))
ans=0.76618
其中基本的数学函数有:
sin,cos,tan,log,exp,abs,floor,ceil等;
如果你要退出
Octave,
只需要在命令提示符下输入
quit
或者
exit
即可。
三,Octave变量
3.1变量
同C++,Java等变成语言一样我们可以定义变量,但Octave为解释性语言。
因此Octave中变量的类型是不用声明的,但Octave中变量名是区分大小的,即变量a和变量A是不同的变量。
deg=pi/180
deg=0.017453
如果你需要从当前的变量空间中删除某个变量,clear命令能移出所有的变量,或者移出某个特定变量,如:
clearname将移出名为name的某个变量。
3.2载入和保存数据
当你退出Octave的时候,你将丢失你所创建的变量。
如果你需要在工作的中途退出Octave,那么你可以保存当前会话的数据并在之后重新载入它。
如果你输入
saveanyname
这将整个工作空间上的变量存储到当前目录下一个名为anyname.mat的文件中(注意.mat是Octave自动添加的)。
这样你可以退出Octave,之后重新启动Octave程序,通过输入
loadanyname
将重新载入之前保存的命名空间,并从你中断的地方重新开始工作。
同样的,你可以载入或者保存特定的变量。
格式为
savefilenamevar1var2...
例如,如果你想存储deg变量,那么你可以输入
savedegconvdeg
这样将deg变量存储于名为degconv.mat的文件中,你可以通过以下命令重新载入变量
loaddegconv
Octave
同样能从文件中导入数据
这样的功能在你使用其他的数据来源进行画图或者计算的时候变得非常有用。
例如:
X=load(‘featureX.txt’);
3.3获得帮助
如果你不清楚某个命令或者函数的用法,可也用help命令来获得其详细的用法。
helpcommandname
helpplot
3.4分号和隐藏结果
分号在通常的编程语言中被用来表示程序块或者单个语句的结束。
在Octave中分号不是必需的,但它也有一个特殊的功能。
我们目前的例子中,我们只要输入一个Octave命令并不以分号结尾的话,Octave总会将语句执行的结果随即显示出来。
但是,如果我们在一行语句的末尾添上分号,Octave将不会显出相应的结果。
四数组和向量及矩阵
前面介绍过Octave的优势就是可以很方便的进行矩阵的相关计算。
4.1构造向量
构造矩阵或者向量的方法有很多。
其中最直接简单的方法就是在一个方括号[]中给出其元素,例如
a=[145]
a=145
b=[2,1,0]
b=210
c=[4;
7;
10]
c=4
7
10
在方括号中由空格或者逗号隔开的一组数据被定义为行向量;
而由分号或者回车隔开的一组数据被定义为列向量。
你可以通过已经定义的向量来定义新的向量,例如
d=[a6]
d=1456
4.2冒号表达式
利用冒号能够非常方便的创建一些特殊的向量
e=2:
6
e=23456
冒号表达式的规则是告诉octave创建一个以第一个数字开始并以一递增至第二个数的向量。
在第一和第二个数之间可以插入第三个参数来声明向量中元素之间的递增量,形如a:
b:
c。
4.3向量构造函数
zeros(M,N)创建一个MXN的全零矩阵
ones(M,N)
创建一个MXN的全一矩阵
linspace(x1,x2,N)创建一个N个元素的向量,均匀分布于x1和下x2
eye(M)创建一个MXM的单位矩阵
rand(M,N)创建一个MXN的矩阵,元素为随机值
4.4向量中的元素操作
向量中的元素通过括号(),而第一个元素的编号为1,而不是像C或者C++那样从0开始。
例如
a=[1:
2:
6-10]
a=135-10
我们可以通过以下命令访问到该向量的第三个元素
a(3)
ans=5
冒号的表示法同样可以用于声明向量中的元素的范围
a(3:
5)
ans=5-10
a(1:
ans=150
4.5向量的计算
将一组数据存入一个向量之后能够使用很多的Octave函数来进行计算。
在C++中如果你想进行相同的计算,例如每个元素乘以2,你需要使用for循环来对每个元素操作。
在Octave中虽然也可以使用for循环来实现,但是Octave本身由有简单的向量操作方式。
向量中每个都乘以一个数可以通过对该向量乘以一个数来实现。
以之前定义的a向量为例:
1>
a=[1:
a=135-10
2>
a*2
ans=2610-20
对向量中所有元素都除以一个数的操作与乘法类似。
使用+−算符,你同样可以对该向量中的每个元素都加上或者减去一个数值。
两个向量的相乘遵循矩阵的乘法法则,向量乘法并不是对应元素的相乘。
如果要进行对应元素的乘除法,你可以使用.*以及./算符注意每个算符前的
‘.’
表示为一个元素对元素的计算
。
例如:
3>
b=1:
5
b=12345
4>
a.*b
ans=1615-40
逐个元素的乘方计算同样也很有用。
该计算的算符为,例如
5>
b.^2
ans=1491625
6>
2.^b
ans=2481632
7>
a.^b
ans=1912510
只要两个向量又相同的大小和形状,它们就可以进行元素之间的(element-by-element)加减乘除和乘方运算。
4.6函数操作向量
前面讲到过的函数也是可以适用于向量。
exp,log,abs等
abs([-12-3])
ans=123
此外max,length,size,sum,mean,std,floor,ceil等函数也许要掌握,可以通过help命令获得详细用法。
4.7矩阵的转置
一个向量的转置将其由行向量转为列向量或者由列向量转换为行向量。
矩阵的转置将其行和列交换。
在数学上,矩阵A的转置表示为AT在octave中转置操作用上引号实现:
A=[579;
-13-2]
A=5
7
9
-1
3-2
A'
ans=5
-1
7
3
9
-2
此外inv求矩阵的逆,det求矩阵的特征值,trace求矩阵的迹。
五画图
Octave通过调用另一个开源软件GNUPLOT来实现非常丰富的画图功能。
最基本的画图命令是plot(x,y),其中x,y分别为横轴和纵轴数据。
可以进行相应地颜色和样式的选择如:
’ro’代表们红色圆圈,’b.’代表蓝色点点等;
可以通过title,xlabel,ylabel添加标题以及x,y轴名称;
legend命令为该图片添加相应的图例。
5.1如果你想保存当前的图片内容并将新创建的图片层叠到原图片上,你可以通过使用holdon命令来实现。
使用该命令,我们可以实现在同一幅图上呈现由两个plot命令绘制的线条。
x=linspace(-10,10);
plot(x,sin(x),’r-’);
holdon
plot(x,sin(x)./x,’b*’)
title(‘Figure’)
xlabel(‘X’)
ylabel(‘Y’)
legend(‘sin(x)’,’sin(x)/x’)
5.2subplot(2,3,2)表示在一个格子中画图。
因此该条语句的意思是分成一个2X3的格子,并在第2个格子里画图;
其中子格的顺序为从左到右从上到下递增,即
1
2
3
4
5
6
subplot(2,1,1)
plot(x,sin(x));
subplot(2,1,2)
plot(x,sin(x)./x)
5.3多幅图片可以用figure命令来实现.
5.4绘制曲面
x=2:
0.2:
4;
y=1:
3;
[X,Y]=meshgrid(x,y);
%makethegrid
Z=(X-3).^2-(Y-2).^2;
subplot(2,2,1);
surf(Z);
title('
surf'
)
subplot(2,2,2);
mesh(Z);
mesh'
subplot(2,2,3);
meshz(Z);
meshz'
subplot(2,2,4);
contour(Z);
contour'
六Octave脚本
如果你有一些重复输入的命令的,你可以将这一系列的命令存入一个Octave脚本之中。
这种包含Octave命令的文本文件是Octave程序的基本形式。
当你在Octave中执行这样的脚本的时候,其效果与将这些命令一行行输入Octave中的效果是一样的。
而且当你对一系列要输入Octave的命令不是很拿的准的时候,在一个脚本中修改这些命令会比在Octave终端中重新调出及修改命令要简单方便许多。
Octave的脚本是普通的文本文件,但是他们需要有一个.m的后缀(e.g.run.m)。
因此,它们通常也被称为M文件。
除去后缀的文件名部分是你在执行该命令时需要向Octave终端输入的部分。
你可以在任何的文本编辑器(如,emacs,vi,notepad)中创建并编辑一个脚本文件。
在Octave中可以通过以下命令
edit
在新窗口中调出文本编辑器emacs。
如果你想编辑一个已存在的脚本,你可以在edit命令后加上脚本的名字。
例如,比如你有个名为run.m的脚本,输入editrun将调出编辑器并打开该文件供你编辑。
然后在Octave中输入run执行脚本:
run
Octave将运行该脚本中的命令并得到相应的结果。
七控制语句
到目前为止我们所看到的程序或者表达式都是一些简单的顺序执行的操作。
向量和矩阵的使用能够让Octave执行更加高级的计算,但是要实现更加复杂的功能,我们还需要一些标准的程序语言。
Octave提供了通常的循环和选择语句。
其语法类似于我们熟知的C,C++,Java等编程语言。
在这里仅仅举一个例子:
x=1;
while1+x>
1
x=x/2;
end
x
x=
1.1102e-16
八Octave函数
Octave中的脚本能实现一些简单的程序,但是比脚本更加强大的是用户自定义函数。
自定义函数能够让你在命令行、其他函数中和脚本中调用。
在Octave函数中参数是通过值传递的而不是通过reference传递并能返回多个返回值。
Octave函数如同脚本一样,是写入一个纯文本文件中的,不同的是函数文件的第一行遵循如下的格式
function[output1,output2,...]=name(input1,input2,...)
每个函数都卸载了不同的M文件中,而且该M文件名不须与函数名一致。
例如名为sind()的函数必需被定义在名为sind.m的M文件中。
每个函数接受一定的参数输入并输出一定的数值。
当你需要重复性的执行一定表达式,这表明你需要将这与的操作封装为一个函数。
封装为函数之后Octave将更加易用,增加了代码的可读性并可以供他人使用。
我们可以创建这么一个函数,创建一个名为sind.m的文本文件并包含以下内容:
functions=sind(x)
%SIND(x)Calculatessine(x)indegrees
s=sin(x*pi/180);
然后就可以使用该函数了,例如:
sind(0)
ans=0
sind(45)
ans=0.7071
t=sind([306090])
t=0.50000.86601.0000