見出し画像

Rで陰関数をプロットする方法

 今回の記事ではフリーソフトのRを用いて,陰関数のグラフをプロットする方法を紹介したいと思います.

 また,本記事では変数が2つの場合のみを考えているのでその点はあらかじめご了承ください.

そもそも陰関数とは?

 そもそも陰関数は陽関数と対になる概念なわけですが,陽関数とはy=x^2のようにy=f(x)の形で書いたものをいいます.関数の形が明確な形で書かれているものですね.

 それに対して陰関数はF(x,y)=0となっているものをいいます.半径3の円を表す式x^2+y^2-9=0などがその一例ですね.

 厳密にはこれが関数ではないこともあると思いますが,今回は陰関数ではあるけど,具体的には形がわからないものをグラフにしてパパっと形を推察しましょうというのが本記事のモチベーションです.(もちろん数学的にあれこれして形状を考えるのは重要ですが…)

モチベーションとなるような例

  陰関数かつグラフが欲しくなるような例ですが,マクロ経済学では世代重複モデルにおいて利子率r(t+1)が残る場合などが挙げられると思います.
 この場合,企業の利潤最大化を解いて代入するわけですが,その場合kとk^αなどが残ってしまうので式が解けないということがしばしば起こります.

 詳しくは下のPDFなどを参照してください.
 また,端折り気味に作ってしまったので,理論的な背景などに関しては二神・堀やBlanchard & Fischerなどで確認をよろしくお願いします.

(上記のPDFですが慣れないLaTeXで作ったので,間違えている・タイポがあるなどありましたら優しく教えていただけると大変うれしいです…)

Rにおけるコード

 さて,本題のRのコードですが以下のようになります.

n <- 100 # メッシュ分割数(どれぐらいの細かさでグラフをつくるか?)
k <- seq( 0, 1, length = n ) #seqでkのベクトルをつくり、グラフの範囲を指定
p <- seq( 0, 1, length = n )
z <- matrix(0, n, n)
for (i in 1:n) {
 for (j in 1:n) {
   z[i, j] <- p[j] ^ 2 + 25*p[j] -(25/3)*k[i]^(1/2)# ここに陰関数を書く
 }
}
contour(k, p, z, drawlabels = F, levels=0, asp=1) 
#level=0で定数項0の時を計算,グラフをプロット
#A=2, α=1/2,β=1/2, π=5, 

 contour()は等高線を書くもののようなので,定数項をz軸としてみてグラフを書いているという認識でいいようです.
 Rでは文字式を書いたままグラフを書くことはできないので,パラメーターに任意の数を与えています.具体的な数値に関してはコメントを参照してください.この値を変えればグラフの形状は若干変わります.

 また,このコードを書くにあたって参考にしたサイトは以下のものです.

 陰関数をdeta.frameの形で表現できればggplot2を用いてグラフも書けるとは思うのですが,そっちは現状考え中です…笑
 (今回は逆関数にして作ればいいと思うのですが,もっと一般的には…)

 もしご存じの方いたら教えてください…笑


あ あああああああ


サポートいただいたお金は教科書や研究に関する本に使いたいと思います.読みたい本がいっぱいあるので…