Skip to content

Instantly share code, notes, and snippets.

@ceptreee
Created January 8, 2018 19:17
Show Gist options
  • Save ceptreee/44d3d997b01798a3238b78219659c196 to your computer and use it in GitHub Desktop.
Save ceptreee/44d3d997b01798a3238b78219659c196 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Qiitaの記事([Juliaの速さを体感する](https://qiita.com/ceptree/items/b5cfca180e85e61c42a8))をJupyter notebookに書き換えたものです。\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# はじめに\n",
"年始からtwitter界隈では[@genkuroki](https://twitter.com/genkuroki)さんを中心にJuliaが急激な盛り上がりを見せています。 \n",
"Juliaを知らない方は、[@bicycle1885](https://twitter.com/bicycle1885)さんが書かれた下記の記事を参照下さい。\n",
"\n",
"[JuliaのQA](https://qiita.com/bicycle1885/items/ab8fff19a4ff0cdea287)\n",
"\n",
"注目された要因は色々あるかと思いますが、何と言っても1番は処理速度ではないでしょうか。 \n",
"Juliaは、JIT(Just-in-time)コンパイルを行うため高速に実行できるそうです。 \n",
"しかし、正直な話、私はコンパイラの知識がないので、\"なぜ速いか\"については詳しくは分かりません。 \n",
"そこで簡単な数値計算を通して、Juliaの速さを体感したいと思います。\n",
"\n",
"# 常微分方程式の数値計算\n",
"今回はこちらの常微分方程式の数値解を求める速さを比較したい思います。\n",
"$$\n",
"\\begin{eqnarray*}\n",
"y'&= -y \\\\\n",
"y_0&= 1\n",
"\\end{eqnarray*}\n",
"$$\n",
"\n",
"刻み幅$h$として、前進オイラー法で離散化します。\n",
"$$y_{n+1} = y_{n} - y_{n} * h$$\n",
"$y_n$でくくります。\n",
"$$y_{n+1}=(1-h)y_{n}$$\n",
"上記の式をJuliaで書くと、\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"y[n+1] = (1 - h) y[n]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"となります。Juliaではカッコがあれば掛け算記号($*$)を省略できるので、数式とほとんど同じように書くことができます。\n",
"\n",
"まずは少ない点数できちんと計算できているか確認したいと思います。 \n",
"数値計算のプログラムは下記になります。 \n",
"点数$N$は1000点、刻み幅$h$は0.004としました。 "
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [],
"source": [
"# 点数\n",
"N = 1000\n",
"\n",
"# 刻み \n",
"h = 0.004\n",
"\n",
"# 初期化\n",
"y = zeros(N)\n",
"\n",
"# 初期値\n",
"y[1] = 1\n",
"\n",
"# 数値計算\n",
"for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"確認のために、数値解と解析解を比較したいと思います。上記の常微分方程式の解析解は下記になります。\n",
"\n",
"\n",
"$$f(x) = \\exp(-x)$$\n",
"\n",
"これをJuliaで書くとこうになります。\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"f (generic function with 1 method)"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f(x) = exp.(-x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"expの後に(.)がついているのは、配列に関数を適用するためです。\n",
"またJuliaは、$f(x) = x$といった形式で関数を定義できるので、数式と同じように書くことができます。\n",
"それでは厳密解の値を求めてみます。"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1000-element Array{Float64,1}:\n",
" 1.0 \n",
" 0.996008 \n",
" 0.992032 \n",
" 0.988072 \n",
" 0.984127 \n",
" 0.980199 \n",
" 0.976286 \n",
" 0.972388 \n",
" 0.968507 \n",
" 0.96464 \n",
" 0.960789 \n",
" 0.956954 \n",
" 0.953134 \n",
" ⋮ \n",
" 0.0192162\n",
" 0.0191395\n",
" 0.0190631\n",
" 0.018987 \n",
" 0.0189112\n",
" 0.0188357\n",
" 0.0187605\n",
" 0.0186856\n",
" 0.018611 \n",
" 0.0185368\n",
" 0.0184628\n",
" 0.018389 "
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# x, start:step:stop\n",
"x = 0:h:(N-1)h \n",
"\n",
"# 厳密解\n",
"f(x) = exp.(-x)\n",
"\n",
"# y_exc\n",
"y_exc = f(x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"比較のためにプロットしてみます。Plotsというライブラリを使います。"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip5600\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip5600)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip5601\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip5600)\" points=\"\n",
"32.2221,375.813 580.315,375.813 580.315,11.811 32.2221,11.811 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip5602\">\n",
" <rect x=\"32\" y=\"11\" width=\"549\" height=\"365\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,375.813 32.2221,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 169.382,375.813 169.382,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 306.543,375.813 306.543,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 443.703,375.813 443.703,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,308.424 580.315,308.424 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,234.271 580.315,234.271 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,160.117 580.315,160.117 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,85.9642 580.315,85.9642 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 32.2221,11.811 580.315,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,375.813 580.315,375.813 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,375.813 32.2221,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,375.813 32.2221,370.353 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 169.382,375.813 169.382,370.353 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 306.543,375.813 306.543,370.353 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 443.703,375.813 443.703,370.353 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,308.424 40.4435,308.424 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,234.271 40.4435,234.271 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,160.117 40.4435,160.117 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,85.9642 40.4435,85.9642 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,11.811 40.4435,11.811 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 32.2221, 389.613)\" x=\"32.2221\" y=\"389.613\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 169.382, 389.613)\" x=\"169.382\" y=\"389.613\">1</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 306.543, 389.613)\" x=\"306.543\" y=\"389.613\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 443.703, 389.613)\" x=\"443.703\" y=\"389.613\">3</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.2221, 312.924)\" x=\"26.2221\" y=\"312.924\">0.2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.2221, 238.771)\" x=\"26.2221\" y=\"238.771\">0.4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.2221, 164.617)\" x=\"26.2221\" y=\"164.617\">0.6</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.2221, 90.4642)\" x=\"26.2221\" y=\"90.4642\">0.8</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 26.2221, 16.311)\" x=\"26.2221\" y=\"16.311\">1.0</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,11.811 32.7707,13.2911 33.3194,14.7653 33.868,16.2336 34.4167,17.6961 34.9653,19.1527 35.514,20.6035 36.0626,22.0485 36.6112,23.4877 37.1599,24.9212 \n",
" 37.7085,26.349 38.2572,27.771 38.8058,29.1874 39.3544,30.5982 39.9031,32.0033 40.4517,33.4028 41.0004,34.7967 41.549,36.185 42.0977,37.5678 42.6463,38.9451 \n",
" 43.1949,40.3169 43.7436,41.6832 44.2922,43.044 44.8409,44.3994 45.3895,45.7495 45.9381,47.0941 46.4868,48.4333 47.0354,49.7672 47.5841,51.0958 48.1327,52.4191 \n",
" 48.6814,53.7371 49.23,55.0498 49.7786,56.3573 50.3273,57.6596 50.8759,58.9567 51.4246,60.2486 51.9732,61.5353 52.5218,62.8169 53.0705,64.0934 53.6191,65.3648 \n",
" 54.1678,66.6311 54.7164,67.8923 55.265,69.1486 55.8137,70.3998 56.3623,71.646 56.911,72.8872 57.4596,74.1235 58.0083,75.3549 58.5569,76.5813 59.1055,77.8028 \n",
" 59.6542,79.0195 60.2028,80.2313 60.7515,81.4383 61.3001,82.6404 61.8487,83.8378 62.3974,85.0303 62.946,86.2182 63.4947,87.4012 64.0433,88.5796 64.592,89.7532 \n",
" 65.1406,90.9222 65.6892,92.0865 66.2379,93.2461 66.7865,94.4011 67.3352,95.5515 67.8838,96.6973 68.4324,97.8386 68.9811,98.9752 69.5297,100.107 70.0784,101.235 \n",
" 70.627,102.358 71.1757,103.477 71.7243,104.591 72.2729,105.701 72.8216,106.806 73.3702,107.907 73.9189,109.003 74.4675,110.095 75.0161,111.183 75.5648,112.267 \n",
" 76.1134,113.346 76.6621,114.42 77.2107,115.491 77.7593,116.557 78.308,117.619 78.8566,118.677 79.4053,119.73 79.9539,120.78 80.5026,121.825 81.0512,122.866 \n",
" 81.5998,123.902 82.1485,124.935 82.6971,125.964 83.2458,126.988 83.7944,128.008 84.343,129.024 84.8917,130.037 85.4403,131.045 85.989,132.049 86.5376,133.049 \n",
" 87.0863,134.045 87.6349,135.037 88.1835,136.025 88.7322,137.01 89.2808,137.99 89.8295,138.966 90.3781,139.939 90.9267,140.908 91.4754,141.872 92.024,142.833 \n",
" 92.5727,143.79 93.1213,144.743 93.67,145.693 94.2186,146.639 94.7672,147.58 95.3159,148.519 95.8645,149.453 96.4132,150.384 96.9618,151.31 97.5104,152.234 \n",
" 98.0591,153.153 98.6077,154.069 99.1564,154.981 99.705,155.89 100.254,156.795 100.802,157.696 101.351,158.594 101.9,159.488 102.448,160.379 102.997,161.266 \n",
" 103.546,162.149 104.094,163.029 104.643,163.905 105.191,164.778 105.74,165.648 106.289,166.514 106.837,167.376 107.386,168.235 107.935,169.091 108.483,169.943 \n",
" 109.032,170.792 109.581,171.638 110.129,172.48 110.678,173.318 111.226,174.154 111.775,174.986 112.324,175.814 112.872,176.64 113.421,177.462 113.97,178.281 \n",
" 114.518,179.096 115.067,179.909 115.616,180.718 116.164,181.524 116.713,182.326 117.262,183.126 117.81,183.922 118.359,184.715 118.907,185.505 119.456,186.291 \n",
" 120.005,187.075 120.553,187.855 121.102,188.633 121.651,189.407 122.199,190.178 122.748,190.946 123.297,191.711 123.845,192.473 124.394,193.232 124.943,193.988 \n",
" 125.491,194.741 126.04,195.491 126.588,196.237 127.137,196.981 127.686,197.722 128.234,198.46 128.783,199.195 129.332,199.927 129.88,200.656 130.429,201.383 \n",
" 130.978,202.106 131.526,202.826 132.075,203.544 132.623,204.259 133.172,204.97 133.721,205.679 134.269,206.386 134.818,207.089 135.367,207.79 135.915,208.487 \n",
" 136.464,209.182 137.013,209.874 137.561,210.564 138.11,211.251 138.659,211.934 139.207,212.616 139.756,213.294 140.304,213.97 140.853,214.643 141.402,215.313 \n",
" 141.95,215.981 142.499,216.646 143.048,217.309 143.596,217.968 144.145,218.625 144.694,219.28 145.242,219.932 145.791,220.581 146.34,221.228 146.888,221.872 \n",
" 147.437,222.513 147.985,223.152 148.534,223.789 149.083,224.423 149.631,225.054 150.18,225.683 150.729,226.309 151.277,226.933 151.826,227.554 152.375,228.173 \n",
" 152.923,228.79 153.472,229.404 154.021,230.015 154.569,230.624 155.118,231.231 155.666,231.835 156.215,232.437 156.764,233.036 157.312,233.633 157.861,234.228 \n",
" 158.41,234.82 158.958,235.41 159.507,235.997 160.056,236.582 160.604,237.165 161.153,237.746 161.701,238.324 162.25,238.9 162.799,239.473 163.347,240.044 \n",
" 163.896,240.613 164.445,241.18 164.993,241.745 165.542,242.307 166.091,242.867 166.639,243.424 167.188,243.98 167.737,244.533 168.285,245.084 168.834,245.633 \n",
" 169.382,246.18 169.931,246.724 170.48,247.267 171.028,247.807 171.577,248.345 172.126,248.881 172.674,249.414 173.223,249.946 173.772,250.475 174.32,251.003 \n",
" 174.869,251.528 175.418,252.051 175.966,252.572 176.515,253.091 177.063,253.608 177.612,254.123 178.161,254.636 178.709,255.147 179.258,255.655 179.807,256.162 \n",
" 180.355,256.667 180.904,257.169 181.453,257.67 182.001,258.168 182.55,258.665 183.099,259.16 183.647,259.652 184.196,260.143 184.744,260.632 185.293,261.119 \n",
" 185.842,261.604 186.39,262.087 186.939,262.568 187.488,263.047 188.036,263.524 188.585,263.999 189.134,264.472 189.682,264.944 190.231,265.413 190.779,265.881 \n",
" 191.328,266.347 191.877,266.811 192.425,267.273 192.974,267.733 193.523,268.192 194.071,268.649 194.62,269.103 195.169,269.556 195.717,270.008 196.266,270.457 \n",
" 196.815,270.904 197.363,271.35 197.912,271.794 198.46,272.237 199.009,272.677 199.558,273.116 200.106,273.553 200.655,273.988 201.204,274.421 201.752,274.853 \n",
" 202.301,275.283 202.85,275.712 203.398,276.138 203.947,276.563 204.496,276.986 205.044,277.408 205.593,277.828 206.141,278.246 206.69,278.662 207.239,279.077 \n",
" 207.787,279.49 208.336,279.902 208.885,280.312 209.433,280.72 209.982,281.127 210.531,281.532 211.079,281.935 211.628,282.337 212.177,282.737 212.725,283.135 \n",
" 213.274,283.532 213.822,283.928 214.371,284.322 214.92,284.714 215.468,285.104 216.017,285.494 216.566,285.881 217.114,286.267 217.663,286.652 218.212,287.035 \n",
" 218.76,287.416 219.309,287.796 219.857,288.174 220.406,288.551 220.955,288.926 221.503,289.3 222.052,289.673 222.601,290.044 223.149,290.413 223.698,290.781 \n",
" 224.247,291.147 224.795,291.512 225.344,291.876 225.893,292.238 226.441,292.599 226.99,292.958 227.538,293.315 228.087,293.672 228.636,294.027 229.184,294.38 \n",
" 229.733,294.732 230.282,295.083 230.83,295.432 231.379,295.78 231.928,296.127 232.476,296.472 233.025,296.815 233.574,297.158 234.122,297.499 234.671,297.838 \n",
" 235.219,298.177 235.768,298.514 236.317,298.849 236.865,299.183 237.414,299.516 237.963,299.848 238.511,300.178 239.06,300.507 239.609,300.835 240.157,301.161 \n",
" 240.706,301.486 241.255,301.81 241.803,302.132 242.352,302.453 242.9,302.773 243.449,303.092 243.998,303.409 244.546,303.725 245.095,304.04 245.644,304.353 \n",
" 246.192,304.666 246.741,304.977 247.29,305.287 247.838,305.595 248.387,305.902 248.935,306.208 249.484,306.513 250.033,306.817 250.581,307.119 251.13,307.421 \n",
" 251.679,307.721 252.227,308.02 252.776,308.317 253.325,308.614 253.873,308.909 254.422,309.203 254.971,309.496 255.519,309.788 256.068,310.078 256.616,310.368 \n",
" 257.165,310.656 257.714,310.943 258.262,311.229 258.811,311.514 259.36,311.797 259.908,312.08 260.457,312.361 261.006,312.642 261.554,312.921 262.103,313.199 \n",
" 262.652,313.476 263.2,313.752 263.749,314.027 264.297,314.3 264.846,314.573 265.395,314.844 265.943,315.115 266.492,315.384 267.041,315.652 267.589,315.919 \n",
" 268.138,316.185 268.687,316.45 269.235,316.714 269.784,316.977 270.333,317.239 270.881,317.5 271.43,317.76 271.978,318.019 272.527,318.276 273.076,318.533 \n",
" 273.624,318.789 274.173,319.043 274.722,319.297 275.27,319.55 275.819,319.801 276.368,320.052 276.916,320.301 277.465,320.55 278.013,320.798 278.562,321.044 \n",
" 279.111,321.29 279.659,321.535 280.208,321.778 280.757,322.021 281.305,322.263 281.854,322.503 282.403,322.743 282.951,322.982 283.5,323.22 284.049,323.457 \n",
" 284.597,323.693 285.146,323.928 285.694,324.162 286.243,324.395 286.792,324.628 287.34,324.859 287.889,325.089 288.438,325.319 288.986,325.547 289.535,325.775 \n",
" 290.084,326.002 290.632,326.228 291.181,326.453 291.73,326.677 292.278,326.9 292.827,327.122 293.375,327.343 293.924,327.564 294.473,327.784 295.021,328.002 \n",
" 295.57,328.22 296.119,328.437 296.667,328.653 297.216,328.869 297.765,329.083 298.313,329.297 298.862,329.509 299.411,329.721 299.959,329.932 300.508,330.142 \n",
" 301.056,330.352 301.605,330.56 302.154,330.768 302.702,330.975 303.251,331.181 303.8,331.386 304.348,331.59 304.897,331.794 305.446,331.996 305.994,332.198 \n",
" 306.543,332.399 307.091,332.6 307.64,332.799 308.189,332.998 308.737,333.196 309.286,333.393 309.835,333.589 310.383,333.785 310.932,333.98 311.481,334.174 \n",
" 312.029,334.367 312.578,334.559 313.127,334.751 313.675,334.942 314.224,335.132 314.772,335.321 315.321,335.51 315.87,335.698 316.418,335.885 316.967,336.072 \n",
" 317.516,336.257 318.064,336.442 318.613,336.626 319.162,336.81 319.71,336.992 320.259,337.174 320.808,337.356 321.356,337.536 321.905,337.716 322.453,337.895 \n",
" 323.002,338.073 323.551,338.251 324.099,338.428 324.648,338.604 325.197,338.78 325.745,338.955 326.294,339.129 326.843,339.302 327.391,339.475 327.94,339.647 \n",
" 328.489,339.818 329.037,339.989 329.586,340.159 330.134,340.328 330.683,340.497 331.232,340.665 331.78,340.832 332.329,340.999 332.878,341.165 333.426,341.33 \n",
" 333.975,341.495 334.524,341.659 335.072,341.822 335.621,341.985 336.169,342.147 336.718,342.308 337.267,342.469 337.815,342.629 338.364,342.789 338.913,342.948 \n",
" 339.461,343.106 340.01,343.263 340.559,343.42 341.107,343.577 341.656,343.732 342.205,343.887 342.753,344.042 343.302,344.196 343.85,344.349 344.399,344.502 \n",
" 344.948,344.654 345.496,344.805 346.045,344.956 346.594,345.106 347.142,345.256 347.691,345.404 348.24,345.553 348.788,345.701 349.337,345.848 349.886,345.995 \n",
" 350.434,346.141 350.983,346.286 351.531,346.431 352.08,346.575 352.629,346.719 353.177,346.862 353.726,347.005 354.275,347.147 354.823,347.288 355.372,347.429 \n",
" 355.921,347.569 356.469,347.709 357.018,347.848 357.567,347.987 358.115,348.125 358.664,348.262 359.212,348.399 359.761,348.536 360.31,348.672 360.858,348.807 \n",
" 361.407,348.942 361.956,349.076 362.504,349.21 363.053,349.343 363.602,349.476 364.15,349.608 364.699,349.74 365.247,349.871 365.796,350.001 366.345,350.131 \n",
" 366.893,350.261 367.442,350.39 367.991,350.518 368.539,350.646 369.088,350.774 369.637,350.901 370.185,351.027 370.734,351.153 371.283,351.279 371.831,351.403 \n",
" 372.38,351.528 372.928,351.652 373.477,351.775 374.026,351.898 374.574,352.021 375.123,352.143 375.672,352.264 376.22,352.385 376.769,352.506 377.318,352.626 \n",
" 377.866,352.745 378.415,352.864 378.964,352.983 379.512,353.101 380.061,353.219 380.609,353.336 381.158,353.453 381.707,353.569 382.255,353.685 382.804,353.8 \n",
" 383.353,353.915 383.901,354.03 384.45,354.143 384.999,354.257 385.547,354.37 386.096,354.483 386.645,354.595 387.193,354.706 387.742,354.818 388.29,354.929 \n",
" 388.839,355.039 389.388,355.149 389.936,355.258 390.485,355.367 391.034,355.476 391.582,355.584 392.131,355.692 392.68,355.799 393.228,355.906 393.777,356.013 \n",
" 394.325,356.119 394.874,356.224 395.423,356.33 395.971,356.434 396.52,356.539 397.069,356.643 397.617,356.746 398.166,356.849 398.715,356.952 399.263,357.054 \n",
" 399.812,357.156 400.361,357.258 400.909,357.359 401.458,357.459 402.006,357.56 402.555,357.66 403.104,357.759 403.652,357.858 404.201,357.957 404.75,358.055 \n",
" 405.298,358.153 405.847,358.25 406.396,358.348 406.944,358.444 407.493,358.541 408.042,358.637 408.59,358.732 409.139,358.827 409.687,358.922 410.236,359.017 \n",
" 410.785,359.111 411.333,359.204 411.882,359.298 412.431,359.391 412.979,359.483 413.528,359.575 414.077,359.667 414.625,359.759 415.174,359.85 415.723,359.94 \n",
" 416.271,360.031 416.82,360.121 417.368,360.21 417.917,360.3 418.466,360.389 419.014,360.477 419.563,360.565 420.112,360.653 420.66,360.741 421.209,360.828 \n",
" 421.758,360.915 422.306,361.001 422.855,361.087 423.403,361.173 423.952,361.259 424.501,361.344 425.049,361.429 425.598,361.513 426.147,361.597 426.695,361.681 \n",
" 427.244,361.764 427.793,361.847 428.341,361.93 428.89,362.012 429.439,362.095 429.987,362.176 430.536,362.258 431.084,362.339 431.633,362.42 432.182,362.5 \n",
" 432.73,362.58 433.279,362.66 433.828,362.74 434.376,362.819 434.925,362.898 435.474,362.976 436.022,363.054 436.571,363.132 437.12,363.21 437.668,363.287 \n",
" 438.217,363.364 438.765,363.441 439.314,363.517 439.863,363.594 440.411,363.669 440.96,363.745 441.509,363.82 442.057,363.895 442.606,363.969 443.155,364.044 \n",
" 443.703,364.118 444.252,364.191 444.801,364.265 445.349,364.338 445.898,364.411 446.446,364.483 446.995,364.555 447.544,364.627 448.092,364.699 448.641,364.77 \n",
" 449.19,364.842 449.738,364.912 450.287,364.983 450.836,365.053 451.384,365.123 451.933,365.193 452.481,365.262 453.03,365.331 453.579,365.4 454.127,365.469 \n",
" 454.676,365.537 455.225,365.605 455.773,365.673 456.322,365.74 456.871,365.807 457.419,365.874 457.968,365.941 458.517,366.007 459.065,366.074 459.614,366.139 \n",
" 460.162,366.205 460.711,366.27 461.26,366.336 461.808,366.4 462.357,366.465 462.906,366.529 463.454,366.593 464.003,366.657 464.552,366.721 465.1,366.784 \n",
" 465.649,366.847 466.198,366.91 466.746,366.972 467.295,367.035 467.843,367.097 468.392,367.159 468.941,367.22 469.489,367.281 470.038,367.342 470.587,367.403 \n",
" 471.135,367.464 471.684,367.524 472.233,367.584 472.781,367.644 473.33,367.704 473.879,367.763 474.427,367.822 474.976,367.881 475.524,367.94 476.073,367.998 \n",
" 476.622,368.056 477.17,368.114 477.719,368.172 478.268,368.23 478.816,368.287 479.365,368.344 479.914,368.401 480.462,368.457 481.011,368.514 481.559,368.57 \n",
" 482.108,368.626 482.657,368.681 483.205,368.737 483.754,368.792 484.303,368.847 484.851,368.902 485.4,368.957 485.949,369.011 486.497,369.065 487.046,369.119 \n",
" 487.595,369.173 488.143,369.226 488.692,369.28 489.24,369.333 489.789,369.386 490.338,369.438 490.886,369.491 491.435,369.543 491.984,369.595 492.532,369.647 \n",
" 493.081,369.698 493.63,369.75 494.178,369.801 494.727,369.852 495.276,369.903 495.824,369.953 496.373,370.004 496.921,370.054 497.47,370.104 498.019,370.154 \n",
" 498.567,370.203 499.116,370.253 499.665,370.302 500.213,370.351 500.762,370.4 501.311,370.448 501.859,370.497 502.408,370.545 502.957,370.593 503.505,370.641 \n",
" 504.054,370.689 504.602,370.736 505.151,370.783 505.7,370.83 506.248,370.877 506.797,370.924 507.346,370.97 507.894,371.017 508.443,371.063 508.992,371.109 \n",
" 509.54,371.155 510.089,371.2 510.637,371.246 511.186,371.291 511.735,371.336 512.283,371.381 512.832,371.426 513.381,371.47 513.929,371.514 514.478,371.559 \n",
" 515.027,371.603 515.575,371.646 516.124,371.69 516.673,371.734 517.221,371.777 517.77,371.82 518.318,371.863 518.867,371.906 519.416,371.948 519.964,371.991 \n",
" 520.513,372.033 521.062,372.075 521.61,372.117 522.159,372.159 522.708,372.2 523.256,372.242 523.805,372.283 524.354,372.324 524.902,372.365 525.451,372.406 \n",
" 525.999,372.446 526.548,372.487 527.097,372.527 527.645,372.567 528.194,372.607 528.743,372.647 529.291,372.687 529.84,372.726 530.389,372.765 530.937,372.805 \n",
" 531.486,372.844 532.035,372.882 532.583,372.921 533.132,372.96 533.68,372.998 534.229,373.036 534.778,373.074 535.326,373.112 535.875,373.15 536.424,373.188 \n",
" 536.972,373.225 537.521,373.263 538.07,373.3 538.618,373.337 539.167,373.374 539.715,373.41 540.264,373.447 540.813,373.483 541.361,373.52 541.91,373.556 \n",
" 542.459,373.592 543.007,373.628 543.556,373.664 544.105,373.699 544.653,373.735 545.202,373.77 545.751,373.805 546.299,373.84 546.848,373.875 547.396,373.91 \n",
" 547.945,373.944 548.494,373.979 549.042,374.013 549.591,374.047 550.14,374.081 550.688,374.115 551.237,374.149 551.786,374.183 552.334,374.216 552.883,374.25 \n",
" 553.432,374.283 553.98,374.316 554.529,374.349 555.077,374.382 555.626,374.414 556.175,374.447 556.723,374.479 557.272,374.512 557.821,374.544 558.369,374.576 \n",
" 558.918,374.608 559.467,374.64 560.015,374.671 560.564,374.703 561.113,374.734 561.661,374.766 562.21,374.797 562.758,374.828 563.307,374.859 563.856,374.89 \n",
" 564.404,374.92 564.953,374.951 565.502,374.981 566.05,375.012 566.599,375.042 567.148,375.072 567.696,375.102 568.245,375.132 568.793,375.162 569.342,375.191 \n",
" 569.891,375.221 570.439,375.25 570.988,375.279 571.537,375.308 572.085,375.337 572.634,375.366 573.183,375.395 573.731,375.424 574.28,375.452 574.829,375.481 \n",
" 575.377,375.509 575.926,375.537 576.474,375.565 577.023,375.593 577.572,375.621 578.12,375.649 578.669,375.677 579.218,375.704 579.766,375.732 580.315,375.759 \n",
" \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5602)\" style=\"stroke:#e26f46; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 32.2221,11.811 32.7707,13.2941 33.3194,14.7712 33.868,16.2424 34.4167,17.7078 34.9653,19.1673 35.514,20.6209 36.0626,22.0687 36.6112,23.5108 37.1599,24.947 \n",
" 37.7085,26.3775 38.2572,27.8023 38.8058,29.2214 39.3544,30.6349 39.9031,32.0426 40.4517,33.4448 41.0004,34.8413 41.549,36.2322 42.0977,37.6176 42.6463,38.9975 \n",
" 43.1949,40.3718 43.7436,41.7406 44.2922,43.1039 44.8409,44.4618 45.3895,45.8143 45.9381,47.1613 46.4868,48.503 47.0354,49.8393 47.5841,51.1703 48.1327,52.4959 \n",
" 48.6814,53.8162 49.23,55.1313 49.7786,56.441 50.3273,57.7456 50.8759,59.0449 51.4246,60.339 51.9732,61.628 52.5218,62.9118 53.0705,64.1904 53.6191,65.464 \n",
" 54.1678,66.7324 54.7164,67.9958 55.265,69.2541 55.8137,70.5074 56.3623,71.7557 56.911,72.999 57.4596,74.2373 58.0083,75.4707 58.5569,76.6991 59.1055,77.9226 \n",
" 59.6542,79.1412 60.2028,80.355 60.7515,81.5639 61.3001,82.7679 61.8487,83.9671 62.3974,85.1616 62.946,86.3513 63.4947,87.5362 64.0433,88.7163 64.592,89.8918 \n",
" 65.1406,91.0625 65.6892,92.2286 66.2379,93.39 66.7865,94.5467 67.3352,95.6988 67.8838,96.8463 68.4324,97.9893 68.9811,99.1276 69.5297,100.261 70.0784,101.391 \n",
" 70.627,102.515 71.1757,103.636 71.7243,104.751 72.2729,105.863 72.8216,106.97 73.3702,108.072 73.9189,109.17 74.4675,110.264 75.0161,111.353 75.5648,112.438 \n",
" 76.1134,113.518 76.6621,114.595 77.2107,115.667 77.7593,116.734 78.308,117.798 78.8566,118.857 79.4053,119.912 79.9539,120.962 80.5026,122.009 81.0512,123.051 \n",
" 81.5998,124.089 82.1485,125.123 82.6971,126.153 83.2458,127.179 83.7944,128.2 84.343,129.218 84.8917,130.231 85.4403,131.24 85.989,132.246 86.5376,133.247 \n",
" 87.0863,134.244 87.6349,135.238 88.1835,136.227 88.7322,137.213 89.2808,138.194 89.8295,139.172 90.3781,140.145 90.9267,141.115 91.4754,142.081 92.024,143.043 \n",
" 92.5727,144.001 93.1213,144.955 93.67,145.906 94.2186,146.852 94.7672,147.795 95.3159,148.734 95.8645,149.67 96.4132,150.601 96.9618,151.529 97.5104,152.453 \n",
" 98.0591,153.374 98.6077,154.291 99.1564,155.204 99.705,156.113 100.254,157.019 100.802,157.921 101.351,158.82 101.9,159.715 102.448,160.607 102.997,161.494 \n",
" 103.546,162.379 104.094,163.26 104.643,164.137 105.191,165.011 105.74,165.881 106.289,166.748 106.837,167.611 107.386,168.471 107.935,169.327 108.483,170.18 \n",
" 109.032,171.03 109.581,171.876 110.129,172.719 110.678,173.558 111.226,174.394 111.775,175.227 112.324,176.056 112.872,176.883 113.421,177.705 113.97,178.525 \n",
" 114.518,179.341 115.067,180.154 115.616,180.964 116.164,181.77 116.713,182.573 117.262,183.373 117.81,184.17 118.359,184.964 118.907,185.754 119.456,186.542 \n",
" 120.005,187.326 120.553,188.107 121.102,188.885 121.651,189.659 122.199,190.431 122.748,191.2 123.297,191.965 123.845,192.728 124.394,193.487 124.943,194.243 \n",
" 125.491,194.997 126.04,195.747 126.588,196.494 127.137,197.239 127.686,197.98 128.234,198.718 128.783,199.454 129.332,200.186 129.88,200.916 130.429,201.643 \n",
" 130.978,202.366 131.526,203.087 132.075,203.805 132.623,204.52 133.172,205.232 133.721,205.942 134.269,206.648 134.818,207.352 135.367,208.053 135.915,208.751 \n",
" 136.464,209.446 137.013,210.139 137.561,210.829 138.11,211.516 138.659,212.2 139.207,212.881 139.756,213.56 140.304,214.236 140.853,214.91 141.402,215.58 \n",
" 141.95,216.248 142.499,216.914 143.048,217.576 143.596,218.236 144.145,218.894 144.694,219.548 145.242,220.2 145.791,220.85 146.34,221.497 146.888,222.141 \n",
" 147.437,222.783 147.985,223.422 148.534,224.059 149.083,224.693 149.631,225.324 150.18,225.953 150.729,226.58 151.277,227.204 151.826,227.825 152.375,228.444 \n",
" 152.923,229.061 153.472,229.675 154.021,230.286 154.569,230.896 155.118,231.502 155.666,232.107 156.215,232.709 156.764,233.308 157.312,233.905 157.861,234.5 \n",
" 158.41,235.092 158.958,235.682 159.507,236.27 160.056,236.855 160.604,237.438 161.153,238.018 161.701,238.597 162.25,239.172 162.799,239.746 163.347,240.317 \n",
" 163.896,240.886 164.445,241.453 164.993,242.018 165.542,242.58 166.091,243.14 166.639,243.698 167.188,244.253 167.737,244.806 168.285,245.358 168.834,245.906 \n",
" 169.382,246.453 169.931,246.998 170.48,247.54 171.028,248.08 171.577,248.618 172.126,249.154 172.674,249.688 173.223,250.219 173.772,250.749 174.32,251.276 \n",
" 174.869,251.801 175.418,252.324 175.966,252.845 176.515,253.364 177.063,253.881 177.612,254.396 178.161,254.909 178.709,255.419 179.258,255.928 179.807,256.434 \n",
" 180.355,256.939 180.904,257.442 181.453,257.942 182.001,258.441 182.55,258.937 183.099,259.432 183.647,259.924 184.196,260.415 184.744,260.904 185.293,261.39 \n",
" 185.842,261.875 186.39,262.358 186.939,262.839 187.488,263.318 188.036,263.795 188.585,264.27 189.134,264.743 189.682,265.214 190.231,265.684 190.779,266.151 \n",
" 191.328,266.617 191.877,267.081 192.425,267.543 192.974,268.003 193.523,268.461 194.071,268.918 194.62,269.372 195.169,269.825 195.717,270.276 196.266,270.725 \n",
" 196.815,271.173 197.363,271.619 197.912,272.062 198.46,272.504 199.009,272.945 199.558,273.383 200.106,273.82 200.655,274.255 201.204,274.688 201.752,275.12 \n",
" 202.301,275.55 202.85,275.978 203.398,276.404 203.947,276.829 204.496,277.252 205.044,277.673 205.593,278.093 206.141,278.511 206.69,278.927 207.239,279.342 \n",
" 207.787,279.755 208.336,280.166 208.885,280.575 209.433,280.983 209.982,281.39 210.531,281.795 211.079,282.198 211.628,282.599 212.177,282.999 212.725,283.397 \n",
" 213.274,283.794 213.822,284.189 214.371,284.583 214.92,284.975 215.468,285.365 216.017,285.754 216.566,286.141 217.114,286.527 217.663,286.911 218.212,287.294 \n",
" 218.76,287.675 219.309,288.055 219.857,288.433 220.406,288.809 220.955,289.184 221.503,289.558 222.052,289.93 222.601,290.301 223.149,290.67 223.698,291.037 \n",
" 224.247,291.404 224.795,291.768 225.344,292.132 225.893,292.493 226.441,292.854 226.99,293.213 227.538,293.57 228.087,293.926 228.636,294.281 229.184,294.634 \n",
" 229.733,294.986 230.282,295.336 230.83,295.685 231.379,296.033 231.928,296.379 232.476,296.723 233.025,297.067 233.574,297.409 234.122,297.75 234.671,298.089 \n",
" 235.219,298.427 235.768,298.763 236.317,299.099 236.865,299.433 237.414,299.765 237.963,300.096 238.511,300.426 239.06,300.755 239.609,301.082 240.157,301.408 \n",
" 240.706,301.733 241.255,302.056 241.803,302.378 242.352,302.699 242.9,303.019 243.449,303.337 243.998,303.654 244.546,303.97 245.095,304.284 245.644,304.597 \n",
" 246.192,304.909 246.741,305.22 247.29,305.529 247.838,305.837 248.387,306.144 248.935,306.45 249.484,306.755 250.033,307.058 250.581,307.36 251.13,307.661 \n",
" 251.679,307.96 252.227,308.259 252.776,308.556 253.325,308.852 253.873,309.147 254.422,309.441 254.971,309.733 255.519,310.025 256.068,310.315 256.616,310.604 \n",
" 257.165,310.892 257.714,311.179 258.262,311.464 258.811,311.749 259.36,312.032 259.908,312.314 260.457,312.595 261.006,312.875 261.554,313.154 262.103,313.432 \n",
" 262.652,313.708 263.2,313.984 263.749,314.258 264.297,314.531 264.846,314.804 265.395,315.075 265.943,315.345 266.492,315.614 267.041,315.882 267.589,316.148 \n",
" 268.138,316.414 268.687,316.679 269.235,316.942 269.784,317.205 270.333,317.466 270.881,317.727 271.43,317.986 271.978,318.245 272.527,318.502 273.076,318.758 \n",
" 273.624,319.013 274.173,319.268 274.722,319.521 275.27,319.773 275.819,320.024 276.368,320.275 276.916,320.524 277.465,320.772 278.013,321.019 278.562,321.265 \n",
" 279.111,321.511 279.659,321.755 280.208,321.998 280.757,322.241 281.305,322.482 281.854,322.722 282.403,322.962 282.951,323.2 283.5,323.438 284.049,323.674 \n",
" 284.597,323.91 285.146,324.145 285.694,324.378 286.243,324.611 286.792,324.843 287.34,325.074 287.889,325.304 288.438,325.533 288.986,325.761 289.535,325.988 \n",
" 290.084,326.215 290.632,326.44 291.181,326.665 291.73,326.888 292.278,327.111 292.827,327.333 293.375,327.554 293.924,327.774 294.473,327.993 295.021,328.212 \n",
" 295.57,328.429 296.119,328.646 296.667,328.861 297.216,329.076 297.765,329.29 298.313,329.503 298.862,329.716 299.411,329.927 299.959,330.138 300.508,330.347 \n",
" 301.056,330.556 301.605,330.764 302.154,330.972 302.702,331.178 303.251,331.384 303.8,331.589 304.348,331.792 304.897,331.996 305.446,332.198 305.994,332.399 \n",
" 306.543,332.6 307.091,332.8 307.64,332.999 308.189,333.198 308.737,333.395 309.286,333.592 309.835,333.788 310.383,333.983 310.932,334.177 311.481,334.371 \n",
" 312.029,334.564 312.578,334.756 313.127,334.947 313.675,335.138 314.224,335.327 314.772,335.516 315.321,335.705 315.87,335.892 316.418,336.079 316.967,336.265 \n",
" 317.516,336.45 318.064,336.634 318.613,336.818 319.162,337.001 319.71,337.184 320.259,337.365 320.808,337.546 321.356,337.726 321.905,337.906 322.453,338.084 \n",
" 323.002,338.262 323.551,338.439 324.099,338.616 324.648,338.792 325.197,338.967 325.745,339.141 326.294,339.315 326.843,339.488 327.391,339.661 327.94,339.832 \n",
" 328.489,340.003 329.037,340.174 329.586,340.343 330.134,340.512 330.683,340.68 331.232,340.848 331.78,341.015 332.329,341.181 332.878,341.347 333.426,341.512 \n",
" 333.975,341.676 334.524,341.839 335.072,342.002 335.621,342.165 336.169,342.326 336.718,342.487 337.267,342.648 337.815,342.807 338.364,342.967 338.913,343.125 \n",
" 339.461,343.283 340.01,343.44 340.559,343.597 341.107,343.752 341.656,343.908 342.205,344.062 342.753,344.216 343.302,344.37 343.85,344.523 344.399,344.675 \n",
" 344.948,344.827 345.496,344.978 346.045,345.128 346.594,345.278 347.142,345.427 347.691,345.576 348.24,345.724 348.788,345.871 349.337,346.018 349.886,346.164 \n",
" 350.434,346.31 350.983,346.455 351.531,346.599 352.08,346.743 352.629,346.886 353.177,347.029 353.726,347.171 354.275,347.313 354.823,347.454 355.372,347.595 \n",
" 355.921,347.735 356.469,347.874 357.018,348.013 357.567,348.151 358.115,348.289 358.664,348.426 359.212,348.562 359.761,348.699 360.31,348.834 360.858,348.969 \n",
" 361.407,349.103 361.956,349.237 362.504,349.371 363.053,349.504 363.602,349.636 364.15,349.768 364.699,349.899 365.247,350.03 365.796,350.16 366.345,350.289 \n",
" 366.893,350.419 367.442,350.547 367.991,350.675 368.539,350.803 369.088,350.93 369.637,351.057 370.185,351.183 370.734,351.308 371.283,351.433 371.831,351.558 \n",
" 372.38,351.682 372.928,351.806 373.477,351.929 374.026,352.051 374.574,352.173 375.123,352.295 375.672,352.416 376.22,352.537 376.769,352.657 377.318,352.777 \n",
" 377.866,352.896 378.415,353.014 378.964,353.133 379.512,353.251 380.061,353.368 380.609,353.485 381.158,353.601 381.707,353.717 382.255,353.832 382.804,353.947 \n",
" 383.353,354.062 383.901,354.176 384.45,354.29 384.999,354.403 385.547,354.515 386.096,354.628 386.645,354.739 387.193,354.851 387.742,354.962 388.29,355.072 \n",
" 388.839,355.182 389.388,355.292 389.936,355.401 390.485,355.51 391.034,355.618 391.582,355.726 392.131,355.833 392.68,355.94 393.228,356.047 393.777,356.153 \n",
" 394.325,356.258 394.874,356.364 395.423,356.469 395.971,356.573 396.52,356.677 397.069,356.781 397.617,356.884 398.166,356.987 398.715,357.089 399.263,357.191 \n",
" 399.812,357.292 400.361,357.394 400.909,357.494 401.458,357.595 402.006,357.695 402.555,357.794 403.104,357.893 403.652,357.992 404.201,358.09 404.75,358.188 \n",
" 405.298,358.286 405.847,358.383 406.396,358.48 406.944,358.576 407.493,358.672 408.042,358.768 408.59,358.863 409.139,358.958 409.687,359.052 410.236,359.146 \n",
" 410.785,359.24 411.333,359.333 411.882,359.426 412.431,359.519 412.979,359.611 413.528,359.703 414.077,359.795 414.625,359.886 415.174,359.977 415.723,360.067 \n",
" 416.271,360.157 416.82,360.247 417.368,360.336 417.917,360.425 418.466,360.514 419.014,360.602 419.563,360.69 420.112,360.777 420.66,360.864 421.209,360.951 \n",
" 421.758,361.038 422.306,361.124 422.855,361.21 423.403,361.295 423.952,361.38 424.501,361.465 425.049,361.55 425.598,361.634 426.147,361.718 426.695,361.801 \n",
" 427.244,361.884 427.793,361.967 428.341,362.049 428.89,362.131 429.439,362.213 429.987,362.295 430.536,362.376 431.084,362.457 431.633,362.537 432.182,362.617 \n",
" 432.73,362.697 433.279,362.777 433.828,362.856 434.376,362.935 434.925,363.013 435.474,363.091 436.022,363.169 436.571,363.247 437.12,363.324 437.668,363.401 \n",
" 438.217,363.478 438.765,363.554 439.314,363.631 439.863,363.706 440.411,363.782 440.96,363.857 441.509,363.932 442.057,364.006 442.606,364.081 443.155,364.155 \n",
" 443.703,364.228 444.252,364.302 444.801,364.375 445.349,364.448 445.898,364.52 446.446,364.592 446.995,364.664 447.544,364.736 448.092,364.807 448.641,364.879 \n",
" 449.19,364.949 449.738,365.02 450.287,365.09 450.836,365.16 451.384,365.23 451.933,365.299 452.481,365.368 453.03,365.437 453.579,365.506 454.127,365.574 \n",
" 454.676,365.642 455.225,365.71 455.773,365.777 456.322,365.844 456.871,365.911 457.419,365.978 457.968,366.044 458.517,366.11 459.065,366.176 459.614,366.242 \n",
" 460.162,366.307 460.711,366.372 461.26,366.437 461.808,366.502 462.357,366.566 462.906,366.63 463.454,366.694 464.003,366.757 464.552,366.821 465.1,366.884 \n",
" 465.649,366.946 466.198,367.009 466.746,367.071 467.295,367.133 467.843,367.195 468.392,367.257 468.941,367.318 469.489,367.379 470.038,367.44 470.587,367.5 \n",
" 471.135,367.56 471.684,367.621 472.233,367.68 472.781,367.74 473.33,367.799 473.879,367.858 474.427,367.917 474.976,367.976 475.524,368.034 476.073,368.093 \n",
" 476.622,368.15 477.17,368.208 477.719,368.266 478.268,368.323 478.816,368.38 479.365,368.437 479.914,368.493 480.462,368.55 481.011,368.606 481.559,368.662 \n",
" 482.108,368.717 482.657,368.773 483.205,368.828 483.754,368.883 484.303,368.938 484.851,368.992 485.4,369.047 485.949,369.101 486.497,369.155 487.046,369.208 \n",
" 487.595,369.262 488.143,369.315 488.692,369.368 489.24,369.421 489.789,369.474 490.338,369.526 490.886,369.578 491.435,369.63 491.984,369.682 492.532,369.734 \n",
" 493.081,369.785 493.63,369.836 494.178,369.887 494.727,369.938 495.276,369.988 495.824,370.039 496.373,370.089 496.921,370.139 497.47,370.189 498.019,370.238 \n",
" 498.567,370.287 499.116,370.337 499.665,370.386 500.213,370.434 500.762,370.483 501.311,370.531 501.859,370.579 502.408,370.627 502.957,370.675 503.505,370.723 \n",
" 504.054,370.77 504.602,370.818 505.151,370.865 505.7,370.911 506.248,370.958 506.797,371.005 507.346,371.051 507.894,371.097 508.443,371.143 508.992,371.189 \n",
" 509.54,371.234 510.089,371.28 510.637,371.325 511.186,371.37 511.735,371.415 512.283,371.459 512.832,371.504 513.381,371.548 513.929,371.592 514.478,371.636 \n",
" 515.027,371.68 515.575,371.723 516.124,371.767 516.673,371.81 517.221,371.853 517.77,371.896 518.318,371.939 518.867,371.981 519.416,372.024 519.964,372.066 \n",
" 520.513,372.108 521.062,372.15 521.61,372.192 522.159,372.233 522.708,372.274 523.256,372.316 523.805,372.357 524.354,372.398 524.902,372.438 525.451,372.479 \n",
" 525.999,372.519 526.548,372.559 527.097,372.6 527.645,372.639 528.194,372.679 528.743,372.719 529.291,372.758 529.84,372.797 530.389,372.837 530.937,372.876 \n",
" 531.486,372.914 532.035,372.953 532.583,372.992 533.132,373.03 533.68,373.068 534.229,373.106 534.778,373.144 535.326,373.182 535.875,373.219 536.424,373.257 \n",
" 536.972,373.294 537.521,373.331 538.07,373.368 538.618,373.405 539.167,373.442 539.715,373.478 540.264,373.515 540.813,373.551 541.361,373.587 541.91,373.623 \n",
" 542.459,373.659 543.007,373.694 543.556,373.73 544.105,373.765 544.653,373.801 545.202,373.836 545.751,373.871 546.299,373.905 546.848,373.94 547.396,373.975 \n",
" 547.945,374.009 548.494,374.043 549.042,374.078 549.591,374.111 550.14,374.145 550.688,374.179 551.237,374.213 551.786,374.246 552.334,374.279 552.883,374.313 \n",
" 553.432,374.346 553.98,374.379 554.529,374.411 555.077,374.444 555.626,374.477 556.175,374.509 556.723,374.541 557.272,374.573 557.821,374.605 558.369,374.637 \n",
" 558.918,374.669 559.467,374.701 560.015,374.732 560.564,374.764 561.113,374.795 561.661,374.826 562.21,374.857 562.758,374.888 563.307,374.919 563.856,374.949 \n",
" 564.404,374.98 564.953,375.01 565.502,375.04 566.05,375.071 566.599,375.101 567.148,375.131 567.696,375.16 568.245,375.19 568.793,375.22 569.342,375.249 \n",
" 569.891,375.278 570.439,375.307 570.988,375.337 571.537,375.366 572.085,375.394 572.634,375.423 573.183,375.452 573.731,375.48 574.28,375.509 574.829,375.537 \n",
" 575.377,375.565 575.926,375.593 576.474,375.621 577.023,375.649 577.572,375.677 578.12,375.704 578.669,375.732 579.218,375.759 579.766,375.786 580.315,375.813 \n",
" \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip5600)\" points=\"\n",
"489.799,78.051 562.315,78.051 562.315,32.691 489.799,32.691 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 489.799,78.051 562.315,78.051 562.315,32.691 489.799,32.691 489.799,78.051 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#009af9; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 495.799,47.811 531.799,47.811 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 537.799, 52.311)\" x=\"537.799\" y=\"52.311\">y1</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip5600)\" style=\"stroke:#e26f46; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 495.799,62.931 531.799,62.931 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5600)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 537.799, 67.431)\" x=\"537.799\" y=\"67.431\">y2</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# plot \n",
"using Plots\n",
"plot(x, y_exc)\n",
"plot!(x, y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"plot!のようにplotの後に!をつけると、プロットを追加することができます。ただこれでは、線が被っていてよくわからないので、線の太さ(linewidth)とスタイル(linestyle)を変更します。ついでに軸ラベル(xlabel, ylabel)もつけましょう。\n"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 600 400\">\n",
"<defs>\n",
" <clipPath id=\"clip5800\">\n",
" <rect x=\"0\" y=\"0\" width=\"600\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip5800)\" points=\"\n",
"0,400 600,400 600,0 0,0 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip5801\">\n",
" <rect x=\"120\" y=\"0\" width=\"421\" height=\"400\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polygon clip-path=\"url(#clip5800)\" points=\"\n",
"47.9701,360.065 580.315,360.065 580.315,11.811 47.9701,11.811 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip5802\">\n",
" <rect x=\"47\" y=\"11\" width=\"533\" height=\"349\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,360.065 47.9701,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 181.19,360.065 181.19,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 314.409,360.065 314.409,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 447.628,360.065 447.628,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,295.591 580.315,295.591 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,224.646 580.315,224.646 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,153.701 580.315,153.701 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,82.7561 580.315,82.7561 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:0.5; stroke-opacity:0.1; fill:none\" points=\"\n",
" 47.9701,11.811 580.315,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,360.065 580.315,360.065 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,360.065 47.9701,11.811 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,360.065 47.9701,354.842 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 181.19,360.065 181.19,354.842 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 314.409,360.065 314.409,354.842 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 447.628,360.065 447.628,354.842 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,295.591 55.9553,295.591 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,224.646 55.9553,224.646 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,153.701 55.9553,153.701 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,82.7561 55.9553,82.7561 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,11.811 55.9553,11.811 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 47.9701, 373.865)\" x=\"47.9701\" y=\"373.865\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 181.19, 373.865)\" x=\"181.19\" y=\"373.865\">1</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 314.409, 373.865)\" x=\"314.409\" y=\"373.865\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:middle;\" transform=\"rotate(0, 447.628, 373.865)\" x=\"447.628\" y=\"373.865\">3</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 41.9701, 300.091)\" x=\"41.9701\" y=\"300.091\">0.2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 41.9701, 229.146)\" x=\"41.9701\" y=\"229.146\">0.4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 41.9701, 158.201)\" x=\"41.9701\" y=\"158.201\">0.6</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 41.9701, 87.2561)\" x=\"41.9701\" y=\"87.2561\">0.8</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:end;\" transform=\"rotate(0, 41.9701, 16.311)\" x=\"41.9701\" y=\"16.311\">1.0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(0, 314.143, 397.6)\" x=\"314.143\" y=\"397.6\">x</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:16; text-anchor:middle;\" transform=\"rotate(-90, 14.4, 185.938)\" x=\"14.4\" y=\"185.938\">y</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#000000; stroke-width:5; stroke-opacity:1; fill:none\" points=\"\n",
" 47.9701,11.811 48.503,13.2271 49.0359,14.6375 49.5688,16.0423 50.1016,17.4415 50.6345,18.8351 51.1674,20.2231 51.7003,21.6056 52.2332,22.9825 52.766,24.354 \n",
" 53.2989,25.72 53.8318,27.0805 54.3647,28.4357 54.8975,29.7854 55.4304,31.1297 55.9633,32.4686 56.4962,33.8022 57.0291,35.1305 57.5619,36.4535 58.0948,37.7712 \n",
" 58.6277,39.0836 59.1606,40.3908 59.6934,41.6928 60.2263,42.9896 60.7592,44.2812 61.2921,45.5676 61.825,46.8489 62.3578,48.1251 62.8907,49.3962 63.4236,50.6622 \n",
" 63.9565,51.9232 64.4893,53.1792 65.0222,54.4301 65.5551,55.676 66.088,56.917 66.6209,58.153 67.1537,59.384 67.6866,60.6102 68.2195,61.8315 68.7524,63.0478 \n",
" 69.2852,64.2594 69.8181,65.4661 70.351,66.6679 70.8839,67.865 71.4168,69.0573 71.9496,70.2449 72.4825,71.4277 73.0154,72.6057 73.5483,73.7791 74.0811,74.9478 \n",
" 74.614,76.1118 75.1469,77.2712 75.6798,78.426 76.2127,79.5761 76.7455,80.7216 77.2784,81.8626 77.8113,82.999 78.3442,84.1309 78.877,85.2583 79.4099,86.3812 \n",
" 79.9428,87.4995 80.4757,88.6135 81.0086,89.7229 81.5414,90.828 82.0743,91.9286 82.6072,93.0248 83.1401,94.1167 83.6729,95.2042 84.2058,96.2874 84.7387,97.3662 \n",
" 85.2716,98.4407 85.8045,99.511 86.3373,100.577 86.8702,101.639 87.4031,102.696 87.936,103.749 88.4688,104.798 89.0017,105.843 89.5346,106.884 90.0675,107.921 \n",
" 90.6004,108.953 91.1332,109.981 91.6661,111.005 92.199,112.025 92.7319,113.041 93.2647,114.053 93.7976,115.061 94.3305,116.065 94.8634,117.065 95.3963,118.061 \n",
" 95.9291,119.053 96.462,120.041 96.9949,121.025 97.5278,122.005 98.0606,122.981 98.5935,123.953 99.1264,124.922 99.6593,125.886 100.192,126.847 100.725,127.804 \n",
" 101.258,128.757 101.791,129.706 102.324,130.652 102.857,131.593 103.389,132.531 103.922,133.465 104.455,134.396 104.988,135.322 105.521,136.245 106.054,137.165 \n",
" 106.587,138.08 107.12,138.992 107.652,139.901 108.185,140.805 108.718,141.707 109.251,142.604 109.784,143.498 110.317,144.388 110.85,145.275 111.383,146.158 \n",
" 111.915,147.038 112.448,147.914 112.981,148.787 113.514,149.656 114.047,150.522 114.58,151.385 115.113,152.243 115.646,153.099 116.178,153.951 116.711,154.8 \n",
" 117.244,155.645 117.777,156.487 118.31,157.325 118.843,158.16 119.376,158.992 119.909,159.821 120.442,160.646 120.974,161.468 121.507,162.287 122.04,163.102 \n",
" 122.573,163.914 123.106,164.723 123.639,165.529 124.172,166.331 124.705,167.13 125.237,167.926 125.77,168.719 126.303,169.509 126.836,170.295 127.369,171.079 \n",
" 127.902,171.859 128.435,172.636 128.968,173.41 129.5,174.181 130.033,174.949 130.566,175.714 131.099,176.476 131.632,177.234 132.165,177.99 132.698,178.743 \n",
" 133.231,179.492 133.763,180.239 134.296,180.983 134.829,181.724 135.362,182.461 135.895,183.196 136.428,183.928 136.961,184.657 137.494,185.383 138.026,186.106 \n",
" 138.559,186.827 139.092,187.544 139.625,188.258 140.158,188.97 140.691,189.679 141.224,190.385 141.757,191.088 142.289,191.789 142.822,192.486 143.355,193.181 \n",
" 143.888,193.873 144.421,194.562 144.954,195.249 145.487,195.933 146.02,196.614 146.553,197.292 147.085,197.968 147.618,198.641 148.151,199.311 148.684,199.978 \n",
" 149.217,200.643 149.75,201.306 150.283,201.965 150.816,202.622 151.348,203.276 151.881,203.928 152.414,204.577 152.947,205.224 153.48,205.868 154.013,206.509 \n",
" 154.546,207.148 155.079,207.784 155.611,208.418 156.144,209.049 156.677,209.678 157.21,210.304 157.743,210.928 158.276,211.549 158.809,212.168 159.342,212.784 \n",
" 159.874,213.398 160.407,214.009 160.94,214.618 161.473,215.224 162.006,215.828 162.539,216.43 163.072,217.029 163.605,217.626 164.137,218.221 164.67,218.813 \n",
" 165.203,219.402 165.736,219.99 166.269,220.575 166.802,221.157 167.335,221.738 167.868,222.316 168.4,222.892 168.933,223.465 169.466,224.036 169.999,224.605 \n",
" 170.532,225.172 171.065,225.736 171.598,226.298 172.131,226.858 172.664,227.415 173.196,227.971 173.729,228.524 174.262,229.075 174.795,229.624 175.328,230.17 \n",
" 175.861,230.715 176.394,231.257 176.927,231.797 177.459,232.335 177.992,232.87 178.525,233.404 179.058,233.936 179.591,234.465 180.124,234.992 180.657,235.517 \n",
" 181.19,236.04 181.722,236.561 182.255,237.08 182.788,237.597 183.321,238.112 183.854,238.624 184.387,239.135 184.92,239.643 185.453,240.15 185.985,240.655 \n",
" 186.518,241.157 187.051,241.658 187.584,242.156 188.117,242.653 188.65,243.147 189.183,243.64 189.716,244.13 190.248,244.619 190.781,245.106 191.314,245.59 \n",
" 191.847,246.073 192.38,246.554 192.913,247.033 193.446,247.51 193.979,247.985 194.512,248.459 195.044,248.93 195.577,249.399 196.11,249.867 196.643,250.333 \n",
" 197.176,250.797 197.709,251.259 198.242,251.719 198.775,252.177 199.307,252.634 199.84,253.088 200.373,253.541 200.906,253.992 201.439,254.442 201.972,254.889 \n",
" 202.505,255.335 203.038,255.779 203.57,256.221 204.103,256.661 204.636,257.1 205.169,257.537 205.702,257.972 206.235,258.405 206.768,258.837 207.301,259.267 \n",
" 207.833,259.695 208.366,260.122 208.899,260.547 209.432,260.97 209.965,261.391 210.498,261.811 211.031,262.229 211.564,262.645 212.096,263.06 212.629,263.473 \n",
" 213.162,263.884 213.695,264.294 214.228,264.702 214.761,265.109 215.294,265.514 215.827,265.917 216.359,266.319 216.892,266.719 217.425,267.117 217.958,267.514 \n",
" 218.491,267.91 219.024,268.303 219.557,268.695 220.09,269.086 220.623,269.475 221.155,269.862 221.688,270.248 222.221,270.633 222.754,271.016 223.287,271.397 \n",
" 223.82,271.777 224.353,272.155 224.886,272.532 225.418,272.907 225.951,273.281 226.484,273.653 227.017,274.024 227.55,274.393 228.083,274.761 228.616,275.127 \n",
" 229.149,275.492 229.681,275.856 230.214,276.218 230.747,276.578 231.28,276.937 231.813,277.295 232.346,277.651 232.879,278.006 233.412,278.36 233.944,278.712 \n",
" 234.477,279.062 235.01,279.411 235.543,279.759 236.076,280.106 236.609,280.451 237.142,280.794 237.675,281.137 238.207,281.478 238.74,281.817 239.273,282.155 \n",
" 239.806,282.492 240.339,282.828 240.872,283.162 241.405,283.495 241.938,283.826 242.47,284.156 243.003,284.485 243.536,284.813 244.069,285.139 244.602,285.464 \n",
" 245.135,285.788 245.668,286.11 246.201,286.431 246.734,286.751 247.266,287.069 247.799,287.386 248.332,287.702 248.865,288.017 249.398,288.331 249.931,288.643 \n",
" 250.464,288.954 250.997,289.263 251.529,289.572 252.062,289.879 252.595,290.185 253.128,290.49 253.661,290.794 254.194,291.096 254.727,291.397 255.26,291.697 \n",
" 255.792,291.996 256.325,292.293 256.858,292.59 257.391,292.885 257.924,293.179 258.457,293.472 258.99,293.763 259.523,294.054 260.055,294.343 260.588,294.632 \n",
" 261.121,294.919 261.654,295.204 262.187,295.489 262.72,295.773 263.253,296.055 263.786,296.337 264.318,296.617 264.851,296.896 265.384,297.174 265.917,297.451 \n",
" 266.45,297.727 266.983,298.001 267.516,298.275 268.049,298.548 268.582,298.819 269.114,299.089 269.647,299.359 270.18,299.627 270.713,299.894 271.246,300.16 \n",
" 271.779,300.425 272.312,300.689 272.845,300.952 273.377,301.213 273.91,301.474 274.443,301.734 274.976,301.993 275.509,302.25 276.042,302.507 276.575,302.763 \n",
" 277.108,303.017 277.64,303.271 278.173,303.523 278.706,303.775 279.239,304.025 279.772,304.275 280.305,304.523 280.838,304.771 281.371,305.018 281.903,305.263 \n",
" 282.436,305.508 282.969,305.751 283.502,305.994 284.035,306.236 284.568,306.476 285.101,306.716 285.634,306.955 286.166,307.193 286.699,307.43 287.232,307.666 \n",
" 287.765,307.901 288.298,308.135 288.831,308.368 289.364,308.6 289.897,308.831 290.429,309.062 290.962,309.291 291.495,309.52 292.028,309.747 292.561,309.974 \n",
" 293.094,310.2 293.627,310.425 294.16,310.649 294.693,310.872 295.225,311.094 295.758,311.315 296.291,311.536 296.824,311.755 297.357,311.974 297.89,312.192 \n",
" 298.423,312.409 298.956,312.625 299.488,312.84 300.021,313.054 300.554,313.268 301.087,313.481 301.62,313.692 302.153,313.903 302.686,314.113 303.219,314.323 \n",
" 303.751,314.531 304.284,314.739 304.817,314.946 305.35,315.152 305.883,315.357 306.416,315.561 306.949,315.764 307.482,315.967 308.014,316.169 308.547,316.37 \n",
" 309.08,316.57 309.613,316.77 310.146,316.968 310.679,317.166 311.212,317.363 311.745,317.56 312.277,317.755 312.81,317.95 313.343,318.144 313.876,318.337 \n",
" 314.409,318.53 314.942,318.721 315.475,318.912 316.008,319.102 316.54,319.292 317.073,319.48 317.606,319.668 318.139,319.855 318.672,320.041 319.205,320.227 \n",
" 319.738,320.412 320.271,320.596 320.804,320.779 321.336,320.962 321.869,321.144 322.402,321.325 322.935,321.506 323.468,321.686 324.001,321.865 324.534,322.043 \n",
" 325.067,322.22 325.599,322.397 326.132,322.574 326.665,322.749 327.198,322.924 327.731,323.098 328.264,323.271 328.797,323.444 329.33,323.616 329.862,323.787 \n",
" 330.395,323.958 330.928,324.128 331.461,324.297 331.994,324.466 332.527,324.634 333.06,324.801 333.593,324.968 334.125,325.134 334.658,325.299 335.191,325.464 \n",
" 335.724,325.628 336.257,325.791 336.79,325.954 337.323,326.116 337.856,326.277 338.388,326.438 338.921,326.598 339.454,326.757 339.987,326.916 340.52,327.074 \n",
" 341.053,327.232 341.586,327.389 342.119,327.545 342.652,327.701 343.184,327.856 343.717,328.01 344.25,328.164 344.783,328.317 345.316,328.47 345.849,328.622 \n",
" 346.382,328.773 346.915,328.924 347.447,329.074 347.98,329.223 348.513,329.372 349.046,329.521 349.579,329.668 350.112,329.816 350.645,329.962 351.178,330.108 \n",
" 351.71,330.254 352.243,330.398 352.776,330.543 353.309,330.686 353.842,330.83 354.375,330.972 354.908,331.114 355.441,331.255 355.973,331.396 356.506,331.537 \n",
" 357.039,331.676 357.572,331.815 358.105,331.954 358.638,332.092 359.171,332.23 359.704,332.367 360.236,332.503 360.769,332.639 361.302,332.774 361.835,332.909 \n",
" 362.368,333.043 362.901,333.177 363.434,333.31 363.967,333.443 364.499,333.575 365.032,333.706 365.565,333.837 366.098,333.968 366.631,334.098 367.164,334.227 \n",
" 367.697,334.356 368.23,334.485 368.763,334.613 369.295,334.74 369.828,334.867 370.361,334.994 370.894,335.12 371.427,335.245 371.96,335.37 372.493,335.494 \n",
" 373.026,335.618 373.558,335.742 374.091,335.865 374.624,335.987 375.157,336.109 375.69,336.23 376.223,336.351 376.756,336.472 377.289,336.592 377.821,336.712 \n",
" 378.354,336.831 378.887,336.949 379.42,337.067 379.953,337.185 380.486,337.302 381.019,337.419 381.552,337.535 382.084,337.651 382.617,337.766 383.15,337.881 \n",
" 383.683,337.995 384.216,338.109 384.749,338.223 385.282,338.336 385.815,338.448 386.347,338.561 386.88,338.672 387.413,338.783 387.946,338.894 388.479,339.005 \n",
" 389.012,339.114 389.545,339.224 390.078,339.333 390.61,339.442 391.143,339.55 391.676,339.657 392.209,339.765 392.742,339.872 393.275,339.978 393.808,340.084 \n",
" 394.341,340.19 394.874,340.295 395.406,340.4 395.939,340.504 396.472,340.608 397.005,340.711 397.538,340.814 398.071,340.917 398.604,341.019 399.137,341.121 \n",
" 399.669,341.223 400.202,341.324 400.735,341.424 401.268,341.525 401.801,341.625 402.334,341.724 402.867,341.823 403.4,341.922 403.932,342.02 404.465,342.118 \n",
" 404.998,342.215 405.531,342.312 406.064,342.409 406.597,342.505 407.13,342.601 407.663,342.697 408.195,342.792 408.728,342.887 409.261,342.981 409.794,343.075 \n",
" 410.327,343.169 410.86,343.262 411.393,343.355 411.926,343.448 412.458,343.54 412.991,343.632 413.524,343.723 414.057,343.814 414.59,343.905 415.123,343.995 \n",
" 415.656,344.085 416.189,344.175 416.722,344.264 417.254,344.353 417.787,344.442 418.32,344.53 418.853,344.618 419.386,344.705 419.919,344.792 420.452,344.879 \n",
" 420.985,344.966 421.517,345.052 422.05,345.137 422.583,345.223 423.116,345.308 423.649,345.393 424.182,345.477 424.715,345.561 425.248,345.645 425.78,345.728 \n",
" 426.313,345.811 426.846,345.894 427.379,345.976 427.912,346.059 428.445,346.14 428.978,346.222 429.511,346.303 430.043,346.384 430.576,346.464 431.109,346.544 \n",
" 431.642,346.624 432.175,346.703 432.708,346.783 433.241,346.862 433.774,346.94 434.306,347.018 434.839,347.096 435.372,347.174 435.905,347.251 436.438,347.328 \n",
" 436.971,347.405 437.504,347.481 438.037,347.557 438.569,347.633 439.102,347.708 439.635,347.784 440.168,347.858 440.701,347.933 441.234,348.007 441.767,348.081 \n",
" 442.3,348.155 442.833,348.228 443.365,348.301 443.898,348.374 444.431,348.447 444.964,348.519 445.497,348.591 446.03,348.662 446.563,348.734 447.096,348.805 \n",
" 447.628,348.876 448.161,348.946 448.694,349.016 449.227,349.086 449.76,349.156 450.293,349.225 450.826,349.294 451.359,349.363 451.891,349.432 452.424,349.5 \n",
" 452.957,349.568 453.49,349.636 454.023,349.703 454.556,349.771 455.089,349.837 455.622,349.904 456.154,349.971 456.687,350.037 457.22,350.103 457.753,350.168 \n",
" 458.286,350.234 458.819,350.299 459.352,350.363 459.885,350.428 460.417,350.492 460.95,350.556 461.483,350.62 462.016,350.684 462.549,350.747 463.082,350.81 \n",
" 463.615,350.873 464.148,350.935 464.68,350.998 465.213,351.06 465.746,351.121 466.279,351.183 466.812,351.244 467.345,351.305 467.878,351.366 468.411,351.427 \n",
" 468.944,351.487 469.476,351.547 470.009,351.607 470.542,351.666 471.075,351.726 471.608,351.785 472.141,351.844 472.674,351.902 473.207,351.961 473.739,352.019 \n",
" 474.272,352.077 474.805,352.135 475.338,352.192 475.871,352.25 476.404,352.307 476.937,352.363 477.47,352.42 478.002,352.476 478.535,352.532 479.068,352.588 \n",
" 479.601,352.644 480.134,352.699 480.667,352.755 481.2,352.81 481.733,352.864 482.265,352.919 482.798,352.973 483.331,353.028 483.864,353.082 484.397,353.135 \n",
" 484.93,353.189 485.463,353.242 485.996,353.295 486.528,353.348 487.061,353.401 487.594,353.453 488.127,353.505 488.66,353.557 489.193,353.609 489.726,353.661 \n",
" 490.259,353.712 490.792,353.763 491.324,353.814 491.857,353.865 492.39,353.916 492.923,353.966 493.456,354.016 493.989,354.066 494.522,354.116 495.055,354.166 \n",
" 495.587,354.215 496.12,354.264 496.653,354.313 497.186,354.362 497.719,354.411 498.252,354.459 498.785,354.507 499.318,354.555 499.85,354.603 500.383,354.651 \n",
" 500.916,354.698 501.449,354.745 501.982,354.792 502.515,354.839 503.048,354.886 503.581,354.932 504.113,354.979 504.646,355.025 505.179,355.071 505.712,355.117 \n",
" 506.245,355.162 506.778,355.208 507.311,355.253 507.844,355.298 508.376,355.343 508.909,355.387 509.442,355.432 509.975,355.476 510.508,355.52 511.041,355.564 \n",
" 511.574,355.608 512.107,355.652 512.639,355.695 513.172,355.739 513.705,355.782 514.238,355.825 514.771,355.867 515.304,355.91 515.837,355.952 516.37,355.995 \n",
" 516.903,356.037 517.435,356.079 517.968,356.12 518.501,356.162 519.034,356.203 519.567,356.245 520.1,356.286 520.633,356.327 521.166,356.367 521.698,356.408 \n",
" 522.231,356.448 522.764,356.489 523.297,356.529 523.83,356.569 524.363,356.609 524.896,356.648 525.429,356.688 525.961,356.727 526.494,356.766 527.027,356.805 \n",
" 527.56,356.844 528.093,356.883 528.626,356.921 529.159,356.96 529.692,356.998 530.224,357.036 530.757,357.074 531.29,357.112 531.823,357.149 532.356,357.187 \n",
" 532.889,357.224 533.422,357.261 533.955,357.298 534.487,357.335 535.02,357.372 535.553,357.408 536.086,357.445 536.619,357.481 537.152,357.517 537.685,357.553 \n",
" 538.218,357.589 538.75,357.625 539.283,357.66 539.816,357.696 540.349,357.731 540.882,357.766 541.415,357.801 541.948,357.836 542.481,357.871 543.014,357.906 \n",
" 543.546,357.94 544.079,357.974 544.612,358.009 545.145,358.043 545.678,358.076 546.211,358.11 546.744,358.144 547.277,358.177 547.809,358.211 548.342,358.244 \n",
" 548.875,358.277 549.408,358.31 549.941,358.343 550.474,358.376 551.007,358.408 551.54,358.441 552.072,358.473 552.605,358.505 553.138,358.537 553.671,358.569 \n",
" 554.204,358.601 554.737,358.633 555.27,358.664 555.803,358.696 556.335,358.727 556.868,358.758 557.401,358.789 557.934,358.82 558.467,358.851 559,358.882 \n",
" 559.533,358.912 560.066,358.943 560.598,358.973 561.131,359.003 561.664,359.033 562.197,359.063 562.73,359.093 563.263,359.123 563.796,359.152 564.329,359.182 \n",
" 564.862,359.211 565.394,359.24 565.927,359.269 566.46,359.298 566.993,359.327 567.526,359.356 568.059,359.385 568.592,359.413 569.125,359.442 569.657,359.47 \n",
" 570.19,359.498 570.723,359.526 571.256,359.554 571.789,359.582 572.322,359.61 572.855,359.638 573.388,359.665 573.92,359.693 574.453,359.72 574.986,359.747 \n",
" 575.519,359.774 576.052,359.801 576.585,359.828 577.118,359.855 577.651,359.882 578.183,359.908 578.716,359.935 579.249,359.961 579.782,359.987 580.315,360.013 \n",
" \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5802)\" style=\"stroke:#ff0000; stroke-width:2; stroke-opacity:1; fill:none\" stroke-dasharray=\"8, 5\" points=\"\n",
" 47.9701,11.811 48.503,13.2299 49.0359,14.6432 49.5688,16.0507 50.1016,17.4527 50.6345,18.849 51.1674,20.2398 51.7003,21.6249 52.2332,23.0046 52.766,24.3787 \n",
" 53.2989,25.7473 53.8318,27.1105 54.3647,28.4682 54.8975,29.8205 55.4304,31.1673 55.9633,32.5088 56.4962,33.8449 57.0291,35.1757 57.5619,36.5011 58.0948,37.8213 \n",
" 58.6277,39.1361 59.1606,40.4457 59.6934,41.7501 60.2263,43.0492 60.7592,44.3432 61.2921,45.632 61.825,46.9156 62.3578,48.1941 62.8907,49.4674 63.4236,50.7357 \n",
" 63.9565,51.9989 64.4893,53.2571 65.0222,54.5102 65.5551,55.7583 66.088,57.0014 66.6209,58.2395 67.1537,59.4727 67.6866,60.701 68.2195,61.9243 68.7524,63.1428 \n",
" 69.2852,64.3563 69.8181,65.5651 70.351,66.769 70.8839,67.968 71.4168,69.1623 71.9496,70.3518 72.4825,71.5365 73.0154,72.7165 73.5483,73.8918 74.0811,75.0624 \n",
" 74.614,76.2283 75.1469,77.3895 75.6798,78.5461 76.2127,79.6981 76.7455,80.8454 77.2784,81.9882 77.8113,83.1264 78.3442,84.26 78.877,85.3891 79.4099,86.5137 \n",
" 79.9428,87.6338 80.4757,88.7494 81.0086,89.8606 81.5414,90.9673 82.0743,92.0695 82.6072,93.1674 83.1401,94.2609 83.6729,95.35 84.2058,96.4347 84.7387,97.5151 \n",
" 85.2716,98.5912 85.8045,99.663 86.3373,100.73 86.8702,101.794 87.4031,102.853 87.936,103.907 88.4688,104.958 89.0017,106.004 89.5346,107.046 90.0675,108.084 \n",
" 90.6004,109.118 91.1332,110.148 91.6661,111.173 92.199,112.195 92.7319,113.212 93.2647,114.225 93.7976,115.235 94.3305,116.24 94.8634,117.241 95.3963,118.238 \n",
" 95.9291,119.232 96.462,120.221 96.9949,121.206 97.5278,122.187 98.0606,123.165 98.5935,124.138 99.1264,125.108 99.6593,126.074 100.192,127.035 100.725,127.993 \n",
" 101.258,128.948 101.791,129.898 102.324,130.844 102.857,131.787 103.389,132.726 103.922,133.661 104.455,134.593 104.988,135.521 105.521,136.445 106.054,137.365 \n",
" 106.587,138.282 107.12,139.195 107.652,140.104 108.185,141.01 108.718,141.912 109.251,142.811 109.784,143.705 110.317,144.597 110.85,145.485 111.383,146.369 \n",
" 111.915,147.249 112.448,148.127 112.981,149 113.514,149.87 114.047,150.737 114.58,151.6 115.113,152.46 115.646,153.316 116.178,154.169 116.711,155.019 \n",
" 117.244,155.865 117.777,156.707 118.31,157.547 118.843,158.383 119.376,159.215 119.909,160.045 120.442,160.871 120.974,161.693 121.507,162.513 122.04,163.329 \n",
" 122.573,164.141 123.106,164.951 123.639,165.757 124.172,166.561 124.705,167.36 125.237,168.157 125.77,168.951 126.303,169.741 126.836,170.528 127.369,171.312 \n",
" 127.902,172.093 128.435,172.871 128.968,173.646 129.5,174.417 130.033,175.186 130.566,175.951 131.099,176.713 131.632,177.473 132.165,178.229 132.698,178.982 \n",
" 133.231,179.732 133.763,180.48 134.296,181.224 134.829,181.965 135.362,182.703 135.895,183.439 136.428,184.171 136.961,184.9 137.494,185.627 138.026,186.351 \n",
" 138.559,187.071 139.092,187.789 139.625,188.504 140.158,189.216 140.691,189.926 141.224,190.632 141.757,191.336 142.289,192.037 142.822,192.735 143.355,193.43 \n",
" 143.888,194.122 144.421,194.812 144.954,195.499 145.487,196.183 146.02,196.864 146.553,197.543 147.085,198.219 147.618,198.892 148.151,199.563 148.684,200.231 \n",
" 149.217,200.896 149.75,201.558 150.283,202.218 150.816,202.876 151.348,203.53 151.881,204.182 152.414,204.832 152.947,205.479 153.48,206.123 154.013,206.764 \n",
" 154.546,207.404 155.079,208.04 155.611,208.674 156.144,209.305 156.677,209.934 157.21,210.561 157.743,211.185 158.276,211.806 158.809,212.425 159.342,213.041 \n",
" 159.874,213.655 160.407,214.267 160.94,214.876 161.473,215.483 162.006,216.087 162.539,216.689 163.072,217.288 163.605,217.885 164.137,218.48 164.67,219.072 \n",
" 165.203,219.662 165.736,220.249 166.269,220.834 166.802,221.417 167.335,221.998 167.868,222.576 168.4,223.152 168.933,223.725 169.466,224.297 169.999,224.865 \n",
" 170.532,225.432 171.065,225.997 171.598,226.559 172.131,227.119 172.664,227.676 173.196,228.232 173.729,228.785 174.262,229.336 174.795,229.885 175.328,230.431 \n",
" 175.861,230.976 176.394,231.518 176.927,232.058 177.459,232.596 177.992,233.132 178.525,233.665 179.058,234.197 179.591,234.726 180.124,235.254 180.657,235.779 \n",
" 181.19,236.302 181.722,236.823 182.255,237.341 182.788,237.858 183.321,238.373 183.854,238.886 184.387,239.396 184.92,239.905 185.453,240.411 185.985,240.916 \n",
" 186.518,241.418 187.051,241.919 187.584,242.417 188.117,242.914 188.65,243.408 189.183,243.901 189.716,244.391 190.248,244.88 190.781,245.366 191.314,245.851 \n",
" 191.847,246.334 192.38,246.815 192.913,247.294 193.446,247.771 193.979,248.246 194.512,248.719 195.044,249.19 195.577,249.659 196.11,250.127 196.643,250.593 \n",
" 197.176,251.056 197.709,251.518 198.242,251.978 198.775,252.437 199.307,252.893 199.84,253.348 200.373,253.8 200.906,254.251 201.439,254.7 201.972,255.148 \n",
" 202.505,255.593 203.038,256.037 203.57,256.479 204.103,256.919 204.636,257.358 205.169,257.794 205.702,258.229 206.235,258.663 206.768,259.094 207.301,259.524 \n",
" 207.833,259.952 208.366,260.378 208.899,260.803 209.432,261.226 209.965,261.647 210.498,262.067 211.031,262.485 211.564,262.901 212.096,263.315 212.629,263.728 \n",
" 213.162,264.139 213.695,264.549 214.228,264.957 214.761,265.363 215.294,265.768 215.827,266.171 216.359,266.573 216.892,266.972 217.425,267.371 217.958,267.767 \n",
" 218.491,268.162 219.024,268.556 219.557,268.948 220.09,269.338 220.623,269.727 221.155,270.114 221.688,270.5 222.221,270.884 222.754,271.267 223.287,271.648 \n",
" 223.82,272.027 224.353,272.405 224.886,272.782 225.418,273.157 225.951,273.53 226.484,273.902 227.017,274.273 227.55,274.642 228.083,275.01 228.616,275.376 \n",
" 229.149,275.74 229.681,276.103 230.214,276.465 230.747,276.825 231.28,277.184 231.813,277.542 232.346,277.898 232.879,278.252 233.412,278.605 233.944,278.957 \n",
" 234.477,279.307 235.01,279.656 235.543,280.004 236.076,280.35 236.609,280.695 237.142,281.038 237.675,281.38 238.207,281.721 238.74,282.06 239.273,282.398 \n",
" 239.806,282.734 240.339,283.07 240.872,283.404 241.405,283.736 241.938,284.067 242.47,284.397 243.003,284.726 243.536,285.053 244.069,285.379 244.602,285.704 \n",
" 245.135,286.027 245.668,286.349 246.201,286.67 246.734,286.989 247.266,287.307 247.799,287.624 248.332,287.94 248.865,288.254 249.398,288.567 249.931,288.879 \n",
" 250.464,289.19 250.997,289.499 251.529,289.807 252.062,290.114 252.595,290.42 253.128,290.724 253.661,291.028 254.194,291.33 254.727,291.631 255.26,291.93 \n",
" 255.792,292.229 256.325,292.526 256.858,292.822 257.391,293.117 257.924,293.41 258.457,293.703 258.99,293.994 259.523,294.284 260.055,294.573 260.588,294.861 \n",
" 261.121,295.148 261.654,295.434 262.187,295.718 262.72,296.001 263.253,296.283 263.786,296.564 264.318,296.844 264.851,297.123 265.384,297.401 265.917,297.677 \n",
" 266.45,297.953 266.983,298.227 267.516,298.5 268.049,298.772 268.582,299.043 269.114,299.313 269.647,299.582 270.18,299.85 270.713,300.117 271.246,300.383 \n",
" 271.779,300.647 272.312,300.911 272.845,301.173 273.377,301.435 273.91,301.695 274.443,301.954 274.976,302.213 275.509,302.47 276.042,302.726 276.575,302.982 \n",
" 277.108,303.236 277.64,303.489 278.173,303.741 278.706,303.992 279.239,304.243 279.772,304.492 280.305,304.74 280.838,304.987 281.371,305.233 281.903,305.479 \n",
" 282.436,305.723 282.969,305.966 283.502,306.208 284.035,306.45 284.568,306.69 285.101,306.929 285.634,307.168 286.166,307.405 286.699,307.642 287.232,307.877 \n",
" 287.765,308.112 288.298,308.346 288.831,308.578 289.364,308.81 289.897,309.041 290.429,309.271 290.962,309.5 291.495,309.728 292.028,309.956 292.561,310.182 \n",
" 293.094,310.407 293.627,310.632 294.16,310.855 294.693,311.078 295.225,311.3 295.758,311.521 296.291,311.741 296.824,311.96 297.357,312.179 297.89,312.396 \n",
" 298.423,312.613 298.956,312.828 299.488,313.043 300.021,313.257 300.554,313.47 301.087,313.682 301.62,313.894 302.153,314.104 302.686,314.314 303.219,314.523 \n",
" 303.751,314.731 304.284,314.938 304.817,315.145 305.35,315.35 305.883,315.555 306.416,315.759 306.949,315.962 307.482,316.164 308.014,316.366 308.547,316.566 \n",
" 309.08,316.766 309.613,316.965 310.146,317.164 310.679,317.361 311.212,317.558 311.745,317.754 312.277,317.949 312.81,318.143 313.343,318.337 313.876,318.53 \n",
" 314.409,318.722 314.942,318.913 315.475,319.103 316.008,319.293 316.54,319.482 317.073,319.67 317.606,319.858 318.139,320.045 318.672,320.231 319.205,320.416 \n",
" 319.738,320.6 320.271,320.784 320.804,320.967 321.336,321.149 321.869,321.331 322.402,321.512 322.935,321.692 323.468,321.871 324.001,322.05 324.534,322.228 \n",
" 325.067,322.405 325.599,322.581 326.132,322.757 326.665,322.932 327.198,323.107 327.731,323.281 328.264,323.454 328.797,323.626 329.33,323.798 329.862,323.969 \n",
" 330.395,324.139 330.928,324.308 331.461,324.477 331.994,324.646 332.527,324.813 333.06,324.98 333.593,325.146 334.125,325.312 334.658,325.477 335.191,325.641 \n",
" 335.724,325.804 336.257,325.967 336.79,326.13 337.323,326.291 337.856,326.452 338.388,326.613 338.921,326.772 339.454,326.931 339.987,327.09 340.52,327.248 \n",
" 341.053,327.405 341.586,327.561 342.119,327.717 342.652,327.872 343.184,328.027 343.717,328.181 344.25,328.335 344.783,328.487 345.316,328.64 345.849,328.791 \n",
" 346.382,328.942 346.915,329.093 347.447,329.242 347.98,329.391 348.513,329.54 349.046,329.688 349.579,329.835 350.112,329.982 350.645,330.128 351.178,330.274 \n",
" 351.71,330.419 352.243,330.564 352.776,330.707 353.309,330.851 353.842,330.994 354.375,331.136 354.908,331.277 355.441,331.418 355.973,331.559 356.506,331.699 \n",
" 357.039,331.838 357.572,331.977 358.105,332.115 358.638,332.253 359.171,332.39 359.704,332.527 360.236,332.663 360.769,332.798 361.302,332.933 361.835,333.067 \n",
" 362.368,333.201 362.901,333.335 363.434,333.467 363.967,333.6 364.499,333.731 365.032,333.863 365.565,333.993 366.098,334.124 366.631,334.253 367.164,334.382 \n",
" 367.697,334.511 368.23,334.639 368.763,334.767 369.295,334.894 369.828,335.02 370.361,335.146 370.894,335.272 371.427,335.397 371.96,335.522 372.493,335.646 \n",
" 373.026,335.769 373.558,335.892 374.091,336.015 374.624,336.137 375.157,336.258 375.69,336.38 376.223,336.5 376.756,336.62 377.289,336.74 377.821,336.859 \n",
" 378.354,336.978 378.887,337.096 379.42,337.214 379.953,337.331 380.486,337.448 381.019,337.564 381.552,337.68 382.084,337.796 382.617,337.911 383.15,338.025 \n",
" 383.683,338.139 384.216,338.253 384.749,338.366 385.282,338.479 385.815,338.591 386.347,338.703 386.88,338.814 387.413,338.925 387.946,339.035 388.479,339.145 \n",
" 389.012,339.255 389.545,339.364 390.078,339.473 390.61,339.581 391.143,339.689 391.676,339.796 392.209,339.903 392.742,340.01 393.275,340.116 393.808,340.221 \n",
" 394.341,340.327 394.874,340.432 395.406,340.536 395.939,340.64 396.472,340.744 397.005,340.847 397.538,340.949 398.071,341.052 398.604,341.154 399.137,341.255 \n",
" 399.669,341.356 400.202,341.457 400.735,341.557 401.268,341.657 401.801,341.757 402.334,341.856 402.867,341.955 403.4,342.053 403.932,342.151 404.465,342.249 \n",
" 404.998,342.346 405.531,342.442 406.064,342.539 406.597,342.635 407.13,342.73 407.663,342.826 408.195,342.92 408.728,343.015 409.261,343.109 409.794,343.203 \n",
" 410.327,343.296 410.86,343.389 411.393,343.482 411.926,343.574 412.458,343.666 412.991,343.757 413.524,343.848 414.057,343.939 414.59,344.029 415.123,344.119 \n",
" 415.656,344.209 416.189,344.298 416.722,344.387 417.254,344.476 417.787,344.564 418.32,344.652 418.853,344.74 419.386,344.827 419.919,344.914 420.452,345 \n",
" 420.985,345.086 421.517,345.172 422.05,345.258 422.583,345.343 423.116,345.427 423.649,345.512 424.182,345.596 424.715,345.68 425.248,345.763 425.78,345.846 \n",
" 426.313,345.929 426.846,346.011 427.379,346.094 427.912,346.175 428.445,346.257 428.978,346.338 429.511,346.419 430.043,346.499 430.576,346.579 431.109,346.659 \n",
" 431.642,346.739 432.175,346.818 432.708,346.897 433.241,346.975 433.774,347.054 434.306,347.131 434.839,347.209 435.372,347.286 435.905,347.363 436.438,347.44 \n",
" 436.971,347.516 437.504,347.593 438.037,347.668 438.569,347.744 439.102,347.819 439.635,347.894 440.168,347.968 440.701,348.043 441.234,348.117 441.767,348.19 \n",
" 442.3,348.264 442.833,348.337 443.365,348.41 443.898,348.482 444.431,348.554 444.964,348.626 445.497,348.698 446.03,348.769 446.563,348.84 447.096,348.911 \n",
" 447.628,348.982 448.161,349.052 448.694,349.122 449.227,349.191 449.76,349.261 450.293,349.33 450.826,349.399 451.359,349.467 451.891,349.536 452.424,349.604 \n",
" 452.957,349.671 453.49,349.739 454.023,349.806 454.556,349.873 455.089,349.94 455.622,350.006 456.154,350.072 456.687,350.138 457.22,350.203 457.753,350.269 \n",
" 458.286,350.334 458.819,350.399 459.352,350.463 459.885,350.528 460.417,350.592 460.95,350.655 461.483,350.719 462.016,350.782 462.549,350.845 463.082,350.908 \n",
" 463.615,350.97 464.148,351.033 464.68,351.095 465.213,351.156 465.746,351.218 466.279,351.279 466.812,351.34 467.345,351.401 467.878,351.462 468.411,351.522 \n",
" 468.944,351.582 469.476,351.642 470.009,351.701 470.542,351.761 471.075,351.82 471.608,351.879 472.141,351.937 472.674,351.996 473.207,352.054 473.739,352.112 \n",
" 474.272,352.17 474.805,352.227 475.338,352.284 475.871,352.341 476.404,352.398 476.937,352.455 477.47,352.511 478.002,352.567 478.535,352.623 479.068,352.679 \n",
" 479.601,352.734 480.134,352.789 480.667,352.844 481.2,352.899 481.733,352.953 482.265,353.008 482.798,353.062 483.331,353.116 483.864,353.17 484.397,353.223 \n",
" 484.93,353.276 485.463,353.329 485.996,353.382 486.528,353.435 487.061,353.487 487.594,353.539 488.127,353.591 488.66,353.643 489.193,353.695 489.726,353.746 \n",
" 490.259,353.797 490.792,353.848 491.324,353.899 491.857,353.949 492.39,354 492.923,354.05 493.456,354.1 493.989,354.15 494.522,354.199 495.055,354.249 \n",
" 495.587,354.298 496.12,354.347 496.653,354.395 497.186,354.444 497.719,354.492 498.252,354.541 498.785,354.588 499.318,354.636 499.85,354.684 500.383,354.731 \n",
" 500.916,354.779 501.449,354.826 501.982,354.872 502.515,354.919 503.048,354.966 503.581,355.012 504.113,355.058 504.646,355.104 505.179,355.15 505.712,355.195 \n",
" 506.245,355.24 506.778,355.286 507.311,355.331 507.844,355.375 508.376,355.42 508.909,355.465 509.442,355.509 509.975,355.553 510.508,355.597 511.041,355.641 \n",
" 511.574,355.684 512.107,355.728 512.639,355.771 513.172,355.814 513.705,355.857 514.238,355.9 514.771,355.942 515.304,355.984 515.837,356.027 516.37,356.069 \n",
" 516.903,356.111 517.435,356.152 517.968,356.194 518.501,356.235 519.034,356.276 519.567,356.317 520.1,356.358 520.633,356.399 521.166,356.44 521.698,356.48 \n",
" 522.231,356.52 522.764,356.56 523.297,356.6 523.83,356.64 524.363,356.68 524.896,356.719 525.429,356.758 525.961,356.797 526.494,356.836 527.027,356.875 \n",
" 527.56,356.914 528.093,356.952 528.626,356.991 529.159,357.029 529.692,357.067 530.224,357.105 530.757,357.142 531.29,357.18 531.823,357.217 532.356,357.255 \n",
" 532.889,357.292 533.422,357.329 533.955,357.366 534.487,357.402 535.02,357.439 535.553,357.475 536.086,357.511 536.619,357.548 537.152,357.583 537.685,357.619 \n",
" 538.218,357.655 538.75,357.69 539.283,357.726 539.816,357.761 540.349,357.796 540.882,357.831 541.415,357.866 541.948,357.901 542.481,357.935 543.014,357.97 \n",
" 543.546,358.004 544.079,358.038 544.612,358.072 545.145,358.106 545.678,358.14 546.211,358.173 546.744,358.207 547.277,358.24 547.809,358.273 548.342,358.306 \n",
" 548.875,358.339 549.408,358.372 549.941,358.405 550.474,358.437 551.007,358.469 551.54,358.502 552.072,358.534 552.605,358.566 553.138,358.598 553.671,358.63 \n",
" 554.204,358.661 554.737,358.693 555.27,358.724 555.803,358.755 556.335,358.786 556.868,358.817 557.401,358.848 557.934,358.879 558.467,358.91 559,358.94 \n",
" 559.533,358.971 560.066,359.001 560.598,359.031 561.131,359.061 561.664,359.091 562.197,359.121 562.73,359.15 563.263,359.18 563.796,359.209 564.329,359.239 \n",
" 564.862,359.268 565.394,359.297 565.927,359.326 566.46,359.355 566.993,359.383 567.526,359.412 568.059,359.441 568.592,359.469 569.125,359.497 569.657,359.525 \n",
" 570.19,359.553 570.723,359.581 571.256,359.609 571.789,359.637 572.322,359.664 572.855,359.692 573.388,359.719 573.92,359.747 574.453,359.774 574.986,359.801 \n",
" 575.519,359.828 576.052,359.855 576.585,359.881 577.118,359.908 577.651,359.934 578.183,359.961 578.716,359.987 579.249,360.013 579.782,360.039 580.315,360.065 \n",
" \n",
" \"/>\n",
"<polygon clip-path=\"url(#clip5800)\" points=\"\n",
"448.982,78.051 562.315,78.051 562.315,32.691 448.982,32.691 \n",
" \" fill=\"#ffffff\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:1; stroke-opacity:1; fill:none\" points=\"\n",
" 448.982,78.051 562.315,78.051 562.315,32.691 448.982,32.691 448.982,78.051 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#000000; stroke-width:5; stroke-opacity:1; fill:none\" points=\"\n",
" 454.982,47.811 490.982,47.811 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 496.982, 52.311)\" x=\"496.982\" y=\"52.311\">Exact</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip5800)\" style=\"stroke:#ff0000; stroke-width:2; stroke-opacity:1; fill:none\" stroke-dasharray=\"8, 5\" points=\"\n",
" 454.982,62.931 490.982,62.931 \n",
" \"/>\n",
"<g clip-path=\"url(#clip5800)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:12; text-anchor:start;\" transform=\"rotate(0, 496.982, 67.431)\" x=\"496.982\" y=\"67.431\">Numerical</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# plot \n",
"using Plots\n",
"plot(x, y_exc, color=:black, linewidth=5, label=\"Exact\",xlabel=\"x\",ylabel=\"y\") \n",
"plot!(x, y, color=:red, linewidth=2, linestyle=:dash, label=\"Numerical\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"厳密解と数値解で一致していることが確認できました。\n",
"\n",
"\n",
"画像の保存はsavefig()です。"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"savefig(\"ODE.png\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"値も見てみましょう。"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" n Numerical Exact Error\n",
" 990 0.01898828 0.01913952 -1.51236228e-04\n",
" 991 0.01891233 0.01906311 -1.50784195e-04\n",
" 992 0.01883668 0.01898701 -1.50333360e-04\n",
" 993 0.01876133 0.01891122 -1.49883720e-04\n",
" 994 0.01868629 0.01883572 -1.49435274e-04\n",
" 995 0.01861154 0.01876053 -1.48988018e-04\n",
" 996 0.01853710 0.01868564 -1.48541950e-04\n",
" 997 0.01846295 0.01861105 -1.48097068e-04\n",
" 998 0.01838910 0.01853675 -1.47653370e-04\n",
" 999 0.01831554 0.01846275 -1.47210853e-04\n",
" 1000 0.01824228 0.01838905 -1.46769515e-04\n"
]
}
],
"source": [
"@printf(\"%12s %12s %12s %12s\\n\",\"n\" ,\"Numerical\" ,\"Exact\" , \"Error\")\n",
"for n = N-10:N\n",
" @printf(\"%12d %12.8f %12.8f %12.8e\\n\", n, y[n], y_exc[n], y[n]-y_exc[n])\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"誤差はありますが、同じような値になっていることが確認できました。\n",
"\n",
"ここまでのコードの全文です。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 点数\n",
"N = 1000\n",
"\n",
"# 刻み \n",
"h = 0.004\n",
"\n",
"# 初期化\n",
"y = zeros(N)\n",
"\n",
"# 初期値\n",
"y[1] = 1\n",
"\n",
"# 数値計算\n",
"for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
"end\n",
"\n",
"# x, start:step:stop\n",
"x = 0:h:(N-1)h \n",
"\n",
"# 厳密解\n",
"f(x) = exp.(-x)\n",
"\n",
"# y_exc\n",
"y_exc = f(x)\n",
"\n",
"# plot\n",
"using Plots\n",
"plot(x, y_exc, color=:black, linewidth=5, label=\"Exact\",xlabel=\"x\",ylabel=\"y\") \n",
"plot!(x, y, color=:red, linewidth=2, linestyle=:dash, label=\"Numerical\")\n",
"\n",
"# save\n",
"savefig(\"ODE.png\")\n",
"\n",
"# print\n",
"@printf(\"%12s %12s %12s %12s\\n\",\"n\",\"Numerical\",\"Exact\",\"Error\")\n",
"for n = N-10:N\n",
" @printf(\"%12d %12.8f %12.8f %12.8e\\n\", n, y[n],y_exc[n],y[n]-y_exc[n])\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 経過時間の計測"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"さて、それでは本題に移ります。経過時間の計測は@timeで出来ます。関数だけでなく、for文の頭につけることで、for文の経過時間も計測できます。\n"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0.000437 seconds (5.46 k allocations: 101.000 KiB)\n"
]
}
],
"source": [
"@time for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"どうせならということで、点数は1億点、刻み幅は$40 \\times 10^{-9}$に変更しました。"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 34.899070 seconds (700.00 M allocations: 11.921 GiB, 5.13% gc time)\n"
]
}
],
"source": [
"# 点数\n",
"N = 100000000\n",
"\n",
"# 刻み \n",
"h = 0.00000004\n",
"\n",
"# 初期化\n",
"y = zeros(N)\n",
"\n",
"# 初期値\n",
"y[1] = 1\n",
"\n",
"# 数値計算\n",
"@time for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
"end\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"結果は約35秒となりました。参考に、同様の計算をPythonで行ってみました。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Elapsed Time(Python): 49.52 [s]\n"
]
}
],
"source": [
"import numpy as np \n",
"import time\n",
"\n",
"# 点数\n",
"N = 100000000\n",
"\n",
"# 刻み \n",
"h = 0.00000004\n",
"\n",
"# 初期化\n",
"y = np.zeros(N)\n",
"\n",
"# 初期値\n",
"y[0] = 1\n",
"\n",
"# 数値計算\n",
"start = time.time()\n",
"\n",
"for n in range(N-1):\n",
" y[n+1] = (1-h)*y[n]\n",
"\n",
"elapsed_time = time.time() - start\n",
"print(\"Elapsed Time(Python): %.2f [s]\" % elapsed_time)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"結果は約50秒となりました。Pythonに比べて、Juliaの方が15秒速い程度ですね。\n",
"\n",
"...というようなことをtwitterで呟いたら@bicycle1885さんに、「Juliaは、関数内に書かないと速度が出ない」と[指摘](https://twitter.com/bicycle1885/status/948209611802255362)して頂きました。 \n",
"それでは、先程のコードを関数内に書いてみましょう。"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"main (generic function with 1 method)"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function main()\n",
" # 点数\n",
" N = 100000000\n",
" \n",
" # 刻み \n",
" h = 0.00000004\n",
" \n",
" # 初期化\n",
" y = zeros(N)\n",
" \n",
" # 初期値\n",
" y[1] = 1\n",
" \n",
" # 数値計算\n",
" @time for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
" end\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"それでは実行してみます。"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0.373891 seconds\n"
]
}
],
"source": [
"main()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ん? 間違えたかな、もう一度。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0.330274 seconds\n"
]
}
],
"source": [
"main()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Oh...。なんと35秒から0.33秒と、約100倍も速くなりました。 \n",
"ほんとにきちんと計算できているんでしょうか。厳密解と比較してみましょう。\n"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 0.322447 seconds\n",
" n Numerical Exact Error\n",
" 99999990 0.01831565 0.01831565 -1.42668458e-09\n",
" 99999991 0.01831564 0.01831565 -1.42668453e-09\n",
" 99999992 0.01831564 0.01831565 -1.42668450e-09\n",
" 99999993 0.01831564 0.01831564 -1.42668445e-09\n",
" 99999994 0.01831564 0.01831564 -1.42668441e-09\n",
" 99999995 0.01831564 0.01831564 -1.42668436e-09\n",
" 99999996 0.01831564 0.01831564 -1.42668433e-09\n",
" 99999997 0.01831564 0.01831564 -1.42668428e-09\n",
" 99999998 0.01831564 0.01831564 -1.42668423e-09\n",
" 99999999 0.01831564 0.01831564 -1.42668419e-09\n",
" 100000000 0.01831564 0.01831564 -1.42668415e-09\n"
]
}
],
"source": [
"function main(N,h,y0)\n",
" # 初期化\n",
" y = zeros(N)\n",
" \n",
" # 初期値\n",
" y[1] = y0\n",
" \n",
" # 数値計算\n",
" @time for n = 1:N-1\n",
" y[n+1] = (1-h)y[n]\n",
" end\n",
" return y\n",
"end\n",
"# 点数\n",
"N = 100000000\n",
"\n",
"# 刻み \n",
"h = 0.00000004\n",
"\n",
"# 初期値\n",
"y0 = 1\n",
"\n",
"# main\n",
"y = main(N,h,y0)\n",
"\n",
"# x, start:step:stop\n",
"x = 0:h:(N-1)h \n",
"\n",
"# 厳密解\n",
"f(x) = exp.(-x)\n",
"\n",
"# y_exc\n",
"y_exc= f(x)\n",
"\n",
"# print\n",
"@printf(\"%12s %12s %12s %12s\\n\",\"n\",\"Numerical\",\"Exact\",\"Error\")\n",
"for n = N-10:N\n",
" @printf(\"%12d %12.8f %12.8f %12.8e\\n\", n, y[n],y_exc[n],y[n]-y_exc[n])\n",
"end"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"きちんとできていますね!すごい!\n",
"上記の結果を表にしてみました。\n",
"\n",
"| |Python(参考) |Julia(TopLeve)|Julia (Function) |\n",
"|-------------|:-------:|:--------:|:--------:|\n",
"|経過時間 [s] |41.74 | 31.96 |0.313|\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# おわりに\n",
"いかがでしたでしょうか。簡単な数値計算の結果ではありましたが、Juliaの速さを体感して頂けたでしょうか。\n",
"\n",
"「Juliaだけ最適化してせこい!PythonだってnumbaやCythonを使えばもっと速くなる!」という声もあるかと思います。 \n",
"numbaについては試しているので、時間があればそちらの記事も書きたいと思います。\n",
"\n",
"他にも、コンパイラ言語との比較も気になる所だと思います。これに関してはFortranとの比較を行いましたので、同じ時に書きたいと思います。\n",
"\n",
"最後までお読み頂きありがとうございました。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 環境\n",
"OS : macOS High Sierra Version 10.13.2 \n",
"PC : MacBook Pro (Retina, 15-inch, Early 2013) \n",
"CPU : Intel Core i7 2.7 GHz \n",
"Memory : 16 GB 1600 MHz DDR3\n",
"\n",
"Julia : 0.6.2\n",
"\n",
"Python : 3.6.3 \n",
"numpy : 1.13.3"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.6.2",
"language": "julia",
"name": "julia-0.6"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment