Octave - Arch Linux 中文维基

跳至內容

# Octave

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Octave，最近一次同步於 2024-03-07，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- Matlab
- Sage-mathematics
- Mathematica

援引自Octave 官網:

  GNU Octave 是一種解釋性的高級程序設計語言, 主要應用在數值計算領域。其擁有線性和非線性問題求解，以及執行其他數值分析的能力，還為數據可視化與數據操作提供了豐富的圖形功能。 Octave通常的使用方式是交互式命令行，但其也可以用來編寫非交互式程序。 Octave語言與Matlab非常相似，因此在兩個平台編寫的大部分程序都可以很容易移植。

## 安裝

安裝 octave包軟體包。

打開GUI界面`octave --gui` ,或者打開命令行界面`octave-cli`

### 其他可供選擇的圖形界面

默認的 octave 圖形界面 已經包含在了 octave包 軟體包中。除此之外，你還可以選擇使用下列非官方的圖形界面：

- Cantor — 一個圖形用戶界面，其後端的數學運算可以由以下軟體之一提供 (Scilab, Maxima, Octave, R, Julia and others).

  https://edu.kde.org/cantor/ || cantor包

- JupyterLab — 一個基於瀏覽器的交互式環境，支持多種語言作為後端，也包括Octave。

  https://github.com/jupyterlab/jupyterlab || jupyterlab包+jupyter-octave_kernelAUR

### 性能

Octave默認使用blas包包進行線性代數計算。然而blas的實現並未利用到現代CPU的指令集。blas-openblas包作為blas的直接替代，安裝該包可提升計算性能。根據硬體配置可選擇其它BLAS實現，Intel處理器可安裝intel-oneapi-mkl包包，NVIDIA圖形處理器可安裝cuda包。

下面的代碼估計了不同情況下計算NxN矩陣乘法的性能，以GFLOPS計：

    test_program.m

    N = 4096;
     A = single(rand(N, N));
     B = single(rand(N, N));
     start = clock();
     C = A * B;
     elapsedTime = etime(clock(), start);
     gFlops = 2 * N * N * N / (elapsedTime * 1e9)

在Intel Core i7-9750H上運行該代碼：

    octave ~/test_program.m

    gFlops = 3.7222

安裝openblas後，以單線程運行該代碼：

    OMP_NUM_THREADS=1 octave ~/test_program.m

    gFlops = 121.55

使用全部12個線程運行該代碼：

    OMP_NUM_THREADS=12 octave ~/test_program.m

    gFlops = 281.33

## Octave-Forge

Octave提供一系列的外部包，類似於Matlab的工具箱, 參見 Octave-Forge.完整包列表參見這裡.

這些外部包可以 #通過Octave自帶安裝器安裝或者 #通過AUR安裝.

### 通過Octave自帶安裝器安裝

外部包可以通過Octave自帶安裝器進行管理。 一般情況下他們會被安裝到 ~/octave, 當使用`-global`選項的時候會被安裝到一個系統目錄。

安裝一個外部包：

    octave:1> pkg install -forge packagename

注意：一些外部包, 例如 `control`, 需要 gcc-fortran包 包來進行編譯和安裝

卸載一個外部包:

    octave:3> pkg uninstall packagename

一些包可以被Octave自動加載，對於那些沒有自動加載的包:

    octave:4> pkg load packagename

不推薦加載全部的包，這可能會影響性能並造成命名衝突。如果需要加載全部包，可以調用：

    octave:5> cellfun (@(x) pkg ("load", x.name), pkg ("list"));

通過`pkg list`可以查看被加載的包,已加載的包會帶有星號.

一個確保所有包都在Octave啟動時加載的方法:

    /usr/share/octave/site/m/startup/octaverc

    ## System-wide startup file for Octave.
    ##
    ## This file should contain any commands that should be executed each
    ## time Octave starts for every user at this site.
     pkg load all

### 通過AUR安裝

一些包可以在AUR (search packages)中找到.

適用於 Arch 的 Octave-forge 可以通過 Octave-forge helper scripts for Archlinux 實現半自動更新.

## 繪製圖表

Qt是默認的繪圖後端:

    >> available_graphics_toolkits
    ans =
    {
      [1,1] = fltk
      [1,2] = qt
    }
    >> graphics_toolkit
    ans = qt

你也可以選擇FLTK,或者gnuplot包然後通過以下命令切換繪圖後端:

    >> graphics_toolkit("gnuplot");

將它添加進`~/.octaverc`以使變更一直有效.

## 讀取電子表格

你可以使用`odsread`或者`xlsread`打開`.ods`, `.xls`以及`.xlsx`格式的文件,這需要安裝octave-ioAUR包:

    octave:1> odsread('myfile.ods');
    octave:1> xlsread('myfile.xls');
    octave:1> xlsread('myfile.xlsx');

### 轉換成CSV格式

也可以先使用LibreOffice Calc (不超過1024列)或Calligra Sheets(calligra包,不超過32768列)把電子表格轉換`.csv`格式.

待轉換完成後您可以使用Octave內置函數`csvread`來讀取`.csv`格式文件:

    octave:1> csvread('myfile.csv');

## 疑難解答

### Zsh Undecodable Token

如果顯示了下面的錯誤：

    undecodable token: b(hex)[23m

安裝grml-zsh-config包並重新登錄。

### vi Mode Undecodable Token

為vi-mode模式配置`.inputrc`的用戶，例如使用下列配置的：

    ~/.inputrc

    $include /etc/inputrc
    set editing-mode vi
    $if mode=vi

    set show-mode-in-prompt on
    set vi-ins-mode-string \1\e[6 q\2
    set vi-cmd-mode-string \1\e[2 q\2

    set keymap vi-command
    # these are for vi-command mode
    Control-l: clear-screen
    Control-a: beginning-of-line

    set keymap vi-insert
    # these are for vi-insert mode
    Control-l: clear-screen
    Control-a: beginning-of-line

    $endif

可能會遇到Octave圖形用戶界面命令行提示`q>> undecodable token: \001b(hex)[6\0020(hex)`. 為Octave關閉`show-mode-in-prompt`設置可解決該問題，將上例的`.inputrc`改為：

    ~/.inputrc

    $include /etc/inputrc
    set editing-mode vi
    $if mode=vi

    $if Octave
    set show-mode-in-prompt off
    $else
    set show-mode-in-prompt on
    set vi-ins-mode-string \1\e[6 q\2
    set vi-cmd-mode-string \1\e[2 q\2

    set keymap vi-command
    # these are for vi-command mode
    Control-l: clear-screen
    Control-a: beginning-of-line

    set keymap vi-insert
    # these are for vi-insert mode
    Control-l: clear-screen
    Control-a: beginning-of-line
    $endif

    $endif

## 另見

- Wikipedia:GNU Octave

分類：​

- 程式語言
- 數據分析
- GNU

Octave
新增話題