TECH MEDIA

テックメディア


ノウハウ
ブログ

最近触っているGNU octaveを紹介!

その他技術
目次
  1. 01|はじめに
  2. 02|GNU octave
  3. 03|まとめ
  4. 04|参考

1. はじめに

皆さん、おはこんばんにちは!
夏休みをエンジョイして元気になったみやもとです。

今回の夏休みは1週間ほどあったので、この機会に機械学習のオンライン講座を見ていました。
その動画内で、数学用のインタプリタ言語を使って計算を行っており、これは機械学習の分野でよく使われているそうです。

せっかくの機会なので、触っていきたいと思います。

2. GNU octave

GNU octaveについて

GNU Octave(グヌー・オクターブ)は数値計算用の対話型インタプリタ言語です。
GNU Octaveは、C/C++言語、BASIC、FORTRANによく似た基本文法を採用しており、いずれか1つのプログラム言語の文法を知っていれば、簡単にプログラムを書き始めることができます。
また、y=x2のグラフを、以下のわずか3行で表示することが出来る、易しい言語ですので、初心者や学生にも扱うことができます。

GNU Octaveより引用

 

GNU octaveを使用

ベクトルと行列の計算はこんな感じです。

b = [4; 9; 2] # Column vector
A = [ 3 4 5;
      1 3 1;
      3 5 9 ]
x = A \ b     # Solve the system Ax = b<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span>

GNU Octaveは対話型のインタプリタ言語になっており、上記のコマンドを入力するたびに変数がどのように入っているかを表示してくれます。

>> b = [4; 9; 2] # Column vector
b =

   4
   9
   2

>> A = [ 3 4 5;
      1 3 1;
      3 5 9 ]
A =

   3   4   5
   1   3   1
   3   5   9

>> x = A \ b     # Solve the system Ax = b
x =

  -1.5000
   4.0000
  -1.5000<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>

GNU Octaveでもこのように図として表示することもできます。

>> x = -10:0.1:10; # Create an evenly-spaced vector from -10..10
>> y = sin (x);    # y is also a vector
>> plot (x, y);
>> title ("Simple 2-D Plot");
>> xlabel ("x");
>> ylabel ("sin (x)");<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span>

GNU Octaveでも関数を定義して計算を行うことができます。
下記の計算は微分積分を図として表示させています。

>> function x_dot = f (x, t)
 r = 0.15;
 k = 1.6;
 a = 1.25;
 b = 0.12;
 c = 0.89;
 d = 0.58;
 x_dot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
 x_dot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction

>> x = lsode ("f", [1; 2], (t = linspace (0, 50, 200)'));

>> plot (t, x)<span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>

3. まとめ

Pythonでも対話モードで同じようなことが可能なので、何が違うのか確かめてみました。Pythonではベクトルを扱うときは下記のように入力します。

<span class="token operator">>></span> <span class="token keyword">import</span> numpy <span class="token keyword">as</span> np
<span class="token operator">>></span> x <span class="token operator">=</span> np<span class="token punctuation">.</span>array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token operator">>></span> x
array<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span>

GNU Octaveではこのように書くだけでベクトルを使った計算ができるようになるので、計算を行う際は結構便利だと思いました。
それにベクトル内が表示されるため、どのように入っているか確認もできるのは便利でした。

>> b = [5; 6; 3]
b =

   5
   6
   3

4. 参考

GNU Octave

Octave Programming Tutorial

RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?