diff --git a/Lab-1/ejemyr_lab1.ipynb b/Lab-1/ejemyr_lab1.ipynb index bdccbcf..adacf45 100644 --- a/Lab-1/ejemyr_lab1.ipynb +++ b/Lab-1/ejemyr_lab1.ipynb @@ -3,8 +3,10 @@ "nbformat_minor": 0, "metadata": { "colab": { - "name": "template-report-lab-X.ipynb", + "name": "ejemyr_lab1.ipynb", "provenance": [], + "collapsed_sections": [], + "toc_visible": true, "include_colab_link": true }, "kernelspec": { @@ -20,7 +22,7 @@ "colab_type": "text" }, "source": [ - "\"Open" + "\"Open" ] }, { @@ -30,8 +32,8 @@ "colab_type": "text" }, "source": [ - "# **Lab X: Title**\n", - "**Johan Hoffman**" + "# **Lab 1: Title**\n", + "**Christoffer Ejemyr**" ] }, { @@ -44,32 +46,6 @@ "# **Abstract**" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "6UFTSzW7P8kL", - "colab_type": "text" - }, - "source": [ - "\n", - "\n", - "```\n", - "# This is formatted as code\n", - "```\n", - "\n", - "Short summary of the lab report. State the objectives, methods used, main results and conlusions. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "yJipbXtnjrJZ", - "colab_type": "text" - }, - "source": [ - "" - ] - }, { "cell_type": "markdown", "metadata": { @@ -80,22 +56,12 @@ "#**About the code**" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "HmB2noTr1Oyo", - "colab_type": "text" - }, - "source": [ - "A short statement on who is the author of the file, and if the code is distributed under a certain license. " - ] - }, { "cell_type": "code", "metadata": { "id": "Pdll1Xc9WP0e", "colab_type": "code", - "outputId": "f74fa781-413b-41e7-a2ec-1bba2288ad4f", + "outputId": "ce1a945e-2dae-4530-cb4d-1236274284c0", "colab": { "base_uri": "https://localhost:8080/", "height": 34 @@ -106,7 +72,7 @@ "\"\"\"DD2363 Methods in Scientific Computing, \"\"\"\n", "\"\"\"KTH Royal Institute of Technology, Stockholm, Sweden.\"\"\"\n", "\n", - "# Copyright (C) 2019 Johan Hoffman (jhoffman@kth.se)\n", + "# Copyright (C) 2019 Christoffer Ejemyr (ejemyr@kth.se)\n", "\n", "# This file is part of the course DD2363 Methods in Scientific Computing\n", "# KTH Royal Institute of Technology, Stockholm, Sweden\n", @@ -114,12 +80,9 @@ "# This is free software: you can redistribute it and/or modify\n", "# it under the terms of the GNU Lesser General Public License as published by\n", "# the Free Software Foundation, either version 3 of the License, or\n", - "# (at your option) any later version.\n", - "\n", - "# This template is maintained by Johan Hoffman\n", - "# Please report problems to jhoffman@kth.se" + "# (at your option) any later version." ], - "execution_count": 1, + "execution_count": 0, "outputs": [ { "output_type": "execute_result", @@ -131,7 +94,7 @@ "metadata": { "tags": [] }, - "execution_count": 1 + "execution_count": 8 } ] }, @@ -145,16 +108,6 @@ "# **Set up environment**" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "D2PYNusD08Wa", - "colab_type": "text" - }, - "source": [ - "To have access to the neccessary modules you have to run this cell. If you need additional modules, this is where you add them. " - ] - }, { "cell_type": "code", "metadata": { @@ -168,11 +121,24 @@ "\n", "import time\n", "import numpy as np\n", + "import unittest\n", + "import sys\n", "\n", "from matplotlib import pyplot as plt\n", "from matplotlib import tri\n", "from matplotlib import axes\n", - "from mpl_toolkits.mplot3d import Axes3D" + "from mpl_toolkits.mplot3d import Axes3D\n", + "\n", + "class Tests(unittest.TestCase):\n", + " @staticmethod\n", + " def check_accuracy(est, true, decimal):\n", + " np.testing.assert_almost_equal(est, true, decimal=decimal)\n", + "\n", + " @staticmethod\n", + " def check_accuracy_multiple_random(num_of_tests, generating_func, decimal):\n", + " for i in range(num_of_tests):\n", + " est, true = generating_func()\n", + " Tests.check_accuracy(est, true, decimal)\n" ], "execution_count": 0, "outputs": [] @@ -187,26 +153,6 @@ "# **Introduction**" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "l5zMzgPlRAF6", - "colab_type": "text" - }, - "source": [ - "Give a short description of the problem investigated in the report, and provide some background information so that the reader can understand the context. \n", - "\n", - "Briefly describe what method you have chosen to solve the problem, and justify why you selected that method. \n", - "\n", - "Here you can express mathematics through Latex syntax, and use hyperlinks for references.\n", - "\n", - "[Hyperlink to DD2363 course website.](https://kth.instructure.com/courses/7500)\n", - "\n", - "$\n", - "{\\displaystyle \\frac{\\partial u}{\\partial t}} + u\\cdot \\nabla u +\\nabla p = f, \\quad \\nabla \\cdot u=0$\n", - "\n" - ] - }, { "cell_type": "markdown", "metadata": { @@ -220,84 +166,75 @@ { "cell_type": "markdown", "metadata": { - "id": "zF4iBj5VURZx", + "id": "uwVrMhGQ4viZ", "colab_type": "text" }, "source": [ - "Describe the methods you used to solve the problem. This may be a combination of text, mathematical formulas (Latex), algorithms (code), data and output. " + "### Scalar product" ] }, { - "cell_type": "markdown", - "metadata": { - "id": "SsQLT38gVbn_", - "colab_type": "text" - }, - "source": [ - "# **Results**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RLwlnOzuV-Cd", - "colab_type": "text" - }, - "source": [ - "Present the results. If the result is an algorithm that you have described under the *Methods* section, you can present the data from verification and performance tests in this section. If the result is the output from a computational experiment this is where you present a selection of that data. " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_4GLBv0zWr7m", - "colab_type": "text" - }, - "source": [ - "# **Discussion**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "6bcsDSoRXHZe", - "colab_type": "text" - }, - "source": [ - "Summarize your results and your conclusions. Were the results expected or surprising. Do your results have implications outside the particular problem investigated in this report? " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "1vcIILuQYsEA", - "colab_type": "text" - }, - "source": [ - "# **APPENDIX**" - ] - }, - { - "cell_type": "markdown", + "cell_type": "code", "metadata": { - "id": "NlJ-Y9KAYt4Z", - "colab_type": "text" + "id": "jqrNhl6Np2Ze", + "colab_type": "code", + "colab": {} }, "source": [ - "In this appendix some examples are given to express and visualizing mathematical concepts such as vectors, matrices, meshes and functions. \n", + "def scalar_product(x, y):\n", + " if type(x) != np.ndarray:\n", + " try:\n", + " x = np.array(x)\n", + " except:\n", + " raise Exception(\"Vector format error.\\n\" + \"x: \" + str(x) + \"\\ny: \" + str(y))\n", + " if type(y) != np.ndarray:\n", + " try:\n", + " y = np.array(y)\n", + " except:\n", + " raise Exception(\"Vector format error.\\n\" + \"x: \" + str(x) + \"\\ny: \" + str(y))\n", + "\n", + " if x.ndim != 1 or y.ndim != 1:\n", + " raise Exception(\"Vector dimentions error.\\n\" + \"x: \" + str(x) + \"\\ny: \" + str(y))\n", + " if x.size != y.size:\n", + " raise Exception(\"Vector formats don't agree.\\n\" + \"x: \" + str(x) + \"\\ny: \" + str(y))\n", + " \n", + " sum = 0\n", + " for i in range(len(x)):\n", + " sum += x[i] * y[i]\n", "\n", - "This is not part of the template report for the course." - ] + " return sum" + ], + "execution_count": 0, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "Y-enWfBvcbRZ", + "id": "CDxXDYtrrQ-a", "colab_type": "code", "colab": {} }, "source": [ - "" + "class Tests(Tests):\n", + " def test_scalar_product(self):\n", + " with self.assertRaises(Exception):\n", + " scalar_product([1,2], [1,2,3])\n", + " with self.assertRaises(Exception):\n", + " scalar_product([[0,0],[0,0]], [[0,0],[0,0]])\n", + " with self.assertRaises(Exception):\n", + " scalar_product([\"s\",2], [1,3])\n", + " with self.assertRaises(Exception):\n", + " scalar_product(\"Hej\", [1,2,3])\n", + "\n", + " min_length = 1\n", + " max_length = 100\n", + " def genetator():\n", + " n = np.random.randint(min_length, max_length)\n", + " a = np.random.rand(n)\n", + " b = np.random.rand(n)\n", + " return scalar_product(a, b), a.dot(b)\n", + "\n", + " Tests.check_accuracy_multiple_random(1000, genetator, 7)" ], "execution_count": 0, "outputs": [] @@ -305,758 +242,207 @@ { "cell_type": "markdown", "metadata": { - "id": "I5Kf3qRyY5J5", + "id": "FNWnhrnD4jmh", "colab_type": "text" }, "source": [ - "# **Vector**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "SBKa3PEj0N9D", - "colab_type": "text" - }, - "source": [ - "In this cell some basic commands are introduced for how to define and process a vector, where the NumPy array data type is used. " + "### Matrix-vector product" ] }, { "cell_type": "code", "metadata": { + "id": "j7rPWYYP4iUV", "colab_type": "code", - "outputId": "47fb584b-290b-4c38-d419-44bb1af8d79c", - "id": "PbnT724f5mfQ", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 571 - } + "colab": {} }, "source": [ - "# Just a test\n", - "# Create a vector as a NumPy array\n", - "x = np.array([1,2,3,4])\n", - "\n", - "# Print various attributes of the vector\n", - "print('x =',x)\n", - "print('x[2] =',x[2])\n", - "print('x[0:2] =',x[0:2])\n", - "print('x.shape =',x.shape)\n", - "print('x.ndim =',x.ndim)\n", - "print('x.size =',x.size)\n", - "print('x.dtype =',x.dtype)\n", - "\n", - "# Print the elements of vector x\n", - "for i in range(x.size):\n", - " print(\"x[\",i,\"] =\",x[i])\n", - "\n", - "# Assign a float value to the int vector x\n", - "x[1] = 2.1\n", - "print('x =',x)\n", - "\n", - "# Copy the int vector x to a float vector xf\n", - "xf = x.astype(float)\n", - "xf[1] = 2.1\n", - "print('xf =',xf)\n", - "print('xf.dtype =',xf.dtype)\n", - "\n", - "# Create a complex vector \n", - "y = np.array([2,3,4], dtype=complex)\n", - "print('y =',y)\n", - "print('y.dtype =',y.dtype)\n", - "\n", - "# Create a vector z by defining a range through an increment\n", - "z = np.arange(12, 28, 4.5)\n", - "print('z =',z)\n", - "\n", - "# Overwrite the vector z by a vector of uniformly spaced elements in a range\n", - "pi=np.pi\n", - "pi\n", - "z = np.linspace(0, 2*pi, 5)\n", - "print('z =',z)\n", - "\n", - "# Visualize the vector in a plot. \n", - "plt.figure()\n", - "plt.plot(x,2*x,'ro-')\n", - "plt.show()" + "def matrix_vector_product(M, x):\n", + " if type(M) != np.ndarray:\n", + " try:\n", + " M = np.array(M)\n", + " except:\n", + " raise Exception(\"Matrix format error.\\n\" + \"M: \" + str(M))\n", + " if type(x) != np.ndarray:\n", + " try:\n", + " x = np.array(x)\n", + " except:\n", + " raise Exception(\"Vector format error.\\n\" + \"x: \" + str(x))\n", + "\n", + " if x.ndim != 1 or M.ndim != 2:\n", + " raise Exception(\"Matrix or vector dimentions error.\\n\" + \"M: \" + str(M) + \"\\nx: \" + str(x))\n", + " if M.shape[1] != x.size:\n", + " raise Exception(\"Matrix and vector formats don't agree.\\n\" + \"M: \" + str(M) + \"\\nx: \" + str(x))\n", + "\n", + " b = np.zeros(M.shape[0])\n", + " for i in range(M.shape[0]):\n", + " for j in range(M.shape[1]):\n", + " b[i] += M[i, j] * x[j]\n", + "\n", + " return b" ], - "execution_count": 3, - "outputs": [ - { - "output_type": "stream", - "text": [ - "x = [1 2 3 4]\n", - "x[2] = 3\n", - "x[0:2] = [1 2]\n", - "x.shape = (4,)\n", - "x.ndim = 1\n", - "x.size = 4\n", - "x.dtype = int64\n", - "x[ 0 ] = 1\n", - "x[ 1 ] = 2\n", - "x[ 2 ] = 3\n", - "x[ 3 ] = 4\n", - "x = [1 2 3 4]\n", - "xf = [1. 2.1 3. 4. ]\n", - "xf.dtype = float64\n", - "y = [2.+0.j 3.+0.j 4.+0.j]\n", - "y.dtype = complex128\n", - "z = [12. 16.5 21. 25.5]\n", - "z = [0. 1.57079633 3.14159265 4.71238898 6.28318531]\n" - ], - "name": "stdout" - }, - { - "output_type": "display_data", - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "trQVmLgAZGU7", - "colab_type": "text" - }, - "source": [ - "# **Matrix**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ADesgm5x01TF", - "colab_type": "text" - }, - "source": [ - "In this cell some basic commands for defining and processing a matrix\n", - "is introduced, where we use the NumPy array data type. " - ] + "execution_count": 0, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "QdJvGD6NZKNc", + "id": "53zAuKI06Ona", "colab_type": "code", - "outputId": "51b19be4-ebe9-4d11-c224-6fed6f4dc468", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 486 - } + "colab": {} }, "source": [ - "# Define a matrix as a NumPy array\n", - "A = np.array([[2,4,6], [3,6,9], [1,2,1]])\n", - "\n", - "# Print various attributes of the matrix \n", - "print('A =',A)\n", - "print('A[1,0] =',A[1,0])\n", - "print('A.shape =',A.shape)\n", - "print('A.ndim =',A.ndim)\n", - "print('A.size =',A.size)\n", + "class Tests(Tests):\n", + " def test_matrix_vector_product(self):\n", + " with self.assertRaises(Exception):\n", + " scalar_product([[0,0],[0,0]], [1,2,3])\n", + " with self.assertRaises(Exception):\n", + " scalar_product([[0,0],[0,0]], [\"Hej\", \"Hå\"])\n", "\n", - "# Plot the matrix\n", - "plt.figure()\n", - "plt.plot(A,'o-')\n", + " min_length = 1\n", + " max_length = 100\n", + " def genetator():\n", + " n = np.random.randint(min_length, max_length)\n", + " m = np.random.randint(min_length, max_length)\n", + " x = np.random.rand(n)\n", + " M = np.random.rand(m, n)\n", + " return matrix_vector_product(M, x), M.dot(x)\n", "\n", - "# Construct a simple sparse matrix class using the CRS data structure\n", - "class spMatrix:\n", - " def __init__(self, val, col_idx, row_ptr):\n", - " self.val = val\n", - " self.col_idx = col_idx\n", - " self.row_ptr = row_ptr\n", - " \n", - "# Create a sparse matrix object \n", - "val = np.array([3, 2, 2, 2, 1, 1, 3, 2, 1, 2, 3])\n", - "col_idx = np.array([1, 2, 4, 2, 3, 3, 3, 4, 5, 5, 6])\n", - "row_ptr = np.array([1, 4, 6, 7, 9, 10])\n", - "spA = spMatrix(val, col_idx, row_ptr)\n", - "\n", - "# Print sparse matrix object attributes\n", - "print('Sparse matrix values: \\n',spA.val)\n", - "print('Sparse matrix column indices: \\n',spA.col_idx)\n", - "print('Sparse matrix row pointer: \\n',spA.row_ptr)\n", - " " + " Tests.check_accuracy_multiple_random(1000, genetator, 7)" ], - "execution_count": 4, - "outputs": [ - { - "output_type": "stream", - "text": [ - "A = [[2 4 6]\n", - " [3 6 9]\n", - " [1 2 1]]\n", - "A[1,0] = 3\n", - "A.shape = (3, 3)\n", - "A.ndim = 2\n", - "A.size = 9\n", - "Sparse matrix values: \n", - " [3 2 2 2 1 1 3 2 1 2 3]\n", - "Sparse matrix column indices: \n", - " [1 2 4 2 3 3 3 4 5 5 6]\n", - "Sparse matrix row pointer: \n", - " [ 1 4 6 7 9 10]\n" - ], - "name": "stdout" - }, - { - "output_type": "display_data", - "data": { - "image/png": "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\nRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "idDHnPmv9c6H", - "colab_type": "text" - }, - "source": [ - "# **Function**" - ] + "execution_count": 0, + "outputs": [] }, { "cell_type": "markdown", "metadata": { - "id": "PwYg0g0-EH2J", + "id": "mEWh21BX8mzG", "colab_type": "text" }, "source": [ - "In this cell we illustrate how functions are defined. " + "### Matrix-Matrix product" ] }, { "cell_type": "code", "metadata": { - "id": "eDlRKNOK9fNo", + "id": "2UAZ0QxV8mLb", "colab_type": "code", - "outputId": "459c81fc-ff25-4d35-b84d-b44dd10f59f9", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 524 - } + "colab": {} }, "source": [ - "# Define a function f(x,y)\n", - "def f(x,y):\n", - " return x + y \n", - "\n", - "# Verify the function output\n", - "print('f(3,4) =',f(3,4))\n", - "\n", - "# Define a function of a function\n", - "def g1(fcn,arg1,arg2):\n", - " z = fcn(arg1,arg2)\n", - " print('z =',z)\n", - "\n", - "# Call the function\n", - "g1(f,6,7)\n", - "\n", - "# Define a function of a function with arguments in a list or array\n", - "def g2(fcn,arg):\n", - " z = fcn(*arg)\n", - " print('z =',z)\n", - " \n", - "# Call the function with arguments as list and array\n", - "xlist = [8,9]\n", - "xarray = np.array([11,3])\n", - "g2(f,xlist)\n", - "g2(f,xarray)\n", - "\n", - "# Define a function to format the print out for a matrix \n", - "def printMatrix(A):\n", - " rows = A.shape[0]\n", - " cols = A.shape[1]\n", - " for i in range(0,rows):\n", - " for j in range(0,cols):\n", - " print(A[i,j],\" \", end='')\n", - " print()\n", - "\n", - "# Define matrix \n", - "A = np.array([[1,2,3], [4,5,6], [7,8,9]])\n", + "def matrix_matrix_product(A, B):\n", + " def format_test(M, name):\n", + " if type(M) != np.ndarray:\n", + " try:\n", + " M = np.array(M)\n", + " except:\n", + " raise Exception(\"Matrix format error.\\n\" + name + \": \" + str(M))\n", "\n", - "# Verify the function output\n", - "print('A =', A)\n", - "print('A =')\n", - "printMatrix(A)\n", - "print('A^T =')\n", - "printMatrix(A.transpose())\n", - "\n", - "# Plot a Euclidian position vector v \n", - "def plotEVector(vec):\n", - " plt.figure()\n", - " plt.xlim([-1.5*vec[0], 1.5*vec[0]])\n", - " plt.ylim([-1.5*vec[1], 1.5*vec[1]])\n", - " plt.quiver(0, 0, vec[0], vec[1], scale=1, scale_units='xy', angles='xy')\n", - " plt.show()\n", - "\n", - "v = np.array([3,4])\n", - "plotEVector(v)\n", + " if M.ndim != 2:\n", + " raise Exception(\"Matrix dimentions error.\\n\" + name + \": \" + str(M))\n", + " format_test(A, \"A\")\n", + " format_test(B, \"B\")\n", + " \n", + " if A.shape[1] != B.shape[0]:\n", + " raise Exception(\"Matrix formats don't agree.\\n\" + \"A: \" + str(A) + \"\\nB: \" + str(B))\n", + " \n", + " \n", + " C = np.zeros((A.shape[0], B.shape[1]))\n", + " for i in range(A.shape[0]):\n", + " for j in range(B.shape[1]):\n", + " for k in range(A.shape[1]):\n", + " C[i, j] += A[i, k] * B[k, j]\n", "\n", - "\n" + " return C" ], - "execution_count": 5, - "outputs": [ - { - "output_type": "stream", - "text": [ - "f(3,4) = 7\n", - "z = 13\n", - "z = 17\n", - "z = 14\n", - "A = [[1 2 3]\n", - " [4 5 6]\n", - " [7 8 9]]\n", - "A =\n", - "1 2 3 \n", - "4 5 6 \n", - "7 8 9 \n", - "A^T =\n", - "1 4 7 \n", - "2 5 8 \n", - "3 6 9 \n" - ], - "name": "stdout" - }, - { - "output_type": "display_data", - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAD8CAYAAABq6S8VAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAVCUlEQVR4nO3de5BU9ZnG8ecVBkGuUUAUUKREQnML\n0kiIMWuiJiomxK21ikSN7gwzhmjEUsJtEGPWaDQUSLiII+0tEhIKQZQ7srOgRC4DAiISNLoqXuIQ\nY7wFBObdP6btRQRmhj4zp3/M91NFFf3rnt95Cp2Hd87p05i7CwAQruPiDgAAyA5FDgCBo8gBIHAU\nOQAEjiIHgMBR5AAQuEiK3MxamdkcM9tuZi+Z2YAo9gUAVK1hRPtMkrTE3f/DzBpJOiGifQEAVbBs\nbwgys5aSNknq7NxdBAB1LoqJ/AxJ5ZIeMrPekjZIGubunxz4IjMrklQkSU2bNu371a9+NYJDA0D9\nsWHDhl3u3ubg9Sgm8qSkNZLOdfe1ZjZJ0ofufuvhviaZTHpZWVlWxwWA+sbMNrh78uD1KC527pS0\n093Xph/PkXR2BPsCAKoh6yJ393clvWlmXdNLF0jalu2+AIDqiepdKz+XNDP9jpVXJf1nRPsCAKoQ\nSZG7+yZJXzpvAwCofdzZCQCBo8gBIHAUOQAEjiIHgMBR5AAQOIocAAJHkQNA4ChyAAgcRQ4AgaPI\nASBwFDkABI4iB4DAUeQAEDiKHAACR5EDQOAocgAIHEUOAIGjyAEgcBQ5AASOIgeAwFHkABA4ihwA\nAkeRA0DgKHIACBxFDgCBo8gBIHAUOQAELrIiN7MGZva8mS2Iak8AQNWinMiHSXopwv0AANUQSZGb\nWQdJAyXNiGI/AED1RTWR3ytphKSKiPYDgGrbs2ePtmzZEneM2GRd5GZ2maT33H1DFa8rMrMyMysr\nLy/P9rAA6rm33npLDzzwgH74wx+qQ4cO+uSTT+KOFJuGEexxrqQfmNmlkhpLamFmj7n7VQe+yN1L\nJJVIUjKZ9AiOC6Ae2b9/v9atW6eFCxdq4cKF2rRpU+a5WbNmacCAATGmi1fWRe7uoyWNliQzO1/S\n8INLHACOxvvvv69ly5Zp4cKFWrJkiXbt2vWl19x+++0aPHhwDOlyRxQTOQBE7oUXXtDAgQP15ptv\nHvY1V155pW699dY6TJWbIr0hyN3/x90vi3JPAPVTz5499eKLLx522v7GN76hGTNmyMzqOFnu4c5O\nADlp3759mjZtmubNm/el58444ww98cQTaty4cQzJcg+nVgDknM2bNys/P18bN27MrOXl5Wnv3r1q\n2bKlFi5cqDZt2sSYMLcwkQPIGbt379bYsWOVTCYzJd6lSxetXLlS/fr1U4MGDTRnzhx169Yt5qS5\nhYkcQE7485//rIKCAm3fvl2S1KBBAw0fPly33XabmjRpoo4dO+onP/mJLrzwwpiT5h6KHECsPv74\nYxUXF2vy5Mlyr7zFpHfv3kqlUurbt2/mdWPHjlWPHj3iipnTKHIAsVm2bJmKior0+uuvS5IaNWqk\ncePGacSIEcrLy/vCaynxw6PIAdS5f/zjH7r55pv18MMPZ9YGDBigVCrF+e+jwMVOAHVq7ty5SiQS\nmRJv2rSpfve73+mZZ56hxI8SEzmAOvHuu+/qhhtu0OOPP55Zu+iii1RSUqJOnTrFF+wYwEQOoFa5\nux555BElEolMibdq1UoPPfSQli5dSolHgIkcQK15/fXXdd1112np0qWZtcsvv1xTp07VKaecEmOy\nYwsTOYDIVVRUaMqUKerevXumxE8++WTNmTNHc+fOpcQjxkQOIFLbt2/XkCFDtHr16szaNddcowkT\nJujEE0+MMdmxi4kcQCT27t2rO++8U717986U+GmnnaYlS5bo4YcfpsRrERM5gKw9//zzys/Pz/yr\nPWam66+/XnfeeaeaN28ec7pjHxM5gKO2e/dujR49Wv369cuUeNeuXbVq1SpNnjyZEq8jTOQAjsqz\nzz6rgoIC7dixQ1Llh1yNGDFC48aN43PC6xhFDqBGPvroI40ePVpTp07NrPXp00epVEp9+vSJMVn9\nxakVANW2ZMkS9ejRI1Pixx9/vO666y6tXbuWEo8REzmAKv3973/XzTffrEcffTSz9s1vflMzZsxQ\n165dY0wGiYkcwBG4u+bMmaNEIpEp8WbNmmnKlClauXIlJZ4jmMgBHNI777yj66+//gv/+PH3vvc9\n3X///Tr99NNjTIaDMZED+AJ310MPPaREIpEp8RNPPFGPPPKIFi9eTInnICZyABmvvfaaioqK9PTT\nT2fWrrjiCk2ePFknn3xyjMlwJEzkALR//35NmjRJPXr0yJR4u3btNHfuXM2ePZsSz3FM5EA9t23b\n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\n38G7Ehu6AAAAAElFTkSuQmCC\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "hmpw8QnuzSSD", - "colab_type": "text" - }, - "source": [ - "# **Plot**" - ] + "execution_count": 0, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "6zmuvOqEzWfA", + "id": "bI2zuBOP9lIx", "colab_type": "code", - "outputId": "9fcffead-4fe8-4380-9c29-24bda6bf3ee0", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 423 - } + "colab": {} }, "source": [ - "# Define a range for a parameter t\n", - "t = np.arange( 0.0, 10, 0.5)\n", - "\n", - "# Initialize a new figure and set the size \n", - "plt.figure(2)\n", - "plt.figure(figsize=(12,6))\n", - "\n", - "# Define a subplot structure and choose the first subplot \n", - "plt.subplot(121)\n", - "\n", - "# Plot a standard NumPy function against the parameter t\n", - "plt.plot(t,np.cos(t))\n", - "\n", - "# Set plot labels and title for the subplot\n", - "plt.xlabel('x')\n", - "plt.ylabel('y')\n", - "plt.title('My plot: $y = cos(x)$')\n", - "\n", - "# Choose the other subplot\n", - "plt.subplot(122)\n", - "\n", - "# Plot three functions in the same subplot\n", - "plt.plot(t, np.sin(f(t,3)), 'g*', t, 0.03*t**2, 'ro', t, 0.1*t, 'b')\n", - "plt.axis([-1, 12, -2 ,3])\n", - "\n", - "# Show the figure\n", - "plt.show()" + "class Tests(Tests):\n", + " def test_matrix_matrix_product(self):\n", + " with self.assertRaises(Exception):\n", + " scalar_product([[0,0,0],[0,0,0]], [[0,0],[0,0]])\n", + " with self.assertRaises(Exception):\n", + " scalar_product([[0,0],[0,0]], [[\"Hej\"], [\"Hå\"]])\n", + "\n", + " min_length = 1\n", + " max_length = 100\n", + " def genetator():\n", + " i = np.random.randint(min_length, max_length)\n", + " j = np.random.randint(min_length, max_length)\n", + " k = np.random.randint(min_length, max_length)\n", + " A = np.random.rand(i, j)\n", + " B = np.random.rand(j, k)\n", + " return matrix_matrix_product(A, B), A.dot(B)\n", + "\n", + " Tests.check_accuracy_multiple_random(100, genetator, 7)" ], - "execution_count": 6, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - }, - { - "output_type": "display_data", - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuUAAAGFCAYAAABaJo05AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeXic5XX///fRLlnSyLIlL1oNeAEk\nL9gYKIQtgCFpQnYWNUtDqq+bhaTN0qTONzTwdZqktOmvLbhRG7I0SoASmtCExBAwECDGlvFusDG2\nVsvyps2WZC1z//54RrYQsi3ZGj2zfF7XpWs09zwzcySwfXTrnPuYcw4REREREfFPgt8BiIiIiIjE\nOyXlIiIiIiI+U1IuIiIiIuIzJeUiIiIiIj5TUi4iIiIi4jMl5SIiIiIiPlNSLiIiIiLiMyXlIiIi\nIiI+U1IuMc/Mas3sBr/jiARm9vdm9oVRXLfOzC6eiJhERERESbn4IJQk95rZ1GHrG83MmVmpP5HF\ndgJvZnnAx4Dvj+Ly+4F7wxuRiIiIDFJSLn7ZC9wxeMfMyoEM/8KJC58AnnTOdY/i2ieA68xsenhD\nEhEREVBSLv75L7xd20EfB34yeMfMvmxmvxj6BDP7FzP7/0Z6sdAO99fMbIeZtZrZD80s7RTXXmhm\nz5lZm5ltN7P3htb/CygG/tfMjprZV870RZhZppkNmNmMIWtlZtZsZllnev4ZXvuOUHxdZvammV0b\nWjcz+xszqwt9DY+aWSD02Hlm9hszO2RmHWb29JCXvAV4fsjrf9fMfjnk/j+Y2TNmluKc6wE2AMvO\n5WsQERGR0VFSLn5ZC2SHEuRE4Hbgp0Me/ylws5nlAJhZUuian7ztlU6qwEsizwfmAF8ffoGZJQP/\nCzwF5AOfA6rNbK5z7qNAPfAe51ymc+67oec8aGYPjvSGzrmjwOvAJUOWvw18yznXOeR9fx1KoEf6\n+PUIcX4xFP9HgUzgfUBt6OH78BLsy4HpQCrwjdBjPwGeBKaFvr6/G/Ky5cDOIfe/g7cbvsjMlgM3\nAx9wzvWGHn8NWDDS1y0iIiLjK8nvACSuDe6WP4+XADYNPuCcazazF4APA/+BlzAecs5tOM3r/Ztz\nrgHAzFYC/8rbE/PL8ZLcbzvngsCzoaT4Dt6awJ7gnPv0Gb6O9XhJ+W/M7GrgIuADw17jT8/wGieE\nar/vAd7hnNscWt4aemwa3g8SFzrnmkNrjwGfCl13PpAIJIZ2u18a8tI5wIkfFJxzh83se8CPgQBw\nlXOufcj1ncAMREREJOy0Uy5++i/gTrxa55F2wH8M/Fno8z8LXX86DUM+rwNmjnDNTKAhlJAPvbZg\nFPGeymBSDvBd4P8O2W0+GzcAW4ck5EO9I/TYviFrU4Hm0OcVwK3APjP7gZnlDrmuFRheUrMRbwf9\na4M/0AyRBbSd5dcgIiIiY6CkXHzjnKvDa/h8F/D4CJf8EphvZmXAnwLVZ3jJoiGfFwP7RrhmH1Bk\nZgnDrh3cpXejCH249cAlZvZBIA342fALzOy3oTr1kT5+O+zyXE6dDOcB7cPWbgVeBHDOPeuceyfe\nbv0CvB94Bm3BK+sZjKkcWIX3w88nR3ivC4GRfjAQERGRcaakXPx2F3C9c+7Y8AdC5ReP4SW565xz\n9Wd4rc+YWWFod3gF8MgI17wCdAFfMbPkUPPke4CHQ4+3AOeN8WvYjFfb/Y94O85vS+ydc7eE6tRH\n+rhl2OUbgavMbEGoqXO2mV0Yemw9cIWZnR9qMr0Xr378ITP7QOhaw9vlngxsGvK6TwLXAJhZAV5t\n/XLg00D5YCNp6PE0YDEwtFFUREREwkRJufjKOfemc67mNJf8GK+84kylK+Al708Be4A3gf83wvv1\n4iXhtwCHgAeBjznnXg9d8vfA10MNmF8CMLN/N7N/P83XcByv5rvWOTd813vMnHMvh2L/NV5d9/8A\n6aHHaoCVeDvjjXi72dc757qAq/Dq8zvxEvBvO+eeHfLSPwHeFTqp5Ungn5xzT4Se+w+h1x30HuC5\nYWUyIiIiEiY2wqaeSMQws2K8002mO+c6TnNdLfAp59zvJyq2Ie+dAuwGPuKcWzvR7z8WZvYt4IBz\n7p/PcN0rwF3OuW0TE5mIiEh80+krErFCdd9/DTx8uoQ8AtwDvBTpCTmAc+5vR3ndZeGORURERE5S\nUi4Rycwm4dV31+EdhxhxzOwSYA1eA+X7fQ5HJOKFehVewDtbPwl4zDl3j79RiYhEBpWviIjIhAg1\nIU9yzh0NDfJ6Efh8NPyWSUQk3LRTLiIiEyJ0MtHR0N3k0Id2hkRE0OkrIiIygcws0cw2AQeAp51z\nr/gdk4hIJIirnfKpU6e60tJSv8MQERmzDRs2HHLO5fkdx7lyzg0AC80sB/gfMysbesqPmVUClQCT\nJk1aPG/ePJ8iFRE5e2fzd3ZcJeWlpaXU1JzuSGwRkchkZnV+xzCenHNtZrYGr5F725D1KqAKYMmS\nJU5/Z4tINDqbv7NVviIiIhPCzPJCO+SYWTpwI94cAhGRuBdXO+UiIuKrGcCPzSwRb1PoUefcr32O\nSUQkIigpFxGRCeGc2wIs8jsOEZFIpPIVERERERGfKSkXEREREfGZknIREREREZ8pKRcRERER8ZmS\nchERERERnykpFxERERHxma9JuZk9ZGYHzGzbKR43M/sXM9ttZlvM7JIhj33czN4IfXx84qIWERER\nERlffu+U/whvxPKp3ALMDn1UAqsAzCwXuAe4DFgK3GNmk8MaqYiIiIhImPialDvnXgCOnOaSW4Gf\nOM9aIMfMZgDLgKedc0ecc63A05w+uT9rv9vWTHfvQDheWkREREQE8H+n/EwKgIYh9xtDa6dafxsz\nqzSzGjOrOXjw4JjefPeBTv6y+lX+5hdbcM6NLXIRERERkVGK9KT8nDnnqpxzS5xzS/Ly8sb03Avy\ns/jSTXN5YvM+/uMPe8IUoYiIiIjEu0hPypuAoiH3C0Nrp1ofd5++9nxuKZvOt3/7On94Y2w77SIi\nIiICVFdDaSkkJHi31dV+RxRxIj0pfwL4WOgUlsuBdudcM7AauMnMJocaPG8KrY07M+P+Dy9gdn4W\nn/v5RhqOdIXjbUR809bVy7q9R/jp2jru+dU27vyPtXz/+Tf9DktERGJFdTVUVkJdHTjn3VZWKjEf\nJsnPNzeznwPXAlPNrBHvRJVkAOfcvwNPAu8CdgNdwJ+HHjtiZvcB60Mvda9z7nQNo+dkUmoSVR9b\nzHv+9UX+4ic1PP7pPyEjxddvnciYtXf1setAJ7taOnmj5Si7WjrZ1XKUQ0ePn7gmMzWJSamJbKhr\n5cNLisidlOJjxCIiEhNWrICuYZuaXV3eekWFPzFFIF8zS+fcHWd43AGfOcVjDwEPhSOukZRMmcS/\n3LGIP//Rer7y2Bb+9Y5FmNlEvb3ImAwEHf+zsYltTe28ccBLvg92nky+J6UkcsG0LK6bm8ecaVnM\nnpbJ7GlZzAyksfvAUW783gtUr63jc++c7eNXISIiMaG+fmzrcUrbvWNw7dx8vrxsLt/93U7KCwL8\nn2vO9zskkRH96OVa7vv1DjJSEpmdn8k1c/KYE0q8Z+dnUpCTfsofKmdPy+LqOXn8ZG0d/+ea80lJ\n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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - } - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "M2LbkCoxNV8i", - "colab_type": "text" - }, - "source": [ - "# Triangular **mesh**" - ] + "execution_count": 0, + "outputs": [] }, { "cell_type": "markdown", "metadata": { - "id": "cnwG2HPEFcyL", + "id": "SsQLT38gVbn_", "colab_type": "text" }, "source": [ - "This cell describes how to generate a triangular mesh from a point cloud by the Delaunay algorithm. It also illustrates how to access the mesh data structures. " + "# **Results**" ] }, { "cell_type": "code", "metadata": { - "id": "4stcLbraNZPY", + "id": "G1hVxfti4Ib-", "colab_type": "code", - "outputId": "510d0a8f-75d5-47b4-8f73-439d9e1ef58b", + "outputId": "159525fa-e6f3-4acb-c401-f8b9d8ab9928", "colab": { "base_uri": "https://localhost:8080/", - "height": 1000 + "height": 102 } }, "source": [ - "# Start the clock \n", - "start = time.time()\n", - "\n", - "# Generate a point cloud\n", - "Nx = 5\n", - "Ny = 5\n", - "hx = 1.0/(Nx-1)\n", - "hy = 1.0/(Ny-1)\n", - "x = np.zeros((Nx*Ny))\n", - "y = np.zeros((Nx*Ny))\n", - "for i in range(Nx):\n", - " for j in range(Ny):\n", - " x[i*Nx + j] = j*hx\n", - " y[i*Nx + j] = i*hy\n", - "\n", - "# Generate a mesh from the point cloud using a Delaunay algorithm\n", - "mesh = tri.Triangulation( x, y )\n", - "\n", - "# Stop the clock\n", - "end = time.time()\n", + "suite = unittest.TestSuite()\n", + "suite.addTest(Tests('test_scalar_product'))\n", + "suite.addTest(Tests('test_matrix_vector_product'))\n", + "suite.addTest(Tests('test_matrix_matrix_product'))\n", "\n", - "# Print the measured time\n", - "print (\"Mesh generation took: \", end - start, \"seconds (wall-clock time)\")\n", - "\n", - "# Print mesh data structure\n", - "vertices = np.array([mesh.x, mesh.y])\n", - "print('vertices = \\n', vertices)\n", - "print('edges = \\n', mesh.edges)\n", - "print('triangles = \\n', mesh.triangles)\n", - "print('neighbor triangles = \\n', mesh.neighbors)\n", - "\n", - "# Plot the mesh \n", - "plt.figure(3)\n", - "plt.figure(figsize=(10,10))\n", - "plt.triplot(mesh, 'bo-', lw=1)\n", - "plt.title('Delaunay mesh')\n", - "plt.show()\n", - "\n", - "# Define a function g(x,y)\n", - "def g(x,y):\n", - " return np.sin(10*x)*np.cos(3*y)\n", - "\n", - "# Plot the function g(x,y) in a contour plot\n", - "plt.figure(4)\n", - "plt.tricontour(mesh, g(x,y), cmap=plt.cm.spectral)\n", - "plt.show()\n", - "\n", - "# Plot the function g(x,y) in 3D as a surface plot\n", - "fig = plt.figure(5)\n", - "ax1 = fig.add_subplot(111, projection='3d')\n", - "surf = ax1.plot_trisurf(mesh, g(x,y), cmap=plt.cm.coolwarm)\n", - "fig.colorbar(surf, shrink=0.5, aspect=10)\n", - "ax1.view_init(20,10)\n", - "plt.show()" + "if __name__ == '__main__':\n", + " runner = unittest.TextTestRunner()\n", + " runner.run(suite)" ], - "execution_count": 7, + "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ - "Mesh generation took: 0.005453824996948242 seconds (wall-clock time)\n", - "vertices = \n", - " [[0. 0.25 0.5 0.75 1. 0. 0.25 0.5 0.75 1. 0. 0.25 0.5 0.75\n", - " 1. 0. 0.25 0.5 0.75 1. 0. 0.25 0.5 0.75 1. ]\n", - " [0. 0. 0. 0. 0. 0.25 0.25 0.25 0.25 0.25 0.5 0.5 0.5 0.5\n", - " 0.5 0.75 0.75 0.75 0.75 0.75 1. 1. 1. 1. 1. ]]\n", - "edges = \n", - " [[ 1 0]\n", - " [ 2 1]\n", - " [ 3 2]\n", - " [ 4 3]\n", - " [ 5 0]\n", - " [ 5 1]\n", - " [ 6 1]\n", - " [ 6 5]\n", - " [ 7 1]\n", - " [ 7 2]\n", - " [ 7 3]\n", - " [ 7 6]\n", - " [ 8 3]\n", - " [ 8 7]\n", - " [ 9 3]\n", - " [ 9 4]\n", - " [ 9 8]\n", - " [10 5]\n", - " [11 5]\n", - " [11 6]\n", - " [11 7]\n", - " [11 10]\n", - " [12 7]\n", - " [12 11]\n", - " [13 7]\n", - " [13 8]\n", - " [13 9]\n", - " [13 12]\n", - " [14 9]\n", - " [14 13]\n", - " [15 10]\n", - " [15 11]\n", - " [16 11]\n", - " [16 15]\n", - " [17 11]\n", - " [17 12]\n", - " [17 13]\n", - " [17 16]\n", - " [18 13]\n", - " [18 17]\n", - " [19 13]\n", - " [19 14]\n", - " [19 18]\n", - " [20 15]\n", - " [21 15]\n", - " [21 16]\n", - " [21 17]\n", - " [21 20]\n", - " [22 17]\n", - " [22 21]\n", - " [23 17]\n", - " [23 18]\n", - " [23 19]\n", - " [23 22]\n", - " [24 19]\n", - " [24 23]]\n", - "triangles = \n", - " [[ 0 1 5]\n", - " [ 5 1 6]\n", - " [ 9 3 4]\n", - " [ 8 3 9]\n", - " [ 6 1 7]\n", - " [ 7 1 2]\n", - " [ 7 3 8]\n", - " [ 2 3 7]\n", - " [20 15 21]\n", - " [21 15 16]\n", - " [ 6 7 11]\n", - " [11 7 12]\n", - " [11 5 6]\n", - " [10 5 11]\n", - " [16 15 11]\n", - " [11 15 10]\n", - " [23 19 24]\n", - " [18 19 23]\n", - " [12 7 13]\n", - " [13 7 8]\n", - " [ 8 9 13]\n", - " [13 9 14]\n", - " [13 19 18]\n", - " [14 19 13]\n", - " [16 11 17]\n", - " [17 11 12]\n", - " [17 13 18]\n", - " [12 13 17]\n", - " [17 21 16]\n", - " [22 21 17]\n", - " [18 23 17]\n", - " [17 23 22]]\n", - "neighbor triangles = \n", - " [[-1 1 -1]\n", - " [ 0 4 12]\n", - " [ 3 -1 -1]\n", - " [ 6 2 20]\n", - " [ 1 5 10]\n", - " [ 4 -1 7]\n", - " [ 7 3 19]\n", - " [-1 6 5]\n", - " [-1 9 -1]\n", - " [ 8 14 28]\n", - " [ 4 11 12]\n", - " [10 18 25]\n", - " [13 1 10]\n", - " [-1 12 15]\n", - " [ 9 15 24]\n", - " [14 -1 13]\n", - " [17 -1 -1]\n", - " [22 16 30]\n", - " [11 19 27]\n", - " [18 6 20]\n", - " [ 3 21 19]\n", - " [20 -1 23]\n", - " [23 17 26]\n", - " [-1 22 21]\n", - " [14 25 28]\n", - " [24 11 27]\n", - " [27 22 30]\n", - " [18 26 25]\n", - " [29 9 24]\n", - " [-1 28 31]\n", - " [17 31 26]\n", - " [30 -1 29]]\n" + "...\n", + "----------------------------------------------------------------------\n", + "Ran 3 tests in 13.451s\n", + "\n", + "OK\n" ], - "name": "stdout" - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - }, - { - "output_type": "display_data", - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - }, - { - "output_type": "error", - "ename": "AttributeError", - "evalue": "ignored", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\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 42\u001b[0m \u001b[0;31m# Plot the function g(x,y) in a contour plot\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 44\u001b[0;31m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtricontour\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmesh\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcmap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspectral\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 45\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mAttributeError\u001b[0m: module 'matplotlib.cm' has no attribute 'spectral'" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } + "name": "stderr" } ] }, { "cell_type": "markdown", "metadata": { - "id": "lmSvJV4dYVN2", - "colab_type": "text" - }, - "source": [ - "# Parametric **curve**" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "fXevCzGfYZPj", + "id": "_4GLBv0zWr7m", "colab_type": "text" }, "source": [ - "This cell illustrates how to visualize a parametric curve." - ] - }, - { - "cell_type": "code", - "metadata": { - "id": "V9qqme4YYhrW", - "colab_type": "code", - "outputId": "95956611-dc71-4200-b054-2465a3a97631", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 248 - } - }, - "source": [ - "# Define paramter range\n", - "t = np.linspace(0, 4*np.pi, 100)\n", - "\n", - "# Define the curve\n", - "x = t*np.cos(t)\n", - "y = t*np.sin(t)\n", - "z = t\n", - "\n", - "fig = plt.figure(6)\n", - "ax = fig.gca(projection = '3d')\n", - "ax.plot(x, y, z)\n", - "plt.title('Parametric curve')\n", - "plt.show()" - ], - "execution_count": 8, - "outputs": [ - { - "output_type": "display_data", - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "tags": [] - } - } + "# **Discussion**" ] } ]