Octave入门基础
Octave入門基礎
一。簡單介紹
1.1 Octave是什么?
Octave是一款用于數值計算和畫圖的開源軟件。和Matlab一樣,Octave 尤其精于矩陣運算:求解聯立方程組、計算矩陣特征值和特征向量等等。
1.2 Octave的適用對象
Octave和Matlab被project人員和科研人員廣泛使用來進行各種工業和學術上的數值計算和仿真。
比如,NASA 使用它來開發飛行器的對接系統;Jaguar Racing使用它來可視化和分析從 F1 賽車傳來的數 據;Sheffield大學用它來開發用于識別癌細胞的軟件。
Octave這種軟件讓編寫數值處理程序變得簡單,并提供數據可視化的多種方式。
1.3 Octave的下載與安裝
參照網上相關教程;
二,簡單計算
2.1 Octave最簡單的使用方式就是像使用一個計算器一樣在命令提示符下輸入對應的計算式。
Octave能識別通常的計算表達式。
比如,在終端輸入
octave:##>2+2
并按回車鍵, 你將得到下面的結果ans=4
各種計算符號的優先級與常規的一致,比方括號有最大優先級,其次為乘方,其次為乘除運算,最后為加減運算
2.2 內建函數
Octave中有非常多內建函數。能夠通過輸入函數名和括號里的輸入參數來調用函數,比如:
octave:##> exp(1)
ans=2.71813
又如還有一個更長的表達式:計算 1.2 sin(40?+ 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是不同的變量。
octave:##> deg=pi/180
deg=0.017453
假設你須要從當前的變量空間中刪除某個變量,clear命令能移出全部的變量,或者移出某個特定變量, 如:
clear name?將移出名為 name 的某個變量。
3.2 加載和保存數據
當你退出Octave的時候,你將丟失你所創建的變量。假設你須要在工作的中途退出Octave,那么你能夠保存當前會話的數據并在之后又一次加載它。假設你輸入
octave:##> save anyname?
這將整個工作空間上的變量存儲到當前文件夾下一個名為anyname.mat 的文件里 (注意.mat是Octave自己主動加入的)。這樣你能夠退出Octave,之后又一次啟動Octave程序,通過輸入
octave:##> loadanyname
將又一次加載之前保存的命名空間,并從你中斷的地方又一次開始工作。
相同的,你能夠加載或者保存特定的變量。格式為
octave:##>save filename var1 var2 ...
比如,假設你想存儲deg變量,那么你能夠輸入
octave:##> save degconv deg?
這樣將deg變量存儲于名為degconv.mat的文件里,你能夠通過下面命令又一次加載變量
octave:##> loaddegconv
Octave
相同能從文件里導入數據,這種功能在你使用其它的數據來源進行繪圖或者計算的時候變得很實用。
比如:
X=load(‘featureX.txt’);
3.3 獲得幫助
假設你不清楚某個命令或者函數的使用方法,可也用help命令來獲得其具體的使用方法。
help commandname
比如:help plot
3.4 分號和隱藏結果
分號在通常的編程語言中被用來表示程序塊或者單個語句的結束。在 Octave 中分號沒必要的,但它也有一個特殊的功能。我們眼下的樣例中,我們僅僅要輸入一個 Octave 命令并不以分號結尾的話,Octave 總 會將語句運行的結果隨即顯示出來。
可是,假設我們在一行語句的末尾添上分號,Octave將不會顯出對應的 結果。
四 數組和向量及矩陣
前面介紹過Octave的優勢就是能夠非常方便的進行矩陣的相關計算。
4.1 構造向量
構造矩陣或者向量的方法有非常多。當中最直接簡單的方法就是在一個方括號 [] 中給出其元素,比如
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
在方括號里由空格或者逗號隔開的一組數據被定義為行向量; 而由分號或者回車隔開的一組數據被定義為列向量。你能夠通過已經定義的向量來定義新的向量,比如
octave:##> a=[1 4 5]
a=1 4 5
octave:##> d=[a 6]
d=1 4 5 6
4.2 冒號表達式
利用冒號可以很方便的創建一些特殊的向量
octave:##> e=2:6
e=2 3 4 5 6
冒號表達式的規則是告訴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開始。比如
octave:##>a=[1:2:6 -1 0]
a=1 3 5 -1 0
我們能夠通過下面命令訪問到該向量的第三個元素
octave:##> a(3)
ans=5
冒號的表示法相同能夠用于聲明向量中的元素的范圍
octave:##>a(3:5)
ans=5 -1 0
octave:##>a(1:2:5)
ans= 1 5 0
4.5 向量的計算
將一組數據存入一個向量之后可以使用非常多的Octave函數來進行計算。
在C++中假設你想進行同樣的計算,比如每一個元素乘以2, 你須要使用for循環來對每一個元素操作。
在Octave中盡管也可以使用for循環來實現,可是Octave本身由有簡單的向量操作方式。
向量中每一個都乘以一個數能夠通過對該向量乘以一個數來實現。
以之前定義的 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
對向量中全部元素都除以一個數的操作與乘法類似。
使用+?算符,你相同能夠對該向量中的每一個元素都加上或者減去一個數值。兩個向量的相乘遵循矩陣的乘法法則,向量乘法并非相應元素的相乘。假設要進行相應元素的乘除法,你能夠使用.* 以及./ 算符注意每一個算符前的‘.’表示為一個元素對元素的計算。比如:
octave:3> b=1:5
b= 1 2 3 4 5
octave:4> a.*b
ans=1 6 15 -4 0
逐個元素的乘方計算相同也非常實用。
該計算的算符為,比如
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
僅僅要兩個向量又同樣的大小和形狀,它們就能夠進行元素之間的(element-by-element) 加減乘除和乘方運算。
4.6 函數操作向量
前面講到過的函數也是能夠適用于向量。
比如:exp, log,abs等
octave:##>abs([-1 2 -3])
ans=1 2 3
此外max, length,size, sum, mean, std, floor, ceil等函數或許要掌握,能夠通過help命令獲得具體使用方法。
4.7 矩陣的轉置
一個向量的轉置將其由行向量轉為列向量或者由列向量轉換為行向量。
矩陣的轉置將其行和列交換。
在數學上,矩陣A的轉置表示為AT 在octave中轉置操作用上引號實現:
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通過調用還有一個開源軟件 GNUPLOT來實現很豐富的繪圖功能。最主要的繪圖命令是 plot(x,y), 當中 x,y 分別為橫軸和縱軸數據。
能夠進行對應地顏色和樣式的選擇如:’ro’代表們紅色圓圈,’b.’代表藍色點點等;能夠通過title,xlabel。ylabel加入標題以及x,y軸名稱。legend命令為該圖片加入對應的圖例。
5.1 假設你想保存當前的圖片內容并將新創建的圖片層疊到原圖片上,你能夠通過使用 hold on命令來實現。使用該命令,我們能夠實如今同一幅圖上呈現由兩個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)表示在一個格子中繪圖。因此該條語句的意思是分成一個2X3的格子,并在第2個格子里繪圖;當中子格的順序為從左到右從上到下遞增,即
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命令來實現.
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腳本
假設你有一些反復輸入的命令的,你能夠將這一系列的命令存入一個Octave 腳本之中。這種包括 Octave 命令的文本文件是 Octave 程序的基本形式。當你在 Octave 中運行這種腳本的時候,其效果與將這些命令一行行輸入 Octave 中的效果是一樣的。
并且當你對一系列要輸入 Octave 的命令不是非常拿的準的時候,在一個腳本中改動這些命令會比在 Octave 終端中又一次調出及改動命令要簡單方便很多。
Octave的腳本是普通的文本文件,可是他們須要有一個.m 的后綴 (e.g.run.m)。因此,它們通常也被稱為M文件。
除去后綴的文件名稱部分是你在運行該命令時須要向 Octave 終端輸入的部分。
你能夠在不論什么的文本編輯器 (如,emacs, vi,notepad) 中創建并編輯一個腳本文件。
在Octave中能夠通過下面命令
octave:##> edit
在新窗體中調出文本編輯器emacs。假設你想編輯一個已存在的腳本,你能夠在edit命令后加上腳本的名字。比如,比方你有個名為 run.m的腳本,輸入edit run 將調出編輯器并打開該文件供你編輯。
然后在 Octave中輸入 run運行腳本:
octave:##> run
Octave將執行該腳本中的命令并得到對應的結果。
七 控制語句
到眼下為止我們所示程序或者表達式都是一些簡單的順序運行的操作。
向量和矩陣的使用可以讓Octave運行更加高級的計算,可是要實現更加復雜的功能,我們還須要一些標準的程序語言。Octave提供了通常的循環和選擇語句。其語法類似于我們熟知的C,C++,Java等編程語言。
在這里只舉一個樣例:
octave:##> x=1;
octave:##> while 1+x>1
x=x/2;
end
octave:##>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 的 文本文件并包括下面內容:
function s=sind(x)
% SIND(x)Calculates sine(x) in degrees
s=sin(x*pi/180);
end
然后就能夠使用該函數了,比如:
octave:##> sind(0)
ans=0
octave:##> sind(45)
ans= 0.7071
octave:##> t=sind([30 60 90])
t= 0.50000.8660 1.0000
總結
以上是生活随笔為你收集整理的Octave入门基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 联想笔记本BIOS设置中文详解
- 下一篇: 优秀DWG看图软件尧创CAD