Skip to content

Instantly share code, notes, and snippets.

@yuntan
Last active March 11, 2020 06:38
Show Gist options
  • Save yuntan/f1337eac839b8ce529f9 to your computer and use it in GitHub Desktop.
Save yuntan/f1337eac839b8ce529f9 to your computer and use it in GitHub Desktop.
実験数学1のレポート
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u5b9f\u9a13\u6570\u5b661 \u30ec\u30dd\u30fc\u30c8\n",
"====\n",
"\n",
"<div align=\"right\">04B13038 \u7269\u7406\u5b66\u79d12\u5e74 \u5fb3\u6c38\u96c4\u6597</div>\n",
"\n",
"\u3053\u306e\u30ec\u30dd\u30fc\u30c8\u3067\u306fPython\u3092\u7528\u3044\u3066\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u8a18\u8ff0\u3059\u308b\u3053\u3068\u306b\u3059\u308b\uff0e\n",
"\n",
"## 1. \u7dda\u5f62\u4ee3\u6570\n",
"\u8a08\u7b97\u6a5f\u3067\u884c\u5217\u5f0f\u3092\u8a08\u7b97\u3059\u308b\u5834\u5408\uff0c\u6570\u5b66\u7684\u306b\u7c21\u660e\u306a\uff0c\u7f6e\u63db\u3092\u7528\u3044\u3066\u8a08\u7b97\u3059\u308b\u65b9\u6cd5\u3068\uff0c\u6383\u304d\u51fa\u3057\u6cd5\u306b\u3088\u308a\u8a08\u7b97\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\uff0c\u6383\u304d\u51fa\u3057\u6cd5\u306b\u3088\u308b\u8a08\u7b97\u306e\u307b\u3046\u304c\u8a08\u7b97\u91cf\u304c\u5c11\u306a\u304f\uff0c\u307e\u305f\u7cbe\u5ea6\u304c\u9ad8\u3044\u3068\u6388\u696d\u4e2d\u306b\u8aac\u660e\u304c\u3042\u3063\u305f\u304c\uff0c\u3053\u306e\u3053\u3068\u306b\u8208\u5473\u3092\u6301\u3063\u305f\u305f\u3081\uff0c\u4e3b\u984c\u3068\u3057\u3088\u3046\u3068\u601d\u3046\uff0e\n",
"\n",
"\u307e\u305a\uff0c\u7f6e\u63db\u306b\u3088\u308a\u884c\u5217\u5f0f\u3092\u6c42\u3081\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3057\u305f\u3044\u304c\uff0c\u305d\u306e\u305f\u3081\u306b\u306f\u7f6e\u63db\u3092\u8868\u3059\u914d\u5217\u3092\u751f\u6210\u3059\u308b\u95a2\u6570\u3068\uff0c\u7f6e\u63db\u306e\u7b26\u53f7\u3092\u8abf\u3079\u308b\u95a2\u6570\u304c\u5fc5\u8981\u3068\u306a\u308b\uff0ePython\u3067\u306f\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u306e`itertools`\u306b\u7f6e\u63db\u3092\u751f\u6210\u3059\u308b\u95a2\u6570\u304c\u3042\u308b\u305f\u3081\uff0c\u3053\u308c\u3092\u5229\u7528\u3059\u308b\uff0e`itertools`\u3067\u751f\u6210\u3057\u305f\u7f6e\u63db\u306e\u7b26\u53f7\u3092\u8abf\u3079\u308b\u95a2\u6570\u306f\u8b1b\u7fa9\u306e\u3082\u306e\u3092\u4f7f\u3046\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# \u7f6e\u63db\u3092\u751f\u6210\u3059\u308b\u95a2\u6570\u3092\u8aad\u307f\u8fbc\u3080\n",
"from itertools import permutations\n",
"\n",
"# \u7f6e\u63db\u306e\u7b26\u53f7\u3092\u8abf\u3079\u308b\u95a2\u6570\n",
"def perm_sign(perm):\n",
" dim = len(perm)\n",
" if dim == 1: \n",
" return +1\n",
" elif perm[-1] == dim-1:\n",
" return perm_sign(perm[:-1])\n",
" else:\n",
" ret = (dim-1)*[0]\n",
" for i in range(dim-1):\n",
" if perm[i] == perm[-1]:\n",
" ret[i] = dim-1\n",
" elif perm[i] == dim-1:\n",
" ret[i] = perm[-1]\n",
" else:\n",
" ret[i] = perm[i]\n",
" return -1 * perm_sign(ret)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u884c\u5217\u3092\u8868\u3059\u305f\u3081\u306b`numpy.matrix`\u3092\u4f7f\u3046\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# \u884c\u5217\u30af\u30e9\u30b9\n",
"import numpy as np\n",
"\n",
"# Vandermode\u884c\u5217\u3092\u4f5c\u6210\n",
"def make_vandermonde(dim):\n",
" m = np.empty((dim, dim))\n",
" for i in range(dim):\n",
" for j in range(dim):\n",
" m[i][j] = (j+1)**i\n",
" return m\n",
"\n",
"# \u5468\u671f\u7684\u884c\u5217\u3092\u4f5c\u6210\n",
"def make_cyclic(dim):\n",
" m = np.empty((dim, dim))\n",
" for i in range(dim):\n",
" for j in range(dim):\n",
" m[i][j] = (i+j) % dim\n",
" return m"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$n$\u6b21\u6b63\u65b9\u884c\u5217$A$\u306e$i$\u884c$j$\u5217\u3092$a_(ij)$\u3067\u8868\u305b\u3070\uff0c$A$\u306e\u884c\u5217\u5f0f\u306f\n",
"$$|A|=\\sum_{\\sigma\\in S_n}\\mathrm{sgn}(\\sigma)a_{1\\sigma(1)}a_{2\\sigma(2)}\\cdots a_{n\\sigma(n)}$$\n",
"\u305f\u3060\u3057\uff0c$S_n$\u306f$n$\u6b21\u306e\u7f6e\u63db\u5168\u4f53\uff0e\u3053\u306e\u5b9a\u7fa9\u901a\u308a\u306b\u884c\u5217\u5f0f\u306e\u8a08\u7b97\u3092\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calc_det_by_perm(mat):\n",
" res = 0\n",
" dim = mat.shape[0]\n",
" for e in permutations(np.arange(dim)):\n",
" tmp = mat[0][e[0]]\n",
" for i in range(1, dim):\n",
" tmp *= mat[i][e[i]]\n",
" res += perm_sign(e) * tmp\n",
" return res"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u6bd4\u8f03\u306e\u305f\u3081\uff0cVandermonde\u884c\u5217\u5f0f\u3092\u8a08\u7b97\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304f\uff0e\u6b63\u65b9\u884c\u5217$Vn$\u3092\u305d\u306e\u6210\u5206\u304c$v_{i,j}=x_j^{i-1} (1\u2266i,j\u2266n)$\u3067\u3042\u308b$n$\u884c$n$\u5217\u306eVandermonde\u884c\u5217\u3068\u3059\u308b\u3068\n",
"$$|V_n|=\\prod_{1\\le j < i\\le n} (x_j-x_i)$$"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calc_det_vandermonde(dim):\n",
" mat = make_vandermonde(dim)\n",
" ret = 1\n",
" for i in range(dim):\n",
" for j in range(i+1, dim):\n",
" ret *= mat[1][j] - mat[1][i]\n",
" return ret"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"5\u6b21\u306eVandermonde\u884c\u5217\u3092\u7528\u3044\u30662\u3064\u306e\u95a2\u6570\u3092\u6bd4\u8f03\u3059\u308b\uff0e`timeit`\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u7528\u3044\u3066\u5b9f\u884c\u6642\u9593\u3092\u8a08\u6e2c\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(\"calc_det_by_perm:\", calc_det_by_perm(make_vandermonde(5)))\n",
"%timeit calc_det_by_perm(make_vandermonde(5))\n",
"print(\"calc_det_vandermonde:\", calc_det_vandermonde(5))\n",
"%timeit calc_det_vandermonde(5)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_by_perm: 288.0\n",
"100 loops, best of 3: 4.32 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det_vandermonde: 288.0\n",
"10000 loops, best of 3: 39.1 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`calc_det_by_perm`\u306f`calc_det_vandermonde`\u306e70\u500d\u307b\u3069\u6642\u9593\u304c\u304b\u304b\u3063\u3066\u3044\u308b\uff0e\u4f7f\u7528\u3059\u308b\u884c\u5217\u309210\u6b21\u306b\u3059\u308b\u3068\u20263\u5206\u7d4c\u3063\u3066\u3082\u7d42\u308f\u3089\u306a\u304b\u3063\u305f\uff0e9\u6b21\u306e\u884c\u5217\u3067\u8a66\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(\"calc_det_by_perm:\", calc_det_by_perm(make_vandermonde(9)))\n",
"print(\"calc_det_vandermonde:\", calc_det_vandermonde(9))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_by_perm: 5.04319761711e+15\n",
"calc_det_vandermonde: 5.05658474496e+15\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"20\u79d2\u307b\u3069\u304b\u304b\u3063\u305f\uff0e2\u3064\u306e\u95a2\u6570\u3067\u7d50\u679c\u306b\u9055\u3044\u304c\u51fa\u3066\u3044\u308b\uff0e\u884c\u5217\u306b\u542b\u307e\u308c\u308b\u5024\u306f\u6574\u6570\u3067\uff0c\u6574\u6570\u540c\u58eb\u306e\u8db3\u3057\u7b97\uff0c\u5f15\u304d\u7b97\uff0c\u639b\u3051\u7b97\u3057\u304b\u884c\u3063\u3066\u306a\u3044\u306e\u3060\u304b\u3089\uff0c\u8aa4\u5dee\u306f\u767a\u751f\u3057\u306a\u3044\u3068\u8003\u3048\u305f\u306e\u3060\u304c\uff0c\u306a\u305c`calc_det_by_perm`\u3067\u306f\u5024\u304c\u5c0f\u3055\u304f\u306a\u3063\u3066\u3057\u307e\u3046\u306e\u304b\uff0e\n",
"\n",
"\u884c\u5217\u3092\u8868\u73fe\u3059\u308b\u306e\u306b\u7528\u3044\u308b`numpy.matrix`\u306f`numpy.float64`\u306e\u5024\u3092\u683c\u7d0d\u3059\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u308b\uff0e\u306a\u306e\u3067\uff0c\u6574\u6570\u578b\u3067\u884c\u5217\u6210\u5206\u3092\u8a08\u7b97\u3057\u305f\u3064\u3082\u308a\u3067\u3082\uff0c\u4ee3\u5165\u6642\u306b\u6697\u9ed9\u7684\u306bcast\u3055\u308c\u3066\u3044\u305f\u306e\u3060\u308d\u3046\uff0e\u306a\u306e\u3067`float64`\u306e\u8a08\u7b97\u306b\u306a\u3063\u3066\u3057\u307e\u3063\u305f\uff0e\u6d6e\u52d5\u5c0f\u6570\u70b9\u578b\u3067\u306f\u60c5\u5831\u843d\u3061\u304c\u767a\u751f\u3059\u308b\uff0e\u3064\u307e\u308a\uff0c\u5927\u304d\u306a\u5024\u306b\u5c0f\u3055\u306a\u5024\u3092\u52a0\u3048\u305f\u6642\u306b\uff0c\u6709\u52b9\u6570\u5b57\u304c\u9650\u3089\u308c\u308b\u6f14\u7b97\u3067\u306f\uff0c\u5c0f\u3055\u306a\u5024\u304c\u7121\u8996\u3055\u308c\u3066\u3057\u307e\u3046\uff0e`calc_det_by_perm`\u3067\u306f\u5927\u304d\u306a\u5024\u306b\u5c0f\u3055\u306a\u5024\u3092\u52a0\u3048\u308b\u51e6\u7406\u304c\u591a\u767a\u3059\u308b\u305f\u3081\uff0c\u8aa4\u5dee\u304c\u751f\u3058\u305f\u3068\u3044\u3046\u3053\u3068\u3060\u308d\u3046\uff0e\n",
"\n",
"\u6b21\u306b\uff0c\u6383\u304d\u51fa\u3057\u6cd5\u306b\u3088\u308b\u884c\u5217\u5f0f\u306e\u8a08\u7b97\u3092\u5b9f\u88c5\u3057\u3066\u307f\u308b\uff0e\u305f\u3060\u3057\uff0c\u6388\u696d\u3067\u7528\u3044\u305f\u3082\u306e\u3068\u306f\u5c11\u3057\u9055\u3046\u65b9\u6cd5\u3092\u53d6\u3063\u305f\uff0e\n",
"\n",
"$$\n",
"\\begin{vmatrix}\n",
"A_{11}&A_{12}\\\\O&A_{22}\n",
"\\end{vmatrix}\n",
"=|A_{11}||A_{22}|\n",
"$$\n",
"\u3088\u308a\uff0c\u4e0a\u4e09\u89d2\u884c\u5217\u306e\u884c\u5217\u5f0f\u306f\uff0c\u884c\u5217\u306e\u5bfe\u89d2\u7dda\u4e0a\u306e\u6210\u5206\u306e\u7a4d\u3067\u3042\u308b\uff0e\n",
"\n",
"\u307e\u305f\uff0c$|A|=|{}^tA|$\u306a\u306e\u3067\uff0c\u4e0b\u4e09\u89d2\u884c\u5217\u306e\u884c\u5217\u5f0f\u3082\u884c\u5217\u306e\u5bfe\u89d2\u7dda\u4e0a\u306e\u6210\u5206\u306e\u7a4d\u3067\u3042\u308b\uff0e\n",
"\n",
"\u300c2\u3064\u306e\u884c(\u5217)\u3092\u5165\u308c\u66ff\u3048\u308b\u3068\u884c\u5217\u5f0f\u306e\u7b26\u53f7\u304c\u5909\u308f\u308b\u300d\u3053\u3068\u3068\uff0c\u300c\u3042\u308b\u884c(\u5217)\u306b\u5225\u306e\u884c(\u5217)\u306e\u5b9a\u6570\u500d\u3092\u52a0\u3048\u3066\u3082\u884c\u5217\u5f0f\u306f\u5909\u308f\u3089\u306a\u3044\u300d\u3053\u3068\u3092\u7528\u3044\u3066\u884c\u5217\u3092\u4e0b\u4e09\u89d2\u5316\u3057\uff0c\u884c\u5217\u5f0f\u3092\u6c42\u3081\u308c\u3070\u826f\u3044\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calc_det(mat):\n",
" res = 1\n",
" dim = mat.shape[0]\n",
" mat = np.array(mat) # \u30b3\u30d4\u30fc\n",
" \n",
" for r in range(dim):\n",
" if mat[r][r] == 0: # (r, r)\u304c0\n",
" # r\u884c\u3092\u5225\u306e\u884c\u3068\u5165\u308c\u66ff\u3048\u308b\n",
" for i in range(r+1, dim):\n",
" if mat[i][r] != 0:\n",
" mat[r], mat[i] = np.array(mat[i]), np.array(mat[r])\n",
" res *= -1\n",
" break\n",
" # r\u884c\u3088\u308a\u4e0b\u306e\u884c\u306er\u5217\u304c\u3059\u3079\u30660\u3060\u3063\u305f\u3089\u884c\u5217\u5f0f\u306f0\n",
" if mat[r][r] == 0:\n",
" res = 0\n",
" break\n",
" \n",
" # (r, r+1)\u304b\u3089(r, dim-1)\u307e\u3067\u30920\u306b\u3059\u308b\n",
" for j in range(r+1, dim): # \u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9 \n",
" tmp = mat[r][j]/mat[r][r]\n",
" for i in range(r, dim): # \u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" # j\u5217\u304b\u3089r\u5217\u306e(r,j)/(r,r)\u500d\u3092\u5f15\u304d\uff0c(r,j)\u30920\u306b\u3059\u308b\n",
" mat[i][j] -= tmp * mat[i][r]\n",
" mat[r][j] = 0 # \u8aa4\u5dee\u3092\u9632\u3050\n",
" \n",
" # \u5bfe\u89d2\u7dda\u4e0a\u306e\u6210\u5206\u306e\u7a4d\u3092\u6c42\u3081\u308b\n",
" res *= mat[r][r]\n",
" \n",
" return res"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u5148\u307b\u3069\u306e2\u3064\u306e\u95a2\u6570\u3068\u6bd4\u8f03\u3057\u3066\u307f\u308b"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = make_vandermonde(8)\n",
"print(\"calc_det_by_perm:\", calc_det_by_perm(mat))\n",
"%timeit calc_det_by_perm(mat)\n",
"print(\"calc_det_vandermonde:\", calc_det_vandermonde(8))\n",
"%timeit calc_det_vandermonde(8)\n",
"print(\"calc_det:\", calc_det(mat))\n",
"%timeit calc_det(mat)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_by_perm: 125411328000.0\n",
"1 loops, best of 3: 1.89 s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det_vandermonde: 125411328000.0\n",
"10000 loops, best of 3: 91.1 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det: 125411328000.0\n",
"1000 loops, best of 3: 316 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u8a08\u7b97\u6642\u9593\u304c\u77ed\u7e2e\u3067\u304d\u305f\uff0e\u6b21\u5143\u3092\u5897\u3084\u3057\u3066\u8a08\u7b97\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(\"calc_det_vandermonde: %f\" % calc_det_vandermonde(9))\n",
"print(\"calc_det: %f\" % calc_det(make_vandermonde(9)))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_vandermonde: 5056584744960000.000000\n",
"calc_det: 5056584744960000.000000\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u5148\u7a0b\u306f$10^{13}$\u306e\u5dee\u304c\u51fa\u305f\u304c\uff0c\u4eca\u56de\u306f\u898b\u3089\u308c\u306a\u3044\uff0e\u3055\u3089\u306b\u6b21\u5143\u3092\u5897\u3084\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(\"calc_det_vandermonde: %f\" % calc_det_vandermonde(12))\n",
"print(\"calc_det: %f\" % calc_det(make_vandermonde(12)))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_vandermonde: 265790267296391993126882993552490496.000000\n",
"calc_det: 265790267296391956233394846133387264.000000\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$10^{20}$\u306e\u5dee\u304c\u51fa\u3066\u3057\u307e\u3063\u305f\uff0e\n",
"\n",
"\u5468\u671f\u7684\u884c\u5217\u3067\u3082\u8a66\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = make_cyclic(5)\n",
"print(\"calc_det_by_perm: %f\" % calc_det_by_perm(mat))\n",
"print(\"calc_det: %f\" % calc_det(mat))\n",
"mat = make_cyclic(8)\n",
"print(\"calc_det_by_perm: %f\" % calc_det_by_perm(mat))\n",
"print(\"calc_det: %f\" % calc_det(mat))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det_by_perm: 1250.000000\n",
"calc_det: 1250.000000\n",
"calc_det_by_perm: 7340032.000000"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det: 7340032.000000\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u6b21\u306b\uff0cLU\u5206\u89e3\u3092\u7528\u3044\u3066\u5b9f\u88c5\u3057\u3066\u307f\u308b\uff0eLU\u5206\u89e3\u3068\u306f\uff0c\u884c\u5217$A$\u3092$A=LU$\u3068\u306a\u308b\u3088\u3046\u306b\u4e0b\u4e09\u89d2\u884c\u5217$L$\u3068\u4e0a\u4e09\u89d2\u884c\u5217$U$\u306b\u5206\u89e3\u3059\u308b\u3053\u3068\u3067\u3042\u308b\uff0e\u5b9f\u88c5\u306b\u3042\u305f\u3063\u3066References\u306b\u3042\u308b\u30b5\u30a4\u30c8\u3092\u53c2\u7167\u3057\u305f\uff0e\n",
"\n",
"`lu_decomp`\u306f\u4e0e\u3048\u3089\u308c\u305f\u884c\u5217\u3092LU\u5206\u89e3\u3057\uff0c\u7d50\u679c\u3092\n",
"$$\n",
"\\begin{pmatrix}\n",
"u_{11}&u_{12}&u_{13}\\\\\n",
"l_{21}&u_{22}&u_{23}\\\\\n",
"l_{31}&l_{32}&u_{33}\n",
"\\end{pmatrix}\n",
"$$\n",
"\u306e\u3088\u3046\u306b\u683c\u7d0d\u3057\u305f\u884c\u5217\u3092\u8fd4\u3059\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"EPS = 1e-10\n",
"\n",
"def lu_decomp(mat):\n",
" dim = mat.shape[0]\n",
" mat = np.array(mat) # \u30b3\u30d4\u30fc\n",
" \n",
" # \u884c\u306e\u5165\u308c\u66ff\u3048\u3092\u8a18\u9332\u3059\u308b\n",
" pivot = np.arange(dim)\n",
" # \u884c\u306e\u5165\u308c\u66ff\u3048\u56de\u6570\u304c\u5076\u6570\u306a\u3089even\uff0c\u5947\u6570\u306a\u3089odd\n",
" sign = 1\n",
" \n",
" # \u53f3\u4e0b\u306e\u884c\u5217\u306b\u3064\u3044\u3066\u8a08\u7b97\n",
" for r in range(dim-1):\n",
" \n",
" # r\u884c\u76ee\u4ee5\u964d\u306e\u884c\u306e\u4e2d\u304b\u3089r\u5217\u76ee\u306e\u5024\u306e\u7d76\u5bfe\u5024\u304c\u6700\u5927\u3067\u3042\u308b\u3082\u306e\u3092\u63a2\u3057\uff0cr\u884c\u3068\u4ea4\u63db\u3059\u308b\n",
" max_i = r\n",
" for i in range(r+1, dim): # \u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" if (np.abs(mat[max_i][r]) < np.abs(mat[i][r])).all():\n",
" max_i = i\n",
" if max_i != r:\n",
" # \u6700\u5927\u306e\u3082\u306e\u3068\u5165\u308c\u66ff\u3048\u308b\n",
" mat[r], mat[max_i] = np.array(mat[max_i]), np.array(mat[r])\n",
" # \u5165\u308c\u66ff\u3048\u3092\u8a18\u9332\n",
" pivot[r] = max_i; pivot[max_i] = r\n",
" sign *= -1\n",
" \n",
" if (np.abs(mat[r][r]) < EPS).all(): # r\u5217\u306er\u884c\u76ee\u4ee5\u964d\u304c\u5168\u30660\u3060\u3063\u305f\u5834\u5408\n",
" continue # \u6b21\u306er\u306b\u9032\u3080\n",
" \n",
" # \u884c\u5217\u306e\u5404\u5024\u3092L,U\u306e\u5024\u306b\u7f6e\u63db\n",
" for i in range(r+1, dim): # \u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" mat[i][r] /= mat[r][r]\n",
" for j in range(r+1, dim): # \u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" mat[i][j] -= mat[i][r] * mat[r][j]\n",
" \n",
" return mat, sign, pivot\n",
"\n",
" \n",
"def calc_det_by_lu(mat):\n",
" mat, sign, pivot = lu_decomp(mat)\n",
" ret = sign\n",
" for r in range(mat.shape[0]):\n",
" ret *= mat[r][r]\n",
" return ret"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`calc_det`\u3068\u6bd4\u8f03\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = make_vandermonde(8)\n",
"print(\"calc_det:\", calc_det(mat))\n",
"%timeit calc_det(mat)\n",
"print(\"calc_det_by_lu:\", calc_det_by_lu(mat))\n",
"%timeit calc_det_by_lu(mat)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det: 125411328000.0\n",
"1000 loops, best of 3: 316 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det_by_lu: 125411328001.0\n",
"1000 loops, best of 3: 752 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u6642\u9593\u304c\u304b\u304b\u308b\u4e0a\u306b\uff0c\u7cbe\u5ea6\u3082\u60aa\u3044\uff0e\u5468\u671f\u7684\u884c\u5217\u3067\u306f\u3069\u3046\u306a\u308b\u304b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = make_cyclic(5)\n",
"print(\"calc_det:\", calc_det(mat))\n",
"%timeit calc_det(mat)\n",
"print(\"calc_det_by_lu:\", calc_det_by_lu(mat))\n",
"%timeit calc_det_by_lu(mat)\n",
"mat = make_cyclic(12)\n",
"print(\"calc_det:\", calc_det(mat))\n",
"%timeit calc_det(mat)\n",
"print(\"calc_det_by_lu:\", calc_det_by_lu(mat))\n",
"%timeit calc_det_by_lu(mat)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_det: 1250.0\n",
"10000 loops, best of 3: 108 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det_by_lu: 1250.0\n",
"1000 loops, best of 3: 253 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det: 4.08654603878e+12\n",
"1000 loops, best of 3: 1e+03 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_det_by_lu: 4.08654603878e+12\n",
"100 loops, best of 3: 1.82 ms per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u3053\u3061\u3089\u3067\u3082\u540c\u3058\u3088\u3046\u306a\u7d50\u679c\u306b\u306a\u3063\u305f\uff0eLU\u5206\u89e3\u304c\u4e00\u756a\u901f\u3044\u306e\u3067\u306f\u3068\u671f\u5f85\u3057\u305f\u306e\u3060\u304c\uff0c\u884c\u5217\u5f0f\u306e\u8a08\u7b97\u3067\u306f\u671f\u5f85\u3057\u305f\u7d50\u679c\u304c\u5f97\u3089\u308c\u306a\u304b\u3063\u305f\uff0e\n",
"\n",
"\u305d\u3053\u3067\uff0cLU\u5206\u89e3\u3092\u7528\u3044\u3066\u9006\u884c\u5217\u3092\u8a08\u7b97\u3057\u3066\u307f\u305f\u3044\uff0e\u6bd4\u8f03\u306e\u305f\u3081\u524d\u56de\u540c\u69d8\uff0c\u307e\u305a\u6383\u304d\u51fa\u3057\u6cd5\u306b\u3088\u308b\u9006\u884c\u5217\u306e\u7b97\u51fa\u3092\u5b9f\u88c5\u3059\u308b\uff0e\u3053\u3053\u3067\u884c\u3046\u306e\u306f\u624b\u8a08\u7b97\u3067\u9006\u884c\u5217\u3092\u6c42\u3081\u308b\u3068\u304d\u3088\u304f\u3084\u308b\uff0c\u5143\u306e\u884c\u5217\u306e\u53f3\u306b\u5358\u4f4d\u884c\u5217\u3092\u4e26\u3079\uff0c\u5de6\u57fa\u672c\u5909\u5f62\u3092\u5de6\u53f3\u306e\u884c\u5217\u306b\u5927\u3057\u3066\u9069\u7528\u3057\uff0c\u5de6\u306e\u884c\u5217\u3092\u5358\u4f4d\u884c\u5217\u306b\u3059\u308b\u3068\u53f3\u306e\u884c\u5217\u304c\u9006\u884c\u5217\u306b\u306a\u3063\u3066\u3044\u308b\uff0c\u3068\u3044\u3046\u306e\u3068\u5168\u304f\u540c\u3058\u3053\u3068\u3067\u3042\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def calc_inv(mat):\n",
" dim = mat.shape[0]\n",
" inv = np.eye(dim) # \u5358\u4f4d\u884c\u5217\u3092\u751f\u6210\n",
" mat = np.array(mat)\n",
" \n",
" for r in range(dim):\n",
" tmp = 1/mat[r][r]\n",
" # \u5de6\u57fa\u672c\u5909\u5f62(\u884c\u306e\u5b9a\u6570\u500d)\n",
" mat[r] *= tmp\n",
" inv[r] *= tmp\n",
" \n",
" for i in range(dim): # \u884c\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" if i != r:\n",
" tmp = mat[i][r]\n",
" # \u5de6\u57fa\u672c\u5909\u5f62(\u884c\u306b\u5225\u306e\u884c\u306e\u5b9a\u6570\u500d\u3092\u8db3\u3059)\n",
" mat[i] -= tmp * mat[r]\n",
" inv[i] -= tmp * inv[r]\n",
" \n",
" return inv"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u6b21\u306b\uff0cLU\u5206\u89e3\u3092\u7528\u3044\u3066\u9006\u884c\u5217\u3092\u8a08\u7b97\u3059\u308b\uff0e$A\\mathbb{x_i}=\\mathbb{b_i}$\u3092\uff0c\n",
"$$\n",
"\\mathbb{b_1}=\\begin{pmatrix}1\\\\0\\\\0\\end{pmatrix},\n",
"\\mathbb{b_2}=\\begin{pmatrix}0\\\\1\\\\0\\end{pmatrix},\n",
"\\mathbb{b_3}=\\begin{pmatrix}0\\\\0\\\\1\\end{pmatrix}\n",
"$$\n",
"\u306b\u3064\u3044\u3066\u305d\u308c\u305e\u308c\u89e3\u304f\uff0e\u305d\u3057\u3066$X=(\\mathbb{x_1},\\mathbb{x_2},\\mathbb{x_3})$\u306e\u3088\u3046\u306b\u4e26\u3079\u308b\u3068\uff0c\u9006\u884c\u5217\u304c\u6c42\u307e\u3063\u305f\u3053\u3068\u306b\u306a\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def solve_by_lu(lu, b, pivot):\n",
" dim = mat.shape[0]\n",
" \n",
" # pivot\u306b\u57fa\u3065\u304db\u306e\u5217\u3092\u5165\u308c\u66ff\u3048\u308b\n",
" for i in range(dim): # \u5217\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n",
" if i < pivot[i]:\n",
" b[i], b[pivot[i]] = b[pivot[i]], b[i]\n",
" \n",
" # Lc=b\u3092\u89e3\u304f\n",
" c = dim*[0]\n",
" for i in range(dim):\n",
" c[i] = b[i]\n",
" for j in range(i):\n",
" c[i] -= lu[i][j] * c[j]\n",
" \n",
" # Ux=c\u3092\u89e3\u304f\n",
" x = dim*[0]\n",
" for i in range(dim-1, -1, -1):\n",
" x[i] = c[i]\n",
" for j in range(dim-1, i, -1):\n",
" x[i] -= lu[i][j] * x[j]\n",
" x[i] /= lu[i][i]\n",
" \n",
" return x\n",
"\n",
"\n",
"def calc_inv_by_lu(mat):\n",
" dim = mat.shape[0]\n",
" lu, sign, pivot = lu_decomp(mat)\n",
" \n",
" inv = np.empty((dim, dim))\n",
" for j in range(dim):\n",
" # b\u3092\u4f5c\u308b\n",
" b = dim*[0]\n",
" for i in range(dim):\n",
" if i == j: b[i] = 1\n",
" else: b[i] = 0\n",
" \n",
" # Ax=b\u3092\u89e3\u304f\n",
" x = solve_by_lu(lu, b, pivot)\n",
" \n",
" # inv\u306bx\u3092\u30b3\u30d4\u30fc\u3059\u308b\n",
" for i in range(dim):\n",
" inv[i][j] = x[i]\n",
" \n",
" return inv"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u8a08\u7b97\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = make_vandermonde(5)\n",
"print(\"calc_inv:\", calc_inv(mat))\n",
"%timeit calc_inv(mat)\n",
"print(\"calc_inv_by_lu:\", calc_inv_by_lu(mat))\n",
"%timeit calc_inv_by_lu(mat)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"calc_inv: [[ 5. -6.41666667 2.95833333 -0.58333333 0.04166667]\n",
" [-10. 17.83333333 -9.83333333 2.16666667 -0.16666667]\n",
" [ 10. -19.5 12.25 -3. 0.25 ]\n",
" [ -5. 10.16666667 -6.83333333 1.83333333 -0.16666667]\n",
" [ 1. -2.08333333 1.45833333 -0.41666667 0.04166667]]\n",
"1000 loops, best of 3: 221 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"calc_inv_by_lu: [[ 5. -6.41666667 2.95833333 -0.58333333 0.04166667]\n",
" [-10. 17.83333333 -9.83333333 2.16666667 -0.16666667]\n",
" [ 10. -19.5 12.25 -3. 0.25 ]\n",
" [ -5. 10.16666667 -6.83333333 1.83333333 -0.16666667]\n",
" [ 1. -2.08333333 1.45833333 -0.41666667 0.04166667]]\n",
"1000 loops, best of 3: 532 \u00b5s per loop"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n"
]
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u3084\u306f\u308a\u6383\u304d\u51fa\u3057\u6cd5\u306e\u307b\u3046\u304c\u901f\u304b\u3063\u305f\uff0e\n",
"\n",
"\u5b9f\u306f\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u306f\u30d0\u30b0\u304c\u3042\u308a\uff0c\u5bfe\u89d2\u7dda\u4e0a\u306b0\u304c\u3042\u308b\u3068`DividedByZero`\u304c\u767a\u751f\u3059\u308b\u304c\uff0c\u6642\u9593\u304c\u306a\u304f\u306a\u3063\u3066\u3057\u307e\u3063\u305f\u306e\u3067\u3053\u306e\u72b6\u614b\u3067\u63d0\u51fa\u3059\u308b\uff0e\n",
"\n",
"## 2. \u89e3\u6790\n",
"\u8a08\u7b97\u6a5f\u3067\u6570\u5024\u7684\u306b\u5fae\u5206\u65b9\u7a0b\u5f0f\u3092\u89e3\u304f\u3053\u3068\u306b\u8208\u5473\u3092\u6301\u3063\u305f\u305f\u3081\uff0cEuler\u6cd5\u3068Runge-Kutta\u6cd5\u3092\u7528\u3044\u3066\u5358\u72ec\u5e38\u5fae\u5206\u65b9\u7a0b\u5f0f\u3092\u89e3\u304f\u3053\u3068\u306b\u3064\u3044\u3066\u66f8\u3053\u3046\u3068\u601d\u3046\uff0e\n",
"\n",
"### 2.1 Euler\u6cd5\n",
"$f(x)$\u304c\u8003\u3048\u308b\u533a\u9593\u4e0a$C^1$\u7d1a\u3067\u3042\u308a\uff0c$f(x)$\uff0c$f'(x)$\u304c\u6709\u754c\u3067\uff0c$|f(x)|\\le K_0,|f'(x)|\\le K_1$\u3067\u3042\u308b\u3068\u3059\u308b\uff0e\n",
"$$\\frac{dx}{dt}(=x'(t))=f(t,x(t))$$\n",
"\u306e\u3088\u3046\u306a\u65b9\u7a0b\u5f0f\u3092\u8003\u3048\u308b\uff0e\u3053\u306e\u89e3$x(t) (0\\le t\\le a)$\u3092\u6570\u5024\u7684\u306b\u6c42\u3081\u305f\u3044\uff0e$x'(t)$\u306f$x(t)$\u306e\u50be\u304d\u3067\u3042\u308b\u304b\u3089\uff0c\u521d\u671f\u5024$x(0)$\uff0c$x'(0)$\u304c\u5224\u3063\u3066\u3044\u308c\u3070, \u5341\u5206\u5c0f\u3055\u3044\u5e45$dt$\u3092\u8003\u3048\u308b\u4e8b\u3067$x(dt)$\u304c\u308f\u304b\u308a,$x(dt)$\u3068$dt$\u3092\u4f7f\u3063\u3066 $x'(dt)$\u304c\u6c42\u3081\u3089\u308c\u308b\uff0e\u3053\u308c\u3092\u7e70\u308a\u8fd4\u3059\u4e8b\u3067\u4efb\u610f\u306e$t$\u3067\u306e$x(t)$\u3092\u89e3\u304f\u3053\u3068\u306b\u3059\u308b\uff0e\u3064\u307e\u308a\uff0c$t_n=tn$\u306e\u3068\u304d$x(t_n)$\u306e\u8fd1\u4f3c\u89e3\u3092$v_n$\u3068\u304a\u304f\u3068\uff0c\n",
"$$v_{n+1}=v_n+f(t_n,v_n)dt$$\n",
"\n",
"\u3053\u306e\u3068\u304d\uff0c$v_t$\u306e\u8aa4\u5dee$\\epsilon_n:=v_n-x(t_n)$\u306f\uff0c\u6570\u5217\n",
"$$|\\epsilon_{n+1}|\\le(1+K_1dt)|\\epsilon_n|+K_0K_1dt^2$$\n",
"\u3088\u308a\u6c42\u307e\u308b\uff0e(\u88dc\u52a9\u30d7\u30ea\u30f3\u30c8)\n",
"\n",
"\u3061\u306a\u307f\u306b\uff0c\u3053\u306e\u8fd1\u4f3c\u306f$x_{n+1}$\u3092$t_n$\u5468\u308a\u3067Taior\u5c55\u958b\u3057\u3066$dt^2$\u4ee5\u964d\u3092\u5207\u308a\u6368\u3066\u305f\u3082\u306e\u3068\u8003\u3048\u308b\u3053\u3068\u3082\u3067\u304d\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def dsolve_euler(f, k0, k1, x0, max_t, div):\n",
" dt = max_t/div\n",
" err1 = 1 + k1*dt # 1 + K_1 dt\n",
" err2 = k0*k1*dt**2 # K_0 K_1 dt^2\n",
" \n",
" value, min_val, max_val = (div+1)*[0], (div+1)*[0], (div+1)*[0]\n",
" value[0] = min_val[0] = max_val[0] = x0\n",
" err = 0\n",
" for i in range(div):\n",
" value[i+1] = value[i] + f(value[i])*dt\n",
" err = err1*err + err2\n",
" min_val[i+1] = value[i+1] - err\n",
" max_val[i+1] = value[i+1] + err\n",
" \n",
" return (value, min_val, max_val)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.2 Runge-Kutta\u6cd5\n",
"$f(x)$\u304c\u8003\u3048\u308b\u533a\u9593\u4e0a$C^2$\u7d1a\u3067\u3042\u308a\uff0c$f(x)$\uff0c$f'(x)$\uff0c$f''(x)$\u304c\u6709\u754c\u3067\uff0c$|f(x)|\\le K_0,|f'(x)|\\le K_1,|f''(x)|\\le K_2$\u3067\u3042\u308b\u3068\u3059\u308b\uff0e\n",
"\n",
"2\u6b21Runge-Kutta\u6cd5\u306f\uff0c\u307e\u305a$x(t_n+\\frac{dt}{2})$\u306e\u50be\u304d$x'(t_n+\\frac{dt}{2})$\u3092\u6c42\u3081,\u305d\u306e\u50be\u304d\u3092$t_n$\u3067\u306e\u50be\u304d\u3068\u3057\u3066$x(t_n+dt)$\u3092\u6c42\u3081\u308b\u3082\u306e\u3067\u3042\u308b\uff0e\u5f0f\u3067\u8868\u3059\u3068\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u308b\uff0e\n",
"$$w_n:=v_n+\\frac{1}{2}f(v_n)dt, v_{n+1}=v_n+f(w_n)dt$$\n",
"\n",
"\u3053\u306e\u3068\u304d\u8aa4\u5dee\u306f\n",
"$$|\\epsilon_{n+1}|\\le(1+K_1dt+\\frac{1}{2}(K_1^2+K_0K_2)dt^2)|\\epsilon_n|+(\\frac{1}{2}K_0K_1^2+\\frac{5}{8}K_0^2K_2)dt^3$$\n",
"\u3088\u308a\u6c42\u307e\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def dsolve_rk2(f, k0, k1, k2, x0, max_t, div):\n",
" dt = max_t/div\n",
" err1 = 1 + k1*dt + 0.5*(k1**2 + k0*k2)*dt**2\n",
" err2 = (0.5*k0*(k1**2) + 0.625*(k0**2)*k2)*dt**3\n",
" \n",
" value, min_val, max_val = (div+1)*[0], (div+1)*[0], (div+1)*[0]\n",
" value[0] = min_val[0] = max_val[0] = x0\n",
" err = 0\n",
" for i in range(div):\n",
" w = value[i] + 0.5*f(value[i])*dt\n",
" value[i+1] = value[i] + f(w)*dt\n",
" err = err1*err + err2\n",
" min_val[i+1] = value[i+1] - err\n",
" max_val[i+1] = value[i+1] + err\n",
" \n",
" return (value, min_val, max_val)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2.3 \u6bd4\u8f03\n",
"\u6e1b\u8870\u65b9\u7a0b\u5f0f$x'=-x, x(0)=1$\u306e\u6570\u5024\u89e3\u3092Euler\u6cd5\u3068Runge-Kutta\u6cd5\u3067\u6c42\u3081\u3066\u307f\u308b\uff0e\u30b0\u30e9\u30d5\u306e\u63cf\u753b\u306b`matplotlib`\u3092\u7528\u3044\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"def plot_result(res_euler, res_rk2, g, max_t, div, x_range, f_label, g_label):\n",
" t_range = np.linspace(0, max_t, div+1)\n",
" g_plt = []\n",
" for t in t_range:\n",
" g_plt.append(g(t))\n",
" \n",
" plt.subplot(121)\n",
" plt.title(\"Euler\")\n",
" plt.xlabel('t')\n",
" plt.ylabel('x')\n",
" plt.ylim(x_range)\n",
" plt.grid()\n",
" plt.plot(t_range, res_euler[0], label=f_label)\n",
" plt.plot(t_range, res_euler[1], label='min')\n",
" plt.plot(t_range, res_euler[2], label='max')\n",
" plt.plot(t_range, g_plt, label=g_label)\n",
" plt.legend(loc='best').get_frame().set_alpha(0.8)\n",
" \n",
" plt.subplot(122)\n",
" plt.title(\"Runge-Kutta\")\n",
" plt.xlabel('t')\n",
" plt.ylabel('x')\n",
" plt.ylim(x_range)\n",
" plt.legend(loc='best')\n",
" plt.grid()\n",
" plt.plot(t_range, res_rk2[0], label=f_label)\n",
" plt.plot(t_range, res_rk2[1], label='min')\n",
" plt.plot(t_range, res_rk2[2], label='max')\n",
" plt.plot(t_range, g_plt, label=g_label)\n",
" plt.legend(loc='best').get_frame().set_alpha(0.8)\n",
" \n",
" fig = plt.gcf()\n",
" fig.set_size_inches(12, 4)\n",
"\n",
"f = lambda x: -x\n",
"g = lambda t: np.exp(-t)\n",
"\n",
"k0 = 1; k1 = 1; k2 = 0; x0 = 1; max_t = 5\n",
"div = 10\n",
"res_euler = dsolve_euler(f, k0, k1, x0, max_t, div)\n",
"res_rk2 = dsolve_rk2(f, k0, k1, k2, x0, max_t, div)\n",
"plot_result(res_euler, res_rk2, g, max_t, div, (-0.1, 1.2), r\"$x'=-x$\", r\"$\\exp(-t)$\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stderr",
"text": [
"/usr/lib/python3/dist-packages/matplotlib/axes.py:4749: UserWarning: No labeled objects found. Use label='...' kwarg on individual plots.\n",
" warnings.warn(\"No labeled objects found. \"\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x7f1d981aecc0>"
]
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u5148\u7a0b\u306f\u5206\u5272\u6570\u309210\u306b\u3057\u305f\u304c\uff0c\u6b21\u306f50\u306b\u3057\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"div = 50\n",
"res_euler = dsolve_euler(f, k0, k1, x0, max_t, div)\n",
"res_rk2 = dsolve_rk2(f, k0, k1, k2, x0, max_t, div)\n",
"plot_result(res_euler, res_rk2, g, max_t, div, (-0.1, 1.2), r\"$x'=-x$\", r\"$exp(-t)$\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x7f1d98186e80>"
]
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\u3053\u306e\u3088\u3046\u306b\uff0cRunge-Kutta\u6cd5\u306e\u65b9\u304c\u8aa4\u5dee\u306e\u53ce\u675f\u304c\u65e9\u304f\uff0c\u307e\u305f\u6b63\u78ba\u3067\u3042\u308b\uff0e\n",
"\n",
"\u65b9\u7a0b\u5f0f$x'=1+\\cos(x), x(0)=0$\u306b\u3064\u3044\u3066\u3082\u3084\u3063\u3066\u307f\u308b\uff0e"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"f = lambda x: 1 + np.cos(x)\n",
"g = lambda t: 2 * np.arctan(t)\n",
"\n",
"k0 = 2; k1 = 1; k2 = 2; x0 = 0; max_t = 3\n",
"div = 50\n",
"res_euler = dsolve_euler(f, k0, k1, x0, max_t, div)\n",
"res_rk2 = dsolve_rk2(f, k0, k1, k2, x0, max_t, div)\n",
"plot_result(res_euler, res_rk2, g, max_t, div, (-0.1, 4), r\"$x'=1+\\cos(x)$\", r\"$2\\tan^{-1}(t)$\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x7f1d810f7fd0>"
]
}
],
"prompt_number": 22
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References\n",
"* \u57fa\u790e\u8b1b\u7fa9 \u7dda\u5f62\u4ee3\u6570\u5b66\n",
"* LU\u5206\u89e3 - [\u7269\u7406\u306e\u304b\u304e\u3057\u3063\u307d] http://hooktail.org/computer/index.php?LU%CA%AC%B2%F2\n",
"* \u9023\u7acb\u4e00\u6b21\u65b9\u7a0b\u5f0f\u306e\u89e3\u6cd5 - SHIMIZUS http://shimizus.hustle.ne.jp/wiki/wiki.cgi?page=%CF%A2%CE%A9%B0%EC%BC%A1%CA%FD%C4%F8%BC%B0%A4%CE%B2%F2%CB%A1\n",
"* \u884c\u5217\u5f0f\u306e\u5024\u306e\u6c42\u3081\u65b9\u3001\u9006\u884c\u5217\u306e\u4f5c\u308a\u65b9\u306e C \u8a00\u8a9e\u30d7\u30ed\u30b0\u30e9\u30e0 | BlueSky Lab. http://thira.plavox.info/blog/2008/06/_c.html\n",
"* Euler\u6cd5 - [\u7269\u7406\u306e\u304b\u304e\u3057\u3063\u307d] http://hooktail.org/computer/index.php?Euler%CB%A1\n",
"* Runge-Kutta\u6cd5 - [\u7269\u7406\u306e\u304b\u304e\u3057\u3063\u307d] http://hooktail.org/computer/index.php?Runge-Kutta%CB%A1"
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment