DOSEIの日記

技術メモ+日常ログ

Octave

列ベクトルの内積とか正規化とか

列ベクトルが並んだ同サイズ行列 A と B があって、各列ベクトルの内積を求めるには、 trace(A'*B)各列ベクトルを単位ベクトルに正規化するには、まず、各列のノルムを (横ベクトルとして) 求め、 nA = norm(A, "cols");ベクトルの次元だけ、縦にコピーして…

周期境界条件の cspline (interpolation of periodic function by cspline)

標準の spline は、周期境界条件では使えない。 Spline Toolbox の csape で可能。何の略かは不明。 Octave-forge にも互換パッケージがある。例: n=10; % 標本点数 m=1000; % リサンプリング点数 % サンプリング点 x=(0:(n-1))./(n-1); xx=(0:(m-1))./(m-1)…

voronoi のバグ

Octave の voronoi 関数は、座標値の絶対値が大きいと、エラーが出るらしい。とりあえず、全体を適当に割って回避できる。 voronoi(X / 100, Y / 100); % X, Y はそれぞれの座標を点ごとに並べたたてベクトル

標準出力にエスケープシーケンスが流れる

Octave の吐く標準出力をリダイレクトしてファイルに保存すると、先頭に ESC[?1034h (環境による?) がついてしまう。これは、 Octave のバグではなく、 readline (コマンドライン編集を取り扱うモジュール) のせいらしい。 304181 – Readline initialization…

octave forge の関数を使う

そのままじゃ使えない。 http://octave.sourceforge.net/FAQ.html#packages pkg load package_name で使えるようになる。 package_name には例えば、 image とか。 all で全部使えるようになる。

load/save ステートメントのファイル名に変数を使う

load, save に指定するファイル名は、文字列型のリテラルや変数ではなくて、書かれた文字列そのものが使用される。したがって、 val = 100; ofn = 'a'; save ofn val; としても、“a” というファイル名ではなく、 “ofn” というファイル名になる。このような場…

行列のエクスポネンシャル

行列 A の eA は、 expm(A)で計算する。

rotv (in Octave-Forge)

http://octave.sourceforge.net/doc/f/rotv.html 3 次元回転行列を返す. たとえば, x 軸に関する角度 a[rad] の右手系・右ねじ回転行列 (もしくは左手系・左ねじ回転行列) は rotv([1, 0, 0], a) rotv([a, 0, 0]) # ノルムが回転角度で求まる.軸は横ベクト…

Canny エッジフィルタ (Canny edge detector)

Octave-forge (Octave の強化パッケージ) には Matlab の Image Processing Toolbox にある edge に対応するコードがある。 Function Reference: edge が、アルゴリズム (method) に canny がない。 その代わり、コーダの A. Adler が考えた canny ベースの…

コメント

Matlab, Octave の一行コメントは % hogehoge のように、 % を使う。 Octave では, # もつかえる。 また、ブロックコメントは %{ hogehoge %} とする。ネスト可能。

ファイルを読み込んで実行

コマンドを羅列したファイルを読み込むには > source('hogehoge') で。 gnuplot でいうところの load コマンド。

自動実行する

bash スクリプトと同じ形式に従って, #!/bin/octave -qfで始まるファイルを作成すればいい. オプションの q はオープニングメッセージを抑制, f は初期化ファイル(.octaverc) を読まない.

N=pinv(M) 一般逆行列(pseudoinverse) [U,D,V]=svd(M) 特異値分解 [V,λ]=eig(M) 固有値、固有ベクトル

Octave のプロット機能

Plotting (GNU Octave (version 4.4.1)) Octave は、 Gnuplot を内部的に使っている。 Gnuplot チックな低レベルコマンド gplot, gsplot がある。 Matlab スタイルの高レベルな plotを使おう ていうか、なんか分かりやすい解説サイトorまとめサイトないの?