Octave入门基础
Octave入門基礎(chǔ)
一。簡(jiǎn)單介紹
1.1 Octave是什么?
Octave是一款用于數(shù)值計(jì)算和畫圖的開源軟件。和Matlab一樣,Octave 尤其精于矩陣運(yùn)算:求解聯(lián)立方程組、計(jì)算矩陣特征值和特征向量等等。
1.2 Octave的適用對(duì)象
Octave和Matlab被project人員和科研人員廣泛使用來(lái)進(jìn)行各種工業(yè)和學(xué)術(shù)上的數(shù)值計(jì)算和仿真。
比如,NASA 使用它來(lái)開發(fā)飛行器的對(duì)接系統(tǒng);Jaguar Racing使用它來(lái)可視化和分析從 F1 賽車傳來(lái)的數(shù) 據(jù);Sheffield大學(xué)用它來(lái)開發(fā)用于識(shí)別癌細(xì)胞的軟件。
Octave這種軟件讓編寫數(shù)值處理程序變得簡(jiǎn)單,并提供數(shù)據(jù)可視化的多種方式。
1.3 Octave的下載與安裝
參照網(wǎng)上相關(guān)教程;
二,簡(jiǎn)單計(jì)算
2.1 Octave最簡(jiǎn)單的使用方式就是像使用一個(gè)計(jì)算器一樣在命令提示符下輸入對(duì)應(yīng)的計(jì)算式。
Octave能識(shí)別通常的計(jì)算表達(dá)式。
比如,在終端輸入
octave:##>2+2
并按回車鍵, 你將得到下面的結(jié)果ans=4
各種計(jì)算符號(hào)的優(yōu)先級(jí)與常規(guī)的一致,比方括號(hào)有最大優(yōu)先級(jí),其次為乘方,其次為乘除運(yùn)算,最后為加減運(yùn)算
2.2 內(nèi)建函數(shù)
Octave中有非常多內(nèi)建函數(shù)。能夠通過(guò)輸入函數(shù)名和括號(hào)里的輸入?yún)?shù)來(lái)調(diào)用函數(shù),比如:
octave:##> exp(1)
ans=2.71813
又如還有一個(gè)更長(zhǎng)的表達(dá)式:計(jì)算 1.2 sin(40?+ ln(2.42)), 輸入octave:##>1.2*sin(40*pi/180+log(2.4^2))
ans=0.76618
當(dāng)中主要的數(shù)學(xué)函數(shù)有:sin, cos, tan, log, exp, abs, floor, ceil等。
假設(shè)你要退出Octave,僅僅須要在命令提示符下輸入quit或者exit就可以。
三。Octave變量
3.1 變量
同C++。Java等變成語(yǔ)言一樣我們能夠定義變量,但Octave 為解釋性語(yǔ)言。
因此Octave中變量的類型是不用聲明的,但Octave中變量名是區(qū)分大小的,即變量a和變量A是不同的變量。
octave:##> deg=pi/180
deg=0.017453
假設(shè)你須要從當(dāng)前的變量空間中刪除某個(gè)變量,clear命令能移出全部的變量,或者移出某個(gè)特定變量, 如:
clear name?將移出名為 name 的某個(gè)變量。
3.2 加載和保存數(shù)據(jù)
當(dāng)你退出Octave的時(shí)候,你將丟失你所創(chuàng)建的變量。假設(shè)你須要在工作的中途退出Octave,那么你能夠保存當(dāng)前會(huì)話的數(shù)據(jù)并在之后又一次加載它。假設(shè)你輸入
octave:##> save anyname?
這將整個(gè)工作空間上的變量存儲(chǔ)到當(dāng)前文件夾下一個(gè)名為anyname.mat 的文件里 (注意.mat是Octave自己主動(dòng)加入的)。這樣你能夠退出Octave,之后又一次啟動(dòng)Octave程序,通過(guò)輸入
octave:##> loadanyname
將又一次加載之前保存的命名空間,并從你中斷的地方又一次開始工作。
相同的,你能夠加載或者保存特定的變量。格式為
octave:##>save filename var1 var2 ...
比如,假設(shè)你想存儲(chǔ)deg變量,那么你能夠輸入
octave:##> save degconv deg?
這樣將deg變量存儲(chǔ)于名為degconv.mat的文件里,你能夠通過(guò)下面命令又一次加載變量
octave:##> loaddegconv
Octave
相同能從文件里導(dǎo)入數(shù)據(jù),這種功能在你使用其它的數(shù)據(jù)來(lái)源進(jìn)行繪圖或者計(jì)算的時(shí)候變得很實(shí)用。
比如:
X=load(‘featureX.txt’);
3.3 獲得幫助
假設(shè)你不清楚某個(gè)命令或者函數(shù)的使用方法,可也用help命令來(lái)獲得其具體的使用方法。
help commandname
比如:help plot
3.4 分號(hào)和隱藏結(jié)果
分號(hào)在通常的編程語(yǔ)言中被用來(lái)表示程序塊或者單個(gè)語(yǔ)句的結(jié)束。在 Octave 中分號(hào)沒(méi)必要的,但它也有一個(gè)特殊的功能。我們眼下的樣例中,我們僅僅要輸入一個(gè) Octave 命令并不以分號(hào)結(jié)尾的話,Octave 總 會(huì)將語(yǔ)句運(yùn)行的結(jié)果隨即顯示出來(lái)。
可是,假設(shè)我們?cè)谝恍姓Z(yǔ)句的末尾添上分號(hào),Octave將不會(huì)顯出對(duì)應(yīng)的 結(jié)果。
四 數(shù)組和向量及矩陣
前面介紹過(guò)Octave的優(yōu)勢(shì)就是能夠非常方便的進(jìn)行矩陣的相關(guān)計(jì)算。
4.1 構(gòu)造向量
構(gòu)造矩陣或者向量的方法有非常多。當(dāng)中最直接簡(jiǎn)單的方法就是在一個(gè)方括號(hào) [] 中給出其元素,比如
octave:##> a=[1 4 5]
a=1 4 5
octave:##> b=[2,1,0]
b=2 1 0
octave:##> c=[4;7;10]
c=4
7
10
在方括號(hào)里由空格或者逗號(hào)隔開的一組數(shù)據(jù)被定義為行向量; 而由分號(hào)或者回車隔開的一組數(shù)據(jù)被定義為列向量。你能夠通過(guò)已經(jīng)定義的向量來(lái)定義新的向量,比如
octave:##> a=[1 4 5]
a=1 4 5
octave:##> d=[a 6]
d=1 4 5 6
4.2 冒號(hào)表達(dá)式
利用冒號(hào)可以很方便的創(chuàng)建一些特殊的向量
octave:##> e=2:6
e=2 3 4 5 6
冒號(hào)表達(dá)式的規(guī)則是告訴octave創(chuàng)建一個(gè)以第一個(gè)數(shù)字開始并以一遞增至第二個(gè)數(shù)的向量。在第一和第 二個(gè)數(shù)之間能夠插入第三個(gè)參數(shù)來(lái)聲明向量中元素之間的遞增量,形如 a : b : c。
4.3 向量構(gòu)造函數(shù)
zeros(M,N) 創(chuàng)建一個(gè)MXN的全零矩陣
ones(M,N) 創(chuàng)建一個(gè)MXN的全一矩陣
linspace(x1,x2,N) 創(chuàng)建一個(gè)N個(gè)元素的向量。均勻分布于x1和下x2
eye(M) 創(chuàng)建一個(gè)MXM的單位矩陣
rand(M,N) 創(chuàng)建一個(gè)MXN的矩陣,元素為隨機(jī)值
4.4 向量中的元素操作
向量中的元素通過(guò)括號(hào)(),而第一個(gè)元素的編號(hào)為1, 而不是像C或者 C++那樣從0開始。比如
octave:##>a=[1:2:6 -1 0]
a=1 3 5 -1 0
我們能夠通過(guò)下面命令訪問(wèn)到該向量的第三個(gè)元素
octave:##> a(3)
ans=5
冒號(hào)的表示法相同能夠用于聲明向量中的元素的范圍
octave:##>a(3:5)
ans=5 -1 0
octave:##>a(1:2:5)
ans= 1 5 0
4.5 向量的計(jì)算
將一組數(shù)據(jù)存入一個(gè)向量之后可以使用非常多的Octave函數(shù)來(lái)進(jìn)行計(jì)算。
在C++中假設(shè)你想進(jìn)行同樣的計(jì)算,比如每一個(gè)元素乘以2, 你須要使用for循環(huán)來(lái)對(duì)每一個(gè)元素操作。
在Octave中盡管也可以使用for循環(huán)來(lái)實(shí)現(xiàn),可是Octave本身由有簡(jiǎn)單的向量操作方式。
向量中每一個(gè)都乘以一個(gè)數(shù)能夠通過(guò)對(duì)該向量乘以一個(gè)數(shù)來(lái)實(shí)現(xiàn)。
以之前定義的 a 向量為例:
octave:1> a=[1:2:6 -1 0]
a=?1 3 5 -1 0
octave:2> a*2
ans=2 6 10 -2 0
對(duì)向量中全部元素都除以一個(gè)數(shù)的操作與乘法類似。
使用+?算符,你相同能夠?qū)υ撓蛄恐械拿恳粋€(gè)元素都加上或者減去一個(gè)數(shù)值。兩個(gè)向量的相乘遵循矩陣的乘法法則,向量乘法并非相應(yīng)元素的相乘。假設(shè)要進(jìn)行相應(yīng)元素的乘除法,你能夠使用.* 以及./ 算符注意每一個(gè)算符前的‘.’表示為一個(gè)元素對(duì)元素的計(jì)算。比如:
octave:3> b=1:5
b= 1 2 3 4 5
octave:4> a.*b
ans=1 6 15 -4 0
逐個(gè)元素的乘方計(jì)算相同也非常實(shí)用。
該計(jì)算的算符為,比如
octave:5> b.^2
ans =1 4 9 16 25
octave:6> 2.^b
ans =2 4 8 16 32
octave:7> a.^b
ans =?1 9 125 1 0
僅僅要兩個(gè)向量又同樣的大小和形狀,它們就能夠進(jìn)行元素之間的(element-by-element) 加減乘除和乘方運(yùn)算。
4.6 函數(shù)操作向量
前面講到過(guò)的函數(shù)也是能夠適用于向量。
比如:exp, log,abs等
octave:##>abs([-1 2 -3])
ans=1 2 3
此外max, length,size, sum, mean, std, floor, ceil等函數(shù)或許要掌握,能夠通過(guò)help命令獲得具體使用方法。
4.7 矩陣的轉(zhuǎn)置
一個(gè)向量的轉(zhuǎn)置將其由行向量轉(zhuǎn)為列向量或者由列向量轉(zhuǎn)換為行向量。
矩陣的轉(zhuǎn)置將其行和列交換。
在數(shù)學(xué)上,矩陣A的轉(zhuǎn)置表示為AT 在octave中轉(zhuǎn)置操作用上引號(hào)實(shí)現(xiàn):
octave:6> A=[5 7 9;-1 3 -2]
A= 5 7 9
-1 3 - 2
octave:7> A'
ans =5 -1
7 3
9 -2
此外inv求矩陣的逆,det求矩陣的特征值。trace求矩陣的跡。
五 繪圖
Octave通過(guò)調(diào)用還有一個(gè)開源軟件 GNUPLOT來(lái)實(shí)現(xiàn)很豐富的繪圖功能。最主要的繪圖命令是 plot(x,y), 當(dāng)中 x,y 分別為橫軸和縱軸數(shù)據(jù)。
能夠進(jìn)行對(duì)應(yīng)地顏色和樣式的選擇如:’ro’代表們紅色圓圈,’b.’代表藍(lán)色點(diǎn)點(diǎn)等;能夠通過(guò)title,xlabel。ylabel加入標(biāo)題以及x,y軸名稱。legend命令為該圖片加入對(duì)應(yīng)的圖例。
5.1 假設(shè)你想保存當(dāng)前的圖片內(nèi)容并將新創(chuàng)建的圖片層疊到原圖片上,你能夠通過(guò)使用 hold on命令來(lái)實(shí)現(xiàn)。使用該命令,我們能夠?qū)嵢缃裢环鶊D上呈現(xiàn)由兩個(gè)plot 命令繪制的線條。
octave:##> x=linspace(-10,10);
octave:##> plot(x,sin(x),’r-’);
octave:##> hold on
octave:##> plot(x,sin(x)./x,’b*’)
octave:##>title(‘Figure’)
octave:##>xlabel(‘X’)
octave:##>ylabel(‘Y’)
octave:##>legend(‘sin(x)’,’sin(x)/x’)
5.2 subplot(2,3,2)表示在一個(gè)格子中繪圖。因此該條語(yǔ)句的意思是分成一個(gè)2X3的格子,并在第2個(gè)格子里繪圖;當(dāng)中子格的順序?yàn)閺淖蟮接覐纳系较逻f增,即
1 2
3 4
5 6
比如:
octave:##> x=linspace(-10,10);
octave:##> subplot(2,1,1)
octave:##> plot(x,sin(x));
octave:##> subplot(2,1,2)
octave:##> plot(x,sin(x)./x)
<img src="http://img.blog.csdn.net/20141026162026127?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N0b3Bjb2Rlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
5.3 多幅圖片能夠用figure命令來(lái)實(shí)現(xiàn).
5.4 繪制曲面
octave:##> x=2:0.2:4;
octave:##>y=1:0.2:3;
octave:##>[X,Y]=meshgrid(x,y);% make the grid
octave:##> Z=(X-3).^2-(Y-2).^2;
octave:##> subplot(2,2,1);surf(Z);title('surf')
octave:##> subplot(2,2,2);mesh(Z);title('mesh')
octave:##> subplot(2,2,3);meshz(Z);title('meshz')
octave:##> subplot(2,2,4);contour(Z);title('contour')
<img src="http://img.blog.csdn.net/20141026162116859?
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3N0b3Bjb2Rlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
六 Octave腳本
假設(shè)你有一些反復(fù)輸入的命令的,你能夠?qū)⑦@一系列的命令存入一個(gè)Octave 腳本之中。這種包括 Octave 命令的文本文件是 Octave 程序的基本形式。當(dāng)你在 Octave 中運(yùn)行這種腳本的時(shí)候,其效果與將這些命令一行行輸入 Octave 中的效果是一樣的。
并且當(dāng)你對(duì)一系列要輸入 Octave 的命令不是非常拿的準(zhǔn)的時(shí)候,在一個(gè)腳本中改動(dòng)這些命令會(huì)比在 Octave 終端中又一次調(diào)出及改動(dòng)命令要簡(jiǎn)單方便很多。
Octave的腳本是普通的文本文件,可是他們須要有一個(gè).m 的后綴 (e.g.run.m)。因此,它們通常也被稱為M文件。
除去后綴的文件名稱部分是你在運(yùn)行該命令時(shí)須要向 Octave 終端輸入的部分。
你能夠在不論什么的文本編輯器 (如,emacs, vi,notepad) 中創(chuàng)建并編輯一個(gè)腳本文件。
在Octave中能夠通過(guò)下面命令
octave:##> edit
在新窗體中調(diào)出文本編輯器emacs。假設(shè)你想編輯一個(gè)已存在的腳本,你能夠在edit命令后加上腳本的名字。比如,比方你有個(gè)名為 run.m的腳本,輸入edit run 將調(diào)出編輯器并打開該文件供你編輯。
然后在 Octave中輸入 run運(yùn)行腳本:
octave:##> run
Octave將執(zhí)行該腳本中的命令并得到對(duì)應(yīng)的結(jié)果。
七 控制語(yǔ)句
到眼下為止我們所示程序或者表達(dá)式都是一些簡(jiǎn)單的順序運(yùn)行的操作。
向量和矩陣的使用可以讓Octave運(yùn)行更加高級(jí)的計(jì)算,可是要實(shí)現(xiàn)更加復(fù)雜的功能,我們還須要一些標(biāo)準(zhǔn)的程序語(yǔ)言。Octave提供了通常的循環(huán)和選擇語(yǔ)句。其語(yǔ)法類似于我們熟知的C,C++,Java等編程語(yǔ)言。
在這里只舉一個(gè)樣例:
octave:##> x=1;
octave:##> while 1+x>1
x=x/2;
end
octave:##>x
x=
1.1102e-16
八 Octave函數(shù)
Octave中的腳本能實(shí)現(xiàn)一些簡(jiǎn)單的程序,可是比腳本更加強(qiáng)大的是用戶自己定義函數(shù)。自己定義函數(shù)可以讓你在命令行、其它函數(shù)中和腳本中調(diào)用。
在Octave函數(shù)中參數(shù)是通過(guò)值傳遞的而不是通過(guò)reference傳遞并能返回多個(gè)返回值。
Octave函數(shù)如同腳本一樣,是寫入一個(gè)純文本文件里的,不同的是函數(shù)文件的第一行遵循例如以下的格式
function[output1,output2,...]=name(input1,input2,...)
每一個(gè)函數(shù)都卸載了不同的M文件里,并且該M文件名稱不須與函數(shù)名一致。
比如名為sind()的函數(shù)必需被定義在名為sind.m的M文件里。每一個(gè)函數(shù)接受一定的參數(shù)輸入并輸出一定的數(shù)值。
當(dāng)你須要反復(fù)性的運(yùn)行一定表達(dá)式,這表明你須要將這與的操作封裝為一個(gè)函數(shù)。封裝為函數(shù)之后 Octave 將更加易用,添加了代碼的可讀性并能夠供他人使用。
我們能夠創(chuàng)建這么一個(gè)函數(shù),創(chuàng)建一個(gè)名為 sind.m 的 文本文件并包括下面內(nèi)容:
function s=sind(x)
% SIND(x)Calculates sine(x) in degrees
s=sin(x*pi/180);
end
然后就能夠使用該函數(shù)了,比如:
octave:##> sind(0)
ans=0
octave:##> sind(45)
ans= 0.7071
octave:##> t=sind([30 60 90])
t= 0.50000.8660 1.0000
總結(jié)
以上是生活随笔為你收集整理的Octave入门基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 联想笔记本BIOS设置中文详解
- 下一篇: 怎么创建具有真实纹理的CG场景岩石?