針對 Octave 初學者的入門教學,包含基本的 Octave 使用方式、簡單的數值運算、向量與矩陣、線性聯立方程式、微分方程式、繪圖與其他常用的功能。

開啟 Octave

首先開啟 Octave 軟體(若您的系統尚未安裝 Octave 軟體,請參考下載與安裝 Octave),若您的系統是 Linux 則直接在終端機(terminal)下執行 octave 指令即可:

octave

若是 Windows 則在安裝完成後桌面上應該就會有 Octave 的啟動圖示,或是在開始功能表中也會有。

Octave 在開啟時會出現一些訊息,首先是版權宣告與一些注意事項,接著最後一行 octave:1> 是 Octave 的提示符號,從這裡可以輸入指令操作 Octave,冒號之後的數字是標示輸入的指令編號,從 1 開始依序遞增。若要離開 Octave 則輸入 quitexit 按下 Enter 鍵。在本教學中的程式碼都可以直接複製後貼在這裡執行,若需要複製與貼上的功能,可以點選視窗左上角的圖示即會出現選單,若要複製命令列中的文字,可先使用標記功能將文字選取後再複製(或是選取後點滑鼠右鍵):

octave-edit-menu

要將程式碼貼在 Octave 中,除了使用選單的功能外,亦可以將程式碼複製後,在 Octave 視窗中點滑鼠右鍵貼上。

簡單的計算

Octave 最簡單的使用方式就是把 Octave 當作計算機使用,包含加減乘除(+-*/)與指數(^)等,都可以直接用在 Octave 中,操作的方式就直接在 Octave 中的提示符號(Octave 預設的提示符號是 octave:##>## 是行的編號)之後輸入指令,再按下 Enter 鍵,Octave 就會執行使用者所輸入的指令,並傳回結果,例如要計算 123 乘上 7,則在提示符號後輸入:

12 + 3 * 7

輸入完之後,按下 Enter 鍵,Octave 就會執行使用者所輸入的指令,輸出為 ans = 33 Octave 預設會將結果儲存在 ans 變數之中。

Octave 亦可以使用指數,例如計算 23 次方:

2 ^ 3

輸出為 ans = 8

括弧 () 亦可以在 Octave 中使用:

(1 + 2)^2

輸出為 ans = 9

亦可使用變數,例如將變數 a 指定為 10

a = 10

使用變數做各種運算:

b = (a + 10) * 2
c = b / 2

除了一般的運算之外,Octave 也提供了很多數學上基本的函數:

  • cos():Cosine of an angle
  • sin():Sine of an angle
  • tan():Tangent of an angle
  • exp():Exponential function
  • log():Natural logarithm
  • log10():Logarithm to base 10
  • sinh():Hyperbolic sine
  • cosh():Hyperbolic cosine
  • tanh():Hyperbolic tangent
  • acos():Inverse cosine
  • acosh():Inverse hyperbolic cosine
  • asin():Inverse sine
  • asinh():Inverse hyperbolic sine
  • atan():Inverse tangent
  • atan2():Two-argument form of inverse tangent
  • atanh():Inverse hyperbolic tangent
  • abs():絕對值
  • sign():Sign of the number(-1 或 +1)
  • round():Round to the nearest integer
  • floor():Round down(towards minus infinity)
  • ceil():Round up(towards plus infinity)
  • fix():Found towards zero
  • rem():Remainder after integer division
  • sqrt():平方根。

例如:

exp(1)

ans = 2.7183

exp( (4.5 - 2.1) / sqrt(2 * 5.6) )

ans = 2.0486

一般工程計算機可以處理的數學運算,Octave 都可以透過這些內建的數學函數來處理。

向量與矩陣

在 Octave 中要建立一個矩陣,可以使用中括弧,矩陣的元素以逗號分別隔,每個列(row)之間則以分號分隔,例如要產生一個 23 的矩陣:

A = [ 1, 6, 2; 3, 5, 8 ]

輸出為 A =
1   6   2
3   5   8

若要存取向量或陣列中的元素,可以使用索引的方式,使用方法就是以小括弧將元素的索引包起來,例如要取出矩陣 A 裡面第一列第二行的元素:

A(1, 2)

輸出為 ans = 6

在 Octave 中,若是在指令後面加入分號(;),就不會自動將結果輸出:

B = rand(3, 2);

所產生的 B 是一個 3 乘以 2 的矩陣,其每個元素都介於 01 之間。

若要顯示任何變數的內容,直接輸入其變數名稱即可,例如要查看矩陣 B 的內容:

B

矩陣運算是 Octave 最擅長的部份之一,例如將矩陣乘上一個倍數:

2 * A

矩陣相乘:

A * B

矩陣轉置:

A'

關於更詳細的矩陣使用說明,請參考數值資料。

線性聯立方程式

在 Octave 要解線性聯立方程式,可以使用反斜線運算子(\),例如要解下列聯立方程式:

$$ \left\{ \begin{matrix} x_1 + 2x_2 &=& 3.5 \\ 3x_1 + 5x_2 &=& 1.6 \\ \end{matrix} \right. $$

以矩陣表示:

\[ Ax=b \]

其中

\[ A = \left( \begin{array}{clr} 1 & 2 \\ 3 & 5 \end{array}\right),\quad x = \left( \begin{array}{clr} x_1 \\ x_2 \end{array}\right),\quad b = \left( \begin{array}{clr} 3.5 \\ 1.6 \end{array}\right) \]

接下來以 Octave 來解此方程式,首先設定 Ab

A = [ 1, 2; 3, 5 ]
b = [ 3.5; 1.6 ]

接著以反斜線運算子解此聯立方程式:

x = A \ b

輸出為

x =
-14.3000
8.9000

所得到的解為

$$ x = \left( \begin{array}{clr} x_1 \\ x_2 \end{array}\right) = \left( \begin{array}{clr} -14.3 \\ 8.9 \end{array}\right) $$

A \ b 等同於 A 的反矩陣乘以 b,但是可以避免直接計算 A 的反矩陣。

微分方程

Octave 有內建一些函數專門用於解非線性的微分方程式,要讓 Octave 解這樣的微分方程式,首先必須定義此函數 f(x, t),定義方式很簡單,基本上就是直接輸入函數內容即可:

function xdot = f (x, t)
  r = 0.25;
  k = 1.4;
  a = 1.5;
  b = 0.16;
  c = 0.9;
  d = 0.8;
  xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
  xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction

設定起始條件(initial condition):

x0 = [ 1; 2 ];

設定輸出的時間:

t = linspace (0, 50, 200)';

使用 Octave 解此微分方程式:

x = lsode ("f", x0, t);

lsode() 函數是 Livermore Solver for Ordinary Differential Equations 的縮寫。

繪圖

在 Octave 中最簡單的繪圖函數就是 plot() 函數,例如畫出 sin() 函數的圖形:

a = 1:0.1:8;
figure(1);
plot(a, sin(a))

畫出的圖形為

octave-sin-plot

接續前一節的範例,要將微分方程式的解畫出來可以使用

figure(2);
plot (t, x)

畫出的圖形為

octave-differential-equation-plot

若是在圖形介面之下,Octave 會開啟另一個繪圖視窗顯示圖形,若要將此顯示在螢幕上的圖形儲存至檔案中,可以使用 print 指令:

print "-S500,400" -dpng output.png

此指令會將目前顯示在螢幕上的圖形輸出成 500400 像素的 png 圖檔儲存至 output.png 檔案中。關於更進一步的繪圖功能可以參考繪圖。

命令列操作

在 Octave 中可以使用 Ctrl + p 鍵顯示上一個執行過的指令,Ctrl + n 顯示下一個指令,而 Ctrl + bCtrl + f 可以左右移動輸入游標進而鍵編輯指令內容,在大部分的系統上亦可以使用上下左右鍵來操作,詳細的操作方式請參考操作環境。

線上說明

Octave 有非常完整的說明文件,要查詢某一個函數的使用方法,可使用 help,例如查詢 plot 函數的使用方法:

help plot

有時候 Octave 所輸出的說明文件太多,所有的文件無法一次顯示在螢幕上時,按下 Enter 鍵可以顯示下一行,按下空白鍵可以顯示一頁,在部份的系統中亦可以使用上下鍵瀏覽,若要離開則按下 q 鍵。

除了 help 之外亦可以使用 doc 查看線上參考手冊,

doc

若要搜尋線上文件,可使用 lookfor 指令,詳細的說明請參考操作環境中的線上說明文件。