Home › Category Archives › グラフ

(20) quiverでベクトル場を描く

始点(x,y)=(1,2)から、XY方向成分(3,2)のベクトルと、
始点(x,y)=(3,5)から、XY方向成分(-1,-4)のベクトルを quiver で描いてみる。

(1)まずは1本ずつ描く場合

octave:1> quiver(1,2,3,2)
octave:2> hold on
octave:3> quiver(3,5,-1,-4)
octave:4> hold off

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_02_001.jpg

(2)2本のベクトルを行列でまとめて記述する場合

octave:5> v=[1 2 3 2;3 5 -1 -4]
v =
   1   2   3   2
   3   5  -1  -4

octave:6> quiver(v(:,1),v(:,2),v(:,3),v(:,4))

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_02_002.jpg
両ベクトルの始点は上記(1)と同じだが、上記(1)とはベクトルの長さが異なる…
なぜか?

これは、quiver 内部でベクトル同士が重なり合わないように線の長さ(=scale)を自動調整してくれているから
quiverの第5パラメーターでこのscaleを指定可能。

例えば、両ベクトルの長さを自動調整した長さの30%(scale=0.3)に縮めてみる。

octave:7> quiver(v(:,1),v(:,2),v(:,3),v(:,4),0.3)

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_02_003.jpg

自動調整をやめさせたい場合は scale=0 を指定すればよい。

octave:8> quiver(v(:,1),v(:,2),v(:,3),v(:,4),0)

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_02_001.jpg
これで上記(1)と同じように表示された。

(19) csvread()でCSVファイルのデータをロード

こんなCSVファイルを用意した。

[user@dog-server]$ cat test.csv
10,1
20,6
30,18
40,11
50,14
[user@dog-server$

このCSVファイルを csvread でロードする。

octave:5> M=csvread('test.csv')
M =
   10    1
   20    6
   30   18
   40   11
   50   14

octave:6>

ロードしたデータを折れ線グラフで表示してみる。

octave:7> plot(M(:,1),M(:,2))

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_001.jpg

折れ線グラフではなく、赤色「r」のマーカー「+」でプロットしてみる。

octave:8> plot(M(:,1),M(:,2),'r+')

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_002.jpg

今度は棒グラフで表示してみる。

octave:9> bar(M(:,1),M(:,2))

https://www.dogrow.net/octave/wp-content/uploads/2013/08/20130828_003.jpg

(17) rand()とrandn()で乱数生成

rand()は一様分布の乱数生成、randn()は正規分布に従った乱数生成をしてくれる。

(1) まずはrand()で200×200個の乱数を生成し、ヒストグラムでその分布を見てみる。

octave:1> a=rand(200);          % 200x200個の0.0~1.0までの一様乱数を生成
octave:2> b=a*100; c=floor(b);  % 生成した乱数を0~100の整数に変換
octave:3> hist(c)               % ヒストグラム表示

結果は以下のようになった。確かに0~100の全範囲に渡って均等に乱数が生成されている。

(2) 次に、randn()で200×200個の乱数を生成し、ヒストグラムでその分布を見てみる。

octave:1> a=randn(200);         % 200x200個の0.0~1.0までの正規分布乱数を生成
octave:2> b=a*100; c=floor(b);  % 生成した乱数を0~100の整数に変換
octave:3> hist(c)               % ヒストグラム表示

結果は以下のようになった。正規分布に従って乱数が生成されている。