歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【R】arrows関数を使って相空間のベクトル場を書く

データ分析っぽいブログですが、自分の専門は物理です。

 

私はMATLABgnuplotの使い方がよく分からず、描画関係では専らRを使っていました。そのときRで相空間のベクトル場を描いたことがあり、Rで似たことをやってる記事も無さそうなので一応まとめておきます。

とはいってもMATHMATICAMATLABには専門の関数があるようなので、素直にこっちを使ったほうがいいかもしれません(汗)

 

よくある連立微分方程式を考えてみます。

 

今回は、次のような簡単な場合のベクトル場を描いてみます。

 

Rのarrows関数を使って矢印をプロットしていきます。詳しい使い方はこちらを見ていただきたいのですが、矢印の始点と終点を指定する引数を持っています。

そのため下のコードでは、arrows(u,v,u+f(u,v)/10,v+g(u,v)/10) という感じで、終点を始点+差分という形で指定しました。ちなみに10で割っているのは矢印の長さの調整のためです。

 

#関数fの定義
f <- function(u,v){
f0 <- -v
return(f0)
}

#関数gの定義
g <- function(u,v){
g0 <- -u
return(g0)
}

#グラフの範囲を決める
plot(0, 0, type = 'n',xlim=c(-5,5),ylim=c(-5,5),xlab='u',ylab='v')

#(u,v)の初期値(左下からプロットを始める)
u <- -5
v <- -5

#ベクトル場の作図
for(i in 0:20){
    for(j in 0:20){
    	arrows(u,v,u+f(u,v)/10,v+g(u,v)/10,length=0.05)
		v <- v+0.5
	}
	u <- u+0.5
	v <- -5
} 

こんなのが描画できます。

f:id:takeshi0406:20140306214241p:plain