{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# EE16A Discussion 2A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing Matrices as Operations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This exercise is going to help you visualize matrices as operations. For example, when we multiply a vector by a rotation matrix, we will see it \"rotate\" in the true sense here. Similarly, when we multiply a matrix by a scalar matrix, we will see it \"scale\". The way we will see this is by applying the operation to all the vertices of a polygon and seeing how the polygon changes.\n", "Let's first do the necessary imports and define some useful functions to do this." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "\"\"\"Function that takes the vertices of a polygon and applies a matrix \"transformation\" to each of them, effectively\n", "\"transforming\" the polygon.\"\"\"\n", "def transform_the_polygon(polygon, T):\n", " \n", " transformed_polygon = []\n", " for point in polygon:\n", " transformed_point = np.dot(T, point)\n", " transformed_polygon.append(transformed_point)\n", " return transformed_polygon\n", "\n", "\"\"\"Function that plots a polygon in the x-y plane, given its vertices as x-y coordinates. The plot is defined in terms\n", "of line segments connecting all adjacent vertices of the polygon.\"\"\"\n", "def plot_the_polygon(polygon):\n", " fig = plt.figure(figsize=(5,5))\n", " ax = fig.add_subplot(111, xlim = [-4, 4], ylim = [-4, 4])\n", " for i in range(len(polygon) - 1):\n", " ax.plot([polygon[i][0], polygon[i+1][0]],\n", " [polygon[i][1], polygon[i+1][1]])\n", " ax.plot([polygon[i+1][0], polygon[0][0]], [polygon[i+1][1], polygon[0][1]])\n", " ax.grid(True)\n", " ax.axhline(y=0, color='k', linestyle = '--', linewidth = 2)\n", " ax.axvline(x=0, color='k', linestyle = '--', linewidth = 2)\n", " #plt.show()\n", "\n", "Re_y = np.array([[-1, 0], [0,1]])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we define our starting polygon, a square whose side is of length 1. Let's see what the square looks like." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nD0ByKD4Ayfk/LeqTVXy/QK8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "unit_square = [np.array([0,0]), np.array([1,0]), np.array([1,1]), np.array([0,1])]\n", "plot_the_polygon(unit_square)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 1: Rotation Matrices as Rotations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's rotate the square by some arbitrary angle, say, 60 degrees." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# R is a \"rotation matrix.\"\n", "angle = np.pi/3 # 60 degrees in radians\n", "R = np.array([[np.cos(angle), -np.sin(angle)],\n", " [np.sin(angle), np.cos(angle)]])\n", "rotated_square = transform_the_polygon(unit_square, R)\n", "plot_the_polygon(rotated_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And finally, we can \"reflect\" the square about the y-axis:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reflected_square = transform_the_polygon(unit_square, Re_y)\n", "plot_the_polygon(reflected_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Part 2: Commutativity of Operations" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The next natural question to ask is the following: Does the *order* in which you apply these operations matter?\n", "\n", "a) Let's see what happens to the unit square when we rotate the matrix by 60 degrees, and then reflect it along the y-axis." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# As the name indicates, R_60 rotates the matrix by 60 degrees.\n", "rotation_angle = np.pi/3 # 60 degrees in radians\n", "R_60 = np.array([[np.cos(rotation_angle), -np.sin(rotation_angle)],\n", " [np.sin(rotation_angle), np.cos(rotation_angle)]])" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "reflected_after_rotated_square = transform_the_polygon(unit_square, R_60)\n", "reflected_after_rotated_square = transform_the_polygon(reflected_after_rotated_square, Re_y)\n", "plot_the_polygon(reflected_after_rotated_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Now, let's reflect *before* rotating." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rotated_after_reflected_square = transform_the_polygon(unit_square, Re_y)\n", "rotated_after_reflected_square = transform_the_polygon(rotated_after_reflected_square, R_60)\n", "plot_the_polygon(rotated_after_reflected_square)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also scale the square: " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# S is a \"scalar matrix.\"\n", "S = np.array([[2, 0],\n", " [0, 2]])\n", "scaled_square = transform_the_polygon(unit_square, S)\n", "plot_the_polygon(scaled_square)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.5" } }, "nbformat": 4, "nbformat_minor": 1 }