CES型生産関数・効用関数の可視化

#はじめに
こんにちは、leisurelyです。この記事では、経済学を勉強していくうえで「コブダグラス型生産関数」に次いで逃れることのできない「ces型生産関数」を3Dグラフを用いて可視化します。
以前に投稿した「[コブダグラス型生産関数の可視化](https://qiita.com/leisurely/items/b67cf2cd058a2a01295b)」が思いのほか見ていただけてるようなのでces型もまとめました。

この記事を読んで頂くにあたり注意点をいくつか述べさせていただきます。
**・~~私はただの経済学部生です（期待しないでね）~~下書きを書いていた時は学部生だったのに今では大学院生に…
・間違っている可能性は十分あります
・ほぼ自分のためのメモ**
以上のことをご了承いただいた上で読んで頂けるとありがたいです。
間違っていることや誤解を生みそうな表現がある場合にはコメントの方よろしくお願いします。また、それら以外のコメントも受け付けていますのでお気軽にコメントください。


※この記事はプログラミングを学ぶのではなく、プログラミングというツールを用いて経済学をより理解するのが目的です。また、プログラミングわからないけれど結果だけ見たいという方のために、最後に結果を載せています。

##ces型生産関数について
念のため、ces型生産関数について簡単にざっくりと解説しておきます。Constant elasticity of substitution(ces)型生産関数とは名前の通り、代替の弾力性が一定の関数です。 生産量をY、資本をK、労働力をLとした場合に、

```math
Y = (\alpha K^{\sigma}+(1-\alpha)L^{\sigma})^{\frac{1}{\sigma}}
```

で表される生産関数のことです。$0 \le \alpha \le 1$であり、$\sigma$の値によっては**「ces型」**を**「線形」**・**「コブダグラス型」**・**「レオンチェフ型」**に変形させることができます。この記事ではこの三つの変形に関することが主となります。

ces型についての詳しい解説は「[コブダグラス関数、CES関数 - 経済学メモ - アットウィキ](https://www54.atwiki.jp/hanmemushi/pages/27.html)」、「[ぴーすけ講座 CES関数について - わかりやすい経済学](http://psuke.hungry.jp/micro/microadvance1.html)」を参考にしてください。
テキストに関しては以下を参照しています。
・[ミクロ経済学　著:西村和雄](https://www.amazon.co.jp/%E3%83%9F%E3%82%AF%E3%83%AD%E7%B5%8C%E6%B8%88%E5%AD%A6-%E8%A5%BF%E6%9D%91-%E5%92%8C%E9%9B%84/dp/4492311815/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E8%A5%BF%E6%9D%91+%E3%83%9F%E3%82%AF%E3%83%AD%E7%B5%8C%E6%B8%88%E5%AD%A6&qid=1593794406&sr=8-1)
・[Microeconomics Analysis 著:Hal R. Varian](https://www.amazon.co.jp/Microeconomic-Analysis-Hal-R-Varian/dp/0393957357/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=35X1YP3B3UCF0&dchild=1&keywords=varian+microeconomic+analysis&qid=1593794438&sprefix=varian%2Caps%2C367&sr=8-1)

#コードの実装
早速コードの実装を行います。結果だけ見たい人は読み飛ばしていただいて構いません。
コードの実装にあたり「[jupyter notebookで触れるプロットを描く](http://ksknw.hatenablog.com/entry/2016/08/04/233103)」を参考にさせていただきました。

##全体のコード
ここでお詫びしなければならないことがあります。それはプログラム内で対数をとったりロピタルの定理を使って変換を行っていないことです。if文を使って$\sigma$の値がある値の時にある型に変化するよう書いていますので厳密性を欠いています(?)。また近似的に表示をさせることができるプログラムなので厳密なものを書ける方はぜひよろしくお願いします。
それではコードです。

```Python 

%matplotlib notebook
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


a = float(input("aの値を入力してね"))
sigma = float(input("sigmaの値を入力してね")) 

# sigma = 1 の時　線形
# sigma = 0 の時　コブダグラス型
# sigma = -∞の時(-100や-200で近似的に表示)　レオンチェフ型

if sigma == 0:
    def f(k,l):
        return (k**a) * (l**(1-a))
    
else:
    def f(k,l):
        return (a*k**(sigma) + (1-a)*l**(sigma))**(1/sigma)
    

k = np.arange(0, 100, 1)
l = np.arange(0, 100, 1)

K, L = np.meshgrid(k, l)
Y = f(K,L)

fig = plt.figure()
ax = Axes3D(fig)

ax.set_xlabel("K")
ax.set_ylabel("L")
ax.set_zlabel("Y")

ax.plot_wireframe(K, L, Y)
#ax.contour(K, L, Y,20)  #等高線ver, 最後の数字は線の数

plt.show()

```
#コードを実行した結果

実際にこのコードを使うときは「$\alpha$」と「$\sigma$」に任意の値を入力してください。以下では$\alpha =0.5$で$\sigma$の値をそれぞれ任意の値にした図をのせておきます。メッシュ版と等量曲線(無差別曲線)番を載せておきます。

## コブダグラス型
$\sigma=0$です。
![ダウンロード (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/e416346b-26a8-c743-460a-8c193691315b.png)
![ダウンロード (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/00b4ed21-b60a-4017-8399-1dd2ddbe6f31.png)
![ダウンロード (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/35ca4d70-ea19-dd30-1670-6b8c857e1af0.png)

これは講義などでよく見かける図ですね。

## ces型
$sigma=0.5$です。
![ダウンロード (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/2c4a5018-7035-19fc-b9fe-00b5e31c0bec.png)
![ダウンロード (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/0ef9eed5-1569-0c35-dc0c-56ca274c3482.png)
![ダウンロード (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/e62d784c-1843-4e05-ae49-8007d01d6f1b.png)

ces型のプロットを講義などで見た事ないので私自身これでいいのか不安です…。

##線型
$\sigma=1$です。
![ダウンロード (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/df8a43b4-bdab-7daf-89bf-4094be1926ee.png)
![ダウンロード (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/0732bfe1-72d4-f110-adbc-9bc1b0f90ff6.png)
![ダウンロード (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/db919665-3ab5-df18-b5f7-2925927a78ee.png)

うん、真っ直ぐだ。

##レオンチェフ型
$\sigma=-200$で近似しています。
![ダウンロード (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/b594552f-4639-56af-fe97-7419cbc1d321.png)
![ダウンロード (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/3047d7a9-ce59-c957-fef5-321a109944d4.png)
![ダウンロード (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391748/c1ba108a-bd6f-2ac2-28c5-ff63d0698d0d.png)

うん、見事なL字だ。

##変化の様子
$\sigma$の値を変化させたときの図の変化の様子をTwitterに呟いていたのでURLを載せておきます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">等高線バージョンもあげておく <a href="https://t.co/DZnXpQbEzJ">pic.twitter.com/DZnXpQbEzJ</a></p>&mdash; 悠長＠Leisurely (@deep_mypace) <a href="https://twitter.com/deep_mypace/status/1267863208473145344?ref_src=twsrc%5Etfw">June 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>




#終わりに
以上です。
1年近く下書きで眠らせていたのをいい加減投稿しました。
随時、修正加筆等します。