{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "def plot_vectors(vecs, xlim, ylim):\n", " \"\"\"\n", " Plot set of vectors.\n", " @parm vecs [array-like] Coordinates of the vectors to plot. \n", " Each vector is in an array. For instance: \n", " [[1, 3], [2, 2]] can be used to plot 2 vectors.\n", " @return matplotlib.figure.Figure of the vectors\n", " \"\"\"\n", " plt.figure()\n", " plt.axvline(x=0, color='#A9A9A9', zorder=0)\n", " plt.axhline(y=0, color='#A9A9A9', zorder=0)\n", " plt.xlim(xlim[0], xlim[1])\n", " plt.ylim(ylim[0], ylim[1])\n", " \n", " vector_colors = ['#1190FF', '#FF9A13', '#000000'] # blue, orange, black\n", "\n", " for i in range(len(vecs)):\n", " x = np.concatenate([[0,0], vecs[i].flatten()])\n", " plt.quiver([x[0]], [x[1]], [x[2]], [x[3]],\n", " angles='xy', scale_units='xy', scale=1, \n", " color=vector_colors[i])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = np.array([[2], \n", " [1]])\n", "\n", "print('x =')\n", "print(x)\n", "\n", "plot_vectors([x], \n", " xlim=(-1, 4), ylim=(-1, 4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = np.array([[-1, 3], \n", " [ 2, -2]])\n", "x = np.array([[2], \n", " [1]])\n", "\n", "Ax = A@x\n", "\n", "print('A =')\n", "print(A)\n", "print('x =')\n", "print(x)\n", "print('Ax =')\n", "print(Ax)\n", "\n", "plot_vectors([x, Ax], \n", " xlim=(-1, 4), ylim=(-1, 4))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = np.array([[1], \n", " [1]])\n", "\n", "print('x =')\n", "print(x)\n", "\n", "plot_vectors([x], \n", " xlim=(-1, 7), \n", " ylim=(-1, 7))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = np.array([[5, 1], \n", " [3, 3]])\n", "x = np.array([[1], \n", " [1]])\n", "\n", "λ = 6\n", "Ax = A@x\n", "λx = λ*x\n", "\n", "print('A =')\n", "print(A)\n", "print('x =')\n", "print(x)\n", "print('Ax =')\n", "print(A@x)\n", "print(f'λ = {λ}')\n", "print('λx =')\n", "print(λx)\n", "\n", "plot_vectors([Ax, x], \n", " xlim=(-1, 7), \n", " ylim=(-1, 7))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = np.array([[ 1], \n", " [-3]])\n", "\n", "print('x =')\n", "print(x)\n", "\n", "plot_vectors([x], \n", " xlim=(-1, 3), \n", " ylim=(-7, 1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "A = np.array([[5, 1], \n", " [3, 3]])\n", "x = np.array([[ 1], \n", " [-3]])\n", "\n", "λ = 2\n", "Ax = A@x\n", "λx = λ*x\n", "\n", "print('A =')\n", "print(A)\n", "print('x =')\n", "print(x)\n", "print('Ax =')\n", "print(A@x)\n", "print(f'λ = {λ}')\n", "print('λx =')\n", "print(λx)\n", "\n", "plot_vectors([Ax, x], \n", " xlim=(-1, 3), \n", " ylim=(-7, 1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%precision 2\n", "from numpy.linalg import norm\n", "\n", "A = np.array([[5, 1], \n", " [3, 3]])\n", "x = np.array([[ 1], \n", " [-3]])\n", "\n", "x_normed = x/norm(x)\n", "\n", "λ = 2\n", "Ax_normed = A@x_normed\n", "λx_normed = λ*x_normed\n", "\n", "print('A =')\n", "print(A)\n", "print('x_normed =')\n", "print(x_normed)\n", "print('Ax_normed =')\n", "print(A@x_normed)\n", "print(f'λ = {λ}')\n", "print('λx_normed =')\n", "print(λx_normed)\n", "\n", "plot_vectors([Ax, x, x_normed], \n", " xlim=(-1, 3), \n", " ylim=(-7, 1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%precision 2\n", "\n", "import numpy.linalg\n", "\n", "A = np.array([[5, 1], \n", " [3, 3]])\n", "\n", "λ, v = np.linalg.eig(A)\n", " \n", "print(f'eigenvalues: {λ}')\n", "print('eigenvectors:')\n", "print(v)\n", "print()\n", "print(f'Av = {A@v[:, 1]}')\n", "print(f'λv = {λ[1]*v[:, 1]}')\n", "\n", "plot_vectors([Ax, x, v[:, 1]], \n", " xlim=(-1, 3), \n", " ylim=(-7, 1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }