{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": "true" }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 試験解答例18" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 簡単な行列計算" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "array([[ 4, -1, -1],\n", " [ 1, 2, -1],\n", " [ 3, -1, 0]])\n" ] } ], "source": [ "import numpy as np\n", "from pprint import pprint\n", "aa = np.array([[4,-1,-1], [1,2,-1],[3,-1,0]])\n", "pprint(aa)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "array([[-0.16666667, 0.16666667, 0.5 ],\n", " [-0.5 , 0.5 , 0.5 ],\n", " [-1.16666667, 0.16666667, 1.5 ]])\n" ] } ], "source": [ "import scipy.linalg as linalg\n", "inv_a = linalg.inv(aa)\n", "pprint(inv_a)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "array([[ 1., 0., 0.],\n", " [ 0., 1., 0.],\n", " [ 0., 0., 1.]])\n" ] } ], "source": [ "pprint(np.dot(inv_a,aa))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 数値解の収束性" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-0.69314718056\n" ] } ], "source": [ "import numpy as np\n", "\n", "def func(x):\n", " return -4*np.exp(-x)+2*np.exp(-2*x)\n", "\n", "def df(x):\n", " return 4*np.exp(-x) - 4*np.exp(-2*x)\n", "\n", "from scipy.optimize import fsolve\n", "x0 = fsolve(func, -1.0)[0]\n", "print(x0)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "x1=-1.0\n", "x2=1.0\n", "x = np.linspace(x1, x2, 100)\n", "y = func(x)\n", "plt.plot(x, y, color = 'k')\n", "plt.plot([x1,x2],[0,0])\n", "plt.grid()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " x1 x2 f1 f2\n", " -1.0000000000 +0.0000000000 +3.9049848840 -2.0000000000\n", " -1.0000000000 -0.5000000000 +3.9049848840 -1.1583214259\n", " -0.7500000000 -0.5000000000 +0.4953780742 -1.1583214259\n", " -0.7500000000 -0.6250000000 +0.4953780742 -0.4922979148\n", " -0.7500000000 -0.6875000000 +0.4953780742 -0.0447964325\n", " -0.7187500000 -0.6875000000 +0.2128474183 -0.0447964325\n", " -0.7031250000 -0.6875000000 +0.0810265592 -0.0447964325\n", " -0.6953125000 -0.6875000000 +0.0173789137 -0.0447964325\n", " -0.6953125000 -0.6914062500 +0.0173789137 -0.0138911236\n", " -0.6933593750 -0.6914062500 +0.0016980959 -0.0138911236\n", " -0.6933593750 -0.6923828125 +0.0016980959 -0.0061079375\n", "[[0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0.30685281944005338, 0.19314718055994662, 0.056852819440053382, 0.068147180559946618, 0.0056471805599466185, 0.025602819440053382, 0.0099778194400533815, 0.0021653194400533815, 0.0017409305599466185, 0.00021219444005338151, 0.00076436805994661849]]\n" ] } ], "source": [ "x1, x2 = -1.0, 0.0\n", "f1, f2 = func(x1), func(x2)\n", "print('%+15s %+15s %+15s %+15s' % ('x1','x2','f1','f2'))\n", "print('%+15.10f %+15.10f %+15.10f %+15.10f' % (x1,x2,f1,f2))\n", "\n", "list_bisec = [[0],[abs(x1-x0)]]\n", "for i in range(0, 10):\n", " x = (x1 + x2)/2\n", " f = func(x)\n", " if (f*f1>=0.0):\n", " x1, f1 = x, f\n", " list_bisec[0].append(i)\n", " list_bisec[1].append(abs(x1-x0))\n", " else:\n", " x2, f2 = x, f\n", " list_bisec[0].append(i)\n", " list_bisec[1].append(abs(x2-x0))\n", "\n", " print('%+15.10f %+15.10f %+15.10f %+15.10f' % (x1,x2,f1,f2))\n", "\n", "\n", "print(list_bisec)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1.0000000000 +3.9049848840251204507012517\n", "-0.7909883534 +0.9068233052059522236731937\n", "-0.7057281263 +0.1025656393923117803979039\n", "-0.6933803632 +0.0018661139743176846650385\n", "-0.6931472621 +0.0000006522702786782019757\n", "-0.6931471806 +0.0000000000000799360577730\n", "-0.6931471806 +0.0000000000000000000000000\n", "-0.6931471806 +0.0000000000000000000000000\n", "-0.6931471806 +0.0000000000000000000000000\n", "-0.6931471806 +0.0000000000000000000000000\n", "-0.6931471806 +0.0000000000000000000000000\n", "[[0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0.30685281944005338, 0.097841172874716609, 0.012580945692322598, 0.00023318267075744803, 8.1533773510500396e-08, 8.659739592076221e-15, 1.3322676295501878e-15, 1.3322676295501878e-15, 1.3322676295501878e-15, 1.3322676295501878e-15, 1.3322676295501878e-15]]\n" ] } ], "source": [ "x1 = -1.0\n", "f1 = func(x1)\n", "list_newton = [[0],[abs(x1-x0)]]\n", "print('%-15.10f %+24.25f' % (x1,f1))\n", "for i in range(0, 10):\n", " x1 = x1 - f1 / df(x1)\n", " f1 =func(x1)\n", " print('%-15.10f %+24.25f' % (x1,f1))\n", " list_newton[0].append(i)\n", " list_newton[1].append(abs(x1-x0))\n", "\n", "print(list_newton)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "X = list_bisec[0]\n", "Y = list_bisec[1]\n", "plt.plot(X, Y)\n", "\n", "X = list_newton[0]\n", "Y = list_newton[1]\n", "plt.plot(X, Y)\n", "\n", "plt.yscale(\"log\") # y軸を対数目盛に\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 精度,誤差" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from decimal import *\n", "\n", "def pretty_p(result,a,b,operator):\n", " print('context.prec:{}'.format(getcontext().prec))\n", " print(' %20.14f' % (a))\n", " print( '%1s%20.14f' % (operator, b))\n", " print('-----------')\n", " print( ' %20.14f' % (result))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "context.prec:5\n", " 3.14150000000000\n", "- 3.12340000000000\n", "-----------\n", " 0.01810000000000\n", "0.0181\n", "44.199\n" ] } ], "source": [ "getcontext().prec = 5\n", "\n", "aa = '0.80000'\n", "bb = '3.1415'\n", "cc = '3.1234'\n", "a=Decimal(aa)\n", "b=Decimal(bb)\n", "c=Decimal(cc)\n", "pretty_p(b-c,b,c,'-')\n", "\n", "print(b-c)\n", "print(a/(b-c))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "context.prec:4\n", " 3.14200000000000\n", "- 3.12300000000000\n", "-----------\n", " 0.01900000000000\n", "0.019\n", "42.11\n" ] } ], "source": [ "TWOPLACES = Decimal(10) ** -3 \n", "getcontext().prec = 4\n", "a=Decimal(aa).quantize(Decimal(10) ** -4)\n", "b=Decimal(bb).quantize(Decimal('0.001'))\n", "c=Decimal(cc).quantize(Decimal('0.001'))\n", "\n", "pretty_p(b-c,b,c,'-')\n", "\n", "print(b-c)\n", "print(a/(b-c))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "context.prec:3\n", " 3.14000000000000\n", "- 3.12000000000000\n", "-----------\n", " 0.02000000000000\n", "0.02\n", "40.0\n" ] } ], "source": [ "TWOPLACES = Decimal(10) ** -2\n", "getcontext().prec = 3\n", "a=Decimal(aa).quantize(Decimal(10) ** -3)\n", "b=Decimal(bb).quantize(Decimal('0.01'))\n", "c=Decimal(cc).quantize(Decimal('0.01'))\n", "\n", "pretty_p(b-c,b,c,'-')\n", "\n", "print(b-c)\n", "print(a/(b-c))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "context.prec:2\n", " 3.10000000000000\n", "- 3.10000000000000\n", "-----------\n", " 0.00000000000000\n", "0.0\n" ] }, { "ename": "DivisionByZero", "evalue": "[]", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mDivisionByZero\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mDivisionByZero\u001b[0m: []" ] } ], "source": [ "TWOPLACES = Decimal(10) ** -1\n", "getcontext().prec = 2\n", "a=Decimal(aa).quantize(Decimal(10) ** -2)\n", "b=Decimal(bb).quantize(Decimal('0.1'))\n", "c=Decimal(cc).quantize(Decimal('0.1'))\n", "\n", "pretty_p(b-c,b,c,'-')\n", "\n", "print(b-c)\n", "print(a/(b-c))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 最小2乗法" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ -2. -1. 0. 1. 2. ]\n", " [-561.78952 -564.14261 -565.47273 -565.8513 -565.36457]]\n" ] } ], "source": [ "import numpy as np\n", "from pprint import pprint\n", "\n", "aa = np.array([[-2.0, -561.78952],\n", " [-1.0, -564.14261],\n", " [0.0, -565.47273],\n", " [1.0, -565.8513],\n", " [2.0, -565.36457]])\n", "\n", "at = np.transpose(aa)\n", "print(at)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " if (mpl.ratio != 1) {\n", " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", " }\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " this.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var backingStore = this.context.backingStorePixelRatio ||\n", "\tthis.context.webkitBackingStorePixelRatio ||\n", "\tthis.context.mozBackingStorePixelRatio ||\n", "\tthis.context.msBackingStorePixelRatio ||\n", "\tthis.context.oBackingStorePixelRatio ||\n", "\tthis.context.backingStorePixelRatio || 1;\n", "\n", " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width * mpl.ratio);\n", " canvas.attr('height', height * mpl.ratio);\n", " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('