{ "cells": [ { "cell_type": "markdown", "id": "cab29875", "metadata": {}, "source": [ "--- \n", " \n", "\n", "

Department of Data Science

\n", "

Course: Tools and Techniques for Data Science

\n", "\n", "---\n", "

Instructor: Muhammad Arif Butt, Ph.D.

" ] }, { "cell_type": "markdown", "id": "d31ffed4", "metadata": {}, "source": [ "

Lecture 4.3 (Linear Algebra for Machine Learning: Part-I)


\n", "\"Open" ] }, { "cell_type": "markdown", "id": "c9fff9cb", "metadata": {}, "source": [ "\n", "" ] }, { "cell_type": "markdown", "id": "47900344", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "id": "e996a5d6", "metadata": {}, "source": [ "## Learning agenda of this notebook\n", "\n", "**Section I: (Overview of Linear Algebra: Vectors)**\n", "1. Overview of Vectors \n", " - Scalars vs Vectors\n", " - Mathematical and Graphical Representation of Vectors in $\\mathbb{R}^2$\n", " - Mathematical and Graphical Representation of Vectors in $\\mathbb{R}^3$\n", " - Hands on Implementation in Python \n", "2. Magnitude of a Vector (Vector Norms)\n", "3. Direction of a Vector\n", "4. Components of a Vector\n", " - Components of a Vector in $\\mathbb{R}^2$\n", " - Components of a Vector in $\\mathbb{R}^3$\n", "5. Two Fundamental Vector Operations\n", " - Vector Addition\n", " - Multiplying a Vector with Scalar value\n", "6. Basis and Unit Vectors\n", "7. Linear combination and Span of Vectors\n", "8. Vector to Vector Multiplication\n", " - Vector Dot Product\n", " - Vector Cross Product\n", "\n", "**Section II: (Overview of Linear Alagebra: Matrices)**\n", "1. Overview of Matrices\n", "2. Matrices and its Types\n", " - Row Vector\n", " - Column Vector\n", " - Zero Matrix\n", " - Ones Matrix\n", " - Random Integer Matrix\n", " - Square Matrix\n", " - Symmetric Matrix\n", " - Triangular Matrix\n", " - Diagonal Matrix\n", " - Identity Matrix\n", " - Scalar Matrix\n", " - Orthogonal Matrix\n", "3. Matrix Operations\n", " - Matrix Addition\n", " - Matrix-Scalar Multiplication\n", " - Matrix Multiplication (Hadamard Product)\n", " - Matrix Multiplication (Dot Product)\n", " - Matrix-Vector Multiplication\n", " - Frobenius Norms\n", " - Transpose of a Matrix\n", " - Determinant of a Matrix\n", " - Inverse of a Matrix\n", " - Trace of a Matrix\n", " - Rank of a Matrix\n", "\n", "**Section III: (Solving System of Linear Equations)**\n", "1. An overview of Linear Equations\n", " - What is a Linear Equation?\n", " - What is a system of Linear Equations?\n", "2. How to solve a system of Linear Equations?\n", " - Substitution strategy\n", " - Elimination strategy\n", " - Graphing strategy\n", " - Consistent vs Inconsistent System of Linear Equations\n", " - Plotting a Linear Equation with Three Variables\n", " - Solving set of Three Linear Equations with Three variables\n", "3. Solving System of Linear Equations using Matrix Algebra\n", " - Writing a system of Linear Equations in Matrix form\n", " - Solving system of Linear Equations using Gaussian Elimination Method\n", " - Solving system of Linear Equations using Gauss Jordan Method\n", " - Solving system of Linear Equations using Cramer's Rule\n", " - Solving system of Linear Equations using Matrix Inverse Method\n", " - Limitations of Matrix Inversion Method\n", "4. Categories of System of Linear Equations\n", " - Standard systems\n", " - Overdetermined systems\n", " - Underdetermined systems\n", "5. Solving Inconsistent Overdetermined System of Linear Equations using Least Squares Method\n", " - Modeling Linear Equations in Machine Learning with `2` variables\n", " - Modeling Linear Equations in Machine Learning with `m` variables\n", " - Simple Linear Regression using Least Squares Method\n", " - Multiple Linear Regression using Ordinary Least Squares (OLS) Method\n", "\n", "\n", "**Section IV: (Linear Transformation and Matrices)**\n", "\n", "**Section V: (Eigen Decomposition and its Applications)**\n", "\n", "**Section VI: (Singular Value Decomposition and its Applications)**" ] }, { "cell_type": "code", "execution_count": null, "id": "d787763a", "metadata": {}, "outputs": [], "source": [ "# Unlike the other modules, we have been working so far, you have to download and install...\n", "# To install this library in Jupyter notebook\n", "import sys\n", "!{sys.executable} -m pip install -q --upgrade pip" ] }, { "cell_type": "code", "execution_count": 1, "id": "3587d30f", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import numpy.linalg\n", "import math\n", "import scipy\n", "from matplotlib import pyplot as plt\n", "from plot_helper import * # Helper functions: plot_vector, plot_linear_transformation, plot_linear_transformations" ] }, { "cell_type": "markdown", "id": "02af6b34", "metadata": {}, "source": [ "# Section 1: (Overview of Linear Alagebra: Vectors) \n", "Some of the codes of this notebook are adapted from:\n", "- [Jon Krohn's](https://github.com/jonkrohn).\n", "- [Frank Cleary's](https://gist.github.com/frankcleary).\n", "- [Engineers Code](https://github.com/engineersCode/EngComp4_landlinear)." ] }, { "cell_type": "markdown", "id": "1feba2dc", "metadata": {}, "source": [ "## 1. Overview of Vectors" ] }, { "cell_type": "markdown", "id": "e9a72e17", "metadata": {}, "source": [ "### a. Scalar vs Vectors\n", "\n", "- A quantity that has magnitude but no particular direction is called scalar. For example, length, speed, mass, density, pressure, work, power, temperature, area, volume.\n", "- A quantity that has magnitude as well as direction is called vector. For example, displacement, velocity, weight, force.\n", "- For example, to describe a body’s velocity completely, we will have to mention its magnitude and direction. This means that we will have to mention how fast it is going in terms of distance covered per unit time and describe what direction it is headed. So, if we say a car is moving at 40 km/hr. This statement only describes the speed of the body. If someone says a car is moving at 40 km/hr and is headed North. This statement is describing the velocity of the car. It tells us the magnitude by which the car is moving and the direction in which it is headed.\n", "\n", "\n", "\n", "- We come accross the concept of vectors in the domains of physics, engineering, mathematics, computer science and more. Each field's interpretation of what a vector is a bit different:\n", " - In **physics**, we represent a vector as an arrow of specific length, representing its magnitude; and drawn at a specific angle, representing its direction. It can represent directional quantities like velocity, force, acceleration.\n", " - In **computer science**, a vector is an ordered list of numbers, stored in order. For example the price, area and number of bedrooms in a house. Or may be the age, weight and blood pressure of a person.\n", " - In **mathematics**, vectors are generic objects that behave in a certain way, when they are added or scaled: $\\mathbf{u}+\\mathbf{v}$, $\\alpha\\mathbf{v}$.\n", "\n", "- Vectors can be 2-dimensional, 3-dimensional and so on to N-dimensional. The two and three dimensional vecgtors are pretty easy to visualize. If we are able to understand and visualize the vector operations in 2-dimensions, we can map the concepts to larger dimensions as well. For example, to model the age, weight, daily hours of sleep, weekly hours of exercise, and blood pressure of an individual, we need a five dimensional vector." ] }, { "cell_type": "code", "execution_count": null, "id": "931c5502", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a29bf5e9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ae5c7095", "metadata": {}, "source": [ "### b. Mathematical and Graphical Representation of Vectors in $\\mathbb{R}^2$\n", "#### Algebraically\n", "- Algebraically, vectors are often represented using a lowercase character, having comma separated list of numbers written horizontally or may be numbers written from top to bottom. \n", "- The **length** of the vector is the number of scalar values in the vector, and is also called the `order/rank/degree/dimension of the vector`. \n", "- For example, in $\\mathbb{R}2$ space, algebraically a vector $\\overrightarrow{\\rm v}$ can be written as:
\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = (a, b) = \\begin{bmatrix} a \\\\ b \\end{bmatrix} \\hspace{2 cm}\\overrightarrow{\\rm v} = (2, 5) = \\begin{bmatrix} 2 \\\\ 5 \\end{bmatrix}$\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = a\\hat{i} + b\\hat{j} \\hspace{3 cm} \\overrightarrow{\\rm v} = 2\\hat{i} + 5\\hat{j}$\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = a\\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} + b\\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix} \\hspace{1.5 cm} \\overrightarrow{\\rm v} = 2\\begin{bmatrix} 1 \\\\ 0 \\end{bmatrix} + 5\\begin{bmatrix} 0 \\\\ 1 \\end{bmatrix} $\n", "\n", "\n", "\n", "#### Graphically/Geometrically\n", "- One can think of a vector as a point in space. Graphically/Geometrically, vectors can be represented by a directed line segment in cartesian coordniate system, whose length is the magnitude of the vector and the angle represents its direction.\n", "\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "67dbbc98", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d64aded7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d31de3ff", "metadata": {}, "source": [ "### c. Mathematical and Graphical Representation of Vectors in $\\mathbb{R}^3$\n", "\n", "#### Algebraically\n", "\n", "- Algebraically, vectors of rank 3 consists of three scalar values written as comma separated list of numbers horizontally or may be from top to bottom. \n", "- The **length** of the vector is the number of scalar values in the vector, and is also called the `order/rank/degree/dimension of the vector`, in this case it is three. \n", "\n", "- Algebraically, in $\\mathbb{R}3$ space, a vector $\\overrightarrow{\\rm v}$ can be written as:
\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = (a, b, c) = \\begin{bmatrix} a \\\\ b \\\\ c \\end{bmatrix} \\hspace{5 cm}\\overrightarrow{\\rm v} = (2, 5, 3) = \\begin{bmatrix} 2 \\\\ 5 \\\\ 3 \\end{bmatrix}$\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = a\\hat{i} + b\\hat{j} + c\\hat{k} \\hspace{5 cm} \\overrightarrow{\\rm v} = 2\\hat{i} + 5\\hat{j} + 3\\hat{k}$\n", "\n", "$\\hspace{2 cm}\\overrightarrow{\\rm v} = a\\begin{bmatrix} 1 \\\\ 0 \\\\0 \\end{bmatrix} + b\\begin{bmatrix} 0 \\\\ 1 \\\\0 \\end{bmatrix} + c\\begin{bmatrix} 0 \\\\ 0 \\\\1 \\end{bmatrix} \\hspace{3 cm} \\overrightarrow{\\rm v} = 2\\begin{bmatrix} 1 \\\\ 0 \\\\0 \\end{bmatrix} + 5\\begin{bmatrix} 0 \\\\ 1 \\\\0 \\end{bmatrix} + 3\\begin{bmatrix} 0 \\\\ 0 \\\\1 \\end{bmatrix}$\n", "\n", "\n", "\n", "\n", "\n", "#### Graphically/Geometrically\n", "- A 3-D coordinate system has 3 dimensions or can be regarded as having 3 perpendicular axes: x, y, and z-axes. Such a system is called a 3-dimensional rectangular coordinate system.\n", "- Note, the third axis is the Z-axis, and all the three axis are perpedicular to each other.\n", "- The vector $\\overrightarrow{\\rm v}$ is shown in bold red having its three components a, b and c along the x, y and z axis respectively.\n", "- We can visualize vectors upto three dimensions, however, beyond three dimensions, we normally use algebraic notations." ] }, { "cell_type": "code", "execution_count": null, "id": "6f5e3581", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f07fe69d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a5c1609d", "metadata": {}, "source": [ "### d. Hands on Implementation in Python" ] }, { "cell_type": "markdown", "id": "67bbd2fb", "metadata": {}, "source": [ "**Example 1:** Creating Vector $[3,2]$ having tail at origin" ] }, { "cell_type": "code", "execution_count": 2, "id": "6e03dde5", "metadata": {}, "outputs": [ { "data": { "image/png": "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8/2QRSAQSJaUtX79etXV1SktLc3vCEfU1NSkL774glxxSiTXV199pcbGRvXo0UO1tbVtt6enp+u999475LYjqa+v73D5559/3na59K13pV6pumT4j1Qy46fKPKmP6urqjjqGV7rDPvSTjbmampr0ox/96HRJDa7r7vdijIDrul5s98gDBgKnS9rp66AA0HVyXNc9+gyiE0wcssgyMCYAdBXPOszEWRZfSFJWVpZWr16tM844w0CEw33xxRf6+c9/LknkikNnco0YMUI33HCDfvnLX7bddv311ys5OVlLly496v0bGho6XL59+3Zdf/31kqS1a9cqPz//qNv0Q3fah36wMdfBTN8+B7/wahwThRyVDvxynXHGGcrNzTUQ4XBpaWltv/DkOrrO5Lrkkku0c+fOtnVd19X27dt15513xnX/o60TCoXaLmdnZx/Xj5UfyBW/72bStx3mBc6ygG/mzp2rzZs366OPPpIkPfPMM0pKStL06dMNJwPswAdD4JsRI0Zo1apVKioqUkpKioLBoP785z979qEQ4HhDIcNXV155pa688krTMQArccgCACxBIQOAJShkALAEhQwAlvD9Tb1vP3IYKC0tdbOzs/0e/ohOP/10NTY2qry8XOQ6OhtznXrqqW2Xs7Ls+UCojY+VRK5EHMyUnp7u6dcEMkMGAEtQyABgCQoZACxBIQOAJShkALAEhQwAlqCQAcASFDIAWMKaQo7FYjr//PPVr18/01HU0tKi+fPn68ILL9TYsWM1dOhQXXHFFW3f42vKl19+qYULF+rCCy9UYWGhhg4dqnvvvVf793vy9xYTVlNTowsuuECFhYWmo+jqq69WQUGBKisrTUdRa2urFixYoLFjx+pf//qX6TiSpPXr12vcuHGaOHGiZs6cqWnTpmnHjh1GM23cuFGXXXaZxo4dq3HjxmnGjBnasGGD0UzfFwgEbg4EAm4gECj0YvvWfP3m0qVLtX37dvXp08d0FO3Zs0crV67UO++8o8zMTMViMRUVFamoqEhlZWXGcr3yyitav369tm3bpj59DvwV5WHDhqm1tVULFy40lkuS1qxZo0cffVRJSUnGMrzzzjttl5955hm9/fbbGj9+vKqrq4195/KOHTs0ZcoUnXXWWYrFYkYytKe4uFibNm3SBRdcoL///e964oknNGHCBL333nvq1auXkUyPPfaY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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# To better visualize and plot, you need to import following module/script having three helper functions\n", "# plot_vector(), plot_linear_transformation, plot_linear_transformations\n", "from plot_helper import *\n", "v = [(3,2)] # A list having a single tuple of two elements representing x and y component of vector\n", "plot_vector(v)" ] }, { "cell_type": "code", "execution_count": null, "id": "35d7f2c2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6ac6d23d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b0bf4944", "metadata": {}, "source": [ "**Example 2:** Creating four vectors, one in each quadrant having their tails at origin" ] }, { "cell_type": "code", "execution_count": 3, "id": "0803a471", "metadata": {}, "outputs": [ { "data": { "image/png": "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a9fOlnu2ufpi3vfNKeX2LS9cuBAPPPCAz991qKWQkBA89thjcLvdWLhwobQcR44cwZdffonJkyfrMp5WX3I6F8Di2i4QExNz5rPPPsOxY8c861mnT59GQUEBkpKS0LZtWyxfvtyvoWbMmIGnn366xuPFxcXIy8uDy+WCy+WCyWTyHKv43bpZWVno2LGjlFwVzp8/j/vuuw/Lli1D165d/ZqlulxCCPzt82NIXbsD/3FeXQsd3K0dXvx1EsqL/6PEvuKoqChYLBYUFRVVOr+goACtW7eWlOqq5lFN8N/398K9v30Wlu7DlPrm69TUVDRs2BAvvviitAwVysrKEBoa6jltNBrRtm1bZGVlScu0fft2XL58GQMHDoTL5QKADT8eet1gMFwC8LgQwn/v9muxdcObP9dvexNCiNTUVCW2vb311lvi1VdfrXTsyy+/FADE/v37peWy2+3CbreLPn36iK1bt3qOL1u2TLOx885dFPf+YZFnO1fT4c+ItbsOCLfbXSlXhQkTJojExETN8tRm2LBhlba9ud1uYbVaxaJFi6Tkudb27dsFAPHJ/oNi+Iyf7s8m9z4j3t35hXC73bpnmjdvnhg1apTYs2ePsNvtIiMjQ2RkZOieo0LHjh09f694brVv3148/vjj0jJdy263CwCtEOzb3lS0cuVKFBYWAgBKSkrwyiuvoFOnTrj99tulZSopKcGIESPQu3dvWK1WZGRkICMjA8uWLfP7WCIAP2331FNPVTr93nvvwWQyYcKECZISVdWssVmJT/ktXboU69atw6RJk5CTk4MjR45g69atOHbsmG4ZrpeVlYXt27d7Tn/88cfIyclR6vHTnBYt782fa2dW+fn5IjExUbRs2VI0bNhQJCYmilWrVvnvvzYvVfyvnJWVJaZOnSq6du0q+vfvL7p16ybGjRsnfvjhB90zXZtrwYIFnhng9X/8qbZZcXW57Ha72LJli0hMTBTR0dGicePGIjExUSxfvtyvuW7kzJkznvuje/fuYsCAAeKbb77RNcP1SktLRWJioujcubMAIHr06CEefPBBIYQQZwsvSpkt2+12YTQaq30eyXjdVUhPTxe9e/cWffv2FT179hQdO3YUGzdulJbnek8++aQAcPDH++orABuEn3uR36l3DRW/xwvQL5cQvn2vnGr31818p57WarqvfL3P9colm4q5+J16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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = [(3, 3), (-3, 1), (-3,-2),(3,-2)] # A list having four tuples of two elements each\n", "plot_vector(v) " ] }, { "cell_type": "code", "execution_count": null, "id": "b6416bda", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9b04b345", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fca3177e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f40487e5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0b086a9c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "013ac5c4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4930cb5d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "214668e1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a25e6cd6", "metadata": {}, "source": [ "**Example 3:** Creating a vector $[4,3]$ having its tail at $[2,2]$" ] }, { "cell_type": "code", "execution_count": 4, "id": "8b380e5c", "metadata": {}, "outputs": [ { "data": { "image/png": "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gSeeeALJycm47777sG/fPt2xgt577z1ER0cjNzdXdxQAwN69e/Hss8/ijjvuQM+ePdGvXz/k5eVpzVRXV4dp06bBMIxthmF8ahjGFsMwWv5jC5VSWv5t2LBBHT9+XMXFxanHH39cnfT444+rm266Seng9XrVhg0blNfrVW+++abq27evOn78uFJKqf/85z/K5XJpz3XS/PnzVfv27VW3bt20Z1q6dKm67rrr1LFjx5RSSpWWlqorrrhCPffcc5ZmWrlypQKgAKji4mK1ZMkS1blz5wbPmw5t2rRR7777rtqwYYM6duyYGjNmjLr22mtVbW2t1lxKKfXll1+qmJgYBUBt2LBBdxz19ddfq27duql58+Ypr9ervv32W5WamqreeustrbmeeeYZ1a1bNwXgUlX/h6F7AagDcINqwV7UeoZ85MgRlJSUYMiQIcFlQ4YMQV5eHo4ePaotl8/nw5QpU/DCCy8gOjoaAHDttddi9erV2jL9UFlZGRYtWoTx48frjgIA6NixI6ZMmYJLL70UQP2fT7rvvvvw1ltvWZrjlVdeafB9eno6fD4fFi9ebGmOU40YMSL4M26z2TBx4kR8+eWXKCgo0JoLAJ588kmMHj1ad4yg2bNno0+fPrjhhhsAABEREVi4cCEGDhyoNdfWrVvRu3dvKKWOA4BS6t8AjgMY1JLjaC3kjh07IiUlBTk5OfD5fPD5fMjJyYHT6Wzw99GstmXLFlRUVGDAgAENluv+oThp4sSJyMzMRGRkpO4oAIDbb78d48aNa7CsXbt2qKurszTHZ5991uB7m82GxMRErF+/3tIcp3r77bcbfN+uXTsAsPz5OdWqVasQERGBvn37as3xQ++++y6SkpIaLIuPj0enTp00Jap37733YuPGjTAMoysAGIaRBuByABUtOY72OeSVK1fi6NGj6NKlC7p06YK//vWvWLBgAS655BJtmYqKitC+fXusXbsWt956K376059i3LhxOHjwoLZMJ538Jbrtttt0R2nUpk2bgn892AqHDx9GVVXVactjY2Oxd+9ey3KEYtOmTejUqdNpxWMl0zQxY8YMZGZmastwKtM0sXfvXvj9fsyaNQu33nor0tLS8MEHH+iOhgceeABTp04FgO2GYRQD+BuA/wGwoiXH0VrIfr8fw4cPR4cOHVBSUoKSkhK89NJLuOqqq3TGwrFjx+D1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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = [(4,3)] # A list having a single tuple of two elements representing x and y component of vector\n", "tail = [(2,2)] # A list having a single tuple of two elements representing tail of vector\n", "plot_vector(v, tail) " ] }, { "cell_type": "code", "execution_count": null, "id": "3ad3084f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a546bca2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5f370fa4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1b3ca7f0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6e4bfb15", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "aa759796", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f752bf36", "metadata": {}, "source": [ "**Example 4:** Three vectors with their tails at $[2,2]$" ] }, { "cell_type": "code", "execution_count": 5, "id": "ed46f809", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = [(1, 3), (3, 3), (4, 6)] # A list having three tuples of two elements each\n", "tail = [(2, 2)] # A list having a single tuple of two elements\n", "plot_vector(v, tail) " ] }, { "cell_type": "markdown", "id": "06d4f1f8", "metadata": {}, "source": [ "**Example 5:** Three vectors with different tails" ] }, { "cell_type": "code", "execution_count": 6, "id": "651555b0", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = [(1, 3), (4, 4), (4, 6)]\n", "tails = [(3, 2), (-6, -6), (-1, 2)]\n", "plot_vector(v, tails) " ] }, { "cell_type": "markdown", "id": "76b365aa", "metadata": {}, "source": [ "**Example 6:** Translate above three vectors to origin" ] }, { "cell_type": "code", "execution_count": 7, "id": "d7b8fade", "metadata": {}, "outputs": [ { "data": { "image/png": "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MhGRJFjIRESSYCETEUlC90Let28fUlNT0b9/fyQmJuKRRx7B8ePH9Y4FAMjKykJycjKSkpJw8803Y/To0XpHcnO5XOjXrx9iYmL0joIzZ85g1qxZGDhwIJKTk9GrVy+88sorcDj88jmQXvnlL3+JpKQk5Ofn65bhstWrVyM9PR1TpkxBUlISRo4ciWPHjukdy23t2rUIDw9HTk6O3lEAAEePHsUf//hHPPDAA7j11lvRv39/5Obm6pqppqYG06ZNg6IoexVF+VJRlF2KorT+2xYKIXT5t3XrVnH+/HkRFRUlfve734nLfve734m77rpL6MFut4utW7cKu90uVq5cKfr27SvOnz8vhBDim2++ERaLRfdcly1cuFB06tRJREdH655pxYoVomfPnuLcuXNCCCGKi4vFDTfcIF5++WVNM61bt04AEABEYWGhWL58uYiMjKxzv+khODhYfPTRR2Lr1q3i3LlzYty4caJHjx6iurpa11xCCHHw4EHRpUsXAUBs3bpV7zji+++/F9HR0WLBggXCbreLixcvipSUFPHee+/pmuull14S0dHRAsA1ovaDoXsBqAFwh2jFXtT1DPnMmTMoKirCsGHD3MuGDRuG3NxcnD2r3we3OxwOvPDCC5g9ezbCw8MBAD169MCGDRt0y3SlkpISvP3223jqqaf0jgIA6Ny5M1544QVcc801AGo/PmnkyJF47733NM3x+uuv1/l+7NixcDgcWLZsmaY56ktPT3f/jBsMBkycOBEHDx7E7t27dc0FAH/4wx8wZswYvWO4zZ07F3369MEdd9wBAAgKCsLSpUsxePBgXXPt2bMHvXv3hhDiPAAIIf4L4DyAIa15HF0LuXPnzkhOTkZWVhYcDgccDgeysrJgNpvrfD6a1nbt2oWysjIMGjSoznK9fygumzhxIjIyMhAaGqp3FADAfffdhyeffLLOso4dO6KmpkbTHNu2bavzvcFgQEJCArZs2aJpjvrWrFlT5/uOHTsCgOb3T33r169HUFAQ+vbtq2uOK3300UdITEyssyw2NhZdu3bVKVGtRx99FNu3b4eiKN0BQFGUVADXAyhrzePoPkNet24dzp49i27duqFbt2745z//iSVLlqBDhw66ZSooKECnTp2wadMm3HPPPbj77rvx5JNP4uTJk7pluuzyL9Hw4cP1juLRjh073J8erIXTp0+j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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = [(1, 3), (4, 4), (4, 6)]\n", "tails = [(0, 0), (0, 0), (0, 0)]\n", "plot_vector(v, tails) " ] }, { "cell_type": "code", "execution_count": null, "id": "e0fad88f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4bc71cee", "metadata": {}, "source": [ "## 2. Magnitude of a Vector (Vector Norms)\n", "- The length of a vector is a `non-negative` number that describes the extent of the vector in space, and is sometimes referred to as the vector’s magnitude or the norm.\n", "- We can compute the magnitude of a 2-dimensional, 3-dimensional and so on to a n-dimensional vector using two ways:\n", " - By graphically drawing the vector in a coordinate system\n", " - By using different Vector Norms.\n", "\n", "\n", "\n", "#### L2 Norm\n", "- The most commonly used Norm that is used to calculate the magnitude of a vector is L2 Norm.\n", "- The L2 norm calculates the distance of the vector coordinate from the origin of the vector space. As such, it is also known as the `Euclidean norm` as it is calculated as the `Euclidean distance from the origin`. The result is a `positive` distance value. \n", "- The L2 norm is calculated as the `square root` of the sum of the squared vector values.\n", "\n", "

$\\left\\lVert x \\right\\rVert_2$ $=$ $\\sqrt{\\sum_{i=1}^n x_i^2}$

\n", "\n", "\n", "#### Squared L2 Norm\n", "- The squared L2 Norm is computationally cheaper to use as compared to L2 Norm.\n", "- The squared L2 Norm equals to the dot product of a vector with its transpose.\n", "- The squared L2 norm is calculated as the sum of the squared vector values.\n", "\n", "

$\\left\\lVert x \\right\\rVert_2$ $=$ $\\sum_{i=1}^n x_i^2$

\n", "\n", "\n", "\n", "\n", "#### L1 Norm\n", "- Another way to calculate the magnitude of a vector is using the L1 Norm. \n", "- The L1 norm is calculated as the sum of the absolute vector values. The L1 norm is also known as `taxicab norm` or the `Manhattan norm`.\n", "- In several machine learning applications, it is important to discriminate between elements that are exactly zero and elements that are small but nonzero. In such cases, we use the L1 norm.\n", "\n", "

$\\left\\lVert x \\right\\rVert_1$ $=$ $\\sum_{i=1}^n |x_i|$

\n", "\n", "\n", "\n", "\n", "\n", "#### Max Norm (L)\n", "- The length of a vector can be calculated using the maximum norm, also called max norm (L). Max norm of a vector is referred to as (L)\n", "- The max norm is calculated as returning the `maximum value` of the vector, hence the name.\n", "\n", "

$\\left\\lVert x \\right\\rVert_∞$ $=$ $\\max_{i=1}^n$ $|x_i|$

" ] }, { "cell_type": "markdown", "id": "6720f730", "metadata": {}, "source": [ "### Check your Concepts\n", "Determine the magnitude of following vectors:
\n", "- X = 20m, North\n", "- A = (-1, -2/3)\n", "- F = (4, 10)\n", "- V = (2, 5, 3)\n", "- T = (0, 2, -1)\n", "- $\\overrightarrow{\\rm AB}$ whose starting point is at A = (-1,0, 3) and ending point is B = (5,2,0)" ] }, { "cell_type": "markdown", "id": "e801198b", "metadata": {}, "source": [ "### Hands on Implementation in Python\n", "**Example:** Determine the magnitude of vector $\\overrightarrow{\\rm AB}$ whose starting point is at $A = (-2, 2)$ and ending point is $B = (2, 8)$" ] }, { "cell_type": "code", "execution_count": 8, "id": "dc512cf2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v = [4 6]\n", "L1 Norm = 10\n", "L2 Norm = 7.211102550927978\n", "Squared L2 Norm = 52\n", "L∞ = 6\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "# Translating the vector to origin\n", "a = np.array([-2, 2])\n", "b = np.array([2, 8]) \n", "v = np.array([b[0]-a[0], b[1]-a[1]]) # v = (4,6)\n", "\n", "# Plotting both the vectors\n", "vectors = [v, v ] # A list having two vectors\n", "tails = [[-2,2], [0,0]]\n", "plot_vector(vectors, tails) \n", "\n", "print(\"v = \", v)\n", "# calculating L1 norm\n", "l1 = numpy.linalg.norm(v, ord=1)\n", "l1 = np.abs(v[0]) + np.abs(v[1])\n", "print(\"L1 Norm = \",l1)\n", "\n", "# calculating L2 norm\n", "l2 = numpy.linalg.norm(v, ord=2)\n", "l2 = (v[0]**2 + v[1]**2 )**(1/2)\n", "print(\"L2 Norm = \",l2)\n", "\n", "# calculating Squared L2 norm\n", "sq_l2 = (numpy.linalg.norm(v, ord=2))**2\n", "sq_l2 = (v[0]**2 + v[1]**2 )\n", "print(\"Squared L2 Norm = \",sq_l2)\n", "\n", "# calculating Max norm\n", "maxnorm = numpy.linalg.norm(v, ord=np.inf)\n", "maxnorm = np.max([np.abs(v[0]), np.abs(v[1])])\n", "print(\"L∞ = \", maxnorm)" ] }, { "cell_type": "markdown", "id": "c1377732", "metadata": {}, "source": [ "> A vector having its tail at origin is called position vector" ] }, { "cell_type": "code", "execution_count": null, "id": "820b041b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c1f93617", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "dac3a48d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "41685ca8", "metadata": {}, "source": [ "## 3. Direction of a Vector\n", "- The direction of the vector v is the measure of the angle that it makes with the horizontal in the plane.\n", "- There are two commonly used units of measurement for angles. \n", " - **Degrees:** A circle is divided into 360 equal degrees, and a degree is further divided into 60 equal parts called minutes. So seven and a half degrees can be called 7 degrees and 30 minutes, written 7° 30'. Each minute is further divided into 60 equal parts called seconds, and, for instance, 2 degrees 5 minutes 30 seconds is written 2° 5' 30\". \n", " - **Radians:** The other common measurement for angles is radians. One radian is the angle made at the center of a circle by an arc whose length is equal to the radius of the circle. The circumference of a circle is 2π, so it follows that 360° equals 2π radians. \n", " \n", "\n", "\n", "\n", "- **Geometrically Measuring the Direction of a Vector**:\n", " - The most common way is to measure the angle by the counterclockwise movement with the positive x-axis. This way the angle is always positive. \n", " - Another way is to measure the smallest angle that a vector form along the horizontal axis. If it is measured clockwise the angle is written with a negative sign.\n", " \n", "- **Mathematically Measuring the Direction of a Vector**:\n", " - By using Inverse Tangent Formula:\n", "

$\\theta = tan^{-1} (y/x)$

\n", "\n", "- **Note:** \n", " - The inverse Tangent formula returns the angle in radians, which you can convert to degrees by multiplying it by 180/pi\n", " - The inverse Tangent formula gives the shortest angle from either the positive or negative x-axis in either clock-wise or counter-clockwise direction. " ] }, { "cell_type": "code", "execution_count": null, "id": "1154b829", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "73f481d4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f5e4b6e0", "metadata": {}, "source": [ "**Example 1:** Find the direction of a vector whose coordinates are $(4, 6)$" ] }, { "cell_type": "code", "execution_count": 9, "id": "88d5dfc4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v = [4 6]\n", "Angle in radians: 0.982793723247329\n", "Shortest angle from x-axis: 56.309932474020215\n", "Counter-Clockwise angle in degrees from positive x-axis: 56.309932474020215\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWQAAAFkCAYAAAAXG0EgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAB7CAAAewgFu0HU+AAAjyUlEQVR4nO3df1hUdb4H8PeZQZEZhuyaSQJCG1NIdyslFSMF1KI2g36s2rq4Vs9uWbZqbUuu5sY+endxvZuuF1sz2nDVDW2rzR9rqSW76/pjL3hTA1at/AHIEIk6cEB0Zr73D3JWFGEGmfP9Au/X8/Q8cM7M+b6bI+/n8JkfaEIIEBGRfCbZAYiIqBkLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJDJMJqmBWuatljTtH2apv1V07Q9mqY9LDsXkSqCZAegHuVlAA8BuEMIcUbTtCEAdmuaNlwIsU9uNCL5eIVMRroDwP8KIc4AgBDi/wCcATBGZigiVbCQyUjvAhiladogANA0LQ1AfwDVUlMRKYIjCzKMECJf0zQLgP2aplUBuBnAnwCs8+X+mqZFtnMTM5oL3gHAIYRwXU1eIqOxkMkwmqb9EMBsAAlCiC80TbsdwDgAHh8PUe7HclEAKvyMSCSVJoSQsvDGjRuFxWKByaTO1MTj8aChoQHM1T5/MwkhkJGRgYkTJyIzM9O7/YUXXsCQIUMwZcqUdo+Rmprqc76CggIMGDDA59sHmornEFAzl4qZgOZcY8aM0QK5hrQr5JCQEMTHx8NqtcqKcBld11FSUsJcPvA3U01NDerq6pCYmIiEhATv9m9/+9soKirCkiVL2j1GWVlZm/sdDoe3tO12O+x2e7vHNIqK5xBQM5eKmYDmXIEmrZDNZjOsVitsNpusCK1iLt/5k8lqtSI4OBinT59ucfuvv/4aoaGhPh0jLi6uzf2hoaHery0Wi1KPFaDmOQTUzKViJiOo8/sAdWsmkwlTp05FXl4eTp06BQDYu3cvtm7diokTJ0pOR6QGPqlHhlm8eDGys7MxduxYWCwW1NXVIScnBzNmzJAdjUgJLGQyjMViwa9//WvZMYiUxZEFEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIZOhvvzySzz66KNITU3FrbfeisTERBQVFcmORaQEFjIZpqamBmPHjsXMmTOxfft27Nu3DxaLBZ9//rnsaERKCJIdgHqOhQsXYuTIkRg9ejQAICgoCCtWrIDFYpGcjEgNLGQyzHvvvYesrKwW22JjY32+f0VFRZv7q6qqOpSLSBXSCtntdkPXdVnLt0rXdebykb+ZdF3HkSNHoOs6Jk6ciOPHj8NqteLZZ5/Fvffe69MxoqKifM7X0NCAuro6n28faCqeQ0DNXCpmAppz2Wy2gK4hrZAbGxtRWloKk0mdMbbH42EuH/mbqaamBgDwi1/8Aq+++ipiY2NRXFyMiRMnYuHChbjzzjs7Nd/hw4fhdDo79ZhXQ8VzeN7tRkl5DWKvC1Uql4qPFdCcKzw8PKBrSCvkkJAQxMfHw2q1yopwGV3XUVJSwlw+8DdTdXU1AGD8+PGYNGkSACAhIQGbNm3Ctm3b8PTTT7d7jLKysjb3OxwOpKamAgDsdjvsdnu7xzSKaufwpLMeU3L+gB+mjUBIiFuZXIB6j9UFRlyxSytks9kMq9Ua8F8B/MVcvvMnk8ViQXBwMGJiYlrc/qabbsLOnTt9OkZcXFyb+0NDQ1usp9JjBahzDj87Uon0ucvgqD2DP73yQ5R9dkCJXBdT5bEymjq/D1C3ZjabkZSUdNkTb9XV1Rg0aJCkVD3Pxl37MXJ6Do5UfY17EuJhCe4tOxJdhIVMhnnppZfwwQcf4Pjx4wCA0tJSbNmyBdOnT5ecrPsTQuDXb3+I9LnLUN/YBABIv+t2yanoUnzZGxnm3nvvxdKlS5GRkYHQ0FC4XC6sXLkS48ePlx2tWzt77jye+u9VWLV1t3ebpmkYP/I2iamoNSxkMlRmZiYyMzNlx+gxHLVn8PC832F36Zctto8YfCMG/EeYUi8NJBYyUbf11Skn0ucuw//+6+hl+zKSOK5QEWfIRN3U9deG4Z+/m4MdS7Mu28f5sZp4hUzUjZ0778K0xasBAPbI61Hf2ARLcG8Mjr5BcjJqDQuZqBubv2oTPjtyApqmIf+lJ3CoohoHvqyEpmmyo1ErWMhE3VTxwWP41ZrNAIAXJozDXf95ExLjb8RRx0nJyehKOEMm6obOnXfh8YVvwe3x4OaoAZj/ZAYAwGQy4VsD+0tOR1fCQibqhi4eVbyV9ThC+I68LoGFTNTNtDaqoK6BhUzUjVxpVEFdAwuZqBvhqKJrYyETdRMcVXR9LGSiboCjiu6BhUzUDXBU0T2wkIm6OI4qug8WMlEXxlFF98JCJurCOKroXljIRF0URxXdDwuZqAviqKJ7YiETdUEcVXRPLGSiLoajiu6LhUzUhXBU0b2xkIm6EI4qujcWMlEXwVFF98dCJuoCOKroGVjIRF0ARxU9AwuZSHEcVfQcLGQyXG5uLjRNQ2FhoewoyuOoomdhIZOhTpw4gUWLFsmO0WVwVNGzsJDJUD/+8Y8xZ84c2TG6BI4qep4g2QGo59iwYQN69eqFtLS0Dt2/oqKizf1VVVUdOq6KOKromaQVstvthq7rspZvla7rzOUjfzPpuo6f/exneP/991FfXw8AaGhoQF1dnc9rRkVF+Xxbf48daP4+XvNXb/aOKpY9NwGuc02oO9ckPZcRVMwENOey2WwBXUNaITc2NqK0tBQmkzpTE4/Hw1w+8jfTsmXLMG7cOFRWVsLhcAAADh06BIvFEpB8hw8fhtPpDMixO8Kfx+vgiVr85p2PAQATEm9BUEMtiotrpecyioqZgOZc4eHhAV1DWiGHhIQgPj4eVqtVVoTL6LqOkpIS5vKBP5k+/fRTlJeXIy8vDyaTCceOHQMA3HzzzUhISPB5zbKysjb3OxwOpKamAgDsdjvsdrvPxw40Xx+vc+ddmJ6/GB4hEBvRH//zwuMICe4lPZeRVMwEwJArdmmFbDabYbVaA/4rgL+Yy3e+ZiosLMS5c+eQkdE8Bz179iwAYM6cOejbty/y8vIQGxvb7npxcXFt7g8NDfV+bbFYlHqsAN8er3m//wClxxzQNA0rZz+J66/7DyVyGU3FTEbgk3oUcPPmzcO8efO83x89ehQ33ngjlixZgpSUFHnBFMNXVZA6AxqiHoyvqiCAhUwGmzVrFh577LHLvu7p+AYQAjiyIIMtWbJEdgTlcFRBF/AKmUgijiroYixkIok4qqCLsZCJJOGogi7FQiaSgKMKag0LmUgCjiqoNSxkIoNxVEFXwkImMhBHFdQWFjKRgRau3cpRBV0RC5nIIAdP1OLVP30CgKMKah0LmcgA5867sPCDXRxVUJtYyEQGWLh2K458dYajCmoTC5kowIoPHvOOKp7LGM1RBV0RC5kogC5+VUVUPxte/v79siORwljIRAF08RtAsjISA/rnmKjrYyETBcjFbwB5LmM0/jOqv+REpDoWMlEAXPoGEI4qyBcsZKIAuPyzKjiqoPaxkIk62d5D/KwK6hgWMlEnah5V5PMNINQhLGSiTjR/1SYc+LKSbwChDmEhE3USjiroarGQiToBRxXUGVjIRJ2AowrqDCxkoqvEUQV1FhYy0VXgqII6U5DsANRzrFu3Dnl5eXC73XA6nYiJicGiRYsQExMjO1qHcVRBnYlXyGSYzMxM/OQnP8HHH3+MPXv2ICQkBPfddx+amppkR+sQjiqos7GQyTAZGRlIS0sDAJhMJsyYMQMHDx7E3r17JSfzH0cVFAgsZDLMO++80+L7Pn36AECXvELmqIICgTNkkmbXrl0YOHAgkpKSfLp9RUVFm/urqqo6I1a7OKqgQJFWyG63G7quy1q+VbquM5ePrjZTU1MTFi5ciEWLFuHs2bM4e/Zsu/eJiory+fgNDQ2oq6vrULa2nDvvwg9++Xu4PR7ERvRH1oSxPq2j4jkE1MylYiagOZfNZgvoGtIKubGxEaWlpTCZ1JmaeDwe5vLR1WbKycnBXXfdhYEDB6K4uLjT8x0+fBhOp7PTj/v7T/ah5FgVNAAz0+5A6Wf7fbqfiucQUDOXipmA5lzh4eEBXUNaIYeEhCA+Ph5Wq1VWhMvouo6SkhLm8sHVZHrllVcQGRmJxYsX+3W/srKyNvc7HA6kpqYCAOx2O+x2u1/Hb8+nX1Tgj/9ozvDcQ8mY+tB9Pt9XxXMIqJlLxUwADLlil1bIZrMZVqs14L8C+Iu5fNeRTDk5OaiursaqVatgMpm8V8cJCQnt3jcuLq7N/aGhod6vLRZLpz5W5867MP1/1nlfVbFw2gS/n8hT8RwCauZSMZMR+KQeGWb58uVYvXo18vLyvC9127hxI2JiYnwqZJn4qgoyAguZDFFXV4fp06fD4/Fg5MiRLfa99dZbklL5hq+qIKOwkMkQNpsNbrdbdgy/8Q0gZCR1nsIkUhBHFWQkFjLRFXBUQUZjIRO1gqMKkoGFTNQKjipIBhYy0SU4qiBZWMhEF+GogmRiIRNdhKMKkomFTPQNjipINhYyETiqIDWwkInAUQWpgYVMPR5HFaQKFjL1aBxVkEpYyNSjcVRBKmEhU4/FUQWphoVMPRJHFaQiFjL1SBxVkIpYyNTjcFRBqmIhU4/CUQWpjIVMPQpHFaQyFjL1GBxVkOpYyNQjcFRBXQELmXoEjiqoK2AhU7fHUQV1FSxk6tY4qqCuhIVM3RpHFdSVsJCp2+KogroaFjIZ6v3338ewYcMwatQoJCcno6SkJCDrnOeogrqgINkBqOf45z//ialTp6K4uBh2ux1/+MMfkJaWhrKyMthstk5d67UNf+eogrocXiGTYXJycvDAAw/AbrcDADIzM+FyuZCfn9/pa63Y9A8AHFVQ18JCJsN8/PHHuPPOO73fm0wmJCQkYNu2bZ2+loejCuqCDB9ZaJoWBCB83bp1qKysRGhoqNERrqi+vh41NTXM5QN/M506dQpOpxO9evVCRUWFd7vNZsO+fftabLuSqqqqNvdXV1f/+5tzjVj4gzScrPmq3eMaQcVzCKiZS8VMQHOuwYMHRwJwCCFcgVhDE0IE4rhXXlDTIgGUG7ooEVHniRJCtH8F0QEyRhbhEtYkIuosAeswGa+yqAGA8PBwrFy5EoMGDZIQ4XI1NTWYOHEiADBXOzqaafjw4XjmmWfwxBNPeLc9/fTTCAoKwrJly9q9v8PhaHP/oUOH8PTTTwMAVq9ejYSEBJ9yBZqK5xBQM5eKmYB/5/rm32BNoNaRUchuoPmHa9CgQYiLi5MQ4XKhoaHeH3jmaltHM40bNw7l5eXe2wshcOjQIcydO9enY7R3G6vV6v06IiJCiccKUPMcAmrmUjET0DIXvumwQOCrLMgws2fPxqZNm/D5558DANasWQOz2YypU6dKTkakBr4xhAwzfPhw5Ofn47HHHkNISAhMJhM++uijTn9TCFFXxUImQz388MN4+OGHZccgUhJHFkREimAhExEpgoVMRKQIFjIRkSIMf1Lvm7ccaoWFhSIiIsLo5a8oMjISTqcTxcXFYK62qZgJAG644Qbv1+Hh6rwhVNXHS8VcKmYC/p3LZrNpgVyHV8hERIpgIRMRKYKFTESkCBYyEZEiWMhERIpgIRMRKYKFTESkCBYyEZEipBfy/v37kZaWhsTERCQlJeGRRx7BsWPHZMcCABQUFCAlJQXJycm46aabMGnSJNmRvDweD0aMGIGYmBjZUVBbW4vs7GzcfffdSElJwZAhQ/DLX/4SLldA/g6kT77//e8jOTkZJSUl0jJcsG7dOmRkZOCFF15AcnIyJkyYgKNHj8qO5fX+++8jLCwMhYWFsqMAAI4cOYKf//zneOCBB3DrrbciMTERRUVFUjM1NTVh9uzZ0DRtn6Zpf9U0bY+maZ3/sYVCCCn/bd++XZw5c0ZERUWJ559/Xlzw/PPPizvvvFPI4HQ6xfbt24XT6RSrV68Ww4cPF2fOnBFCCPGvf/1L2Gw26bkuWLp0qejbt6+Ijo6WnmnVqlVi8ODB4vTp00IIISoqKsT1118vXnnlFUMzrV+/XgAQAERZWZlYuXKliIiIaPG4ydCrVy/x3nvvie3bt4vTp0+LKVOmiFtuuUWcPXtWai4hhDh48KAYMGCAACC2b98uO4746quvRHR0tFiyZIlwOp3i/PnzIjU1Vbz99ttSc7388ssiOjpaALhGNP9h6CEAmgDcLjqxF6VeIdfW1qK8vBzjxo3zbhs3bhyKiopw6tQpablcLhdefPFFzJ8/H2FhYQCAW265BRs3bpSW6WKVlZV488038dRTT8mOAgDo168fXnzxRVxzzTUAmv980oQJE/D2228bmuO1115r8X1mZiZcLhfy8/MNzXGpjIwM779xk8mEGTNm4ODBg9i7d6/UXADw05/+FJMnT5Ydw2vhwoUYNmwYbr/9dgBAUFAQVqxYgdGjR0vN9emnn2Lo0KEQQpwBACHE/wE4A2BMZ64jtZD79euHlJQUFBQUwOVyweVyoaCgAFartcXfRzPanj17UF1djVGjRrXYLvsfxQUzZsxATk4OQkJCZEcBANx///148sknW2zr06cPmpqaDM2xY8eOFt+bTCYkJCRg27Zthua41DvvvNPi+z59+gCA4Y/PpTZs2ICgoCAMHz5cao6Lvffee0hKSmqxLTY2FgMHDpSUqNmjjz6KnTt3QtO0QQCgaVoagP4AqjtzHekz5PXr1+PUqVOIjIxEZGQk/vznP2P58uXo3bu3tEylpaXo27cvtmzZgnvuuQd33XUXnnzySZw4cUJapgsu/BDdd999sqO0adeuXd6/HmyEkydPor6+/rLt4eHhOHLkiGE5fLFr1y4MHDjwsuIxkq7rmDt3LnJycqRluJSu6zhy5AjcbjcWLFiAe+65B2lpadi8ebPsaHj88ceRlZUFAPs1TSsD8BcAfwKwrjPXkVrIbrcb6enpuPbaa1FeXo7y8nK8+uqruPHGG2XGwunTp+F0OrF8+XKsX78ef//736FpGkaPHo2zZ89Ky1VfX485c+ZgyZIl0jL44pNPPkFFRQVefvllw9ZsaGhodXtwcPAV98nQ1NSERYsWITc3F7169ZKWY968eZg2bZpSn4p3+vRpAMCCBQvw2GOPYevWrcjKysKDDz6IrVu3Ss2Wl5eHxYsXA0CCEGIwgKEAdgPwdOY6ASlkTdNyNE0Tbf13/PhxbN68GYWFhfjVr36FXr16oVevXkhLS8PYsWPxxRdfdHqub54lveJ/YWFhOH78OMxmM9xuN7KyshASEgKz2Yz58+fjiy++CMgc2ddcCxYswLRp01p8zGQgtZUrLCwMqampOHToUIv7VFZW4tlnn8UHH3zgnb8bwWKxtLq9qanpivtkmDlzJiZNmiT17wru3bsXe/bswbRp06RlaI3ZbAbQPAKLjY0FAIwdOxZjxozBb3/7W2m5hBDIysrCE088ASHEF99s2wfgOwDmdOZagfo85F8CyG3rBhEREeU7d+5EUFBQi889jYqKgtvtxsaNGzFz5sxODTVnzhw899xzV9xfX1+PyspK72zv4lwDBw5EUFBQQH799TXX3/72Nxw4cMA7kzx69CgcDgdSUlIQGxuLvLw8w3LV19fjwIED+Na3vuXddvLkSTz00EN4/fXXcccdd3Rqlvb069cPNpsNdXV1LbY7HI4WGWVasWIFLBYL5s+fLzXHpk2b0NjYiDFjxsDtduPkyZMAgFmzZqFv377Iy8vzFqKR+vfvj+Dg4MvmxdHR0di5c6fheS6oqanBqVOnMGjQoEt3HQHwKIAFnbVWQApZCOEE4GzrNoWFhbjhhhvgcrnw9ddf47rrrgPQ/D/vcrkCclUTFhbW5lVbXV0dHA6Hd7ZXVVWFm2++GUDzK0JcLldrJ8WwXDt37oTNZvNuz87ORn5+fsBeP9pWrguZgoKCvN+np6fjlVdeQXJyMoDmAjLylSBJSUn48MMPvd8LIbB3717MnTvXsAxX8uqrr+Krr77Cu+++CwAoLi4GACQkJBieZd68eZg3bx6A5vO2adMmfO9738OSJUuQkpJieJ4LzGYzkpKS4HA4Wmyvrq4OyM+dr6677joEBwejuvqy5+9uANCp8zCpM+S0tDQMGDAAixYt8m7LyclBWFiY1CetoqKiMHnyZOTm5sLjaR4RLV68GNHR0Rg/fry0XKo6e/Ys0tPTMXLkSISHh6OoqAhFRUV4/fXXDc3x7LPPtvh+zZo1MJvNmDp1qqE5LrV8+XKsXbsWjzzyCD799FMUFRVhw4YNOHDggNRcKnrppZewadMmb/mVlpZiy5YtmD59urRMJpMJU6dOxcqVK6Fp2rUAoGnaUAD3oJOf1JP6xhCn0yn2798v7rvvPjFixAgxbNgwkZqaKnbt2tU5r+b208Vvdqivrxc/+tGPxG233SbuvvtukZ6eLj7//HPpuYQQoqqqSiQnJ4vo6GgRHBwskpOTxVtvvSUtU25urvcNGZf+Z6Ty8nLvukOHDhWjR48Wn332maEZLuV0OoXJZGr1sTH6nLXmmWeeEYMHDxYAxO233y4mTZokO5JYsWKFiI2NFSNHjhSJiYmioKBAdiSh67qYOXOmALAXwA4A+wC8AEATndiLmmh+14nhCgsLRUJCQotfwWWrq6tDcXExmKt9KmaqqKhAVFQUAKCsrAxxcXGSE/2bio8XoGYuFTMBzbn4N/WIiHoIw//qNPU8tbW1WLp0KbZt24agoCCcOXMGEyZMQFZWlvdJQSJiIZMB/vKXv2DdunXYtWsXrrnmGlRWVmLo0KE4d+4csrOzZccjUgZHFhRwqnz4EJHqeIVMAXf//fdftq0jHz5UUVHR5v6qqiq/jkekGmmF7Ha7oeu6rOVbpes6c/noajPt2LEDDz300GXvrGvLhVdQ+KKhocGvYweaiucQUDOXipmA5lyBftWHtEJubGxEaWkpTCZ1piYej4e5fHQ1mfbu3YujR49i3rx53nesdbbDhw/D6WzzzaKGUvEcAmrmUjET0Jwr0B/GJK2QQ0JCEB8fL/Vzjy+l6zpKSkqYywe6rmPWrFlYu3Ztm7crKiryvv0cAE6cOIHly5fj3XffxW233ebXmmVlZW3udzgcSE1NBQDY7XbY7Xa/jh9IKp5DQM1cKmYCYMgVu7RCNpvNsFqtSr3wG2Auf0yZMgXZ2dkIDQ294m3Cw8O9L207efIkMjMz8cYbb3Tos4Dbe6PHxTksFotSjxWg5jkE1MylYiYj8Ek96jCr1YqIiAiffmhU+PAhItWpM6ChbkuVDx8iUh2vkCng3nzzTRQWFqKwsBC/+c1vZMchUhavkCngpk+ffsVPtyKif2MhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIRkSJYyEREimAhExEpgoVMRKQIFjIZyuPxYMSIEYiJiZEdhUg5LGQy1LJly3Do0CHZMYiUxEImw1RWVuLNN9/EU089JTsKkZKCZAegnmPGjBnIycnB7t27O3T/ioqKNvdXVVV16LhEqpBWyG63G7quy1q+VbquM5eP/M20efNmAEBSUhL++te/QgiBuro6v9aMiory+bYNDQ1+Hz+QVDyHgJq5VMwENOey2WwBXUNaITc2NqK0tBQmkzpTE4/Hw1w+8idTY2MjZs+ejUWLFqG4uBhVVVVoampCcXFxwPIdPnwYTqczYMf3l4rnEFAzl4qZgOZc4eHhAV1DWiGHhIQgPj4eVqtVVoTL6LqOkpIS5vKBruuYNWsW1q5d2+btioqK8M4772D69Om49957AQAfffQRgoODkZCQ4NeaZWVlbe53OBxITU0FANjtdtjtdr+OH0gqnkNAzVwqZgJgyBW7tEI2m82wWq0B/xXAX8zluylTpiA7OxuhoaFXvE14eDh27NiBAwcOYMOGDQCAo0ePorq6Gg8++CBiY2ORl5fn03pxcXFt7r84h8ViUeqxAtQ8h4CauVTMZAQ+qUcdZrVaERER0e4Pzb59+1p8n52djfz8fBQWFgYwHVHXo86Ahoioh2Mhk2EcDgdSUlKQn5/f4msiasaRBRkmPDycYwqiNvAKmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkIiJFsJCJiBTBQiYiUgQLmYhIESxkMkxBQQFSUlKQnJyMm266CZMmTZIdiUgpQbIDUM+wZs0aLF26FFu3bkVYWBgOHjyIYcOGyY5FpBQWMgWcy+XCiy++iJUrVyIsLAwAcMstt2Djxo2SkxGphSMLCridO3eiuroao0aNarF99OjRkhIRqYlXyBRwn332Gfr27YstW7YgNzcXuq4jLi4OCxYswMCBA30+TkVFRZv7q6qqrjYqkVTSCtntdkPXdVnLt0rXdebykT+ZHA4HnE4ncnNzsWbNGvTu3RszZszA3XffjT179qBPnz4+rRkVFeVzvoaGBtTV1fl8+0BT8RwCauZSMRPQnMtmswV0DWmF3NjYiNLSUphM6kxNPB4Pc/nI4/Hgd7/7Hd599902b7dy5Uo4HA643W585zvfQWlpKQAgPT0dq1atwmuvvYbk5OROz3f48GE4nc5OP25HqXgOATVzqZgJaM4VHh4e0DWkFXJISAji4+NhtVplRbiMrusoKSlhLh/ouo4f/OAHmDNnDiwWyxVvN2DAADQ1NeGNN95AcnIy7Ha7d19QUBDMZjMSEhJ8WrOsrKzN/Q6HA6mpqQAAu93eYi3ZVDyHgJq5VMwEwJArdmmFbDabYbVaA/4rgL+Yy3dhYWGw2+3tZkpLSwMA1NXVeW9bW1sLl8vl0/0viIuLa3N/aGio92uLxaLUYwWoeQ4BNXOpmMkI6vw+QN3WoEGDMHnyZOTm5sLj8QAAFi9ejOjoaIwfP15yOiJ1sJDJECtWrMC1116LIUOGYNSoUdi/fz8+/vhjpX4lJZKNL3sjQ1itVqxYsUJ2DCKl8QqZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkImIFMFCJiJSBAuZiEgRLGQiIkWwkMkQ+/fvR1paGhITE5GUlIRHHnkEx44dkx2LSCksZAo4IQTGjx+PW2+9Fbt378Y//vEPxMTE4Lvf/a7saERKYSFTwNXW1qK8vBzjxo3zbhs3bhyKiopw6tQpicmI1MJCpoDr168fUlJSUFBQAJfLBZfLhYKCAlitVlitVtnxiJQRJDsA9Qzr16/H5MmTERkZCQBoaGjA8uXL0bt3b5+PUVFR0eb+qqqqq8pIJJu0Qna73dB1XdbyrdJ1nbl85E8mt9uN9PR0REREoLS0FADwxz/+EQMGDEBdXZ3Pa0ZFRfl824aGBr+OHWgqnkNAzVwqZgKac9lstoCuoQkhAroAdV+apuUAeKmdmw0GEAfgfQCRQojKb+4bBeAwgFuFEF/4uJ4//1ijhBBtX1ITKYaFTB2maVoYgLB2buYA8AKA/xJC9Lrk/ucBvCiE+K2P60W2cxMzgP7frOkQQrh8OS6RKjhDpg4TQjgBONu7naZplQCCNE27Tgjx9Tfb+qP531+DH+v5csXLFzdTl8VXWZARNgGoBvDTi7bNRnOZfyglEZGCOLIgQ2ia9m0AvwZwLZovBOoBzBFC7JYajEghLGQiIkVwZEFEpAgWMhGRIljIRESKYCETESmChUxEpAgWMhGRIljIRESKYCETESmChUxEpAgWMhGRIljIRESKYCETESmChUxEpAgWMhGRIljIRESKYCETESmChUxEpAgWMhGRIljIRESKYCETESmChUxEpAgWMhGRIv4foaE2cqOuS6QAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = np.array([4, 6])\n", "print(\"v = \", v)\n", "theta_rad = math.atan(v[1]/v[0]) # acos, asin, and atan take a ratio as input and return an angle in radians. \n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "print(\"Angle in radians: \", theta_rad)\n", "print(\"Shortest angle from x-axis: \", theta_deg)\n", "# Since, both the coordinates are positive, that means the angle exists in the first quadrant\n", "# So the angle is already computed from positive x-axis\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "plot_vector([v]) " ] }, { "cell_type": "code", "execution_count": null, "id": "23555bcc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "39972c87", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "443dcb0a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ddf08ef8", "metadata": {}, "source": [ "**Example 2:** Find the direction of a vector whose coordinates are $(-4, 6)$" ] }, { "cell_type": "code", "execution_count": 10, "id": "a75e5352", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v = [-4 6]\n", "Angle in radians: -0.982793723247329\n", "Shortest angle from x-axis: -56.309932474020215\n", "Counter-Clockwise angle in degrees from positive x-axis: 123.69006752597979\n" ] }, { "data": { "image/png": "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aHt0dDQOHTpkWY5AbNu2DR07dryoeKxkmiaee+45zJ07V1uGC5mmiUOHDsHn82HOnDm47bbbkJaWhvXr1+uOhl/96leYMWMGAOwxDKMAwD8A/A3AqqZcR2sh+3w+jBw5EldffTUKCwtRWFiIBQsW4Kc//anOWDh16hQ8Hg+WLl2K1atX44svvoBhGBg8eDDOnj2rLVd5eTlmzpyJRYsWacsQiH/+858oKirC888/b9maFRUVl9weFhZ22X06VFZWYv78+UhPT0doaKi2HLNmzcJjjz0m6l3xTp06BQCYM2cO7r//fmzcuBEzZszA3XffjY0bN2rNlpGRgYULFwJAolKqB4A+ALYDqG7KdYJSyIZhzDUMQ9X139GjR7F+/XpkZ2fjz3/+M0JDQxEaGoq0tDQMHToUX331VZPn+uG3pJf9LyoqCkePHoXdbofP58OMGTMQHh4Ou92OF198EV999VVQ5siB5pozZw4ee+yxWm8zGUx15YqKikJqair2799f62uKi4vxxBNP4KOPPvLP363gcDguub2ysvKy+3SYOnUqxo0bp/XvCubm5mLHjh147LHHtGW4FLvdDqBmBBYfHw8AGDp0KIYMGYJXX31VWy6lFGbMmIEHH3wQSqmvfti2G8CdAGY25VrBej/klwCk13VATExM4datWxESElLrfU9jY2Ph8/mwdu1aTJ06tUlDzZw5E08++eRl95eXl6O4uNg/2zs/V8eOHRESEhKUH38DzfX5559j7969/pnk4cOH4Xa7kZKSgvj4eGRkZFiWq7y8HHv37sX111/v33b8+HHcc889eP3113HTTTc1aZb6tG/fHpGRkfB6vbW2u93uWhl1WrZsGRwOB1588UWtOdatW4czZ85gyJAh8Pl8OH78OABg2rRpaNeuHTIyMvyFaKVrr70WYWFhF82L4+LisHXrVsvznFNWVoaTJ0+ic+fOF+46BOA+AHOaaq2gFLJSygPAU9cx2dnZuO6661BVVYVvv/0W11xzDYCa//mqqqqg3NVERUXVedfm9Xrhdrv9s72SkhJ069YNQM0zQqqqqi51USzLtXXrVkRGRvq3z549G5mZmUF7/mhduc5lCgkJ8X8+cuRIvPDCC0hOTgZQU0BWPhMkKSkJH3/8sf9zpRRyc3Px3HPPWZbhchYsWIBvvvkG77//PgBg586dAIDExETLs8yaNQuzZs0CUHPd1q1bh1/84hdYtGgRUlJSLM9zjt1uR1JSEtxud63tpaWlQfl3F6hrrrkGYWFhKC296Pd31wFo0nmY1hlyWloaOnTogPnz5/u3zZ07F1FRUVp/aRUbG4vx48cjPT0d1dU1I6KFCxciLi4OI0aM0JZLqrNnz2LkyJEYOHAgoqOjkZOTg5ycHLz++uuW5njiiSdqfb5y5UrY7XZMmjTJ0hwXWrp0Kd59912MHj0au3btQk5ODtasWYO9e/dqzSXRM888g3Xr1vnLLz8/Hxs2bMDkyZO1ZbLZbJg0aRJWrFgBwzCuBgDDMPoAuA1N/Es9rS8M8Xg8as+ePer2229Xt9xyi+rXr59KTU1V27Zta5pnczfQ+S92KC8vV7/5zW/UjTfeqG699VY1cuRIdfDgQe25lFKqpKREJScnq7i4OBUWFqaSk5PVX//6V22Z0tPT/S/IuPA/KxUWFvrX7dOnjxo8eLD68ssvLc1wIY/Ho2w22yUfG6uv2aU8/vjjqkePHgqA6t27txo3bpzuSGrZsmUqPj5eDRw4UA0YMEBlZWXpjqRM01RTp05VAHIBbAGwG8DTAAzVhL1oqJpXnVguOztbJSYm1voRXDev14udO3eCueonMVNRURFiY2MBAAUFBUhISNCc6EcSHy9AZi6JmYCaXPybekRErYTlf3WaWp8TJ05g8eLF2LRpE0JCQnD69GmMGTMGM2bM8P9SkIhYyGSBf/zjH1i1ahW2bduGq666CsXFxejTpw++++47zJ49W3c8IjE4sqCgk/LmQ0TS8Q6Zgu6OO+64aFtj3nyoqKiozv0lJSUNOh+RNNoK2efzwTRNXctfkmmazBWgK820ZcsW3HPPPRe9sq4u555BEYiKiooGnTvYJF5DQGYuiZmAmlzBftaHtkI+c+YM8vPzYbPJmZpUV1czV4CuJFNubi4OHz6MWbNm+V+x1tQOHDgAj6fOF4taSuI1BGTmkpgJqMkV7Ddj0lbI4eHh6Nmzp9b3Pb6QaZrIy8tjrgCYpolp06bh3XffrfO4nJwc/8vPAeDYsWNYunQp3n//fdx4440NWrOgoKDO/W63G6mpqQAAl8sFl8vVoPMHk8RrCMjMJTETAEvu2LUVst1uh9PpFPXEb4C5GmLixImYPXs2IiIiLntMdHS0/6ltx48fx4QJE/DGG2806r2A63uhx/k5HA6HqMcKkHkNAZm5JGayAn+pR43mdDoRExMT0D8aCW8+RCSdnAENtVhS3nyISDreIVPQLV++HNnZ2cjOzsYrr7yiOw6RWLxDpqCbPHnyZd/dioh+xEImIhKChUxEJAQLmYhICBYyEZEQLGQiIiFYyEREQrCQiYiEYCETEQnBQiYiEoKFTEQkBAuZiEgIFjIRkRAsZCIiIVjIRERCsJCJiIRgIRMRCcFCJiISgoVMRCQEC5mISAgWMhGRECxkIiIhWMhEREKwkImIhGAhExEJwUImIhKChUxEJAQLmSxVXV2NW265BV26dNEdhUgcFjJZasmSJdi/f7/uGEQisZDJMsXFxVi+fDkeeeQR3VGIRArRHYBajylTpmDu3LnYvn17o76+qKiozv0lJSWNOi+RFNoK2efzwTRNXctfkmmazBWghmZav349ACApKQmfffYZlFLwer0NWjM2NjbgYysqKhp8/mCSeA0BmbkkZgJqckVGRgZ1DW2FfObMGeTn58NmkzM1qa6uZq4ANSTTmTNn8Oyzz2L+/PnYuXMnSkpKUFlZiZ07dwYt34EDB+DxeIJ2/oaSeA0BmbkkZgJqckVHRwd1DW2FHB4ejp49e8LpdOqKcBHTNJGXl8dcATBNE9OmTcO7775b53E5OTl47733MHnyZAwfPhwA8MknnyAsLAyJiYkNWrOgoKDO/W63G6mpqQAAl8sFl8vVoPMHk8RrCMjMJTETAEvu2LUVst1uh9PpDPqPAA3FXIGbOHEiZs+ejYiIiMseEx0djS1btmDv3r1Ys2YNAODw4cMoLS3F3Xffjfj4eGRkZAS0XkJCQp37z8/hcDhEPVaAzGsIyMwlMZMV+Es9ajSn04mYmJh6/9Hs3r271uezZ89GZmYmsrOzg5iOqPmRM6AhImrlWMhkGbfbjZSUFGRmZtb6mIhqcGRBlomOjuaYgqgOvEMmIhKChUxEJAQLmYhICBYyEZEQLGQiIiFYyEREQrCQiYiEYCETEQnBQiYiEoKFTEQkBAuZiEgIFjIRkRAsZCIiIVjIRERCsJCJiIRgIRMRCcFCJiISgoVMRCQEC5mISAgWMhGRECxkIiIhWMhEREKwkImIhGAhExEJwUImIhKChUyWycrKQkpKCpKTk9G1a1eMGzdOdyQiUUJ0B6DWYeXKlVi8eDE2btyIqKgo7Nu3D/369dMdi0gUFjIFXVVVFaZPn44VK1YgKioKANC9e3esXbtWczIiWTiyoKDbunUrSktLMWjQoFrbBw8erCkRkUy8Q6ag+/LLL9GuXTts2LAB6enpME0TCQkJmDNnDjp27BjweYqKiurcX1JScqVRibTSVsg+nw+maepa/pJM02SuADUkk9vthsfjQXp6OlauXIk2bdpgypQpuPXWW7Fjxw60bds2oDVjY2MDzldRUQGv1xvw8cEm8RoCMnNJzATU5IqMjAzqGtoK+cyZM8jPz4fNJmdqUl1dzVwBqq6uxl/+8he8//77dR63YsUKuN1u+Hw+3HnnncjPzwcAjBw5Em+++SZee+01JCcnN3m+AwcOwOPxNPl5G0viNQRk5pKYCajJFR0dHdQ1tBVyeHg4evbsCafTqSvCRUzTRF5eHnMFwDRN/PKXv8TMmTPhcDgue1yHDh1QWVmJN954A8nJyXC5XP59ISEhsNvtSExMDGjNgoKCOve73W6kpqYCAFwuV621dJN4DQGZuSRmAmDJHbu2Qrbb7XA6nUH/EaChmCtwUVFRcLlc9WZKS0sDAHi9Xv+xJ06cQFVVVUBff05CQkKd+yMiIvwfOxwOUY8VIPMaAjJzScxkBTk/D1CL1blzZ4wfPx7p6emorq4GACxcuBBxcXEYMWKE5nREcrCQyRLLli3D1VdfjZtvvhmDBg3Cnj178Omnn4r6kZRINz7tjSzhdDqxbNky3TGIROMdMhGRECxkIiIhWMhEREKwkImIhGAhExEJwUImIhKChUxEJAQLmYhICBYyEZEQLGQiIiFYyEREQrCQiYiEYCETEQnBQiYiEoKFTEQkBAuZiEgIFjIRkRAsZCIiIVjIRERCsJCJiIRgIRMRCcFCJiISgoVMRCQEC5mISAgWMhGRECxkIiIhWMhkiT179iAtLQ0DBgxAUlISRo8ejSNHjuiORSQKC5mCTimFESNGoFevXti+fTv+9a9/oUuXLvj5z3+uOxqRKCxkCroTJ06gsLAQw4YN828bNmwYcnJycPLkSY3JiGRhIVPQtW/fHikpKcjKykJVVRWqqqqQlZUFp9MJp9OpOx6RGCG6A1DrsHr1aowfPx6dOnUCAFRUVGDp0qVo06ZNwOcoKiqqc39JSckVZSTSTVsh+3w+mKapa/lLMk2TuQLUkEw+nw8jR45ETEwM8vPzAQBvv/02OnToAK/XG/CasbGxAR9bUVHRoHMHm8RrCMjMJTETUJMrMjIyqGsYSqmgLkAtl2EYcwE8U89hPQAkAPgQQCelVPEPXxsL4ACAXkqprwJcryHfrLFKqbpvqYmEYSFToxmGEQUgqp7D3ACeBvBfSqnQC77+ewDTlVKvBrhep3oOsQO49oc13UqpqkDOSyQFZ8jUaEopDwBPfccZhlEMIMQwjGuUUt/+sO1a1Hz/VTRgvUDuePnkZmq2+CwLssI6AKUAfn/etmdRU+Yfa0lEJBBHFmQJwzBuAPAygKtRcyNQDmCmUmq71mBEgrCQiYiE4MiCiEgIFjIRkRAsZCIiIVjIRERCsJCJiIRgIRMRCcFCJiISgoVMRCQEC5mISAgWMhGRECxkIiIhWMhEREKwkImIhGAhExEJwUImIhKChUxEJAQLmYhICBYyEZEQLGQiIiFYyEREQrCQiYiEYCETEQnx/wEUpvxVGzmZ7wAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = np.array([-4, 6])\n", "print(\"v = \", v)\n", "theta_rad = math.atan(v[1]/v[0]) # acos, asin, and atan take a ratio as input and return an angle in radians. \n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "print(\"Angle in radians: \", theta_rad)\n", "print(\"Shortest angle from x-axis: \", theta_deg)\n", "# Since, x-coordinate is negative and y-coordinate is positive, that means, the angle exists in the second \n", "# quadrant. Since, the angle is negative, that means, it is measured from negative x-axis in clock-wise direction\n", "# So we have to add 180 degree to get the angle from positive x-axis in counter-clockwise direction\n", "theta_deg = theta_deg + 180\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "plot_vector([v]) " ] }, { "cell_type": "code", "execution_count": null, "id": "e6b8c51d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2a8f475e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6cac130c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2fa61e44", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "fc563c3f", "metadata": {}, "source": [ "**Example 3:** Find the direction of a vector whose coordinates are $(-4, -6)$" ] }, { "cell_type": "code", "execution_count": 11, "id": "b693a152", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v = [-4 -6]\n", "Angle in radians: 0.982793723247329\n", "Angle in degrees: 56.309932474020215\n", "Angle in degrees from x-axis: 236.30993247402023\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = np.array([-4, -6])\n", "print(\"v = \", v)\n", "theta_rad = math.atan(v[1]/v[0]) # acos, asin, and atan take a ratio as input and return an angle in radians. \n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "print(\"Angle in radians: \", theta_rad)\n", "print(\"Angle in degrees: \", theta_deg)\n", "# Since, both the coordinates are negative, that means, the angle exists in the third quadrant\n", "# Since, the angle is positive, that means, it is measured from negative x-axis in counter-clockwise direction\n", "# So we have to add 180 degree to get the angle from positive x-axis in counter-clockwise direction\n", "theta_deg = theta_deg + 180\n", "print(\"Angle in degrees from x-axis: \", theta_deg)\n", "plot_vector([v]) " ] }, { "cell_type": "code", "execution_count": null, "id": "abfa83de", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "93368058", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "91e95f09", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "79ec04c5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ddfcbad0", "metadata": {}, "source": [ "**Example 4:** Find the direction of a vector whose coordinates are $(4, -6)$" ] }, { "cell_type": "code", "execution_count": 12, "id": "28161dce", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "v = [ 4 -6]\n", "Angle in radians: -0.982793723247329\n", "Shortest angle from x-axis: -56.309932474020215\n", "Counter-Clockwise angle in degrees from positive x-axis: 303.69006752597977\n" ] }, { "data": { "image/png": "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I91yyy0ICQm5bl4cExODPXv2GJ7nioqKCpw/fx7dunW7dtMJAI8CWOi3xfx5yYYvH7m5uWLlypUCgKioqPBcXvLNN98IACIrK6uFF6r47sqlXAUFBQKAyMvL82w7e/asACBycnKk5br28q358+crcdnbla8HDRoktm7d6rnPW2+9ZWimESNG1Lvsze12i4iICPHHP/7R5329uuoDgeSfCS3lGfHZkS9bnC09PV0MGzbMc2lgfn6+yM/Pb/F+W8rpdIp3331XmcveUlNTxRNPPFHve+uhhx4SI0aMkJbJ5XKJkJAQsXDhQiGu6jAA2wF8JvzYi1JnyGlpaejSpQuWLFniuS0jIwPh4eFSf2kVHR2NCRMmIDMzE2533Yho6dKliImJwciRI6XlUtXly5cxatQoDBw4EBEREcjPz0d+fj7eeustQ3M8//zz9b5et24dzGYzJk+e7PO+/Dm6WLFiBd577z2MGTMGBw8eRH5+PrZu3YojR440e59t1ezZs7F9+3aUl9ddvFBYWIgdO3Zg6tSp0jKZTCZMnjwZa9asgaZpNwOApml9ANwHP/9ST+oZstPpFIcPHxYjRowQ/fv3F3379hUpKSli7969/vwPzmtXn/VVVVWJn/3sZ+LOO+8U9957rxg1apT48suWnym1NJcQQpSVlYmkpCQRExMjQkJCRFJSknj77belZcrMzPScmV77YaTi4mLPun369BFDhw4VX3zxRbP3548XjDidTmEymRp8bow+Zg157rnnRM+ePQUAcdddd4lx48bJjiSysrJEXFycGDhwoBgwYICUn0qvpeu6mD59ugBwAMBuAIcAvAhAE37sRU3UnXobLi8vTyQmJsJms0lZvyGVlZXYv38/mKtpKmYqKSlBdHQ0AKCoqAjx8fEt3ue8/9qMhWu3Q9M07F4+C4N+3L1Z+1Hx+QLUzKViJqAul81m0wK5hvTrkIlUxrfpJCOxkCngVHzzIW/xbTrJSIG67I3I469//SvWr1+PvXv34qabbkJpaSn69OmDb7/9Funp6bLjNenKC0YWrt2O1zbswpghfZo9uiBqDM+QKeBUefOhluDogozAM2QKuAceeOC625rz5kMlJSWNbi8rK/Npf74I5AtGiK6QVsgulwu6rstavkG6rjOXl1qaaffu3Xj44Yeve2VdY65cQeGN6upqn/btDfuPfoAXH0vF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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = np.array([4, -6])\n", "print(\"v = \", v)\n", "theta_rad = math.atan(v[1]/v[0]) # acos, asin, and atan take a ratio as input and return an angle in radians. \n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "print(\"Angle in radians: \", theta_rad)\n", "print(\"Shortest angle from x-axis: \", theta_deg)\n", "#Since, x-coordinate is positive and y-coordinate is negative, that means, the angle exists in the fourth quadrant\n", "#Since, the angle is negative, that means, it is measured from positive x-axis in clockwise direction\n", "#So we have to add 360 degree to get the angle from positive x-axis in counter-clockwise direction\n", "theta_deg = theta_deg + 360\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "plot_vector([v]) " ] }, { "cell_type": "code", "execution_count": null, "id": "00c46d2e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "09384f37", "metadata": {}, "source": [ "## 4. Components of a Vector" ] }, { "cell_type": "markdown", "id": "0d29cb26", "metadata": {}, "source": [ "\n", "\n", "### a. Components of a Vector in $\\mathbb{R}^2$\n", "\n", "- Splitting of an angled vector into two vectors directed towards the coordinate axes in a two-dimensional coordinate system are defined as vector components.\n", "- The two components of any vector can be found through the method of vector resolution. \n", "- This vector say $F$ is making an angle of 30 degrees with the positive x-axis in counter clockwise direction. The head of this vector is 5 units towards East and 2 units towards North. These two lines are the vector components of the vector $F$. Moreover, these two components are supposed to form a right-angled triangle. \n", "- We can use these two components are then used to find the resultant vector’s magnitude and direction, which is AB.\n", "\n", " $ cosθ = \\frac{F_x}{F} \\implies F_x = F.cosθ $
\n", " $ sinθ = \\frac{F_y}{F} \\implies F_y = F.sinθ $" ] }, { "cell_type": "code", "execution_count": null, "id": "fde96b01", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e60ab5f7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2d4c93b9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ec594f16", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "33ccf40d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4b75c015", "metadata": {}, "source": [ "**Example 1:** A force $\\overrightarrow{\\rm F}$ of 10 N is applied at an angle of 30º along the horizontal surface. Resolve the vector into its components. Verify your answer by calculating its magnitude and direction from its components." ] }, { "cell_type": "code", "execution_count": 13, "id": "833921f0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fx: 8.66 N\n", "Fy: 5.00 N\n", "|F| = 10.0\n", "Angle: 30.00 degrees\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# calculating x and y components of vector F\n", "fx = 10*math.cos(30 * math.pi/180) # sin, cos and tan take input angle in radians and return a real value. \n", "fy = 10*math.sin(30 * math.pi/180) # sin, cos and tan take input angle in radians and return a real value. \n", "print(\"Fx: %.2f\" %fx, \"N\")\n", "print(\"Fy: %.2f\" %fy, \"N\")\n", "\n", "# calculating magnitude for verification\n", "f = numpy.linalg.norm([fx, fy], ord=2)\n", "print(\"|F| = \",f)\n", "\n", "# calculating angle for verification\n", "theta_rad = math.atan(fy/fx) # returned angle is in radians. \n", "theta_deg = theta_rad*(180/math.pi) # convert it into degrees\n", "# Since, x and y-components are both positive, that means the vector is in first quadrant\n", "print(\"Angle: %.2f\" % theta_deg, \"degrees\")\n", "\n", "# Plot the vector\n", "plot_vector([(fx,fy)]) " ] }, { "cell_type": "code", "execution_count": null, "id": "ccac4f66", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d8a4cf8c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a2de64e1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "94263fe3", "metadata": {}, "source": [ "**Example 2:** Given a vector $\\mathbf{v}$ having magnitude of 4 and direction of 45 degrees in $\\mathbb{R}^2$. Find out its x and y-components.\n", "Verify your answer by calculating its magnitude and direction from its components.
" ] }, { "cell_type": "code", "execution_count": 14, "id": "b00ed29e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "vx: 2.83\n", "vy: 2.83\n", "|v| = 4.0\n", "Angle: 45.00 degrees\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# calculating x and y components of vector F\n", "vx = 4*math.cos(45 * math.pi/180) # sin, cos and tan take input angle in radians and return a real value. \n", "vy = 4*math.sin(45 * math.pi/180) # sin, cos and tan take input angle in radians and return a real value. \n", "print(\"vx: %.2f\" %vx)\n", "print(\"vy: %.2f\" %vy)\n", "\n", "# calculating magnitude for verification\n", "mag = numpy.linalg.norm([vx, vy], ord=2)\n", "print(\"|v| = \", mag)\n", "\n", "# calculating angle for verification\n", "theta_rad = math.atan(vy/vx) # returned angle is in radians. \n", "theta_deg = theta_rad*(180/math.pi) # convert it into degrees\n", "# Since, x and y-components are both positive, that means the vector is in first quadrant\n", "print(\"Angle: %.2f\" % theta_deg, \"degrees\")\n", "\n", "# Plot the vector\n", "plot_vector([(vx,vy)]) " ] }, { "cell_type": "code", "execution_count": null, "id": "2b444bbb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "25fc2129", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fc0df294", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "dcf6585a", "metadata": {}, "source": [ "\n", "\n", "### b. Components of a Vector in $\\mathbb{R}^3$\n", "- In contrast to a vector in 2-D space having an x-component and a y-component with one angle in between, a vector in 3-D space will have an x-component, a y-component and a z-component with three angles in between.\n", "- Given the three angles and the magnitude of a vector, we can calculate its components using following formulae: \n", " - $ F_x = F.cos\\theta_x $, where, $\\theta_x$ is the angle between the vector and x-axis\n", " - $ F_y = F.cos\\theta_y $, where, $\\theta_y$ is the angle between the vector and y-axis\n", " - $ F_z = F.cos\\theta_z $, where, $\\theta_z$ is the angle between the vector and z-axis\n", "\n", "- Consider a vector: $\\overrightarrow{\\rm v} = (4,6,4) = 4\\hat{i} + 6\\hat{j} + 4\\hat{k}$\n", " - Where $\\hat{i}$, $\\hat{j}$, and $\\hat{k}$ are the unit vectors in the x, y and z directions, being multiplied by scalars 4, 6, and 4 respectively." ] }, { "cell_type": "markdown", "id": "e87e0b91", "metadata": {}, "source": [ "**Example 1:** Given a vector having magnitude of 8.2463 making angles of 60.98, 43.3, and 60.98 with x,y, and z-axis respectively in $\\mathbb{R}^3$. Find out its x, y and z-components. Verify your answer by calculating the vector's magnitude from components." ] }, { "cell_type": "code", "execution_count": 15, "id": "cc888359", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "fx: 4.00\n", "fy: 6.00\n", "fx: 4.00\n", "|f| = 8.248\n" ] } ], "source": [ "# calculating x and y components of vector F\n", "fx = 8.2463*math.cos(60.98 * math.pi/180) \n", "fy = 8.2463*math.cos(43.3 * math.pi/180) \n", "fz = 8.2463*math.cos(60.98 * math.pi/180) \n", "print(\"fx: %.2f\" %fx)\n", "print(\"fy: %.2f\" %fy)\n", "print(\"fx: %.2f\" %fz)\n", "\n", "# calculating magnitude for verification\n", "mag = numpy.linalg.norm([fx, fy, fz], ord=2)\n", "print(\"|f| = %.3f\" %mag)" ] }, { "cell_type": "code", "execution_count": null, "id": "479e8057", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cda1f81e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8a1e3805", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6ff2c2a9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "53e92e75", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7c0420b5", "metadata": {}, "source": [ "## 5. Two Fundamental Vector Operations" ] }, { "cell_type": "markdown", "id": "5db4d8a9", "metadata": {}, "source": [ "\n", "\n", "### a. Vectors Addition\n", "- Two vectors of equal length can be added together to create a new third vector, and is written as:\n", "\n", "$ \\hspace{5.0cm} \\overrightarrow{\\rm c} = \\overrightarrow{\\rm a} + \\overrightarrow{\\rm b} $\n", "- Vector addition can be performed graphically, using the head-to-tail as shown in this figure. (First, the two vectors `a` and `b` are placed together such that the head of vector `a` connects the tail of vector `b`. Next, to find the sum, a resultant vector `c` is drawn such that it connects the tail of `a` to the head of `b`.)\n", "\n", "- Vection addition can also be done by simply performing an element by elementt addition.\n", "\n", "$ \\hspace{3.0cm} \\overrightarrow{\\rm c} = (a1 + b1, a2 + b2, a3 + b3) $" ] }, { "cell_type": "markdown", "id": "d273bf72", "metadata": {}, "source": [ "**Example 1:** Consider a vector $\\overrightarrow{\\rm a}$, having its tail at point $(-1, 3)$ and head at point $(5,2)$. Consider another vector $\\overrightarrow{\\rm b}$, having its tail at point $(1, -2)$ and head at point $(-2,2)$. Determine the resultant sum vector \\overrightarrow{\\rm c}. Also, give the magnitude and angle of the resultant vector." ] }, { "cell_type": "code", "execution_count": 16, "id": "4cf65a67", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "U = [ 6 -1]\n", "V = [-3 4]\n", "R = [3 3]\n", "|R| = 4.242640687119285\n", "Counter-Clockwise angle in degrees from positive x-axis: 45.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Translating the two vectors to origin\n", "u = np.array([5-(-1), 2-3]) \n", "v = np.array([-2-1, 2-(-2)]) \n", "print(\"U = \", u)\n", "print(\"V = \", v)\n", "\n", "# calculate the resultant vector R\n", "r = u + v\n", "print(\"R = \", r)\n", "\n", "# calculating magnitude of R from its components using L2 norm\n", "mag = numpy.linalg.norm([r[0], r[1]], ord=2)\n", "mag = (r[0]**2 + r[1]**2)**(1/2)\n", "print(\"|R| = \", mag)\n", "\n", "# calculating angle of resultant vector R\n", "theta_rad = math.atan(r[1]/r[0]) # acos, asin, and atan take a ratio as input and return an angle in radians\n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "# Since, both x and y coordinates are positive, that means the angle exists in the first quadrant\n", "# So no need to add anything\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "vectors = [u, v, r]\n", "tails = [(0,0), u, (0,0)]\n", "plot_vector(vectors, tails)" ] }, { "cell_type": "markdown", "id": "b1009254", "metadata": {}, "source": [ "**Example 2:** Given two vectors, U = 10 m, Φ = 30 degrees and V = 20m, Φ = 60 degrees, determine their sum. Then, calculate the magnitude and the angle of the resultant vector using the component method" ] }, { "cell_type": "code", "execution_count": 17, "id": "a2c61f8b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ux: 8.66 m\n", "Uy: 5.00 m\n", "Vx: 10.00 m\n", "Vy: 17.32 m\n", "Resultant vector R: [18.66025404 22.32050808]\n", "|R| = 29.093129111764092\n", "Counter-Clockwise angle in degrees from positive x-axis: 50.103909361017095\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import math as m\n", "# calculating x and y components of vector U\n", "ux = 10*math.cos(30*math.pi/180) # sin, cos and tan take input angle in radians and return the ratio. \n", "uy = 10*math.sin(30*math.pi/180) \n", "print(\"Ux: %.2f\" %ux, \"m\")\n", "print(\"Uy: %.2f\" %uy, \"m\")\n", "\n", "# calculating x and y components of vector V\n", "vx = 20*m.cos(60*math.pi/180)\n", "vy = 20*m.sin(60*math.pi/180)\n", "print(\"Vx: %.2f\" %vx, \"m\")\n", "print(\"Vy: %.2f\" %vy, \"m\")\n", "\n", "# calculate the sum of the two vectors R = U + V\n", "rx = ux + vx\n", "ry = uy + vy\n", "r = np.array([rx, ry])\n", "print(\"Resultant vector R: \", r)\n", "\n", "# calculating magnitude of R from its components using L2 norm\n", "mag = numpy.linalg.norm([rx, ry], ord=2)\n", "mag = (rx**2 + ry**2)**(1/2)\n", "print(\"|R| = \", mag)\n", "\n", "# calculating angle of resultant vector R\n", "theta_rad = math.atan(r[1]/r[0]) # acos, asin, and atan take a ratio as input and return an angle in radians\n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "# Since, both the coordinates are positive, that means the angle exists in the first quadrant\n", "# So the angle is already computed from positive x-axis\n", "theta_deg = math.degrees(theta_rad)\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "vectors = [(ux,uy), (vx,vy), (rx,ry)]\n", "tails = [(0,0), (ux,uy), (0,0)]\n", "plot_vector(vectors, tails)" ] }, { "cell_type": "code", "execution_count": null, "id": "7c8c94cf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f1e0cd04", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9eb2bc06", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "365ed74d", "metadata": {}, "source": [ "\n", "\n", "### b. Multiplying a Vector with a Scalar Value (Scaling)\n", "- Multiplication by a scalar is a way of changing the magnitude and/or direction of a vector. \n", "- The multiplication of a scalar value with a vector A will yield another vector.\n", "\n", "\n", "- **Example 1:** Given the vector a = (-4, -6). If you multiply this vector by $-1/2$, its length (magnitude) halves and direction is reversed. \n", "\n", "$$\n", " \\mathbf{-0.5a} = -0.5\\left[ \\begin{array}{c} -4 \\\\ -6 \\end{array} \\right] =\n", " \\left[ \\begin{array}{c} 2 \\\\ 3 \\end{array} \\right]\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 18, "id": "4d91f4d0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vector A: [-4 -6]\n", "|A| = 7.211102550927978\n", "Counter-Clockwise angle in degrees from positive x-axis: 236.30993247402023\n", "\n", "Vector B: [2. 3.]\n", "|-A| = 3.605551275463989\n", "Counter-Clockwise angle in degrees from positive x-axis: 56.309932474020215\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a = np.array([-4, -6])\n", "print (\"Vector A: \", a)\n", "mag = numpy.linalg.norm(a, ord=2) # calculate magnitude using L2 norm\n", "print(\"|A| = \",mag)\n", "# calculating angle of vector A\n", "theta_rad = math.atan(a[1]/a[0]) \n", "theta_deg = theta_rad*(180/math.pi)\n", "# Since, both the coordinates are negative, that means, the angle exists in the third quadrant\n", "# Since, the angle is positive, that means, it is measured from negative x-axis in counter-clockwise direction\n", "# So we have to add 180 degree to get the angle from positive x-axis in counter-clockwise direction\n", "theta_deg = theta_deg + 180\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "# Multiplying the vector A by -0.5 will give a new vector B\n", "b = a * -0.5\n", "print (\"\\nVector B: \", b)\n", "# To calculate magnitude using L2 norm\n", "mag = numpy.linalg.norm(b, ord=2)\n", "mag = (b[0]**2 + b[1]**2) **(1/2)\n", "print(\"|-A| = \",mag)\n", "\n", "# calculating angle of vector B\n", "theta_rad = m.atan(b[1]/b[0]) \n", "theta_deg = theta_rad*(180/m.pi) \n", "# Since, both the coordinates are positive, that means, the angle exists in the first quadrant\n", "# Since, the angle is positive, that means, it is measured from negative x-axis in counter-clockwise direction\n", "# So need not to add anything\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "vectors = [a, b]\n", "plot_vector(vectors)" ] }, { "cell_type": "markdown", "id": "b50c9795", "metadata": {}, "source": [ "**Example 2:** Given the vector a = (1, 1). If you multiply this vector by $3$, its length (magnitude) is trippled and direction remains the same.\n", "\n", "$$\n", " \\mathbf{3a} = 3\\left[ \\begin{array}{c} 1 \\\\ 1 \\end{array} \\right] =\n", " \\left[ \\begin{array}{c} 3 \\\\ 3 \\end{array} \\right]\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "427a3c7d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vector A: [1 1]\n", "|A| = 1.4142135623730951\n", "Counter-Clockwise angle in degrees from positive x-axis: 45.0\n", "\n", "Vector B: [3 3]\n", "|-A| = 4.242640687119285\n", "Counter-Clockwise angle in degrees from positive x-axis: 45.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Given vector A\n", "a = np.array([1, 1])\n", "print (\"Vector A: \", a)\n", "# calculate magnitude using L2 norm\n", "mag = numpy.linalg.norm(a, ord=2)\n", "mag = (a[0]**2 + a[1]**2) **(1/2)\n", "print(\"|A| = \",mag)\n", "# calculating angle of vector A\n", "theta_rad = math.atan(a[1]/a[0]) # acos, asin, and atan take a ratio as input and return an angle in radians\n", "theta_deg = theta_rad*(180/math.pi) # so we need to convert it into degrees\n", "# Since, both the coordinates are positive, that means, the angle exists in the first quadrant\n", "# So we need not to add anything\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "\n", "\n", "# Multiplying the vector A by 3 will give a new vector\n", "b = a * 3\n", "print (\"\\nVector B: \", b)\n", "# To calculate magnitude using L2 norm\n", "mag = numpy.linalg.norm(b, ord=2)\n", "mag = (b[0]**2 + b[1]**2) **(1/2)\n", "print(\"|-A| = \",mag)\n", "\n", "# calculating angle of vector B\n", "theta_rad = m.atan(b[1]/b[0]) # acos, asin, and atan take a ratio as input and return an angle in radians\n", "theta_deg = theta_rad*(180/m.pi) # so we need to convert it into degrees\n", "# Since, both the coordinates are positive, that means, the angle exists in the first quadrant\n", "# So we need not to add anything\n", "theta_deg = theta_deg + 0\n", "print(\"Counter-Clockwise angle in degrees from positive x-axis: \", theta_deg)\n", "\n", "vectors = [a, b]\n", "plot_vector(vectors)" ] }, { "cell_type": "code", "execution_count": null, "id": "7717eff0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "dd656936", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5196f1d5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "183b8692", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "afce88d7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1b77b382", "metadata": {}, "source": [ "## 6. Unit Vectors and Unit Basis Vectors\n", "\n", "### a. Unit Vector\n", "- Every vector $\\overrightarrow{\\rm v}$ in $\\mathbb{R}^2$, $\\mathbb{R}^3$,..., $\\mathbb{R}^n$ will have a corresponding unit vector, which points in exactly the same direction as $\\overrightarrow{\\rm v}$, but has a magnitude of one.\n", "- A unit vector of a vector $\\overrightarrow{\\rm v}$ is represented as $\\hat{\\rm v}$ and can be calculated as:\n", "$$\\hat{\\rm v} = \\frac{\\overrightarrow{\\rm v}}{|\\rm v|}$$" ] }, { "cell_type": "markdown", "id": "11663053", "metadata": {}, "source": [ "**Example 1:** Find the unit vector of $\\overrightarrow{\\rm v} =\\begin{bmatrix} 3 \\\\2 \\end{bmatrix}$\n", "\n", "$$\\hat{\\rm v_1} = \\frac{1}{3.6}\\begin{bmatrix} 3 \\\\2 \\end{bmatrix}=\\begin{bmatrix} 0.832 \\\\0.554 \\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 20, "id": "4dbe1389", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "vector v = [3 2] magnitude = 3.605551275463989\n", "Unit vector of v = (0.8320502943378437, 0.5547001962252291) magnitude = 1.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "v = np.array((3,2))\n", "mag_v = numpy.linalg.norm(v, ord=2)\n", "\n", "vhat = (v[0]/mag_v, v[1]/mag_v)\n", "mag_vhat = numpy.linalg.norm(vhat,ord=2)\n", "\n", "print(\"vector v = \", v, \" magnitude =\", mag_v)\n", "print(\"Unit vector of v = \", vhat, \" magnitude =\", mag_vhat)\n", "\n", "vectors = [v, vhat]\n", "plot_vector(vectors)" ] }, { "cell_type": "markdown", "id": "a5ee0684", "metadata": {}, "source": [ "> Note: The unit vector $\\overrightarrow{\\rm u}$ of the given vector $\\overrightarrow{\\rm v} =(3,2)$ is one unit long, and sits right on top of $\\overrightarrow{\\rm v}$, pointing in the same direction as $\\overrightarrow{\\rm v}$. \n", "\n", "> The smaller triangle formed by the unit vector $\\overrightarrow{\\rm u}$ is similar to the larger triangle formed by the vector $\\overrightarrow{\\rm v}$\n" ] }, { "cell_type": "code", "execution_count": null, "id": "acedc97d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3ff69c4c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8aa9344e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "adbb6bcf", "metadata": {}, "source": [ "**Example 2:** Find the unit vector of $\\overrightarrow{\\rm v} =\\begin{bmatrix} 12 \\\\3 \\\\-4 \\end{bmatrix}$\n", "\n", "$$\\hat{\\rm v_1} = \\frac{1}{13}\\begin{bmatrix} 12 \\\\3\\\\-4 \\end{bmatrix}=\\begin{bmatrix} 0.92 \\\\0.23 \\\\-0.3\\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 21, "id": "e46c612a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "vector v = [12 3 -4] magnitude = 13.0\n", "Unit vector of v = (0.9230769230769231, 0.23076923076923078, -0.3076923076923077) magnitude = 1.0\n" ] } ], "source": [ "v = np.array((12, 3, -4))\n", "mag_v = numpy.linalg.norm(v, ord=2)\n", "\n", "vhat = (v[0]/mag_v, v[1]/mag_v, v[2]/mag_v)\n", "mag_vhat = numpy.linalg.norm(vhat,ord=2)\n", "\n", "print(\"vector v = \", v, \" magnitude =\", mag_v)\n", "print(\"Unit vector of v = \", vhat, \" magnitude =\", mag_vhat)" ] }, { "cell_type": "code", "execution_count": null, "id": "b34b07d8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3e8cab26", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f2a586c2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ce3c32c0", "metadata": {}, "source": [ "### b. Basis Vectors\n", "- Basis vectors are special unit vectors pointing along the x, y or the z-axis.\n", "- In two-dimensional space $\\mathbb{R}2$, we define two specific basis vectors, $\\hat{i} = (1,0)$ and $\\hat{j} = (0,1)$ and in three-dimensional space $\\mathbb{R}3$, we define three specific basis vectors $\\hat{i} = (1,0,0)$, $\\hat{j} = (0,1,0)$, and $\\hat{k} = (0,0,1)$.\n", "- A vector can be represented as a linear combination of its basis vectors.\n", "- Let me express the vector $\\overrightarrow{\\rm v}$ in two-dimensional space $\\mathbb{R}2$ as its basis vectors:\n", "

$\\overrightarrow{\\rm v} \\quad=\\quad(6,4)\\quad=\\quad 6\\hat{i} + 4\\hat{j}\\quad=\\quad6 \\left[ \\begin{array}{c} 1 \\\\ 0 \\end{array} \\right] + 4 \\left[ \\begin{array}{c} 0 \\\\ 1 \\end{array} \\right] $

\n", "\n", "\n", "- Let me express the vector $\\overrightarrow{\\rm v}$ in three-dimensional space $\\mathbb{R}3$ as its basis vectors:\n", "

$\\overrightarrow{\\rm v} \\quad=\\quad(-3,2,-1)\\quad=\\quad -3\\hat{i} + 2\\hat{j} - \\hat{k}\\quad=\\quad -3 \\left[ \\begin{array}{c} 1 \\\\ 0 \\\\0 \\end{array} \\right] + 2 \\left[ \\begin{array}{c} 0 \\\\ 1 \\\\ 0 \\end{array} \\right] - \\left[ \\begin{array}{c} 0 \\\\ 0 \\\\ 0 \\end{array} \\right] $

" ] }, { "cell_type": "code", "execution_count": null, "id": "54d82523", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a1a2253c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "604bb4b2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0411761d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6682e64a", "metadata": {}, "source": [ "**Example 1:** Write down the vector $\\overrightarrow{\\rm v} =(3,2)$, as linear combination of its unit vectors and visualize." ] }, { "cell_type": "code", "execution_count": 22, "id": "d58f8ed0", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# create two basis vectors\n", "i = numpy.array((1,0))\n", "j = numpy.array((0,1))\n", "\n", "# create a new vector, that is a scaled version of these two basis vectors\n", "vec = 3*i + 2*j\n", "vectors = [i, j, 3*i, 2*j, vec]\n", "plot_vector(vectors)" ] }, { "cell_type": "code", "execution_count": null, "id": "e4137ccb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8896350f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1b01e19b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5de6e2eb", "metadata": {}, "source": [ "### c. Linear combination and Span\n", "- Linear combination is adding together two scaled vectors.\n", "- Span is the set of all possible linear combinations, that we can create from two vectors.\n", "- Using the basis vectors for example in $\\mathbb{R}2$, we can actually build every vector in two-dimensional space, simply by adding scaled combinations of $\\hat{i}$ and $\\hat{j}$. \n", "- A span just describes the space reachable by linear combinations of some given vectors." ] }, { "cell_type": "markdown", "id": "07cb706f", "metadata": {}, "source": [ "**Example 1:** Generate hundred random vectors from linear combinations of basis vectors, $ \\hat{i}=(1,0)$ and $\\hat{j}=(0,1)$. The scalar multiples $m$ and $n$ range from random values $-8$ to $+8$." ] }, { "cell_type": "code", "execution_count": 25, "id": "f2f413ce", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from numpy.random import randint\n", "i = numpy.array((1,0))\n", "j = numpy.array((0,1))\n", "\n", "vectors = []\n", "for _ in range(10000):\n", " m = randint(-8,8)\n", " n = randint(-8,8)\n", " vectors.append(m*i + n*j)\n", " \n", "plot_vector(vectors)\n", "pyplot.title(\"Hundred random vectors, created from the basis vectors\");" ] }, { "cell_type": "markdown", "id": "3943446d", "metadata": {}, "source": [ "> You can imagine that we can fill up the whole plane with infinite linear combinations, eventually filling up the entire 2D plane. **Indeed, the *span* of the basis vectors is the whole 2D space.**\n", "> Remember, we are not forced to use the unit vectors $\\mathbf{i}$ and $\\mathbf{j}$ as our basis vectors: other pairs of vectors could form a basis.\n", "\n", ">- **Question:** Can we use another pair of vectors as basis and generates linear combinations?" ] }, { "cell_type": "markdown", "id": "b193987b", "metadata": {}, "source": [ "**Example 2:** Generate hundred random vectors from linear combinations of two vectors, $a=(-2,1)$ and $b=(1,-3)$. The scalar multiples $m$ and $n$ range from random values $-8$ to $+8$." ] }, { "cell_type": "code", "execution_count": 26, "id": "a8229d0c", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a = numpy.array((-2,1))\n", "b = numpy.array((1,-3))\n", "\n", "vectors = []\n", "for _ in range(100):\n", " m = randint(-8,8)\n", " n = randint(-8,8)\n", " vectors.append(m*a + n*b)\n", " \n", "plot_vector(vectors)\n", "pyplot.title(\"Hundred random vectors, created from the basis vectors\");" ] }, { "cell_type": "markdown", "id": "2a6c7000", "metadata": {}, "source": [ "**Example 3:** Generate fifty random vectors from linear combinations of two vectors, $ \\hat{c}=(-2,-1)$ and $\\hat{d}=(1,0.5)$. The scalar multiples $m$ and $n$ range from random values $-8$ to $+8$." ] }, { "cell_type": "code", "execution_count": 27, "id": "564b029a", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "c = numpy.array((-2,-1))\n", "d = numpy.array((1,0.5))\n", "vectors = []\n", "for _ in range(50):\n", " m = randint(-8,8)\n", " n = randint(-8,8)\n", " vectors.append(m*c + n*d)\n", " \n", "plot_vector(vectors)\n", "pyplot.title(\"Fifty linear combinations of the vectors $\\mathbf{c}$ and $\\mathbf{d}$.\");" ] }, { "cell_type": "markdown", "id": "f811be3e", "metadata": {}, "source": [ "**What's going on?**\n", "\n", "- The vector $\\mathbf{d}$ is a scaled version of vector $\\mathbf{c}$, so we say that the two vectors are colinear. \n", "- Thus, all linear combinations of $\\mathbf{c}$ and $\\mathbf{d}$ end up on one line, which is their span. Their combinations are not able to travel all over the plane!" ] }, { "cell_type": "code", "execution_count": null, "id": "0b54fd2a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "30d04fd6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bdab34f2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8c49a70d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d3d3472d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "86fc6123", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "69265e4e", "metadata": {}, "source": [ "## 8. Vector to Vector Multiplication" ] }, { "cell_type": "markdown", "id": "c387cb2a", "metadata": {}, "source": [ "### a. Dot Product\n", "- The multiplication of vectors is conducted through dot product such that the two vectors (same size) being multiplied produce a scalar value.\n", "- This is the most commonly used operation in machine learning.\n", "- **Mathematically:**\n", " - The dot product of two vectors (when their components are known) is obtained by the summation of product of respective components:\n", "$$u \\cdot v = \\sum_{i=1}^{n} u_i v_i$$\n", "\n", "- **Geomatrically:**\n", " - The dot product of two vectors (when their magnitude and angle between the two vectors are known) is the product of the magnitude of the vectors and the cosine of the angle between them:\n", "\n", "$$ \n", "\\hspace{3.0cm} u.v \\hspace{.3 cm}=\\hspace{.3 cm} |u| \\hspace{.3 cm} |v| \\hspace{.3 cm} Cos \\theta \n", "$$\n", " \n", " - The formula to compute the **angle between two vectors** using Dot Product is:\n", "\n", "$$\n", "\\hspace{3.0cm} \\theta \\hspace{.3 cm}=\\hspace{.3 cm} cos^{-1} \\hspace{0.1 cm} \\frac{u.v}{|u| |v|} \n", "$$\n", "\n", "- The vector dot product is commutative in nature, i.e., $ u.v = v.u $ \n", "- The vector dot product can be to **determine orthogonality**, i.e., to check whether or not the two vectors are perpendicular to each other. If the vectors are perpendicular to each other then their dot product is zero\n", "- The dot product is the key tool for calculating **vector projections** and **vector decompositions** as well\n", "- The dot product is ubiquitous in deep learning: It is performed at every artificial neuron in a deep neural network, which may be made up of millions (or orders of magnitude more) of these neurons." ] }, { "cell_type": "code", "execution_count": null, "id": "63f755ed", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "df478eff", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4a3a87ac", "metadata": {}, "source": [ "**Example 1:** Find the dot product of the two vectors A(2, 2, -1) and B(5, -3, 2), and also calculate the angle between them.\n", "$\\hspace{8 cm}u \\cdot v = \\sum_{i=1}^{n} u_i v_i\\hspace{2 cm}$ OR $\\hspace{2 cm} u.v \\hspace{.3 cm}=\\hspace{.3 cm} |u| \\hspace{.3 cm} |v| \\hspace{.3 cm} Cos \\theta $\n", "\n", "\n", "$$ \\theta \\hspace{.3 cm}=\\hspace{.3 cm} cos^{-1} \\hspace{0.1 cm} \\frac{u.v}{|u| |v|} $$\n" ] }, { "cell_type": "code", "execution_count": 28, "id": "0ab02cf3", "metadata": {}, "outputs": [], "source": [ "import math" ] }, { "cell_type": "code", "execution_count": 29, "id": "7e4e23f0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = [ 2 2 -1]\n", "b = [ 5 -3 2]\n", "|a| = 3.0\n", "|b| = 6.164414002968976\n", "\n", "a.dot(b) = 2\n", "Angle: 83.79145537381414\n", "a.b = |a| |b| cos(𝜃) = 2.0000000000000027\n" ] } ], "source": [ "a = np.array([2, 2, -1])\n", "b = np.array([5, -3, 2])\n", "print(\"a = \", a)\n", "print(\"b = \", b)\n", "\n", "#calculate magnitude of vector A and B\n", "mag1 = numpy.linalg.norm(a, ord=2)\n", "mag2 = numpy.linalg.norm(b, ord=2)\n", "print(\"|a| = \", mag1)\n", "print(\"|b| = \", mag2)\n", "\n", "# Calculate Dot Product mathematically\n", "ab = np.dot(a,b)\n", "ab = a[0]*b[0] + a[1]*b[1]+a[2]*b[2]\n", "print(\"\\na.dot(b) = \", ab)\n", "\n", "\n", "theta_rad = math.acos(ab/(mag1*mag2))\n", "theta_deg = theta_rad*(180/math.pi) \n", "print(\"Angle: \", theta_deg)\n", "\n", "\n", "# Calculate Dot Product geometrically\n", "print(\"a.b = |a| |b| cos(𝜃) = \", mag1*mag2*math.cos(theta_rad))" ] }, { "cell_type": "code", "execution_count": null, "id": "c7fed969", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "078d5718", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "24ade632", "metadata": {}, "source": [ "**Example 2:** Find out the angle between the given two vectors using dot product:
\n", "$a = 2i + 2j + 3k$
\n", "$b = 6i + 3j + 1k$\n", "\n", "\n", "$\\hspace{8 cm}u \\cdot v = \\sum_{i=1}^{n} u_i v_i\\hspace{2 cm}$ OR $\\hspace{2 cm} u.v \\hspace{.3 cm}=\\hspace{.3 cm} |u| \\hspace{.3 cm} |v| \\hspace{.3 cm} Cos \\theta $\n", "\n", "\n", "$$ \\theta \\hspace{.3 cm}=\\hspace{.3 cm} cos^{-1} \\hspace{0.1 cm} \\frac{u.v}{|u| |v|} $$" ] }, { "cell_type": "code", "execution_count": 30, "id": "ad290a79", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = [2 2 3]\n", "b = [6 3 1]\n", "|a| = 4.123105625617661\n", "|b| = 6.782329983125268\n", "\n", "a.dot(b) = 21\n", "Angle: 41.32652841215388\n", "a.b = |a| |b| cos(𝜃) = 21.0\n" ] } ], "source": [ "a = np.array([2, 2, 3])\n", "b = np.array([6, 3, 1])\n", "\n", "# printing original vectors\n", "print(\"a = \", a)\n", "print(\"b = \", b)\n", "\n", "#calculate magnitude of vector A and B\n", "mag1 = numpy.linalg.norm(a, ord=2)\n", "mag2 = numpy.linalg.norm(b, ord=2)\n", "print(\"|a| = \", mag1)\n", "print(\"|b| = \", mag2)\n", "\n", "# Calculate Dot Product mathematically\n", "ab = np.dot(a,b)\n", "ab = a[0]*b[0] + a[1]*b[1]+a[2]*b[2]\n", "print(\"\\na.dot(b) = \", ab)\n", "\n", "\n", "theta_rad = math.acos(ab/(mag1*mag2))\n", "theta_deg = theta_rad*(180/math.pi) \n", "print(\"Angle: \", theta_deg)\n", "\n", "\n", "# Calculate Dot Product geometrically\n", "print(\"a.b = |a| |b| cos(𝜃) = \", mag1*mag2*math.cos(theta_rad))" ] }, { "cell_type": "code", "execution_count": null, "id": "6c3c95c8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "4ffea22c", "metadata": {}, "source": [ "### b. Vector Cross Product\n", "\n", "\n", "- Unlike dot product, the cross product of two vectors produce a new vector and the direction of the resultant vector is given by the right-hand rule.\n", "\n", "- **Mathematically:**\n", " - The cross product of two vectors (when their components are known) is obtained by using the determinant of the matrix as given below:\n", "\n", "$$\n", "\\vec{a}\\times\\vec{b} = \\begin{pmatrix}\n", " \\hat{i} & \\hat{j} & \\hat{k}\\\\ \n", " a_1 & a_2 & a_3 \\\\ \n", " b_1 & b_2 & b_3\n", " \\end{pmatrix}\n", "$$\n", "\n", "$$\n", "\\vec{a}\\times\\vec{b} = (a_2b_3 - b_2a_3)\\hat{i} - (a_1b_3 - b_1a_3)\\hat{j} +(a_1b_2 - b_1a_2)\\hat{k} \n", "$$\n", "\n", "- **Geomatrically:**\n", " - The cross product of two vectors (when their magnitude and angle between the two vectors are known) is the product of the magnitude of the vectors and the sine of the angle between them:\n", "\n", "$$\\hspace{3 cm} \\vec{a} \\times \\vec{b} \\hspace{.3 cm}=\\hspace{.3 cm} |a| \\hspace{.3 cm} |b| \\hspace{.3 cm} sin (\\theta) \\hspace{.3 cm} \\hat{n}$$\n", "\n", "- Where $\\hat{n}$ is the unit vector perpendicular to the plane containing the given two vectors, in the direction given by the right-hand rule.\n", "\n", "- The formula to compute the **angle between two vectors** using Cross Product is:\n", "\n", "$$ \\theta \\hspace{.3 cm}=\\hspace{.3 cm} sin^{-1} \\hspace{0.1 cm} \\frac{|\\vec{a}\\times\\vec{b}|}{|a| |b|} \n", "$$\n", "\n", "\n", "- **Properties:**\n", " - The cross product is zero in length when vectors A and B point in the same, or opposite, direction.\n", " - The cross product is maximum in length when vectors A and B are at right angles.\n", " - The vector cross product is NOT commutative in nature, i.e., $ a$ x $b \\neq b$ x $a $ " ] }, { "cell_type": "code", "execution_count": null, "id": "f5c99ec3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4508e0ca", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e4e263c6", "metadata": {}, "source": [ "**Example 1:** Find the cross product of two vectors A(3,5,-7) and B(2,-6,4). Later prove that the resultant vector is perpendicular to both A and B.\n", "\n", "$$\n", "\\vec{a}\\times\\vec{b} = \\begin{pmatrix}\n", " \\hat{i} & \\hat{j} & \\hat{k}\\\\ \n", " 3 & 5 & -7 \\\\ \n", " 2 & -6 & 4\n", " \\end{pmatrix}\n", "$$\n", "\n", "$$\n", "= (20-42)\\hat{i} - (12+14)\\hat{j} +(-18-10)\\hat{k} \n", "$$\n", "$$\n", "= -22\\hat{i}-26\\hat{j}-28\\hat{k}\n", "$$ " ] }, { "cell_type": "code", "execution_count": 31, "id": "96101512", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = [ 3 5 -7]\n", "b = [ 2 -6 4]\n", "a x b = [-22 -26 -28]\n", "\n", "|a| = 9.1104335791443\n", "|b| = 7.483314773547883\n", "|axb| = 7.483314773547883\n", "Angle: 40.29462137837708\n" ] } ], "source": [ "a = np.array([3, 5, -7]) \n", "b = np.array([2, -6, 4]) \n", "\n", "# printing original vectors\n", "print(\"a = \", a)\n", "print(\"b = \", b)\n", "\n", "# Calculate Cross Product mathematically\n", "ab = np.cross(a,b)\n", "print(\"a x b = \", ab)\n", "\n", "\n", "#calculate magnitude of vector a and b\n", "mag1 = numpy.linalg.norm(a, ord=2)\n", "mag2 = numpy.linalg.norm(b, ord=2)\n", "mag3 = numpy.linalg.norm(ab, ord=2)\n", "print(\"\\n|a| = \", mag1)\n", "print(\"|b| = \", mag2)\n", "print(\"|axb| = \", mag2)\n", "\n", "# Calculate the angle between two vectors\n", "mag3 = numpy.linalg.norm(ab, ord=2)\n", "theta_rad = math.asin(mag3/(mag1*mag2))\n", "theta_deg = math.degrees(theta_rad) #theta_rad*(180/m.pi) \n", "print(\"Angle: \", theta_deg)" ] }, { "cell_type": "code", "execution_count": null, "id": "89bb9e43", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "cc5c6123", "metadata": {}, "source": [ "\n", "\n", "### c. Orthogonal and Orthonormal Vectors: \n", "**Orthogonal Vector:**\n", "- A normal vector is a vector that makes an angle of 90° with another surface, vector, or axis.\n", "- Two vectors are said to be orthogonal, if their dot product is equal to zero.\n", "\n", "$\\hspace{3 cm}\\vec{a}.\\vec{b} \\hspace{.3 cm}=\\hspace{.3 cm} |a| \\hspace{.1 cm} |b| \\hspace{.3 cm} cos(90) = 0$\n", "\n", "\n", "- Two vectors are said to be orthogonal, if their cross product is equal to $|a| \\hspace{.1 cm} |b|$.\n", "\n", "$\\hspace{3 cm} \\vec{a}$ x $\\vec{b} \\hspace{.3 cm}=\\hspace{.3 cm} |a| \\hspace{.1 cm} |b| \\hspace{.3 cm} sin (90) \\hspace{.3 cm} = |a| \\hspace{.1 cm} |b|$\n", "\n", "\n", "**Orthonormal Vector:**\n", "- Orthonormal vectors are special type of orthogonal vectors having a magnitude of one.\n", "- So basis vectors are an example of orthonormal vector." ] }, { "cell_type": "markdown", "id": "dc3fd722", "metadata": {}, "source": [ "**Example 1:** Determine if the two vectors A(6, -2, -1) and B(2, 5, 2) are perpendicular to eachother. (If the vectors are perpendicular to each other then their dot product is zero)\n", "$$\n", "u \\cdot v = \\sum_{i=1}^{n} u_i v_i\n", "$$" ] }, { "cell_type": "code", "execution_count": 32, "id": "7fce82db", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = [ 6 -2 -1]\n", "b = [2 5 2]\n", "a.b = 0\n", "Angle: 90.0\n", "|a| |b| sin(90) = 36.78314831549904\n", "|a| |b| = 36.78314831549904\n" ] } ], "source": [ "a = np.array([6, -2, -1])\n", "b = np.array([2, 5, 2])\n", "\n", "# printing original vectors\n", "print(\"a = \", a)\n", "print(\"b = \", b)\n", "\n", "# Calculating Dot Product of Two Vectors\n", "ab = a.dot(b)\n", "ab = a[0]*b[0] + a[1]*b[1]+a[2]*b[2]\n", "print(\"a.b = \", ab)\n", "\n", "\n", "mag1 = numpy.linalg.norm(a, ord=2)\n", "mag2 = numpy.linalg.norm(b, ord=2)\n", "theta_rad = math.acos(ab/(mag1*mag2))\n", "theta_deg = math.degrees(theta_rad) #theta_rad*(180/m.pi) \n", "print(\"Angle: \", theta_deg)\n", "\n", "\n", "lhs = mag1*mag2*math.sin(90*(math.pi/180))\n", "rhs = mag1*mag2\n", "print (\"|a| |b| sin(90) = \", lhs)\n", "print (\"|a| |b| = \", rhs)\n", " " ] }, { "cell_type": "code", "execution_count": null, "id": "2ca48c43", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f9785f7e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "02990122", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6af83802", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "702058d2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ca3a68da", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "252c3d79", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "659c3666", "metadata": {}, "source": [ "# Section II: (Overview of Linear Alagebra: Matrices) \n", "

\"Unfortunately, no one can be told what the Matrix is. You have to see it for yourself.\"

\n", "

-Morpheus-

" ] }, { "cell_type": "code", "execution_count": 33, "id": "66448eb6", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import numpy.linalg\n", "import math\n", "import scipy\n", "from matplotlib import pyplot as plt\n", "from plot_helper import * # Helper functions: plot_vector, plot_linear_transformation, plot_linear_transformations" ] }, { "cell_type": "code", "execution_count": null, "id": "3ef01726", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "15c92892", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9e5f079c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2064123e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a8676273", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9db926a5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f7ffaa9b", "metadata": {}, "source": [ "## 1. Overview of Matrices\n", "- A matrix is a **two-dimensional array** of scalar values with one or more columns and one or more rows. They are also known as arrays.\n", "- The numbers, variables, or expressions inside the matrix are called the entries or elements of a matrix.\n", "$$\n", "A_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & a_{1,3}& \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & a_{2,3}& \\cdots & a_{2,n} \\\\\n", "a_{3,1} & a_{3,2} & a_{3,3}&\\cdots & a_{3,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & a_{m,3}& \\cdots & a_{m,n} \n", "\\end{pmatrix}\n", "$$\n", "\n", "\n", "- The notation for a matrix is often an uppercase letter, such as **A**, and dimensions of a matrix is denoted as `m × n` for the number of rows and the number of columns respectively. \n", "- The elements of a matrix are referred to by the row and the column subscript, such as **ai,j**. \n", "- Matrices are a foundational element of linear algebra. Matrices are used throughout the field of machine learning in the description of **algorithms** and **processes** such as the input data variable (X) when training an algorithm. " ] }, { "cell_type": "code", "execution_count": null, "id": "2e0c6905", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c332c32d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7beb006b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b02d70ff", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7fc063f1", "metadata": {}, "source": [ "## 2. Matrices and its Types" ] }, { "cell_type": "markdown", "id": "092249b7", "metadata": {}, "source": [ "**Example:** Defining a 3x3 matrix using NumPy, $A =$ \n", "$\\begin{bmatrix} \n", " -2 & 1 & 3\\\\ \n", " 1 & -3 & 5\\\\\n", " -3 & 2 & 1\n", " \\end{bmatrix} $ " ] }, { "cell_type": "code", "execution_count": 34, "id": "2811c311", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[-2 1 3]\n", " [ 1 -3 2]\n", " [-3 2 1]]\n", "A.ndim: 2\n", "A.shape: (3, 3)\n", "A.size: 9\n" ] } ], "source": [ "A = np.array([[-2, 1, 3], [1, -3, 2], [-3, 2, 1]])\n", "print(\"Matrix A = \\n\", A)\n", "\n", "print(\"A.ndim: \", A.ndim) \n", "print(\"A.shape: \", A.shape) \n", "print(\"A.size: \", A.size) " ] }, { "cell_type": "code", "execution_count": null, "id": "5075cab0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a7f22274", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1a43a2d4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f7244e43", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3b54414e", "metadata": {}, "source": [ "### a. Row Vector\n", "- A row vector is a matrix with exactly one row and one or many columns.\n", "- A row vector with one row and n columns is shown below:\n", "\n", "$\\begin{bmatrix} \n", " b_1 & b_2 & b_3 & \\cdots & b_n\\\\ \n", " \\end{bmatrix} $ \n", " \n", "- Let us create a row vector having one row and three columns" ] }, { "cell_type": "code", "execution_count": 35, "id": "f3a8c3fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix B = \n", " [-2 1 3]\n", "A.ndim: 1\n", "A.shape: (3,)\n", "\n", "Transpose of Matrix B = \n", " [-2 1 3]\n", "A.ndim: 1\n", "A.shape: (3,)\n" ] } ], "source": [ "B = np.array([-2, 1, 3])\n", "print(\"Matrix B = \\n\", B)\n", "print(\"A.ndim: \", B.ndim) \n", "print(\"A.shape: \", B.shape) \n", "\n", "# Taking the transpose of a matrix means to interchange the rows with columns. \n", "# The rows become columns and the columns become rows.\n", "Bt = B.T\n", "print(\"\\nTranspose of Matrix B = \\n\", Bt)\n", "print(\"A.ndim: \", Bt.ndim) \n", "print(\"A.shape: \", Bt.shape) \n" ] }, { "cell_type": "markdown", "id": "a7baa6d6", "metadata": {}, "source": [ "### b. Column Vector\n", "- A column vector is a matrix with exactly one column and one or many rows.\n", "- A column vector with one column and n rows is shown below:\n", "\n", "$\\begin{bmatrix} \n", " b_1 \\\\ b_2 \\\\ b_3 \\\\ \\vdots \\\\ b_n\\\\ \n", " \\end{bmatrix} $ \n", " \n", "- Let us create a column vector having one column and three rows" ] }, { "cell_type": "code", "execution_count": 36, "id": "ed52e6d4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix B = \n", " [[-2]\n", " [ 1]\n", " [ 3]]\n", "A.ndim: 2\n", "A.shape: (3, 1)\n", "\n", "Transpose of Matrix B = \n", " [[-2 1 3]]\n", "A.ndim: 2\n", "A.shape: (1, 3)\n" ] } ], "source": [ "B = np.array([[-2], [1], [3]])\n", "print(\"Matrix B = \\n\", B)\n", "print(\"A.ndim: \", B.ndim) \n", "print(\"A.shape: \", B.shape) \n", "\n", "# Taking the transpose of a matrix means to interchange the rows with columns. \n", "# The rows become columns and the columns become rows.\n", "Bt = B.T\n", "print(\"\\nTranspose of Matrix B = \\n\", Bt)\n", "print(\"A.ndim: \", Bt.ndim) \n", "print(\"A.shape: \", Bt.shape) \n" ] }, { "cell_type": "code", "execution_count": null, "id": "bf39eeb5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b1b6d580", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3936bd17", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3da44d51", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "f30b107f", "metadata": {}, "source": [ "### c. Zero Matrix\n", "- A matrix having all its elements as zero is a zero matrix $A =$ \n", "$\\begin{bmatrix} \n", " 0 & 0 & 0\\\\ \n", " 0 & 0 & 0\n", " \\end{bmatrix} $ \n", " \n", "- We can create a zero matrix using the `numpy.zeros()` method as shown below:" ] }, { "cell_type": "code", "execution_count": 37, "id": "757ef4bc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[0 0 0]\n", " [0 0 0]]\n" ] } ], "source": [ "A = np.zeros((2,3), dtype=np.int16)\n", "print(\"Matrix A = \\n\", A)" ] }, { "cell_type": "code", "execution_count": null, "id": "06a6b8a8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "34f14504", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fd044255", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4bcee330", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3bb561a4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "639e7732", "metadata": {}, "source": [ "### d. Ones Matrix\n", "- A matrix having all its elements as ones is a ones matrix $A =$ \n", "$\\begin{bmatrix} \n", " 1 & 1\\\\ \n", " 1 & 1\\\\\n", " 1 & 1\n", " \\end{bmatrix} $ \n", " \n", "- We can create a ones matrix using the `numpy.ones()` method as shown below:" ] }, { "cell_type": "code", "execution_count": 38, "id": "3e1ea268", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[1 1 1]\n", " [1 1 1]]\n" ] } ], "source": [ "A = np.ones((2, 3), dtype=int)\n", "print(\"Matrix A = \\n\", A)" ] }, { "cell_type": "code", "execution_count": null, "id": "a59a8e57", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "48e9ac60", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6377432a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ddc12e06", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "952c721e", "metadata": {}, "source": [ "### e. Random Integer Matrix\n", "- To create a Matrix of any size, with random values of low inclusive and high exclusive and size size, we can use the numpy.random.randint(low, high, size) method." ] }, { "cell_type": "code", "execution_count": 49, "id": "ddb71875", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[2 2 3]\n", " [0 2 4]\n", " [1 1 6]\n", " [7 0 3]\n", " [1 3 4]]\n" ] } ], "source": [ "A = np.random.randint(0, 10, size =(5, 3))\n", "print (\"Matrix A = \\n\", A)" ] }, { "cell_type": "code", "execution_count": null, "id": "52e3c9ca", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "27a1820e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0c9aa863", "metadata": {}, "source": [ "### f. Square Matrix\n", "- An `n × n` matrix is said to be a square matrix of order `n`. \n", "- In simple words, when the number of rows and the number of columns in the matrix are equal then the matrix is called square matrix.\n", "\n", "$A =$ \n", "$\\begin{bmatrix} \n", " 6 & 3 & 8\\\\ \n", " 2 & 1 & 9\\\\\n", " 8 & 2 & 7\n", " \\end{bmatrix} $ " ] }, { "cell_type": "code", "execution_count": 55, "id": "d7ea6816", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[6 3 8]\n", " [2 1 9]\n", " [8 2 7]]\n" ] } ], "source": [ "A = np.random.randint(1, 10, size =(3, 3))\n", "np.random.seed(54)\n", "print (\"Matrix A = \\n\", A)" ] }, { "cell_type": "code", "execution_count": null, "id": "5b73c7cc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "39ad6169", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9af382af", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ab3e2e89", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "96ae44fb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ba1cfc47", "metadata": {}, "source": [ "### g. Symmetric Matrix\n", "- A symmetric matrix is a type of square matrix where the `top-right triangle` is the same as the `bottom-left` triangle.\n", "- Matrix A is a 3 × 3 symmetric matrix: \n", "$A =$ \n", "$\\begin{bmatrix} \n", " 4 & 1 & 7\\\\ \n", " 1 & -3 & 5\\\\\n", " 7 & 5 & 2\n", " \\end{bmatrix} $ \n", "\n", "\n", "- In the above 3 × 3 square matrix A the diagonal 4, -3, 2 is the principal diagonal and 4, -3 and 2 are said to be the diagonal elements.\n", "- The transpose of a symmetric matrix is the matrix itself. $A = A^T$" ] }, { "cell_type": "code", "execution_count": 56, "id": "16a6e7c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[ 4 1 7]\n", " [ 1 -3 5]\n", " [ 7 5 2]]\n", "\n", "Transpose of A = \n", " [[ 4 1 7]\n", " [ 1 -3 5]\n", " [ 7 5 2]]\n" ] }, { "data": { "text/plain": [ "array([[ 4, 1, 7],\n", " [ 1, -3, 5],\n", " [ 7, 5, 2]])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[4, 1, 7], [1, -3, 5], [7, 5, 2]])\n", "print(\"Matrix A = \\n\", A)\n", "\n", "# taking transpose of the matrix\n", "print('\\nTranspose of A = \\n', A.T)\n", "np.transpose(A)" ] }, { "cell_type": "code", "execution_count": 57, "id": "a39ac407", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 4, 1, 7],\n", " [ 1, -3, 5],\n", " [ 7, 5, 2]])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.T" ] }, { "cell_type": "code", "execution_count": null, "id": "e5ac78d8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0cd9b034", "metadata": {}, "source": [ "### h. Triangular Matrix\n", "- Given a matrix A, having `m` rows and `n` columns. \n", "$$\n", "A_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & a_{1,3}& \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & a_{2,3}& \\cdots & a_{2,n} \\\\\n", "a_{3,1} & a_{3,2} & a_{3,3}&\\cdots & a_{3,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & a_{m,3}& \\cdots & a_{m,n} \n", "\\end{pmatrix}\n", "$$\n", " \n", "- The `Upper triangular matrix` of matrix $A$ has values only above the main diagonal, while the remaining elements are filled with zeros.
\n", "\n", "$\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & a_{1,3}& \\cdots & a_{1,n} \\\\\n", "0 & a_{2,2} & a_{2,3}& \\cdots & a_{2,n} \\\\\n", "0 & 0 & a_{3,3}&\\cdots & a_{3,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "0 & 0 & 0& \\cdots & a_{m,n} \n", "\\end{pmatrix}\n", "$\n", "\n", "- The `Lower triangular matrix` of matrix $A$ has values only below the main diagonal, while the remaining elements are filled with zeros.
\n", "$\n", "\\begin{pmatrix}\n", "a_{1,1} & 0 & 0& \\cdots & 0 \\\\\n", "a_{2,1} & a_{2,2} & 0& \\cdots & 0 \\\\\n", "a_{3,1} & a_{3,2} & a_{3,3}&\\cdots & 0 \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & a_{m,3}& \\cdots & a_{m,n} \n", "\\end{pmatrix}\n", "$" ] }, { "cell_type": "code", "execution_count": 58, "id": "0bdee3a1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A: \n", " [[6 3 8 5]\n", " [2 1 9 7]\n", " [8 2 4 7]\n", " [3 1 5 8]]\n", "Lower Triangular Matrix of A:\n", " [[6 0 0 0]\n", " [2 1 0 0]\n", " [8 2 4 0]\n", " [3 1 5 8]]\n", "Upper Triangular Matrix of A: \n", " [[6 3 8 5]\n", " [0 1 9 7]\n", " [0 0 4 7]\n", " [0 0 0 8]]\n" ] } ], "source": [ "A = np.array([[6, 3, 8, 5], [2, 1, 9, 7], [8, 2, 4, 7], [3, 1, 5, 8]])\n", "print(\"Matrix A: \\n\", A)\n", "\n", "# Lower triangular matrix of matrix A\n", "lower = np.tril(A)\n", "print(\"Lower Triangular Matrix of A:\\n\", lower)\n", "\n", "# Upper triangular matrix of matrix A\n", "upper = np.triu(A)\n", "print(\"Upper Triangular Matrix of A: \\n\", upper)" ] }, { "cell_type": "code", "execution_count": null, "id": "2c316820", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a9687e3e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "541a0bde", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1bd4f052", "metadata": {}, "source": [ "### i. Diagonal Matrix\n", "- A diagonal matrix is a square matrix in which all entries that are not on the main diagonal are zero.\n", "- A diagonal matrix is a special square matrix that is BOTH upper and lower triangular since all elements, whether above or below the principal diagonal, are 0.\n", "- A diagonal matrix is often denoted with the variable `D`\n", "\n", "$$\n", "A_{n,n} = \n", "\\begin{pmatrix}\n", "a_{1,1} & 0 & 0& \\cdots & 0 \\\\\n", "0 & a_{2,2} & 0&\\cdots & 0 \\\\\n", "0 & 0 & a_{3,3}&\\cdots & 0 \\\\\n", "\\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "0 & 0 & 0 & \\cdots & a_{n,n} \n", "\\end{pmatrix}\n", "$$\n", "\n", "- There are two ways to represent a diagonal matrix:\n", " - As a full matrix.\n", " - As a vector of values on the main diagonal. \n", " \n", "- NumPy provides the function `np.diag()` that can create a diagonal matrix from an existing matrix, or transform a vector into a diagonal matrix." ] }, { "cell_type": "code", "execution_count": 60, "id": "2b53e086", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A : \n", " [[7 9 8 4]\n", " [3 2 3 7]\n", " [9 2 8 8]\n", " [3 8 8 9]]\n", "\n", "Diagonal Vector = [7 2 8 9]\n", "\n", "Diagonal Matrix : \n", " [[7 0 0 0]\n", " [0 2 0 0]\n", " [0 0 8 0]\n", " [0 0 0 9]]\n" ] } ], "source": [ "A = np.random.randint(1, 10, size =(4, 4))\n", "print(\"Matrix A : \\n\", A)\n", "\n", "# Extract a diagonal vector from a matrix\n", "d = np.diag(A)\n", "print(\"\\nDiagonal Vector = \", d)\n", "\n", "# create diagonal matrix from diognal vector\n", "D = np.diag(d)\n", "print(\"\\nDiagonal Matrix : \\n\", D)" ] }, { "cell_type": "code", "execution_count": null, "id": "38acc8c3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ab30c113", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7a6858db", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1258a9af", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5a9906d0", "metadata": {}, "source": [ "### j. Identity Matrix\n", "- An identity matrix $I_n$, is a square matrix in which all the entries in the principal diagonal are 1 and all other elements are 0. \n", "\n", "$$I_2 =\\begin{bmatrix} \n", " 1 & 0\\\\ \n", " 0 & 1\n", " \\end{bmatrix} $$\n", "\n", "\n", "$$I_3 =\\begin{bmatrix} \n", " 1 & 0 & 0\\\\ \n", " 0 & 1 & 0\\\\\n", " 0 & 0 & 1\n", " \\end{bmatrix} $$ \n", " \n", "- **Properties of Identity Matrix:**\n", " - A vector of length `n` remains unchanged when multiplied with $I_n$.\n", " - Multiplying a matrix or vector by its compatible identity matrix, will result the matrix itself. $AI = A$\n", " - Multiplying a matrix by its inverse will result in an identity matrix of the same order. $AA^{-1} = I$\n", " - The `trace` (sum of elements in principal diagonal) of an identity matrix is equal to identity matrix’s order.\n", " - The determinant of an identity matrix is always equal to 1.\n", "\n", "\n", "- The `numpy.eye(rows, cols, k, dtype)` function is used to create an identigy matrix.\n", " - Where, default value of `k` is zero, means main diagonal, a positive value refers to an upper diagonal, and a negative value refers to a lower diagonal.\n", " - Default `dtype` is float" ] }, { "cell_type": "code", "execution_count": 61, "id": "c96936e7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3x3 Identiy Matrix:\n", " [[1. 0. 0. 0.]\n", " [0. 1. 0. 0.]\n", " [0. 0. 1. 0.]\n", " [0. 0. 0. 1.]]\n" ] } ], "source": [ "I3 = np.eye(4, 4)\n", "print(\"3x3 Identiy Matrix:\\n\", I3)" ] }, { "cell_type": "code", "execution_count": 62, "id": "af3e56f8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3x3 Identiy Matrix:\n", " [[0 1 0 0]\n", " [0 0 1 0]\n", " [0 0 0 1]\n", " [0 0 0 0]]\n" ] } ], "source": [ "I3 = np.eye(4, 4, 1,dtype=np.uint8)\n", "print(\"3x3 Identiy Matrix:\\n\", I3)" ] }, { "cell_type": "code", "execution_count": 63, "id": "1de7b14b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3x3 Identiy Matrix:\n", " [[0 0 0 0]\n", " [1 0 0 0]\n", " [0 1 0 0]\n", " [0 0 1 0]]\n" ] } ], "source": [ "I3 = np.eye(4, 4, -1,dtype=np.uint8)\n", "print(\"3x3 Identiy Matrix:\\n\", I3)" ] }, { "cell_type": "code", "execution_count": null, "id": "dfd351eb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "50b16c87", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ad3288cc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5b2db238", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d973bea6", "metadata": {}, "source": [ "### k. Scalar Matrix\n", "- A scalar matrix is a type of square matrix in which its principal diagonal elements are all equal and off-diagonal elements are all 0. \n", "- It is a multiplicative constant of an identity matrix.\n", "- Some examples of 2x2 scalar matrices are given below:

\n", "$\\begin{bmatrix} \n", " 2 & 0\\\\ \n", " 0 & 2\n", " \\end{bmatrix}\n", "\\hspace{2 cm}\\begin{bmatrix} \n", " -3 & 0\\\\ \n", " 0 & -3\n", " \\end{bmatrix} \n", " \\hspace{2 cm}\\begin{bmatrix} \n", " 4 & 0\\\\ \n", " 0 & 4\n", " \\end{bmatrix} $ \n", " \n", "\n", "\n", "- Some examples of 3x3 scalar matrices are given below:

\n", "$\\begin{bmatrix} \n", " 4 & 0 & 0\\\\ \n", " 0 & 4 & 0\\\\\n", " 0 & 0 & 4\n", " \\end{bmatrix} \n", "\\hspace{2 cm}\\begin{bmatrix} \n", " -3 & 0 & 0\\\\ \n", " 0 & -3 & 0\\\\\n", " 0 & 0 & -3\n", " \\end{bmatrix} \n", " \\hspace{2 cm}\\begin{bmatrix} \n", " 2 & 0 & 0\\\\ \n", " 0 & 2 & 0\\\\\n", " 0 & 0 & 2\n", " \\end{bmatrix} $ " ] }, { "cell_type": "code", "execution_count": 64, "id": "f12dfb34", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Scalar Matrix A:\n", " [[2 0 0]\n", " [0 2 0]\n", " [0 0 2]]\n", "Scalar Matrix B:\n", " [[-3 0 0 0]\n", " [ 0 -3 0 0]\n", " [ 0 0 -3 0]\n", " [ 0 0 0 -3]]\n" ] } ], "source": [ "A = np.eye(3, 3, dtype=np.uint8)\n", "print(\"Scalar Matrix A:\\n\", 2*A)\n", "B = np.eye(4, 4, dtype=np.uint8)\n", "print(\"Scalar Matrix B:\\n\", -3*B)" ] }, { "cell_type": "code", "execution_count": null, "id": "c8b1e76c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "75335a73", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cf39b703", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5064d0eb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "fd598ab8", "metadata": {}, "source": [ "### l. Orthogonal Matrix\n", "- An **orthogonal/orthonormal matrix** is a type of square matrix whose column vectors and row vectors are orthonormal vectors, i.e., are mutually perpendicular and have magnitude equal to 1. \n", "- An Orthogonal matrix is often denoted as uppercase $Q_{n,n}$. \n", "\n", "$\\hspace{3 cm} Q_{2,2} = \\begin{bmatrix} \n", " 1 & 0\\\\ \n", " 0 & -1\n", " \\end{bmatrix}$\n", "$\\hspace{3 cm}Q_{3,3} = \\begin{bmatrix} \n", " 1 & 0 & 0\\\\ \n", " 0 & -1 & 0 \\\\\n", " 0 & 0 & 1\n", "\\end{bmatrix}$\n", "\n", "\n", "\n", "- **Properties:**\n", " - An orthogonal matrix is always a symmetric matrix, all identity matrices are hence orthogonal matrices.\n", " - The product of two orthogonal matrices will also be an orthogonal matrix.$\\hspace{.5 cm} Q_1.Q_2 = Q_3$ \n", " - The transpose of the orthogonal matrix will also be an orthogonal matrix.$\\hspace{.5 cm} Q_1^T = Q_2$ \n", " - When an Orthogonal matrix is multiplied with its transpose, it will return an identity matrix.$\\hspace{.5 cm} Q.Q^T = Q^T.Q = I$\n", " - A matrix is orthogonal if its transpose is equal to its inverse.\n", " - The determinant of the orthogonal matrix will always be +1 or -1.\n", " - The eigenvalues of the orthogonal matrix will always be ±1\n", "- Orthogonal matrices are mostly used a lot for `linear transformations`, such as `reflections` and `permutations`." ] }, { "cell_type": "code", "execution_count": 65, "id": "4f8cff07", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Q1: \n", " [[ 1 0 0]\n", " [ 0 -1 0]\n", " [ 0 0 1]]\n", "Q2: \n", " [[ 1 0 0]\n", " [ 0 -1 0]\n", " [ 0 0 1]]\n", "\n", "Q1.Q2 = \n", " [[-1 0 0]\n", " [ 0 -1 0]\n", " [ 0 0 1]]\n", "\n", "Q1.T = \n", " [[ 1 0 0]\n", " [ 0 -1 0]\n", " [ 0 0 1]]\n", "\n", "np.dot(Q1, Q1.T) = \n", " [[1 0 0]\n", " [0 1 0]\n", " [0 0 1]]\n" ] } ], "source": [ "Q1 = np.array([ [1, 0, 0],[0, -1, 0], [0,0,1]])\n", "Q2 = np.array([ [-1, 0, 0],[0, 1, 0], [0,0,1]])\n", "print(\"Q1: \\n\", Q1)\n", "print(\"Q2: \\n\", Q1)\n", "\n", "# Product of two orthogonal matrices will also be an orthogonal matrix\n", "print(\"\\nQ1.Q2 = \\n\", np.dot(Q1,Q2))\n", "\n", "# Transpose of the orthogonal matrix will also be an orthogonal matrix\n", "print(\"\\nQ1.T = \\n\", Q1.T)\n", "\n", "# When an Orthogonal matrix is multiplied with its transpose, it will return an identity matrix\n", "print(\"\\nnp.dot(Q1, Q1.T) = \\n\", np.dot(Q1,(Q1.T)))" ] }, { "cell_type": "code", "execution_count": null, "id": "5df77784", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d1cae3f7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "407a0195", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "fe753a15", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "57f3caa5", "metadata": {}, "source": [ "## 2. Matrix Operations" ] }, { "cell_type": "markdown", "id": "513e372c", "metadata": {}, "source": [ "### a. Matrix Addition\n", "- Two matrices with the same order can be added together to create a third matrix of same order.\n", "- It is element by element addition and can be performed in Python using the plus operator on two NumPy arrays as shown:\n", "$$\n", "C_{m,n} = A_{m,n} + B_{m,n}\n", "$$\n", "\n", "$$\n", "C_{m,n} = A_{m,n} + B_{m,n}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & \\cdots & a_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & \\cdots & a_{m,n} \n", "\\end{pmatrix} +\n", "\\begin{pmatrix}\n", "b_{1,1} & b_{1,2} & \\cdots & b_{1,n} \\\\\n", "b_{2,1} & b_{2,2} & \\cdots & b_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n", "b_{m,1} & b_{m,2} & \\cdots & b_{m,n} \n", "\\end{pmatrix}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1}+b_{1,1} & a_{1,2}+b_{1,2} & \\cdots & a_{1,n}+b_{1,n} \\\\\n", "a_{2,1}+b_{2,1} & a_{2,2}+b_{2,2} & \\cdots & a_{2,n}+b_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1}+b_{m,1} & a_{m,2}+b_{m,2} & \\cdots & a_{m,n}+b_{m,n} \n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 66, "id": "26c6da9d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A : \n", " [[-2 -2 0]\n", " [ 2 3 -2]\n", " [ 0 3 -4]]\n", "Matrix B : \n", " [[-2 -3 -3]\n", " [ 3 -3 -2]\n", " [ 4 4 4]]\n", "\n", "A + B = \n", " [[-4 -5 -3]\n", " [ 5 0 -4]\n", " [ 4 7 0]]\n" ] } ], "source": [ "A = np.random.randint(-5, 6, size =(3, 3))\n", "B = np.random.randint(-5, 6, size =(3, 3))\n", "print(\"Matrix A : \\n\", A)\n", "print(\"Matrix B : \\n\", B)\n", "\n", "# adding two matrices\n", "C = A + B\n", "print(\"\\nA + B = \\n\", C)" ] }, { "cell_type": "code", "execution_count": null, "id": "7e79567a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c318bf0d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "00004210", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "bfe25e96", "metadata": {}, "source": [ "### b. Matrix-Scalar Multiplication\n", "- A matrix can be multiplied by a scalar. This can be represented using the dot notation between the matrix and the scalar.\n", "- The result is a matrix with the same size as the parent matrix where each element of the matrix is multiplied by the scalar value.\n", "\n", "\n", "$$\n", "C_{m,n} = b.A_{m,n}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "b.\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & \\cdots & a_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & \\cdots & a_{m,n} \n", "\\end{pmatrix}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "\\begin{pmatrix}\n", "b.a_{1,1} & b.a_{1,2} & \\cdots & b.a_{1,n} \\\\\n", "b.a_{2,1} & b.a_{2,2} & \\cdots & b.a_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "b.a_{m,1}& b.a_{m,2} & \\cdots & b.a_{m,n} \n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 67, "id": "46ae865b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A : \n", " [[2 4 5]\n", " [5 4 5]\n", " [5 5 1]]\n", "\n", " b*A: \n", " [[ 4 8 10]\n", " [10 8 10]\n", " [10 10 2]]\n" ] } ], "source": [ "A = np.random.randint(1, 6, size =(3, 3))\n", "print(\"Matrix A : \\n\", A)\n", "\n", "b = 2\n", "C = b*A\n", "print(\"\\n b*A: \\n\", C)" ] }, { "cell_type": "code", "execution_count": null, "id": "3ebd2c3b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a4f4f75e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f4bd930d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d76af124", "metadata": {}, "source": [ "### c. Matrix Multiplication (Matrix Hadamard Product)\n", "- Two matrices with the same size can be multiplied together, and this is often called `element-wise matrix multiplication` or the `Hadamard product`. \n", "- It is not the typical operation meant when referring to matrix multiplication, therefore a different operator is often used, which is a circle $\\odot$.\n", "- As with element-wise subtraction and addition, element-wise multiplication involves the multiplication of elements from each parent matrix to calculate the values in the new matrix.\n", "- We can implement this in Python using the `asterik *` operator directly on the two NumPy arrays.\n", "\n", "\n", "$$\n", "C_{m,n} = A_{m,n}\\odot B_{m,n}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1} & a_{1,2} & \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & \\cdots & a_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & \\cdots & a_{m,n} \n", "\\end{pmatrix} \\odot\n", "\\begin{pmatrix}\n", "b_{1,1} & b_{1,2} & \\cdots & b_{1,n} \\\\\n", "b_{2,1} & b_{2,2} & \\cdots & b_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n", "b_{m,1} & b_{m,2} & \\cdots & b_{m,n} \n", "\\end{pmatrix}\n", "$$\n", "\n", "$$\n", "C_{m,n} = \n", "\\begin{pmatrix}\n", "a_{1,1}.b_{1,1} & a_{1,2}.b_{1,2} & \\cdots & a_{1,n}.b_{1,n} \\\\\n", "a_{2,1}.b_{2,1} & a_{2,2}.b_{2,2} & \\cdots & a_{2,n}.b_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1}.b_{m,1} & a_{m,2}.b_{m,2} & \\cdots & a_{m,n}.b_{m,n} \n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 68, "id": "944b6b8f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A : \n", " [[4 4 4]\n", " [1 5 3]]\n", "Matrix B : \n", " [[1 2 5]\n", " [5 4 3]]\n", "\n", " A * B = \n", " [[ 4 8 20]\n", " [ 5 20 9]]\n" ] } ], "source": [ "A = np.random.randint(1, 6, size =(2, 3))\n", "B = np.random.randint(1, 6, size =(2, 3))\n", "print(\"Matrix A : \\n\", A)\n", "print(\"Matrix B : \\n\", B)\n", "\n", "# Matrices Hadamard product\n", "C = A * B\n", "# printing product of two matrices\n", "print(\"\\n A * B = \\n\", C)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "440e119e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "90762d2c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b8cec02e", "metadata": {}, "source": [ "### d. Matrix Multiplication (Matrix Dot Product)\n", "- Matrix multiplication, also called the `matrix dot product` is more complicated than the previous operations and involves a rule as not all matrices can be multiplied together. \n", "- The rule for matrix multiplication is \"the number of `columns` in the first matrix must equal the number of `rows` in the second matrix\". The result is a new matrix with m rows and k columns.\n", "- The intuition for the matrix multiplication is that we are calculating the dot product between each row in matrix A with each column in matrix B. \n", "\n", "$$\n", "C_{m,k} = A_{m,n} @ B_{n,k}\n", "$$\n", "\n", "$$\n", "C_{3,2} = A_{3,2} @ B_{2,2}\n", "$$\n", "\n", "\n", "$$\n", "C_{3,2} = \n", "\\begin{bmatrix}\n", "a_{1,1} & a_{1,2} \\\\\n", "a_{2,1} & a_{2,2} \\\\\n", "a_{3,1} & a_{3,2} \n", "\\end{bmatrix} @\n", "\\begin{bmatrix}\n", "b_{1,1} & b_{1,2} \\\\\n", "b_{2,1} & b_{2,2}\n", "\\end{bmatrix}\n", "$$\n", "\n", "$$\n", "C_{3,2} = \n", "\\begin{bmatrix}\n", "a_{1,1}.b_{1,1}+a_{1,2}.b_{2,1} &\\hspace{.7 cm} a_{1,1}.b_{1,2}+a_{1,2}.b_{2,2} \\\\\n", "a_{2,1}.b_{1,1}+a_{2,2}.b_{2,1} &\\hspace{.7 cm} a_{2,1}.b_{1,2}+a_{2,2}.b_{2,2} \\\\\n", "a_{3,1}.b_{1,1}+a_{3,2}.b_{2,1} &\\hspace{.7 cm} a_{3,1}.b_{1,2}+a_{3,2}.b_{2,2}\n", "\\end{bmatrix}\n", "$$\n", "- In Python, matrix multiplication operation can be performed the `numpy.dot()` function or using the `newer @ operator`, since Python version 3.5.\n" ] }, { "cell_type": "code", "execution_count": 69, "id": "06a6b595", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[1 2]\n", " [3 4]\n", " [5 6]]\n", "\n", "Matrix B = \n", " [[1 2]\n", " [3 4]]\n", "\n", " A.dot(B) = \n", " [[ 7 10]\n", " [15 22]\n", " [23 34]]\n", "\n", "A @ B = \n", " [[ 7 10]\n", " [15 22]\n", " [23 34]]\n" ] } ], "source": [ "A = np.array([ [1, 2],[3, 4], [5, 6]])\n", "B = np.array([ [1, 2],[3, 4]])\n", "print(\"Matrix A = \\n\", A)\n", "print(\"\\nMatrix B = \\n\", B)\n", "\n", "\n", "# multiply matrices using dot function\n", "C = np.dot(A,B)\n", "# print dot product matrix\n", "print(\"\\n A.dot(B) = \\n\", C)\n", "\n", "# multiply matrices with @ operator\n", "D = A @ B\n", "\n", "# print dot product matrix\n", "print(\"\\nA @ B = \\n\", D)" ] }, { "cell_type": "code", "execution_count": null, "id": "f7763d48", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d54a0ed5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ab39dcca", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "859cb7c6", "metadata": {}, "source": [ "### e. Matrix-Vector Multiplication\n", "- A matrix and a vector can be multiplied together as long as the rule of matrix multiplication is observed. Specifically, that the number of columns in the matrix must equal the number of items in the vector. \n", "- As with matrix multiplication, the operation can be written using the dot notation. \n", "- Because the vector only has one column, the result is always a **vector**.\n", "\n", "$$\n", "C_{n} = A_{m,n} @ V_{n}\n", "$$\n", "\n", "$$\n", "C_{2} = A_{3,2} @ V_{2}\n", "$$\n", "\n", "\n", "$$\n", "C_{2} = \n", "\\begin{bmatrix}\n", "a_{1,1} & a_{1,2} \\\\\n", "a_{2,1} & a_{2,2} \\\\\n", "a_{3,1} & a_{3,2} \n", "\\end{bmatrix} @\n", "\\begin{bmatrix}\n", "v_{1} \\\\\n", "v_{2}\n", "\\end{bmatrix}\n", "$$\n", "\n", "$$\n", "C_{n} = \n", "\\begin{bmatrix}\n", "a_{1,1}.v_1+a_{1,2}.v_2 \\\\\n", "a_{2,1}.v_1+a_{2,2}.v_2 \\\\\n", "a_{3,1}.v_1+a_{3,2}.v_2 \n", "\\end{bmatrix}\n", "$$\n", "- In Python a matrix can be multiplied with a vector using the `numpy.dot()` function or using the `newer @ operator`, since Python version 3.5.\n" ] }, { "cell_type": "code", "execution_count": 70, "id": "2dab04fc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[1 2]\n", " [3 4]\n", " [5 6]]\n", "\n", "Matrix v = \n", " [2 3]\n", "\n", " A.dot(v) = \n", " [ 8 18 28]\n", "\n", "A @ v = \n", " [ 8 18 28]\n" ] } ], "source": [ "A = np.array([ [1, 2],[3, 4], [5, 6]])\n", "v = np.array([2, 3])\n", "print(\"Matrix A = \\n\", A)\n", "print(\"\\nMatrix v = \\n\", v)\n", "\n", "\n", "C = A.dot(v)\n", "print(\"\\n A.dot(v) = \\n\", C)\n", "\n", "D = A @ v\n", "\n", "# print dot product matrix\n", "print(\"\\nA @ v = \\n\", D)" ] }, { "cell_type": "code", "execution_count": null, "id": "43fe812a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d9059399", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b1cc8059", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "27a33951", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b3f7f41d", "metadata": {}, "source": [ "### f. Frobenius Norm\n", "- We have already talked about Norms with respect to vectors and we saw how they are used to calculate their magnitude from origin.\n", "- Similar to L2 norm of a vector, the Frobenius norm of a matrix is calculated as the square root of the sum of the absolute squares of its elements.\n", "- In simple words, Frobenius norm of a matrix is the sum of the magnitude of all vectors in a matrix.\n", "\n", "

$\\left\\lVert x \\right\\rVert_F$ $=$ $\\sqrt{\\sum_{i,j} x_{i,j}^2}$

" ] }, { "cell_type": "code", "execution_count": 71, "id": "c6b52929", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[0 2 1]\n", " [2 0 0]]\n", "\n", " Frobenius Norm = 3.0\n" ] } ], "source": [ "A = np.array([ [0, 2, 1],[2, 0, 0]])\n", "print(\"Matrix A = \\n\", A)\n", "\n", "f = np.linalg.norm(A, ord=None)\n", "print(\"\\n Frobenius Norm =\", f)\n" ] }, { "cell_type": "code", "execution_count": null, "id": "3ec0b503", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4bd49512", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "860bb38f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e9d69175", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "68146673", "metadata": {}, "source": [ "### g. Transpose of a Matrix\n", "- A defined matrix can be transposed, which creates a new matrix with the number of `columns and rows flipped`. This is denoted by the superscript T next to the matrix AT.\n", "\n", "\n", "$$\n", "A_{m,n} = \n", "\\begin{bmatrix}\n", "a_{1,1} & a_{1,2} & \\cdots & a_{1,n} \\\\\n", "a_{2,1} & a_{2,2} & \\cdots & a_{2,n} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{m,1} & a_{m,2} & \\cdots & a_{m,n} \n", "\\end{bmatrix} \\hspace{3 cm} {A^T}_{n,m} = \n", "\\begin{bmatrix}\n", "a_{1,1} & a_{2,1} & \\cdots & a_{m,1} \\\\\n", "a_{1,2} & a_{2,2} & \\cdots & a_{m,2} \\\\\n", "\\vdots & \\vdots & \\ddots & \\vdots \\\\\n", "a_{1,n} & a_{2,n} & \\cdots & a_{m,n} \n", "\\end{bmatrix}\n", "$$\n", "\n", "\n", "$$\n", "A_{3,2} = \n", "\\begin{bmatrix}\n", "1 & 2 \\\\\n", "3 & 4 \\\\\n", "5 & 6 \n", "\\end{bmatrix} \\hspace{3 cm} {A^T}_{2,3} = \n", "\\begin{bmatrix}\n", "1 & 3 & 5 \\\\\n", "2 & 4 & 6\n", "\\end{bmatrix}\n", "$$\n", "\n", "- The operation has no effect if the matrix is symmetrical, e.g. has the same number of columns and rows and the same values at the same locations on both sides of the invisible diagonal line (The columns of AT are the rows of A).\n", "\n", "$$\n", "A_{3,3} =\\begin{bmatrix} \n", " 4 & 1 & 7\\\\ \n", " 1 & -3 & 5\\\\\n", " 7 & 5 & 2\n", " \\end{bmatrix}\\hspace{3 cm} {A^T}_{3,3} = \n", "\\begin{bmatrix}\n", "4 & 1 & 7 \\\\\n", "1 & -3 & 5 \\\\\n", "7 & 5 & 2 \n", "\\end{bmatrix}\n", "$$\n", " \n", " \n", "\n", "- We can transpose a matrix in NumPy by calling the T attribute." ] }, { "cell_type": "code", "execution_count": 72, "id": "6b00f24f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original Matrix A: \n", " [[1 2]\n", " [3 4]\n", " [5 6]]\n", "\n", "Transpose Matrix: \n", " [[1 3 5]\n", " [2 4 6]]\n" ] } ], "source": [ "A = np.array([ [1, 2],\n", " [3, 4],\n", " [5, 6]])\n", "print(\"Original Matrix A: \\n\", A)\n", "\n", "# computing transpose of Matrix A using T attribute\n", "C = A.T\n", "C = np.transpose(A)\n", "print(\"\\nTranspose Matrix: \\n\", C)" ] }, { "cell_type": "code", "execution_count": null, "id": "05627a0e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "93df4fcc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1ac97a32", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c9877283", "metadata": {}, "source": [ "### h. Determinant of a Matrix\n", "\n", "- Matrix determinant can be thought of as a function whose input is a square matrix and output is a scalar value.\n", "- The determinant of a matrrix is used to compute the inverse of a matrix.\n", "- If the determinant of a matrix is zero, that means it is a singular matrix, is non-invertable and having linearly dependent columns.\n", "- Moreover, determinant is used in solving linear equations and it also caputures the notions of how linear transformation change area or volume.\n", "- The determinant also describes the way a matrix will scale another matrix when they are multiplied together. For example, if the determinant of a matrix is one, it preserves the space of other matrix.\n", "- To calculate the determinant of a 2x2 matrix, we multiply the component `a` by the determinant of the “submatrix” formed by ignoring `a's` row and column. In this case, this submatrix is the 1×1 matrix consisting of `d`, and its determinant is just `d`. So the first term of the determinant is `ad`. Next, we proceed to the second component of the first row, which is the upper right component `b`. We multiply `b` by the determinant of the submatrix formed by ignoring `b's` row and column, which is `c`. So, the next term of the determinant is `bc`. The total determinant is simply the first term ad minus the second term. :
\n", "$\\hspace{2 cm}A = \\begin{bmatrix} \n", " a & b\\\\ \n", " c & d\n", " \\end{bmatrix} $ \n", "\n", "$\\hspace{2 cm}det(A) = |A| = ad - cb$\n", "\n", "- Now that we know how to calculate determinant of a 2x2 matrix, we can generalize this technique to compute determinant of larger matrices using recursion.\n", "- Let us calculate the determinant of a 3x3 matrix:
\n", "$\\hspace{2 cm}B =$ \n", "$\\begin{bmatrix} \n", " a & b & c\\\\ \n", " d & e & f\\\\\n", " g & h & i\n", " \\end{bmatrix} $ \n", " \n", "$\\hspace{2 cm}det(B) = |B| = a\\begin{vmatrix} e & f\\\\h & i \\end{vmatrix} - b\\begin{vmatrix} d & f\\\\g & i \\end{vmatrix} +c\\begin{vmatrix} d & e\\\\g & h \\end{vmatrix} = a(ef-hf) - b(di-gf) + c(dh-ge)$\n", "\n", "- In NumPy, the determinant of a matrix can be calculated using the `det()` function." ] }, { "cell_type": "code", "execution_count": 73, "id": "1dabbb50", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A: \n", " [[-3 1]\n", " [ 6 -4]]\n", "det(A): 6.0\n", "\n", "Matrix B: \n", " [[ 1 2 4]\n", " [ 2 -1 3]\n", " [ 0 5 1]]\n", "det(B): 19.999999999999996\n" ] } ], "source": [ "A = np.array([[-3, 1],[6, -4]])\n", "print(\"Matrix A: \\n\", A)\n", "det1 = numpy.linalg.det(A)\n", "print(\"det(A): \", det1)\n", "\n", "\n", "B = np.array([[1, 2, 4],[2, -1, 3],[0, 5, 1]])\n", "print(\"\\nMatrix B: \\n\", B)\n", "det2 = numpy.linalg.det(B)\n", "print(\"det(B): \", det2)" ] }, { "cell_type": "code", "execution_count": 74, "id": "df0912b6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A: \n", " [[ 6 -3]\n", " [ 4 -2]]\n", "det(A): 0.0\n", "\n", "Matrix B: \n", " [[ 1 1 1]\n", " [ 2 3 1]\n", " [ 0 -1 1]]\n", "det(B): 0.0\n", "\n", "Matrix C: \n", " [[2 1 2]\n", " [1 0 1]\n", " [4 1 4]]\n", "det(C): 0.0\n" ] } ], "source": [ "A = np.array([[6, -3],[4, -2]])\n", "print(\"Matrix A: \\n\", A)\n", "det1 = numpy.linalg.det(A)\n", "print(\"det(A): \", det1)\n", "\n", "B = np.array([[1, 1, 1],[2, 3, 1],[0, -1, 1]])\n", "print(\"\\nMatrix B: \\n\", B)\n", "det2 = numpy.linalg.det(B)\n", "print(\"det(B): \", det2)\n", "\n", "C = np.array([[2, 1, 2],[1, 0, 1],[4, 1, 4]])\n", "print(\"\\nMatrix C: \\n\", C)\n", "det3 = numpy.linalg.det(C)\n", "print(\"det(C): \", det3)" ] }, { "cell_type": "markdown", "id": "46f55565", "metadata": {}, "source": [ "> Note the determinant of matrix A is zero, that means matrix A is not invertable. This can be observed that the two columns of matrix A are not independent, or we can say that the two columns of matrix A are dependent. So the first column is a multiple of the second column, i.e., you can multiply the second column by -2 to get the first column. So that means the matrix A represent two parallel lines and it is impossible to solve this matrix for unknowns." ] }, { "cell_type": "code", "execution_count": null, "id": "561f2a67", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "aa2c0548", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a81864c4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6c0bc386", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c88bdf68", "metadata": {}, "source": [ "### i. Inverse of a Matrix\n", "- The way numbers has reciprocals, and when we multiply a number by its reciprocal we get a 1.\n", "- Similarly a matrix can have an inverse, and when we multiply a matrix by its inverse, we get the identity matrix.\n", "- The inverse of matrix is used of find the solution of linear equations through the matrix inversion method. \n", "\n", "$\\hspace{2 cm}AA^{-1} = A^{-1}A = I_n$\n", "- For a matrix to have an inverse, it has to satisfy two conditions:\n", " - The matrix needs to be a square matrix.\n", " - The determinant of the matrix must not be zero.\n", "- Almost all of us know the shortcut way to calculate the Inverse of a 2x2 matrix. \n", " - Interchange the main diagonal elements (`a` and `d`).\n", " - Negate the remaining two elements (`b` and `c`).\n", " - Devide the resulting matrix with the determinant of the original matrix.\n", ":
\n", "$\\hspace{2 cm}A = \\begin{bmatrix} \n", " a & b\\\\ \n", " c & d\n", " \\end{bmatrix} $ \n", "\n", "\n", "$\\hspace{2 cm}A = \\frac{1}{det(A)}\\begin{bmatrix} \n", " d & -b\\\\ \n", " -c & a\n", " \\end{bmatrix} $ \n", "\n", "\n", "- Formal steps to compute the inverse of a matrix are:\n", " - Step 1: Find the `matrix of minors` for the given matrix.\n", " - Step 2: Turn that matrix into the `matrix of cofactors`.\n", " - Step 3: Find the adjugate or `adjoint of matrix`.\n", " - Step 4: Divide adjugate matrix by `determinant` of given matrix." ] }, { "cell_type": "code", "execution_count": null, "id": "13c44db3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "45a704b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5f1468ea", "metadata": {}, "source": [ "**Example:** Perform step by step calculations to calculate the Inverse of\n", "$\\hspace{1 cm}A_{3,3} = \\begin{bmatrix} 3 & 0 & 2\\\\ 2 & 0 & -2\\\\0 & 1 & 1\\end{bmatrix} $ " ] }, { "cell_type": "markdown", "id": "91f8b855", "metadata": {}, "source": [ "**Step 1:** Find the `matrix of minors` for the given matrix.\n", "- For each element of the matrix:\n", " - Ignore the values on the current row and column\n", " - Calculate the determinant of the remaining values\n", "- Put those determinants into a matrix and you get the `matrix of minors`, as shown below:\n", "$$\\begin{bmatrix} 2 & 2 & 2\\\\ -2 & 3 & 3\\\\0 & -10 & 0\\end{bmatrix} $$ \n", "\n", "\n", "\n", "**Step 2:** Turn that matrix into the `matrix of cofactors`.\n", "- Multiply each element of matrix of minors with alternate +1 and -1.\n", "- Start from first row (left to right), then second row and so on.\n", "$$\\begin{bmatrix} 2 & -2 & 2\\\\ 2 & 3 & -3\\\\0 & 10 & 0\\end{bmatrix} $$ \n", "\n", "\n", "**Step 3:** Find the adjugate or `adjoint of matrix`.\n", "- Take transpose of matrix of cofactors and you get the adjugate or adjoint matrix as shown below:\n", "$$\\begin{bmatrix} 2 & 2 & 0\\\\ -2 & 3 & 10\\\\2 & -3 & 0\\end{bmatrix} $$ \n", "\n", "\n", "**Step 4:** Divide adjugate matrix by `determinant` of given matrix.\n", "- Find the determinant of given matrix, which is 10.\n", "- Divide each element of adjugate matrix by 10 to get the inverse of matrix as shown below:\n", "$$\\begin{bmatrix} 1/5 & 1/5 & 0\\\\ -1/5 & 3/10 & 1\\\\1/5 & -3/10 & 0\\end{bmatrix} $$ \n" ] }, { "cell_type": "markdown", "id": "535a9897", "metadata": {}, "source": [ ">- To rescue us from all this labour, Python gives us `numpy.linalg.inv()` method to compute the inverse of a non-singular matrix (a square matrix having non-zero dterminant)" ] }, { "cell_type": "code", "execution_count": 75, "id": "32a5a89d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A: \n", " [[ 3 0 2]\n", " [ 2 0 -2]\n", " [ 0 1 1]]\n", "det(A): 10.000000000000002\n", "\n", "Inverse of Matrix A: \n", " [[ 0.2 0.2 0. ]\n", " [-0.2 0.3 1. ]\n", " [ 0.2 -0.3 -0. ]]\n", "\n", "np.dot(A,AI): \n", " [[1 0 0]\n", " [0 1 0]\n", " [0 0 1]]\n" ] } ], "source": [ "A = np.array([ [3,0,2],[2,0,-2],[0,1,1]])\n", "print(\"Matrix A: \\n\", A)\n", "print(\"det(A): \", numpy.linalg.det(A))\n", "\n", "AI = numpy.linalg.inv(A)\n", "print(\"\\nInverse of Matrix A: \\n\", AI)\n", "\n", "# Verify\n", "I = np.dot(A,AI)\n", "print(\"\\nnp.dot(A,AI): \\n\", I.astype(int))" ] }, { "cell_type": "code", "execution_count": null, "id": "0b30d25e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "70266f48", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "85872e18", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "32ea9ab3", "metadata": {}, "source": [ "### j. Trace of a Matrix\n", "- The trace of a matrix is the **sum** of all of the **diagonal entries** of a matrix.\n", "$$\\sum_i A_{i,i}$$\n", "\n", "- We can calculate the trace of a matrix in NumPy using the `trace()` method." ] }, { "cell_type": "code", "execution_count": 76, "id": "66b2feca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original Matrix = \n", " [[1 2 3]\n", " [4 5 6]\n", " [7 8 9]]\n", "\n", "Trace value = 15\n" ] } ], "source": [ "A = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", "print(\"Original Matrix = \\n\", A)\n", "print(\"\\nTrace value = \", np.trace(A))" ] }, { "cell_type": "markdown", "id": "49c95306", "metadata": {}, "source": [ "- Properties of Trace of a Matrix:\n", " - Tr($A$) = Tr($A^T$): The trace of a matrix is equal to the trace of its transpose, because the main diagonal remains the same after transpose.\n", " - Tr($ABC$) = Tr($CAB$) = Tr($BCA$): If we multiply three matrices in different combinations, their trace remains the same\n", "- You can use trace to calculate a matrix's Frobenius norm: $$||A||_F = \\sqrt{\\sum_{i,j} x_{i,j}^2} = \\sqrt{\\mathrm{Tr}(AA^\\mathrm{T})}$$" ] }, { "cell_type": "code", "execution_count": 77, "id": "53e640c7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A = \n", " [[0 2 1]\n", " [2 0 0]]\n", "\n", " Frobenius Norm = 3.0\n", "\n", "np.trace(np.dot(A,A.T))**.5 = 3.0\n" ] } ], "source": [ "A = np.array([ [0, 2, 1],[2, 0, 0]])\n", "print(\"Matrix A = \\n\", A)\n", "\n", "f1 = np.linalg.norm(A, ord=None)\n", "print(\"\\n Frobenius Norm =\", f1)\n", "\n", "AT = A.T\n", "AAT = np.dot(A, AT)\n", "tr_AAT = np.trace(AAT)\n", "f2 = (tr_AAT)**.5\n", "print(\"\\nnp.trace(np.dot(A,A.T))**.5 = \", f2)" ] }, { "cell_type": "code", "execution_count": null, "id": "c1ddab15", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "638568d1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5b1d344e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ddb62cf0", "metadata": {}, "source": [ "### k. Rank of a Matrix\n", "- The maximum number of `linearly independent` columns (or rows ) of a matrix is called its rank. (Two columns are linearly dependent if you can add+scale one column to make the other)\n", "- The rank of a $m \\times n$ matrix is less than equal to the minimum of its rows and columns.\n", "- The rank of a matrix would be zero only if the matrix had no elements. If a matrix had even one element, its minimum rank would be one.\n", "- To calculate the rank of a matrix, we need to convert the matrix into its row-echlon form (which we will study iun the next section). \n", "- In Python, we can calculate the rank of a matrkx using `np.linalg.matrix_rank()` method." ] }, { "cell_type": "code", "execution_count": 78, "id": "81869dc6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Rank of matrix having zero elements = 0\n", "\n", "A:\n", " [[1 2 3]]\n", "Rank of A = 1\n", "\n", "B:\n", " [[1 2 3]\n", " [3 2 0]]\n", "Rank of B = 2\n", "\n", "C:\n", " [[1 2 3]\n", " [5 6 9]\n", " [3 2 0]]\n", "Rank of C = 3\n", "\n", "C:\n", " [[1 2 3 4]\n", " [9 6 2 4]]\n", "Rank of C = 2\n" ] } ], "source": [ "mat = np.array([])\n", "print(\"Rank of matrix having zero elements = \", np.linalg.matrix_rank(mat))\n", "\n", "A = np.array([[1,2,3]])\n", "print(\"\\nA:\\n\", A)\n", "print(\"Rank of A = \", np.linalg.matrix_rank(A))\n", "\n", "B = np.array([[1,2,3], [3, 2, 0]])\n", "print(\"\\nB:\\n\",B)\n", "print(\"Rank of B = \", np.linalg.matrix_rank(B))\n", "\n", "C = np.array([[1,2,3], [5,6,9], [3, 2, 0]])\n", "print(\"\\nC:\\n\",C)\n", "print(\"Rank of C = \", np.linalg.matrix_rank(C))\n", "\n", "C = np.array([[1,2, 3, 4], [9, 6, 2, 4]])\n", "print(\"\\nC:\\n\", C)\n", "print(\"Rank of C = \", np.linalg.matrix_rank(C))" ] }, { "cell_type": "code", "execution_count": 79, "id": "10972cef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A:\n", " [[1 3 2]\n", " [2 6 4]\n", " [3 9 6]]\n", "Rank of A = 1\n", "B:\n", " [[1 0 1]\n", " [2 2 4]\n", " [3 2 5]]\n", "Rank of B = 2\n" ] } ], "source": [ "# all columns are linearly dependent on each other\n", "# 2nd = 3 times 1st col and 3rd col = 2 times 1st column\n", "A = np.array([[1,3, 2], [2, 6, 4],[3, 9, 6]]) # all columns are dependent \n", "print(\"A:\\n\", A)\n", "print(\"Rank of A = \", np.linalg.matrix_rank(A))\n", "\n", "\n", "# 1st and 2nd col are independent, but 3rd column = 1st col + 2nd col\n", "B = np.array([[1,0, 1], [2, 2, 4],[3, 2, 5]]) \n", "print(\"B:\\n\", B)\n", "print(\"Rank of B = \", np.linalg.matrix_rank(B))" ] }, { "cell_type": "code", "execution_count": null, "id": "bc6aa356", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f44c5251", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4a0c7950", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c503be81", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e1018041", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "761fac21", "metadata": {}, "source": [ "# Section III: (Solving System of Linear Equations) " ] }, { "cell_type": "code", "execution_count": 80, "id": "840450fb", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import numpy.linalg\n", "import math\n", "import scipy\n", "from matplotlib import pyplot as plt\n", "from plot_helper import * # Helper functions: plot_vector, plot_linear_transformation, plot_linear_transformations" ] }, { "cell_type": "markdown", "id": "e03a3cf3", "metadata": {}, "source": [ "## 1. An Overview of Linear Equations" ] }, { "cell_type": "markdown", "id": "81044337", "metadata": {}, "source": [ "### a. What is a Linear Equation?\n", "- An equation in which the variable's highest power is one is called a linear equation. A linear equation can have one, two, three and so on to `n` variables. A linear equation having two variables can be written as:\n", "$$ax + by +c = 0$$\n", "- A linear equation of two variables when plotted on a graph gives a straight line. A straight line equation is shown below: \n", "

$$ y = c + mx$$

\n", "- Where, \n", " - $y$ is the dependent variable.\n", " - $x$ is the independent variable.\n", " - $c$ is the y-intercept or the value of $y$ when $x$ is zero.\n", " - $m$ is the slope/gradient of the line, which tells us two things\n", " - The line is rising or falling (Positive or negative relationship between the two variables)\n", " - Steepness of line (how closely related the two variables are)" ] }, { "cell_type": "code", "execution_count": null, "id": "e2edb146", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "182572ae", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9589b541", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "73ab5816", "metadata": {}, "source": [ "**Example 1:** Let us first see how we can draw a line from a linear equation of two variables using Matplotlib. \n", "$$ 2x - y = -4 $$\n", "$$ y = 4 + 2x $$\n", "\n", "We need to calculate at least two (x,y) pair of points that statisfies this equation, and then we can draw a line connecting those points." ] }, { "cell_type": "code", "execution_count": 81, "id": "8b91b6e8", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.array([0, 5])\n", "y = 4 + 2 * x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.title(\"Line representing equation: y = 4 + 2x\")\n", "ax.set_xlim([0, 5])\n", "ax.set_ylim([1, 14])\n", "ax.plot(x, y)\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "079d9e28", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "05ada2db", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3aabc579", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "62893c11", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "52278afb", "metadata": {}, "source": [ ">**Let us change the y-intercept, without changing the slope, and draw these three lines:**\n", "$$y=4+2x$$\n", "$$y=9+2x$$\n", "$$y=-2+2x$$" ] }, { "cell_type": "code", "execution_count": 82, "id": "33d8de4a", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 20, 5) # start, finish, n points\n", "y1 = -2 + 2*x\n", "y2 = 4 + 2*x\n", "y3 = 9 + 2*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.set_xlim([0, 6])\n", "ax.set_ylim([-2, 16])\n", "plt.title(\"Line representing three equations\")\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "ax.plot(x, y3, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "d84d7adf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f5c3b13f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "91e26c24", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0ef32076", "metadata": {}, "source": [ ">**Let us change the slope, without changing the y-intercept, and draw these three lines:**\n", "$$y=4+2x$$\n", "$$y=4+0x$$\n", "$$y=4-2x$$" ] }, { "cell_type": "code", "execution_count": 83, "id": "08d2702d", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 20, 5) # start, finish, n points\n", "y1 = 4 + 2*x\n", "y2 = 4 + 0*x\n", "y3 = 4 - 2*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.set_xlim([0, 6])\n", "ax.set_ylim([-4, 12])\n", "plt.title(\"Line representing three equations\")\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='purple')\n", "ax.plot(x, y3, c='red')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "7d3f7889", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "495dcbe9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5ef34dc0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "aab53375", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8a44141d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "31a45c50", "metadata": {}, "source": [ "**Example 2:**\n", "- You went to a Rent-a-Car company to rant a car for few hours. The company representative told you that the base payment that you have to give is Rs5000/ and then for every hour you have to pay Rs2000/ additional price.\n", "- Can you write a linear equation keeping in view of the dependent variable `rent price` and independent variable `time`
\n", "\n", "$$ y = 5000 + 2000x$$\n", "- Where, \n", " - $y$ is the dependent/outcome/response variable `rent`.\n", " - Value 5000 is is the minimum/base value (y-intercept).\n", " - $x$ is the independent/feature/predictor variable `time`.\n", " - Value 2000 is the coefficient of $x$, which is the slope." ] }, { "cell_type": "code", "execution_count": 84, "id": "eb8c8be3", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(0, 10, 5) # start, finish, n points\n", "y = 5 + 2*x # values are in thousands\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('Time in Hours')\n", "plt.ylabel('Rent in thousands')\n", "ax.plot(x, y, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "6ee942d9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "aac68730", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "85178983", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0f5b35bf", "metadata": {}, "source": [ "**Example 3:**\n", "- Given the following linear equation which describes the relationship between the years of education, a person has achieved and the salary in thousands per month. Plot the linear equation to understand the relationship.
\n", "\n", "$$ y = 20 + 5x$$\n", "- Where, \n", " - $y$ is the dependent/outcome/response variable `salary in thousands`.\n", " - Value 20 means Rs20K, which is the minimum/base salary, that one gets even if he/she is uneducated (y-intercept).\n", " - $x$ is the independent/feature/predictor variable `education in years`.\n", " - Value 5 means Rs5K, is the coefficient of $x$, which is the slope" ] }, { "cell_type": "code", "execution_count": 85, "id": "5a8c0999", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(0, 20, 5) # start, finish, n points\n", "y = 20 + 5*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('Education in Years')\n", "plt.ylabel('Salary in thousands')\n", "ax.plot(x, y, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "36330739", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cefd0911", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "61745ea7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3b4a26e6", "metadata": {}, "source": [ "**Example 4:**\n", "- Given the following linear equation which describes the relationship between the drug dosage and forgetness level.
\n", "\n", "$$ y = 10 - 1.5x$$\n", "- Where, \n", " - $y$ is the dependent/outcome/response variable `forgetness level`.\n", " - Value 10 is the forgetness level if no drug is given to the patient (y-intercept).\n", " - $x$ is the independent/feature/predictor variable `drug dosage`.\n", " - Value 1.5 is the coefficient of $x$, which is the slope." ] }, { "cell_type": "code", "execution_count": 86, "id": "384ea33f", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(0, 20, 5) # start, finish, n points\n", "y = 10 - 1.5*x\n", "\n", "fig, ax = plt.subplots()\n", "ax.set_xlim([0, 9])\n", "ax.set_ylim([-5, 15])\n", "plt.xlabel('Drug Dosage in ml')\n", "plt.ylabel('Forgetness Level')\n", "ax.plot(x, y, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "f053f7a2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "811ffad9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "88a7eb5b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "66d336a1", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "be7f56e9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "7500a760", "metadata": {}, "source": [ "### b. What is a System of Linear Equations?\n", "- A system of linear equations consists of two or more linear equations, that you deal with all together at once.\n", "- An example system of linear equations having `two equations` and `two variables` is shown below:\n", "$$2x+5y=1$$\n", "$$3x-y=2$$\n", "\n", "- An example system of linear equations having `three equations` and `three variables` is shown below:\n", "$$x+y+z=3$$\n", "$$𝑥 + 2𝑦 +3z= 0$$\n", "$$𝑥 + 3𝑦 + 2𝑧 = 3$$ \n", "\n", "**Solution(s) to a System of Linear Equations:**\n", "- The solution to a system of linear equations are the values of variable that when put in the equation satisfies them all.\n", "- The unique solution to a system of linear equations having two variables is a 2-D point $(x,y)$, where the two `lines` intersect.\n", "- The unique solution to a system of linear equations having three variables is a 3-D point $(x,y,z)$, where the three `planes` intersect.\n", "- The three scenarios that you may come across while trying to solve a system of linear equations are:\n", " - **Unique Solution:** You get exactly one value of every variable, that satisfies all the equations.\n", " - **Infinite Solution:** You get infinite many values for every variable, that satisfies all the equations.\n", " - **No Solution:** You get no value for every bariable, that satisfies all the equations." ] }, { "cell_type": "code", "execution_count": null, "id": "25423816", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "36945e7e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "28d24638", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c257ce72", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "210c0d11", "metadata": {}, "source": [ "## 2. How to Solve a System of Linear Equations\n", "- There are different ways to solve a set of linear equations:\n", " - Substitution method\n", " - Elimination method\n", " - Graphing method" ] }, { "cell_type": "markdown", "id": "d752a626", "metadata": {}, "source": [ "### a. Using Substitution Strategy:\n", "- We substitute the value of a variable from one equation to the other.\n", "- Use this strategy, whenever there is a variable in the system with a coefficient of 1.\n", "- For example:
\n", "$\\hspace{1 cm}y = 3x$ and $-5x + 2y = 2$" ] }, { "cell_type": "markdown", "id": "1d04ad21", "metadata": {}, "source": [ "### b. Using Elimination Strategy:\n", "- Typically best option if no variable in system has coefficient of one.\n", "- Use addition property of equations to eliminate variables and if necessary, multiply one or both equations to make elimination of a variable possible.\n", "- For example:
\n", "$\\hspace{1 cm}4x - 3y = 35$ and $-3x + 8y = 10$" ] }, { "cell_type": "markdown", "id": "06c5e75a", "metadata": {}, "source": [ "### c. Using Graphing Strategy:\n", "- We can take a graph paper and draw the lines corresponding to the linear equations, which will of course make a straight line.\n", "- If the two lines intersect, the point of intersection gives us the solution of the two unknowns.\n", "- If the two lines are parallel to eachother, that means there is no solution to the set of two linear equations.\n", "- If the two lines overlap, then we say that there are infinite solutions to the set of two linear equations." ] }, { "cell_type": "code", "execution_count": null, "id": "560e76c0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8657e77b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7ed33d6f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "104177a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a447f680", "metadata": {}, "source": [ "**Example 5:**\n", "Solve the following set of two linear equations with two unknowns using substitution strategy, or elimination strategy (at your own). Use Matplotlib and see if two lines representing the two equations intersect.
\n", "$$ y = 1 + 2x$$\n", "$$ y = 3 -\\frac{1}{2}x$$" ] }, { "cell_type": "code", "execution_count": 87, "id": "a6ad8013", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 10, 1000) # start, finish, n points\n", "y1 = 1 + 2*x\n", "y2 = 3 - 0.5*x\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.set_xlim([-2, 3])\n", "ax.set_ylim([-1, 5])\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "27840394", "metadata": {}, "source": [ ">- The above graph represents the two equations as straight lines and the solution of these two set of linear equations with two unknowns is the point where both the equations are intersecting with each other, and that is $(\\frac{4}{5},\\frac{13}{5})$ or $(0.8, 2.6)$" ] }, { "cell_type": "code", "execution_count": null, "id": "df0f9d6a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bb2766a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cafac820", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "31fed10b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "26a6231c", "metadata": {}, "source": [ "**Example 6:**\n", "Solve the following set of two linear equations with two unknowns using substitution strategy, or elimination strategy (at your own). Use Matplotlib and see if two lines representing the two equations intersect.
\n", "$$ y = 1 + 2x$$\n", "$$ y = 3 + 2x$$" ] }, { "cell_type": "code", "execution_count": 88, "id": "2c7f9f60", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 10, 1000) # start, finish, n points\n", "y1 = 1 + 2*x\n", "y2 = 3 + 2*x\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.set_xlim([-2, 3])\n", "ax.set_ylim([-1, 5])\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "cf966d34", "metadata": {}, "source": [ ">- No Solution (Parallel lines having same slope, but different y-intercept" ] }, { "cell_type": "markdown", "id": "d51e9d05", "metadata": {}, "source": [ "**Example 7:**\n", "Solve the following set of two linear equations with two unknowns using substitution strategy, or elimination strategy (at your own). Use Matplotlib and see if two lines representing the two equations intersect.
\n", "\n", "$$ y = 1 + 2x$$\n", "\n", "$$ 4x - 2y + 2 = 0$$" ] }, { "cell_type": "code", "execution_count": 89, "id": "3c59378d", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 10, 1000) # start, finish, n points\n", "y1 = 1 + 2*x\n", "y2 = 2/2 + (4/2)*x\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.set_xlim([-2, 3])\n", "ax.set_ylim([-1, 5])\n", "ax.plot(x, y1, 'r:')\n", "ax.plot(x, y2, 'g-.')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "c12536dd", "metadata": {}, "source": [ ">- Infinite Solutions (Parallel lines having same slope and same intercept)" ] }, { "cell_type": "code", "execution_count": null, "id": "c0f4874e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2b5b4206", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f00aad90", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c1ba7180", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d6c2bc8c", "metadata": {}, "source": [ "**Example 8:** \n", "- Suppose a robber robbed a bank and escaped in a car with speed of 150Km/hr. The sheriff start following the robber after 5 minutes in a car with speed of 180Km/hr. \n", "- We need to find out, whether the sherrif can catch the robber. And if yes, after how much time and what is the distance that both have travelled at that point. For simplicity, you can ignore acceleration and traffic conditions.\n", "- Let us write the two equations:\n", " - The bank robber equation is: $d = 150t$\n", " - The sherrif equation is: $d=180(t-5)$\n", "- Let us solve these equations graphically by plotting them using Matplotlib and see their point of intersection" ] }, { "cell_type": "code", "execution_count": 90, "id": "688ecdc9", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "t = np.linspace(0, 100, 100) # start, finish, n points\n", "# to manage units on graph divide both equations by 60\n", "d1 = 2.5*t\n", "d2 = 3*(t-5)\n", "fig, ax = plt.subplots()\n", "plt.xlabel('Time')\n", "plt.ylabel('Distance')\n", "ax.set_xlim([0, 40])\n", "ax.set_ylim([0, 100])\n", "ax.plot(t, d1, c='green',linestyle= '-.')\n", "ax.plot(t, d2, c='r', linestyle=':')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "555dbc7a", "metadata": {}, "source": [ "The above line graph shows that the two lines intersect at point $(30, 75)$. So we can infer that the sheriff has caught the robber after 30 minutes drive and after both has travelled a distnce of 75 Km." ] }, { "cell_type": "markdown", "id": "cb668e57-f726-4185-990e-bfe0e56ef469", "metadata": {}, "source": [ ">- **Replot the line graph, if the speed of the sheriff's car and robber's car is same**" ] }, { "cell_type": "code", "execution_count": 91, "id": "456b87de", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "t = np.linspace(0, 100, 100) # start, finish, n points\n", "d1 = 0 + 2.5*t\n", "d2 = -15 + 2.5*t\n", "fig, ax = plt.subplots()\n", "plt.xlabel('Time')\n", "plt.ylabel('Distance')\n", "ax.set_xlim([0, 40])\n", "ax.set_ylim([0, 100])\n", "ax.plot(t, d1, c='green',linestyle= '-.')\n", "ax.plot(t, d2, c='r', linestyle=':')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "0bcb571b", "metadata": {}, "source": [ "The two lines are parallel and never intersect. So we can infer that the sheriff will never be able to catch the theif." ] }, { "cell_type": "code", "execution_count": null, "id": "90571f72", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "ac7f3cdd", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5e07aef2-47a2-426d-aeda-ddc363c89e28", "metadata": {}, "source": [ ">- **Replot the line graph, if the speed of the sheriff's car and robber's car is same as well as they leave at the same time**" ] }, { "cell_type": "code", "execution_count": 92, "id": "b022c33a", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "t = np.linspace(0, 100, 100) # start, finish, n points\n", "d1 = 2.5*t\n", "d2 = 2.5*t\n", "fig, ax = plt.subplots()\n", "plt.xlabel('Time')\n", "plt.ylabel('Distance')\n", "ax.set_xlim([0, 40])\n", "ax.set_ylim([0, 100])\n", "#ax.plot(t, d1, c='green')\n", "#ax.plot(t, d2, c='red')\n", "ax.plot(t, d1, c='green',linestyle= '-.')\n", "ax.plot(t, d2, c='r', linestyle=':')\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "8c53090a", "metadata": {}, "source": [ "The two lines are having same slope and same y-intercept. So there are infinite solutions, the sheriff can catch the theif any time." ] }, { "cell_type": "code", "execution_count": null, "id": "0fe08dc9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "284dce0b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c470dcc9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "91f16b92", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "76f2c42e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d87706fc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "89baaac1", "metadata": {}, "source": [ "### d. Consistent and Inconsistent System of Linear Equations\n", "\n", "" ] }, { "cell_type": "code", "execution_count": null, "id": "fca4064f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "241e0823", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "db0c1cbd", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9514de39", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6863ba25", "metadata": {}, "source": [ "### e. Plotting a Linear Equation with Three Variables\n", "\n", "" ] }, { "cell_type": "code", "execution_count": null, "id": "309f29ab", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "02f03ad4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e4ac1109", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e7027aef", "metadata": {}, "source": [ "### f. Solving set of Three Linear Equations with Three Variables\n", "- The way we can solve a system of two linear equations with two variables using elimination and substitution strategy, we can solve a system of three linear equations with three variables using elimination and substitution.\n", "- The way we can visually plot the solution of a system of two linear equations with two variables by drawing the two lines and checking out their point of intersection. \n", "- Similarly, we can visually plot solution of a system of three linear equations with three variables by drawing the three planes for the three equations. Remember when two planes intersect, you get a line. The third plane may intersect in such a way that you get a unique point of intersection to all three planes. The third poane may intersect in such a way that you get a common line instead of a point. \n", "- Keeping this in mind, there can be following possibilities:" ] }, { "cell_type": "markdown", "id": "dd37ebef", "metadata": {}, "source": [ "\n", "\n", "**Consistant Independent System of Linear Equations:** \n", "- In this case, there is a unique solution.\n", "- Geometrically, all three planes intersect at exactly one point. In other words there is exactly one point that lies on all the three planes.\n", "- You can visualize it as the corner of your room, where the two walls and the floor intersect at exactly one point/corner.\n", "- An example of such a system of linear equations is shown below having a solution of $(4, 1, -2)$:\n", "\n", "$ \\hspace{2 cm}x +y +z = 3$\n", "\n", "$ \\hspace{2 cm}x +2y +3z = 0$\n", "\n", "$ \\hspace{2 cm}x +3y +2z = 3$" ] }, { "cell_type": "code", "execution_count": null, "id": "ffa886ca", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5ab51229", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c5653590", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d48c6d79", "metadata": {}, "source": [ "\n", "\n", "**Consistant Dependent System of Linear Equations:** \n", "- In this case, there are infinite solutions.\n", "- Geometrically, all the three planes will intersect with eachother and make a line of intersection instead of a point.\n", "- An example of such a system of linear equations is:\n", "\n", "$ \\hspace{2 cm}2x + 2y +2z = -2$\n", "\n", "$ \\hspace{2 cm}2x + 3y +2z = 4$\n", "\n", "$ \\hspace{2 cm}x + y +z = -1$" ] }, { "cell_type": "code", "execution_count": null, "id": "1fcef16c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9d86b2b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "bf0a0360", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "18a953ac", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ea979c1e", "metadata": {}, "source": [ "\n", "\n", "**Inconsistant System of Linear Equations:** \n", "- In this case, there is no solution.\n", "- There are three scenarios for this:\n", " - The three planes intersect with each other, but not at a common point\n", " - Two of the planes are parallel and intersect with the third plane, but not with each other\n", " - All three planes are parallel, so there is no point of intersection\n", "- Example of such a system of linear equations are:\n", " - $ x +y +z = 1$, $ 2x +2y +2z = 2$, and $ 4x +4y +4z = 4$\n", " - $ 2x -4y +z = 3$, $ 8x -2y +4z = 7$, and $ -4x +y -2z = -14$" ] }, { "cell_type": "code", "execution_count": null, "id": "417e186f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d6b03376", "metadata": {}, "source": [ "### g. Practice Problems\n", ">- **A system of linear equations is consistent if it has one or more solutions and inconsistent if no solutions exist. Furthermore, a consistent system is said to be independent if it has exactly one solution (often referred to as the unique solution) and dependent if it has more than one solution. Two systems of equations are\n", "equivalent if they have the same solution set.**\n", "\n", "**Problem 1:** If 2 adult tickets and 1 child ticket cost 32, and if 1 adult ticket and 3 child tickets cost 36,\n", "what is the price of each?\n", "\n", "$$2x + y = 32$$\n", "$$x + 3y = 36$$\n", "\n", "\n", "**Problem 2:** Jasmine wants to use milk and orange juice to increase the amount of calcium and vitamin A in her daily diet. An ounce of milk contains 37 milligrams of calcium and 57 micrograms* of vitamin A. An ounce of orange juice contains 5 milligrams of calcium and 65 micrograms of vitamin A. How many ounces of milk and orange juice should Jasmine drink each day to provide exactly 500 milligrams of calcium and 1,200 micrograms of vitamin A?\n", "$$37x + 5y = 500$$\n", "$$57x + 65y = 1200$$" ] }, { "cell_type": "code", "execution_count": null, "id": "652c643d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a55c5dde", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "735f34d7", "metadata": {}, "source": [ "## 4. Solving System of Linear Equations using Matrix Algebra\n", "- Most linear systems involve large numbers of equations and variables. It is impractical to try to solve such systems by hand.\n", "- In solving systems of equations using elimination and substitution, the coefficients of the variables and the constant terms play a central role. \n", "- The process can be made more efficient and for the computer to solve, we represent the linear equations in the form of matrices and vectors.\n", "- We can later apply different techniques on the matrix equation, to solve for unknowns. \n", "- Some of the most commonly used techniques are:\n", " - Gaussian Elimination.\n", " - Gauss Jordan Elimination.\n", " - Cramer's Rule.\n", " - Matrix Inversion Method." ] }, { "cell_type": "code", "execution_count": null, "id": "aacc62bc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "99a9a61d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "add8ac9d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a9e4f47c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b2929d7d", "metadata": {}, "source": [ "### a. Writing System of Linear Equation in Matrix Form" ] }, { "cell_type": "markdown", "id": "66e7a400", "metadata": {}, "source": [ "**System of Two Linear Equations having two unknowns ($x_1$, and $x_2$), with four coefficients:**
\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 = b_2 $$\n", "\n", "- So the above system of two linear equations with two variables can be written in matrix form as:\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} \\\\ a_{2,1} & a_{2,2} \\end{bmatrix}\n", "\\begin{bmatrix} x_1 \\\\ x_2 \\end{bmatrix}=\n", "\\begin{bmatrix} b_1 \\\\ b_2 \\end{bmatrix} \n", "$$\n", "\n", "**System of Three Linear Equations having three unknowns($x_1, x_2$, and $x_3$), with nine coefficients:**
\n", "\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 + a_{1,3}x_3 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 + a_{2,3}x_3 = b_2 $$\n", "$$ a_{3,1}x_1 + a_{3,2}x_2 + a_{3,3}x_3 = b_3 $$\n", "\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\\\a_{3,1} & a_{3,2} & a_{3,3}\\end{bmatrix}\n", "\\begin{bmatrix} x_1 \\\\ x_2 \\\\ x_3 \\end{bmatrix}=\n", "\\begin{bmatrix} b_1 \\\\ b_2 \\\\ b_3 \\end{bmatrix} \n", "$$\n", "\n", "\n", "$$ Ax = b$$\n", "\n", "- Where,\n", " - $A$ is the matrix of coefficients, or scalar values (`known matrix`)\n", " - $x$ is a vector of variables (`unknown vector`)\n", " - $b$ is a vector containing constants on the RHS of equations (`known vector`)\n", " - If $b = 0_{nx1}$, we say that it is a homogeneous system of equations\n", " - If $b \\neq 0_{nx1}$, we say that it is a non-homogeneous system of equations\n", "> Matrix `$A$`, when applied on vector `$x$` of unknowns, transforms it into vector `$b$` of known values." ] }, { "cell_type": "code", "execution_count": null, "id": "c98794fb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "e30a2b14", "metadata": {}, "source": [ "### b. Solving set of Linear Equations Using Gaussian Elimination Method\n", "- Gaussian Elimination is a method for solving systems of linear equations with several unknown variables. It works by bringing the matrix representing the equations into row echelon form and resolving the unknown variables by back-substitution.\n", "- Gaussian elimination is a method named after German mathematician Larl Friedrich Gauss.\n", "- Suppose we want to solve a system of three linear equations with three unknowns given below:\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 + a_{1,3}x_3 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 + a_{2,3}x_3 = b_2 $$\n", "$$ a_{3,1}x_1 + a_{3,2}x_2 + a_{3,3}x_3 = b_3 $$\n", "\n", "- **Step 1**: We represent the system of equations in `augmented matrix` form, which contains all the essential information about the linear system — everything but the names of the variables. The augmented matrix for above system of linear equations is shown below:\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\bigm| & b_1 \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\bigm| & b_2 \\\\a_{3,1} & a_{3,2} & a_{3,3} \\bigm| & b_3 \\end{bmatrix}\n", "$$\n", "\n", "- **Step 2**: Then we apply different operations on augmented matrix in no specific order, with the goal to eliminate one variable at a time to achieve `upper triangular marix` (Row echelon form is a diagonal matrix where all entries below a leading coefficient are zero. Some textbooks also state that the leading coefficient must equal one):\n", "$$\n", "\\begin{bmatrix} 1 & a_{1,2} & a_{1,3} \\bigm| & b_1 \\\\ 0 & 1 & a_{2,3} \\bigm| & b_2 \\\\0 & 0 & 1 \\hspace{.4 cm} \\bigm| & b_3 \\end{bmatrix}\n", "$$\n", "- The matrix operations performed for triangularization are:\n", " - Interchange order of any two rows ($R_i = R_j$).\n", " - Multiply a row by a non-zero constant($R_i = nR_j$\n", " - Add a multiple of a row to another row ($R_j = R_i + R_j$)\n", " \n", "- **Step 3**:Once in this form, we can say that $x_3 = b_3$ and use `back substitution` to solve for $x_2$ and $x_1$." ] }, { "cell_type": "code", "execution_count": null, "id": "9e85a15d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "59e25c0d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "10cf7a88", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2c8286d6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "b33b8b16", "metadata": {}, "source": [ "**Example 9:** Given the system of three linear equations with three unknowns, solve for unknowns by using Gauss Elimination method:\n", "- Write the System of Linear Equation in Augmented Matrix Form: An augmented matrix is a rectangular array of numbers that represents a system of equations.\n", " $$𝑥 + 𝑦 + 𝑧 = 3$$\n", " $$𝑥 + 2𝑦 +3z= 0$$\n", " $$𝑥 + 3𝑦 + 2𝑧 = 3$$ \n", "\n", "- Step 1: Augmented Matrix of system of equations\n", " $$\n", "\\begin{bmatrix}\n", " 1 & 1 & 1 \\bigm| & 3 \\\\\n", " 1 & 2 & 3 \\bigm| & 0 \\\\\n", " 1 & 3 & 2\\bigm| & 3 \n", "\\end{bmatrix}\n", "$$\n", "- Step 2: Convert it into row-echlon form (by performing triangularization)\n", "\n", "$\\hspace{3 cm} R_2 = R_2 - R1:\\hspace{1 cm} \\begin{bmatrix}1 & 1 & 1 \\bigm| & 3 \\\\ 0 & 1 & 2 \\bigm| & -3 \\\\ 1 & 3 & 2\\bigm| & 3 \\end{bmatrix}$ \n", "\n", "\n", "$\\hspace{3 cm} R_3 = R_3 - R1:\\hspace{1 cm} \\begin{bmatrix}1 & 1 & 1 \\bigm| & 3 \\\\ 0 & 1 & 2 \\bigm| & -3 \\\\ 0 & 2 & 1\\bigm| & 0 \\end{bmatrix}$ \n", "\n", "\n", "$\\hspace{3 cm} R_3 = 2R_2:\\hspace{1 cm} \\begin{bmatrix}1 & 1 & 1 \\bigm| & 3 \\\\ 0 & 2 & 4 \\bigm| & -6 \\\\ 0 & 2 & 4\\bigm| & 0 \\end{bmatrix}$ \n", "\n", "\n", "\n", "$\\hspace{3 cm} R_3 = R_2 - R_3:\\hspace{1 cm} \\begin{bmatrix}1 & 1 & 1 \\bigm| & 3 \\\\ 0 & 2 & 4 \\bigm| & -6 \\\\ 0 & 0 & 3\\bigm| & -6 \\end{bmatrix}$ \n", " \n", " \n", "- Step 3: Back Substitution\n", "Now convert the matrix in row-echlon form to a system of linear equations and solve:\n", "$$𝑥 + 𝑦 + 𝑧 = 3$$\n", "$$ 2𝑦 +4z= -6$$\n", "$$ 3𝑧 = -6$$ \n", "Perform back substitution, you get $z=-2, y=1, x=4$" ] }, { "cell_type": "markdown", "id": "9221bff8", "metadata": {}, "source": [ "**Practice Problems:** Use paper pencil to solve following system of linear equations:\n", "\n", "(i) $\\hspace{.5 cm}x +3𝑦 + 4𝑧 = 4$ $\\hspace{2 cm}−𝑥 + 3𝑦 +2z = 2$ $\\hspace{2 cm}3𝑥 + 9𝑦 + 6𝑧 = -6$ \n", "\n", "(ii) $\\hspace{.5 cm}x +4𝑦 + 3𝑧 = 1$ $\\hspace{2 cm}𝑥 + 2𝑦 + 9z = 1$ $\\hspace{2 cm}𝑥 + 6𝑦 + 6𝑧 = 1$ \n", "\n", "(iii) $\\hspace{.5 cm}x +3𝑦 + 3𝑧 = 2$ $\\hspace{2 cm}3𝑥 + 9𝑦 +3z = 3$ $\\hspace{2 cm}3𝑥 + 6𝑦 + 6𝑧 = 4$ \n", "\n", "> Verify your answers using this online calculator https://www.handymath.com/cgi-bin/matrix3d.cgi" ] }, { "cell_type": "markdown", "id": "a335b189", "metadata": {}, "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9206a5cf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5aa61adc", "metadata": {}, "source": [ "### c. Solving set of Linear Equations Using Gauss Jordan Method\n", "- Gauss-Jordan elimination is another method for solving systems of equations in matrix form. It is really a\n", "continuation of Gaussian elimination. However, it works for non-square matrices as well.\n", "- Suppose we want to solve a system of three linear equations with three unknowns given below:\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 + a_{1,3}x_3 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 + a_{2,3}x_3 = b_2 $$\n", "$$ a_{3,1}x_1 + a_{3,2}x_2 + a_{3,3}x_3 = b_3 $$\n", "\n", "- **Step 1**: We represent the system of equations in `augmented matrix` form. An augmentation matrix for a system of three linear equations with three unknowns is of the form:\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\bigm| & b_1 \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\bigm| & b_2 \\\\a_{3,1} & a_{3,2} & a_{3,3} \\bigm| & b_3 \\end{bmatrix}\n", "$$\n", "\n", "- **Step 2**: Then we apply different operations on augmented matrix in no specific order, with the goal to eliminate one variable at a time to achieve reduced row-echlon form or `diagonal matrix` (non-zero elements along main diagonal and zeros every where else)):\n", "$$\n", "\\begin{bmatrix} 1 & 0 & 0 \\bigm| & b_1 \\\\ 0 & 1 & 0 \\bigm| & b_2 \\\\0 & 0 & 1 \\bigm| & b_3 \\end{bmatrix}\n", "$$\n", "\n", "- **Step 3**: Once in this form, we can say that $x_1 = b_1$, $x_2 = b_2$ and $x_3 = b_3$." ] }, { "cell_type": "code", "execution_count": null, "id": "0d714d04", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "95a0e8db", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d511cc60", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7ee79a14", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "af291b5e", "metadata": {}, "source": [ "**Example 10:** Given the system of three linear equations with three unknowns, solve for unknowns by using Gauss Elimination method:\n", "- Write the System of Linear Equation in Augmented Matrix Form: An augmented matrix is a rectangular array of numbers that represents a system of equations.\n", " $$5𝑥 + 2𝑦 = 2$$\n", " $$2𝑥 + 𝑦 -z= 0$$\n", " $$2𝑥 + 3𝑦 - 𝑧 = 3$$ \n", "\n", "- Step 1: Augmented Matrix of system of equations\n", " $$\n", "\\begin{bmatrix}\n", " 5 & 2 & 0 \\bigm| & 2 \\\\\n", " 2 & 1 & -1 \\bigm| & 0 \\\\\n", " 2 & 3 & -1\\bigm| & 3 \n", "\\end{bmatrix}\n", "$$\n", "- Step 2: Convert it into reduced row-echlon form\n", "\n", "$\\hspace{3 cm} R_1 = \\frac{1}{5}R_1:\\hspace{5 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 2 & 1 & -1 \\bigm| & 0 \\\\ 2 & 3 & -1\\bigm| & 3 \\end{bmatrix}$ \n", "\n", "$\\hspace{3 cm} R_2 = R_2 - 2R_1:\\hspace{4 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 0 & 1/5 & -1 \\bigm| & -4/5 \\\\ 2 & 3 & -1\\bigm| & 3 \\end{bmatrix}$ \n", "\n", "\n", "\n", "$\\hspace{3 cm} R_3 = R_3 - 2R_1:\\hspace{4 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 0 & 1/5 & -1 \\bigm| & -4/5 \\\\ 0 & 11/5 & -1\\bigm| & 11/5 \\end{bmatrix}$ \n", "\n", "\n", "$\\hspace{3 cm} R_2 = 5R_2$ and $R_3=5R_3:\\hspace{2.6 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 0 & 1 & -5 \\bigm| & -4 \\\\ 0 & 11 & -5\\bigm| & 11 \\end{bmatrix}$ \n", "\n", "\n", "\n", "$\\hspace{3 cm} R_2 = R_2 - R_3:\\hspace{4.55 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 0 & -10 & 0 \\bigm| & -15 \\\\ 0 & 11 & -5\\bigm| & 11 \\end{bmatrix}$ \n", "\n", "\n", "\n", "$\\hspace{3 cm} R_2 = \\frac{-1}{10}R_2$ and $R_3=\\frac{1}{11}R_3:\\hspace{2 cm} \\begin{bmatrix}1 & 2/5 & 0 \\bigm| & 2/5 \\\\ 0 & 1 & 0 \\bigm| & 3/2 \\\\ 0 & 1 & -5/11\\bigm| & 1 \\end{bmatrix}$ \n", "\n", "\n", "$\\hspace{3 cm} R_1 = R_1 - \\frac{2}{5}R_2$ and $R_3=R_3 - R_2:\\hspace{1 cm} \\begin{bmatrix}1 & 0 & 0 \\bigm| & -1/5 \\\\ 0 & 1 & 0 \\bigm| & 3/2 \\\\ 0 & 0 & -5/11\\bigm| & -1/2 \\end{bmatrix}$ \n", "\n", "\n", "$\\hspace{3 cm} R_3 = \\frac{-11}{5}R_3:\\hspace{5 cm} \\begin{bmatrix}1 & 0 & 0 \\bigm| & -1/5 \\\\ 0 & 1 & 0 \\bigm| & 3/2 \\\\ 0 & 0 & 1\\bigm| & 11/10 \\end{bmatrix}$ \n", "\n", "\n", "\n", "\n", "- Step 3:\n", "$x=-1/5, y=3/2, z=11/10$" ] }, { "cell_type": "code", "execution_count": null, "id": "5c18f75c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1cdc96aa", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a25fa80c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c15bbabc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ae16a57b", "metadata": {}, "source": [ "### d. Solving set of Linear Equations Using Cramer's Rule\n", "- Cramer’s Rule uses determinants to determine the solution of a system of linear equations in matrix form.\n", "- Cramer's rule only works on square matrices that have a non-zero determinant and a unique solution.\n", "- Consider a system of three linear equations with three unknowns:\n", "\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 + a_{1,3}x_3 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 + a_{2,3}x_3 = b_2 $$\n", "$$ a_{3,1}x_1 + a_{3,2}x_2 + a_{3,3}x_3 = b_3 $$\n", "\n", "\n", "- These three equations can be written in matrix form as:\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\\\a_{3,1} & a_{3,2} & a_{3,3}\\end{bmatrix}\n", "\\begin{bmatrix} x_1 \\\\ x_2 \\\\ x_3 \\end{bmatrix}=\n", "\\begin{bmatrix} b_1 \\\\ b_2 \\\\ b_3 \\end{bmatrix} \n", "$$\n", "\n", "$$ Ax = b$$\n", "\n", "\n", "- Cramer's Formula for the three unknowns in this scenario is:\n", "\n", "$$x_1 = \\frac{D_{x1}}{D}$$\n", "\n", "$$x_2 = \\frac{D_{x2}}{D}$$\n", "\n", "$$x_3 = \\frac{D_{x3}}{D}$$\n", "\n", "- Where,\n", "- D is the determinant of matrix $A = \\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\\\a_{3,1} & a_{3,2} & a_{3,3}\\end{bmatrix}$\n", "\n", "\n", "- $D_x$ is the determinant of matrix $A$ by replacing $x_1$-column by the vector of right hand side of the matrix equation: $\\begin{vmatrix} b_1 & a_{1,2} & a_{1,3} \\\\ b_2 & a_{2,2} & a_{2,3} \\\\b_3 & a_{3,2} & a_{3,3}\\end{vmatrix}$\n", "\n", "\n", "\n", "- $D_y$ is the determinant of matrix $A$ by replacing $x_2$-column by the vector of right hand side of the matrix equation: $\\begin{vmatrix} a_{1,1} & b_1 & a_{1,3} \\\\ a_{2,1} & b_2 & a_{2,3} \\\\a_{3,1} & b_2 & a_{3,3}\\end{vmatrix}$\n", "\n", "\n", "\n", "\n", "- $D_z$ is the determinant of matrix $A$ by replacing $x_3$-column by the vector of right hand side of the matrix equation: $\\begin{vmatrix} a_{1,1} & a_{1,2} & b_1 \\\\ a_{2,1} & a_{2,2} & b_2 \\\\a_{3,1} & a_{3,2} & b_3\\end{vmatrix}$\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "cde6842e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f834b604", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "2c64eacf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "56b7f28a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c48603b0", "metadata": {}, "source": [ "\n", "**Example 11:** Given the system of two linear equations with two unknowns, solve for unknowns by using Cramer's Rule\n", " $$𝑥 + 2𝑦 = 3$$\n", " $$4𝑥 + 5𝑦 = 6$$\n", "\n", "$$\n", "\\begin{bmatrix} 1 & 2 \\bigm| & 3 \\\\ 4 & 5 \\bigm| & 6 \\end{bmatrix}\n", "$$\n", "\n", "$\\hspace{4 cm}D = \\begin{vmatrix} 1 & 2 \\\\ 4 & 5 \\end{vmatrix} = 5 - 8 = -3$\n", "\n", "\n", "$\\hspace{4 cm}D_x = \\begin{vmatrix} 3 & 2 \\\\ 6 & 5 \\end{vmatrix} = 15 - 12 = 3$\n", "\n", "\n", "$\\hspace{4 cm}D_y = \\begin{vmatrix} 1 & 3 \\\\ 4 & 6 \\end{vmatrix} = 6 - 12 = -6$\n", "\n", "$\\hspace{2 cm}x = \\frac{D_x}{D} = \\frac{3}{-3} = -1$\n", "\n", "$\\hspace{2 cm}y = \\frac{D_y}{D} = \\frac{-6}{-3} = 2$\n" ] }, { "cell_type": "code", "execution_count": null, "id": "9e939d52", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "81f91fe2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5293ee08", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "49bc2c6a", "metadata": {}, "source": [ "**Example 12:** Given the system of three linear equations with three unknowns, solve by using Cramer's Rule:\n", " $$𝑥 + 4𝑦 +3z = 1$$\n", " $$𝑥 + 2𝑦 +9z= 1$$\n", " $$𝑥 + 6𝑦 + 6𝑧 = 1$$ \n", "\n", "$$\n", "\\begin{bmatrix} 1 & 4 & 3 \\bigm| & 1 \\\\ 1 & 2 & 9 \\bigm| & 1 \\\\ 1 & 6 & 6\\bigm| & 1 \\end{bmatrix}\n", "$$\n", "\n", "$\\hspace{4 cm}D = \\begin{vmatrix} 1 & 4 & 3 \\\\ 1 & 2 & 9 \\\\ 1 & 6 & 6 \\end{vmatrix} = 1(12-54) - 4(6-9)+3(6-2) = -18$\n", "\n", "$\\hspace{4 cm}D_x = \\begin{vmatrix} 1 & 4 & 3 \\\\ 1 & 2 & 9 \\\\ 1 & 6 & 6 \\end{vmatrix} = 1(12-54) - 4(6-9)+3(6-2) = -18$\n", "\n", "$\\hspace{4 cm}D_y = \\begin{vmatrix} 1 & 1 & 3 \\\\ 1 & 1 & 9 \\\\ 1 & 1 & 6 \\end{vmatrix} = 1(6-9) - 1(6-9)+3(1-1) = 0$\n", "\n", "$\\hspace{4 cm}D_z = \\begin{vmatrix} 1 & 4 & 1 \\\\ 1 & 2 & 1 \\\\ 1 & 6 & 1 \\end{vmatrix} = 1(2-6) - 4(1-1)+1(6-2) = 0$\n", "\n", "$\\hspace{2 cm}x = \\frac{D_x}{D} = \\frac{-18}{-18} = 1$\n", "\n", "$\\hspace{2 cm}y = \\frac{D_y}{D} = \\frac{0}{-18} = 0$\n", "\n", "$\\hspace{2 cm}z = \\frac{D_z}{D} = \\frac{0}{-18} = 0$" ] }, { "cell_type": "code", "execution_count": null, "id": "f45de02c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "20e2e5f9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ab0fcb21", "metadata": {}, "source": [ "### e. Solving set of Linear Equations Using Matrix Inversion Method\n", "\n", "- Consider a system of three linear equations with three unknowns:\n", "\n", "$$ a_{1,1}x_1 + a_{1,2}x_2 + a_{1,3}x_3 = b_1 $$\n", "$$ a_{2,1}x_1 + a_{2,2}x_2 + a_{2,3}x_3 = b_2 $$\n", "$$ a_{3,1}x_1 + a_{3,2}x_2 + a_{3,3}x_3 = b_3 $$\n", "\n", "\n", "- These three equations can be written in matrix form as:\n", "$$\n", "\\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3} \\\\ a_{2,1} & a_{2,2} & a_{2,3} \\\\a_{3,1} & a_{3,2} & a_{3,3}\\end{bmatrix}_{3\\times 3}\\hspace{1 cm}\n", "\\begin{bmatrix} x_1 \\\\ x_2 \\\\ x_3 \\end{bmatrix}_{3\\times 1}\\hspace{1 cm}=\\hspace{1 cm} \n", "\\begin{bmatrix} b_1 \\\\ b_2 \\\\ b_3 \\end{bmatrix}_{3\\times 1}\n", "$$\n", "\n", "$$ Ax = b$$\n", "\n", "$$ A^{-1}Ax = A^{-1}b $$\n", "\n", "$$ Ix = A^{-1}b $$\n", "\n", "$$ x = A^{-1}b $$\n", "\n" ] }, { "cell_type": "markdown", "id": "4cb80845", "metadata": {}, "source": [ "> **Note: This is possible if and only if:**\n", " >- Matrix $A$ is a square matrix\n", " >- Matrix $A$ is non-singular, i.e., its determinant is non-zero" ] }, { "cell_type": "code", "execution_count": null, "id": "878fa0cb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d0ac90d2", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9f476d8c", "metadata": {}, "source": [ "**Example 13:** Solve the set of two linear equations having two unknowns, by Matrix Inversion technique using paper pencil:\n", "$$ 4x + 2y = 4 $$\n", "$$ -5x - 3y = -7 $$ \n", "We can write these two equations in Matrix form as:
\n", "$$\n", "\\begin{bmatrix} 4 & 2 \\\\ -5 & -3 \\end{bmatrix}\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \n", "\\begin{bmatrix} 4 \\\\ -7 \\end{bmatrix}\n", "$$\n", "\n", "$$\n", "Ax = b\n", "$$\n", "\n", "$$\n", "x = A^{-1}b\n", "$$\n", "\n", "\n", "$$\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\frac{1}{det(A)}\\begin{bmatrix} -3 & -2\\\\ 5 & 4 \\end{bmatrix} \n", "\\begin{bmatrix} 4 \\\\ -7 \\end{bmatrix}\n", "$$\n", "\n", "\n", "$$\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\frac{1}{-12-(-10)}\\begin{bmatrix} -3 & -2\\\\ 5 & 4 \\end{bmatrix} \n", "\\begin{bmatrix} 4 \\\\ -7 \\end{bmatrix}\n", "$$\n", "\n", "$$\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\begin{bmatrix} 3/2 & 1\\\\ -5/2 & -2 \\end{bmatrix} \n", "\\begin{bmatrix} 4 \\\\ -7 \\end{bmatrix}\n", "$$\n", "\n", "$$\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \\begin{bmatrix} -1 \\\\ 4 \\end{bmatrix} \n", "$$\n", ">- **So the solution is $x=-1$ and $y=4$**\n", ">- **Let us perfrom the above steps in Python**" ] }, { "cell_type": "code", "execution_count": 93, "id": "1e06648f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Matrix A:\n", " [[ 4 2]\n", " [-5 -3]]\n", "Vector b: [ 4 -7]\n" ] } ], "source": [ "A = np.array([[4, 2], [-5, -3]])\n", "b = np.array([4,-7])\n", "print(\"Matrix A:\\n\", A)\n", "print(\"Vector b: \", b)" ] }, { "cell_type": "code", "execution_count": 94, "id": "85437764", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Inverse of A:\n", " [[ 1.5 1. ]\n", " [-2.5 -2. ]]\n" ] } ], "source": [ "Ainv = np.linalg.inv(A)\n", "print(\"Inverse of A:\\n\", Ainv)" ] }, { "cell_type": "code", "execution_count": 95, "id": "54ed30cb", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1., 4.])" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(Ainv, b)" ] }, { "cell_type": "code", "execution_count": 96, "id": "f490f681", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1., 4.])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linalg.solve(A, b)" ] }, { "cell_type": "code", "execution_count": null, "id": "22f2c8a9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8380bab9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4c4bab48", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e92cb5bb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3bacde40", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7f503b02", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "09fbf933", "metadata": {}, "source": [ "**Example 14:** Solve the set of two linear equations having two unknowns, by Matrix Inversion technique using Python:\n", "$$ x - \\frac{1}{2}y = 1 $$\n", "$$ -\\frac{1}{2}x + y = -1 $$\n", "\n", "- The above two equations can be written in matrix form as shown below. \n", "$$\n", "\\begin{bmatrix} 1 & -1/2 \\\\ -1/2 & 1\\end{bmatrix} \n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \n", "\\begin{bmatrix} 1 \\\\ -1 \\end{bmatrix}\n", "$$\n", "\n", "\n", "

\n", "$$Ax = b$$\n", "$$x = A^{-1}b$$\n", "$$x = \\begin{bmatrix} 4/3 & 2/3 \\\\2/3 & 4/3\\end{bmatrix} \\begin{bmatrix} 1 \\\\ -1 \\end{bmatrix}$$\n", "\n", "$$x = \\begin{bmatrix} 2/3 \\\\ -2/3 \\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 97, "id": "76b3de3e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.66666667, -0.66666667])" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1, -1/2], [-1/2, 1]])\n", "b = np.array([1,-1])\n", "Ainv = np.linalg.inv(A)\n", "x = np.dot(Ainv, b)\n", "x = np.linalg.solve(A, b)\n", "x" ] }, { "cell_type": "code", "execution_count": null, "id": "94352e28", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "651c9933", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b1468b4e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "d03a42e4", "metadata": {}, "source": [ "**Example 15:** Solve the set of three linear equations having three unknowns, by Matrix Inversion technique using Python:\n", "$$ x + 2y + 3z = -7 $$\n", "$$ 2x - 3y - 5z = 9 $$\n", "$$ -6x - 8y + z = -22$$\n", "\n", "- The above three equations can be written in matrix form as shown bbelow. \n", "$$\n", "\\begin{bmatrix} 1 & 2 & 3 \\\\ 2 & -3 & -5 \\\\ -6 & -8 & 1\\end{bmatrix} \n", "\\begin{bmatrix} x \\\\ y \\\\ z\\end{bmatrix} = \n", "\\begin{bmatrix} -7 \\\\ 9 \\\\ -22 \\end{bmatrix}\n", "$$\n", "\n", "\n", "

\n", "$$\n", "Ax = b\n", "$$\n", "- Above equation says, that vector $x$ lands on vector $bb$ via transformation matrix $A$\n", "\n", "$$\n", "x = A^{-1}b\n", "$$" ] }, { "cell_type": "code", "execution_count": 98, "id": "cd16de9e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1., 3., -4.])" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1, 2, 3], [2, -3, -5], [-6, -8, 1]])\n", "b = np.array([-7,9, -22])\n", "Ainv = np.linalg.inv(A)\n", "x = np.dot(Ainv, b)\n", "x = np.linalg.solve(A, b)\n", "x" ] }, { "cell_type": "code", "execution_count": null, "id": "0457e286", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "6ee12c8c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "56428b0d", "metadata": {}, "source": [ "**Example 16:** Solve the set of four linear equations having four unknowns, by Matrix Inversion technique using Python:\n", "$$ w + x + y = 75 $$\n", "$$ w + x + z = 80 $$\n", "$$ w + y + z = 75$$\n", "$$ x + y + z = 70 $$\n", "\n", "- The above three equations can be written in matrix form as shown below. \n", "$$\n", "\\begin{bmatrix} 1 & 1 & 1 & 0 \\\\ 1 & 1 & 0 & 1 \\\\ 1 & 0 & 1 & 1 \\\\ 0 & 1 & 1 & 1\\end{bmatrix} \n", "\\begin{bmatrix} w \\\\ x \\\\ y \\\\ z\\end{bmatrix} = \n", "\\begin{bmatrix} 75 \\\\ 80 \\\\ 75 \\\\ 70 \\end{bmatrix}\n", "$$\n", "\n", "\n", "

\n", "$$\n", "Ax = b\n", "$$\n", "- Above equation says, that vector $x$ lands on vector $bb$ via transformation matrix $A$\n", "\n", "$$\n", "x = A^{-1}b\n", "$$\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 99, "id": "76a75e5c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([30., 25., 20., 25.])" ] }, "execution_count": 99, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1, 1, 1, 0], [1, 1, 0, 1], [1, 0, 1, 1], [0, 1, 1, 1]])\n", "b = np.array([75,80, 75,70])\n", "Ainv = np.linalg.inv(A)\n", "x = np.dot(Ainv, b)\n", "x = np.linalg.solve(A, b)\n", "x" ] }, { "cell_type": "code", "execution_count": null, "id": "2873a395", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "8dfe62ac", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "048acadb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "35318326", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "c097663a", "metadata": {}, "source": [ "### f. Limitations of Matrix Inversion Method" ] }, { "cell_type": "markdown", "id": "6e74a18f", "metadata": {}, "source": [ "**Limitation 1: ($A$ must be non-singular)**\n", "- The matrix $A$ must be non-singular, that is its determinant must be non-zero, or, all of its columns are linearly independent. An example system having a non-singular matrix $A$ is shown below:\n", "$$-9x - 15y = -15$$\n", "$$3x + 5y = -10$$\n", "\n", "$$\n", "\\begin{bmatrix} -9 & -15 \\\\ 3 & 5 \\end{bmatrix}\n", "\\begin{bmatrix} x \\\\ y \\end{bmatrix} = \n", "\\begin{bmatrix} 15 \\\\ -10 \\end{bmatrix}\n", "$$\n", "\n", "- The above two equations are linearly dependent, this can be observed from the coefficients of two equations\n", "- The determinant of coefficient matrix is zero, therefore, the inverse of matrix $A$ does not exist and hence the solution.\n", "- You can confirm this by solving the system of equations using either substitution strategy, or elimination strategy at your own.\n", "- Finally if you plot a graph of these two equations, you will get two parallel lines. This can be observed from the rearranged equations below having same slope and different y-intercept. \n", "$$ y = \\frac{-9}{15}x + 1$$\n", "$$ y = \\frac{-3}{5}x - 1$$" ] }, { "cell_type": "markdown", "id": "9787931e", "metadata": {}, "source": [ "**Limitation 2: ($A$ must Square)**\n", "- The number of equations and number of variables must be same, only then you have a square matrix, whose inverse can be calculated." ] }, { "cell_type": "markdown", "id": "e528c583", "metadata": {}, "source": [ "**Possible Solutions:**\n", "- Gauss Jordan Elimination\n", "- Calculating Matrix Inverse using Moore Penrose Pseudo-inverse\n", "- Solving non-square Matrix using Singular Value Decomposition\n", "- Solving non-square Matrix using QR Decomposition\n", "- Solving non-square Matrix using Cholesky Decomposition" ] }, { "cell_type": "code", "execution_count": null, "id": "52ff07de", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "e7074cf5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "32bdf822", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "1c234288", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3e5047ec", "metadata": {}, "source": [ "## 5. Categories of System of Linear Equations\n", "- Uptill now we have seen linear system of equations which have same number of equations as the number of unknowns, hence, the coefficient matrix $A$ becomes a square matrix. Since the coefficient matrix $A$ is square therefore, we can find the solution using simple matrix inversion method.\n", "\n", "

$ A_{n\\times m}\\hspace{.2 cm}x_{m\\times 1}\\hspace{.3 cm}=\\hspace{.3 cm}b_{n\\times 1} \\hspace{1 cm}$ and $ \\hspace{.3 cm}n\\hspace{.3 cm}=\\hspace{.3 cm}m$

\n", " \n", "

$ A_{n\\times m}\\hspace{.2 cm}x_{m\\times 1}\\hspace{.3 cm}=\\hspace{.3 cm}b_{n\\times 1} \\hspace{1 cm}$ and $ \\hspace{.3 cm}n\\hspace{.3 cm}\\gt\\hspace{.3 cm}m$

\n", " \n", "

$ A_{n\\times m}\\hspace{.2 cm}x_{m\\times 1}\\hspace{.3 cm}=\\hspace{.3 cm}b_{n\\times 1} \\hspace{1 cm}$ and $ \\hspace{.3 cm}n\\hspace{.3 cm}\\lt\\hspace{.3 cm}m$

" ] }, { "cell_type": "code", "execution_count": null, "id": "5091dca9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b4e58fab", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "25e39fd6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4264d46e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "5077a6ef", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7c60ea75", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "fc9c2dc7", "metadata": {}, "source": [ "### a. Overdetermined Systems of Linear Equations\n", "- An overdetermined system of equations is a system in which the number of equations is greater than the number of unknowns. \n", "- Such a system cannot be solved using simple matrix inversion method, as the coefficient matrix is not square and thus cannot be inverted. \n", "- In machine learning many a times we have overdetermined systems that we need to solve. For example, a dataset having thousands of houses but only a few features.\n", " - Consistent Overdetermined System having `Unique` Solution\n", " - Consistent Overdetermined System having `Infinite` Solution\n", " - In-Consistent Overdetermined System having `No` Solution\n", " \n", " \n", "

$ A_{n\\times m}\\hspace{.2 cm}x_{m\\times 1}\\hspace{.3 cm}=\\hspace{.3 cm}b_{n\\times 1} \\hspace{1 cm}$ and $ \\hspace{.3 cm}n\\hspace{.3 cm}\\gt\\hspace{.3 cm}m$

" ] }, { "cell_type": "markdown", "id": "999dddc6", "metadata": {}, "source": [ "**(i) Consistent Overdetermined System having `Unique` Solution:**\n", "$$\\hspace{3 cm}x+y=3$$\n", "$$\\hspace{3 cm}x-y=1$$\n", "$$\\hspace{3 cm}3x-y=5$$" ] }, { "cell_type": "code", "execution_count": 100, "id": "3bd25198", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-5, 5, 5) # start, finish, n points\n", "y1 = 3 - x\n", "y2 = -1 + x\n", "y3 = -5 + 3*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "ax.plot(x, y3, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "c58fa61f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "32bcb782", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "7b0275a9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b6b3a374", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "75386aa3", "metadata": {}, "source": [ "**(ii) Consistent Overdetermined System having `Infinite` Solution:**\n", "$$x+y=1$$\n", "$$2x+2y=2$$\n", "$$ 3x+3y=3$$" ] }, { "cell_type": "code", "execution_count": 101, "id": "4acc40d7", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEECAYAAAAs+JM2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAAAjwklEQVR4nO3dd3wUhbrG8d+bNRrpJRI4KCCKomINeMAKdgW9ig3FhJoCFhSxIzZULODFQhIgBoIieBCPeLChgKgHCygiioogTQVEOoi09/6RnHsSBQ0pO7ub5/v57EdnZnfneR3I40w2E3N3RERE/iMu6AAiIhJZVAwiIlKMikFERIpRMYiISDEqBhERKWafoAOUVWJiojdp0qTUr9+8eTNVq1Ytv0ABiZU5QLNEqliZJVbmgLLNMnv27NXufsDutkV9MTRp0oRZs2aV+vXTp0+nbdu25RcoILEyB2iWSBUrs8TKHFC2WcxsyZ626VKSiIgUo2IQEZFiVAwiIlKMikFERIpRMYiISDEqBhERKUbFICIixVTqYnhvSDY7f/st6BgiIhGl0hbDrp07mffAh8y78GU+HJ4fdBwRkYhRaYshLhQiY3UuVU7awoyMeeS16MKm1auDjiUiErhKWwxQUA7N7u3OZe93ZOsPxoj69zH94aeCjiUiEqhKXQz/0fTk1mSszqXJNVX45K4ljGyawpqly4KOJSISiMCKwczqm9lIM/ukyLoEM3vazO4ws2fN7LBw5YkLhbhk1CNcPacrO7cYeQcP4Y1bHgrX7kVEIkaQZwynAK8AVmTdjcBSd38YeALIDXeohse0IGNFPkfcUId5Q35m+N9SWfHV1+GOISISmMCKwd0nABt/t7o9MLNw+xfAsWZWI9zZAC544m66LexD3H7OmBYjeKXHHUHEEBEJO3P34HZu1hZ43N1bFi5/A1zp7nMKl5cDbd39u9+9Lh1IB0hKSkoeN25cqTNs2rSJatWq/elzlrzwKmtyt7FvtXU0HHQqtZqH7QpXiZVkjmihWSJTrMwSK3NA2WZp167d7P987f0Ddw/sAbQFZhVZfg84tcjyBqDGn71HcnKyl8W0adNK9LyNP//suUem+iPc4i9ecoPv3LGjTPstbyWdIxpolsgUK7PEyhzuZZul6Nfe3z8i7VNJk4E2AGZ2NPC5u28INlKBaomJdP9yNKc8dTg//ms72bXSmP/G20HHEhEpd0F+Kul0IAVoYGb9zWx/YCjQ2Mz6AzcDPYLKtycnXdeDjF8eodoRMOn8KTx/ZgY7t28POpaISLkJ7Hc+u/u7wLu72XRtuLPsrYTq1Un9+Fk+e+El3u/+JsNqXMspz57L8VddGnQ0EZEyi7RLSVHl+KsupfeGZ6hzkvHW1R8zulV3tm78/QetRESii4qhjELx8XR+J4eLXj+bzV9DTt3bmDksL+hYIiKlpmIoJ0ecdxaZ60bwtw7xvHftfJ49UjflE5HopGIoR3GhEJdPHMoVMy9j20oYUf9+pg4cGnQsEZG9omKoAE1an0jmL6Np2qUqswcsY0STVH5ZvDjoWCIiJaJiqED/k/swKfN64tsg75ChvHbTA0FHEhH5SyqGClb/yOak/5hPi74HMP/JNeTUT+WHufOCjiUiskcqhjA577E76fZ9X0JVnLHHjeLlrrexa+fOoGOJiPyBiiGM6jQ6iJ6LxtDqwcYsfm4LOYk9WPTBh0HHEhEpRsUQgLZ3XE/aintIaOhMOGUi4//nep09iEjEUDEEpFpiIt3mjea0rKNY+foOsmqm89XkN4OOJSKiYgha68wuZK4bTPWj4dUOU3m+bTrbt24NOpaIVGIqhgiwb5UqpM7M5bwX27D2Yye71g3MHjM+6FgiUkmpGCLIsZdfTK/1w0g8LcTbqbMZndxNN+UTkbBTMUSYUHw8V72VxcVvncfmBUZOndv54KncoGOJSCWiYohQh599BplrR9Dwkn35oM/XPNs8lQ0rVwUdS0QqARVDBIsLhbjsxSe48qNObFttjGw4kLcHDA46lojEOBVDFGjcKpnM1aM5tEcN5gz8kRGNUvh50aKgY4lIjFIxRJGLcgaSMj8D3wWjD32ayTfcF3QkEYlBKoYok3T4YaQvH8PRt9bjm2fWkpOUyvI5c4OOJSIxRMUQpc4ddDvdltxCqDq8cEI+3z2ar9tqiEi5UDFEsdoHNqTnd/mc+EhTNr5VhZy6PVj43r+DjiUiUU7FEANOv6U3R048h/0bw0un/ZPxHa7T2YOIlJqKIUbsV6MGXT8fRdvcY1k5ZQdZNTL44pXJQccSkSikYogxJ3bvTObaIdQ4Hl67eAZjTk3TTflEZK9EZDGY2YdmNr3w8U7QeaLNvlWqkPL+SC6YeCrrZztZtfrwSd4LQccSkSgRkcUAvOHubQsfZwYdJlodfUkHeq3Pot4ZIaZ2/4xRx3fl1/Xrg44lIhEuUovhaDO7zczuNbP2QYeJZqH4eDq9NoyOUzuwZZGRk3gn7z8xPOhYIhLBzN2DzvAHZnaiu39sZiFgBnCHu88osj0dSAdISkpKHjduXKn3tWnTJqpVq1bWyIEryRy7du5k4WPPsfatRKo3WkaTwVewf906YUpYcrFyTECzRKJYmQPKNku7du1mu3vL3W5094h+AIOAe/a0PTk52cti2rRpZXp9pNibOZbO+tSzD0jxwXE3+Ft3PlJxoUopVo6Ju2aJRLEyh3vZZgFm+R6+rkbcpSQza25mPYqsagYsDCpPLDoo+XgyVuXTLL0mnz+8ghEHpbBqwXdBxxKRCBFxxQBsANqb2d1m9hiwDBgbcKaYdGHW/aR+0xsM8g8fxqu9BgQdSUQiQMQVg7v/6O4d3f0Bd7/F3W90911B54pV9ZodStrSMRx7R30WDF9Pdr1Uls3+LOhYIhKgiCsGCcbZD95Kj+W3E18bXmg1lpc69dVtNUQqKRWD/L+aDRrQ45t8ThrcjGUv/UZ2nZ58+/b0oGOJSJipGOQPTrkpnYzVD1HlEHj57Nd44fze7Ny+PehYIhImKgbZrf1r1qTrp3mcOeoEVk/bSVbNXsydMCnoWCISBioG+VMtu3Qic91QarU0Xr/8A8ac1INtW7YEHUtEKpCKQf5SfEIC18wYQYdJbdnwuZFduy8fjXwu6FgiUkFUDFJiR114Pr025JB0zj68mzaXvGO6snnNmqBjiUg5UzHIXokLhbjy1ae5dMbFbF0GI5IG8O5jw4KOJSLlSMUgpXLIqSeRsTqXRp2q8PFti8g9NJW1y38IOpaIlAMVg5RaXChExzGPcvWcruzYCM82fow3bx8UdCwRKSMVg5RZw2NakLEyn+bX1uaLR1cxvGEKK7/5NuhYIlJKKgYpN+2fvIcu312H7QNjjshhUkb/oCOJSCmoGKRcHdC0KWlLxnD8gIZ8l7uB7MQuLPl4VtCxRGQvqBikQpx5b196/tCffQ9wxrcezz8uu0k35ROJEioGqTA1kurRfX4+Jw9tzo+TfiO7dhrfTJkadCwR+QsqBqlwJ1/fg4xfHqHqYc4/z3mDsef00k35RCKYikHCIqF6dbrMyuPs51rxy4ydZNXszef/+GfQsURkN1QMElYndL6czHVPUvvvxhtXzCS/tW7KJxJpVAwSdvEJCXSeNpwL/3UGG+dBdq2b+TB7dNCxRKSQikECc2T7c+m1fjj128czo9eX5LXowqbVq4OOJVLpqRgkUHGhEFe8/CSXvd+RrT8YI+rfx9IXJwcdS6RSUzFIRGh6cmt6rR3FwSlVWZntjGyawpqly4KOJVIpqRgkolycN4jmzx7Drl+NvIOH8Ea/B4OOJFLpqBgk4lRv0oj0n/I58sY6fPnEanIapLLiq6+DjiVSaagYJGKdP/huui7sQyjBGdNiBK/0uCPoSCKVQkQWg5mdZWbDzOxeM7sn6DwSnLpNmtDz+zEk39+IRaM3k1WnC4s//DjoWCIxLeKKwcyqANnATe5+L3CMmZ0ZbCoJ2hn9+5C2YgD7NYAX20zgxUtu0E35RCpIxBUD0AZY4u6/FS5/ALQPMI9EiGqJiXT/cjSnPnMEP03eQVatNOa/PiXoWCIxx9w96AzFmNlVwJXufnHhck+grbtfU+Q56UA6QFJSUvK4ceNKvb9NmzZRrVq1MmWOBLEyB5Rslu1btrDwtnzWz2tMrVbLOfTBroTi48OUsOQq23GJBrEyB5Rtlnbt2s1295a73ejuEfUAzgTeKbLcFxiyp+cnJyd7WUybNq1Mr48UsTKH+97N8unYCf5kQpo/mZDmn46dUHGhSqmyHpdIFitzuJdtFmCW7+HraiReSpoJNDaz/QqXTwb0o7CyW8dfdSm9NzxD3ZPjeOvqjxndqjtbN24MOpZIVIu4YnD3LUAv4EkzGwjMdfd3Ao4lESwUH8/Vb2dz0etns/lryKl7G/9+OjfoWCJRK+KKAcDdp7h7hrv3d/f7gs4j0eGI884ic90I/nZhPO/f8DXPHtmFDStXBR1LJOpEZDGIlFZcKMTlLw3lyg+vZNtKyG04kKkDhwYdSySqqBgkJjU+sSWZv4ymaZeqzB6wlBFNUvll8eKgY4lEBRWDxLT/yX2YlHlp+DbIO2Qor930QNCRRCKeikFiXv0jm5P+Yz4t+h7A/CfXkFM/lR/mzgs6lkjEUjFIpXHeY3fS7fu+hKrC2ONG8XKXW3VbDZHdUDFIpVKn0UH0XJhPq4easOT5X8lJ7MGiDz4MOpZIRFExSKXU9vbrSFt1HwkHOhNOmcj4i67X2YNIIRWDVFpV69Sh2xejOS2nBSvf3EFWzXS+mvxm0LFEAqdikEqvdXoqmWsHU/1oeLXDVJ5vm872rVuDjiUSGBWDCLBvlSqkzszlvBfbsPZjJ7tWH2aPGR90LJFAqBhEijj28ovptX4YiW3jeDt1NqOTu/Hr+vVBxxIJKxWDyO+E4uO56o0sLplyAZsXGMMT7+T9oSOCjiUSNioGkT047Ky2ZK4dQcOO+/Hvm74lt3mqbsonlYKKQeRPxIVCXDZ+CFd+1Intq42RDR/k7QGDg44lUqFUDCIl0LhVMpmrR3Noj+rMGfgjIxql8POiRUHHEqkQKgaRvXBRzkBS5mfgu4zRhz7N5OvvDTqSSLlTMYjspaTDDyN9eT7H3J7EN8PWkZOUyvI5c4OOJVJuVAwipXTOQ7fRbckt7FMDxp4whomd++m2GhITVAwiZVD7wIb0WJBP60cPZumLW8mp24Pv3n0/6FgiZfKXxWBmF4UjiEg0O61fb9JW3s/+TeCltpMY1/5anT1I1CrJGUN/M3vUzI6q8DQiUaxqnTp0nTOKdrnHsurtnWTVyGDVh7OCjiWy10pSDF2Ae4HTzewZM7uwYiOJRLcTu3cmc+0QahwH39/xM2NOTdNN+SSqlKQYQsBO4DfgJCDDzJ4ysysqNJlIFNu3ShVSPhjJwQ8msv5TJ6tWHz7JeyHoWCIlUpJieA74CjgGuMLdO7j79UByhSYTiQH1TmpFr3VZ1DsjxNTunzHq+K66KZ9EvJIUwzfAce7ex90XAJjZvkCVCk0mEiNC8fF0em0YHad2YMsiIyfxTt4bkh10LJE9KkkxXO3uG4uucPdthWcN5crM7jWz6UUeZ5f3PkSC0qzdaWSuGclBlyUws99Ccg9LZf1PPwUdS+QP/rIY3D2sn7lz97ZFHlPCuW+RihYXCnHpC4O56pOr2bEOcg8cxJS7Hg06lkgxEfcDbmZ2l5n1M7PbzEyXqyQmHZR8PBmr8jkssyafP7yC4QemsmrBd0HHEgHA3D28OzR7E0jazaYBwEJgsbtvNrPeQLK799jNe6QD6QBJSUnJ48aNK3WeTZs2Ua1atVK/PlLEyhxQ+WbZ9OOPLO33KltWNKB2x80cct1VYUq3d2LluMTKHFC2Wdq1azfb3VvudqO7R+QDaA58/1fPS05O9rKYNm1amV4fKWJlDvfKO8uUux/zwXE3eFZiqi+d9WnFhSqlWDkusTKHe9lmAWb5Hr6uRtSlJDN7rMhiMwrOIEQqhbPu70eP5bcTX8d5odVYXurUV7fVkEBEVDEAO8xsqJndBXQGegcdSCScajZoQI9v8jlpcDOWvfQb2XV68u3b04OOJZXMPkEHKMrd7wg6g0gkOOWmdJK7r2d8uxt5+ezXaHTueK549UlC8fFBR5NKINLOGESk0P41a9L10zzOHHUCq6fvIqtmL+ZOmBR0LKkEVAwiEa5ll05krhtKrVZxvH75B4w5qQfbtmwJOpbEMBWDSBSIT0jgmneH02FSWzbMhezafflo5HNBx5IYpWIQiSJHXXg+vdYPJ+mcfZieNpe8Y7qyec2aoGNJjFExiESZuFCIK199mstmXMzWZTCi3j1MH/R00LEkhqgYRKLUIaeeRMbqXBpdtT+f3LmYkYeksnb5D0HHkhigYhCJYnGhEB3HPMrVc7qyczM82/gx3rzt4aBjSZRTMYjEgIbHtCBjRT7Nr6vNF4+vYvjfUlj5zbdBx5IopWIQiSHth95DlwXXY/tC/hE5TEq7K+hIEoVUDCIx5oCmTUlbPIYTBjTku7yNZNftwpKPZwUdS6KIikEkRp15b196/tCffes541uP5x+X9tFN+aREVAwiMaxGUj26z8/n5KHN+fHV7WTXTuObKVODjiURTsUgUgmcfH0PMn55hKqHOf88503GnpXJzu3bg44lEUrFIFJJJFSvTpdZeZz9XEt+eX8XWTV689n4iUHHkgikYhCpZE7ofDmZ656kdps43ur0Efl/787WjRuDjiURRMUgUgnFJyTQeWoOF712Fhu/NHLq3srMYXlBx5IIoWIQqcSOOP9seq0fToP28bx37XzyWnRh0+rVQceSgKkYRCq5uFCIK15+ksve78jWH4wR9e9n2oNDg44lAVIxiAgATU9uTa+1ozg4pQqz7l7GyKYprFm6LOhYEgAVg4gUc3HeIK6Z251dvxp5Bw/hjX4PBh1JwkzFICJ/0KDFkaT/lM+RN9bhyydWk9MglY2LlwYdS8JExSAie3T+4LvpurAPoQTn6+5z+We324OOJGGgYhCRP1W3SRN6fj+GemnO92O2kFWnK4s++DDoWFKBVAwiUiKNr7qQtBUD2K+BM+GUibx4yQ26KV+MUjGISIlVS0yk+5ejOfWZI/hp8nayaqYz//UpQceSchb2YjCzODPLMLNVZtbid9uuMbPBZvaomWWEO5uIlEyb3t3I+OVRqh/lTLrgbZ4/I4PtW7cGHUvKSRBnDMcCHwFbiq40swOBfkA/d78V6GlmzQLIJyIlkFC9OqkfPcs54/7O2pm7yK59A58+/4+gY0k5CHsxuPtn7j5nN5vOBWa7uxcuzwTOD1swESmV46/sSK8Nw6h7chxTrpnF6JbddFO+KGf//Tpcjm9q9iaQtJtNA9x9UuFzFgMd3H1e4fIdQJK731i4PBDA3fvv5v3TgXSApKSk5HHjxpU666ZNm6hWrVqpXx8pYmUO0CyRqiSzrJ49hxX3fM6O3/Yn8YY6HHjhWWFKV3KV7ZjsSbt27Wa7e8vdbnT3QB7AYqBFkeUeQG6R5SeBG/7qfZKTk70spk2bVqbXR4pYmcNds0Sqks6yc8cOf7HjDf4It3hu8xRfv2JlxQbbS5XxmOwOMMv38HU1kj6V9CaQbGZWuNwGeD3APCJSCnGhEJe/NJQrP7qCbauM3IYDeef+J4KOJXshiE8l1Taz/kBNIN3MWgO4+3LgceAJMxsMjHT3BeHOJyLlo/GJLcn8ZTRNu1bj03uXM6JJCj8vWhR0LCmBIL75vNbdB7p7bXe/wd0/LLLtOXe/0d1vdveccGcTkfL3PyMfImVeGr4NRjd7isl97gs6kvyFSLqUJCIxqv6RzUn/cQxH96vH10+vI6d+Kj/MnRd0LNkDFYOIhM25j9xBt+/7EqoKY48bxcSUW3VbjQikYhCRsKrT6CB6Lsyn1UNNWPrCr+Qk9mDhe/8OOpYUoWIQkUC0vf060lbdR8JBMOG0fzL+wut09hAhVAwiEpiqderQbe4o2o44hpVv7SSrRgZfvqpPqQdNxSAigft7z2vIXDuYGsc6/7poOs+dnq6b8gVIxSAiEWHfKlVI+Xcu573YhnWfONm1+jBrdOlvdyOlp2IQkYhy7OUX02v9MBLbxvFO108ZndyNX9evDzpWpaJiEJGIE4qP56o3srhkygVs/g5yEu/k/SeGBx2r0lAxiEjEOuystmSuGcmBHffj3zcvIPfwVNb/9FPQsWKeikFEIlpcKMRl44dw5Ued2L7GyD1oEG8PeDzoWDFNxSAiUaFxq2Qyfx5Ns7TqzBn4EyMapbBqwXdBx4pJKgYRiSoXZg0kZX4GvsvIP3wYk6+/N+hIMUfFICJRJ+nww0hfns8xtyfxzbB15NRLZdnsz4KOFTNUDCIStc556Da6LbmFfWrCC63GMrFzP91WoxyoGEQkqtU+sCE9FuTT+tGDWfriVrLr9mTBtBlBx4pqKgYRiQmn9etNxuoHqdLEmXjGvxh3QW92bt8edKyopGIQkZixf82adJ0zina5x7LqnV1k1erFFy//K+hYUUfFICIx58Tunem1/n+peTy81vE9xpzSUzfl2wsqBhGJSfEJCaS8P5ILJp7K+s8gq+aNfJL3QtCxooKKQURi2tGXdKDXuizqnRViavfP+DozWzfl+wsqBhGJeaH4eDpNfoZLp1/Ezh/3IyfxLt4bkh10rIilYhCRSuPQ00/hiJdTaXRFAjP7LSS3WSprl/8QdKyIo2IQkUolLhSi4/OPc/WnKexYD3mNH+OtOx8JOlZEUTGISKV04HHHkLEqn8MyazB30EqGH5jCym++DTpWRAh7MZhZnJllmNkqM2vxu22LzWx64eP5cGcTkcqnwzP3k/pNbywOxhyRw6u9+gcdKXBBnDEcC3wEbNnNtlHu3rbw0TnMuUSkkqrX7FDSlo7huP4NWDBiI9mJXVjyyeygYwUm7MXg7p+5+5w9bD7VzG41swfM7KRw5hIROev+fvRYdjvxic74v49jwpV9K+VN+czdy/9Nzd4EknazaYC7Typ8zmKgg7vPK/K6E939YzOrAnxauP0Pv4nDzNKBdICkpKTkcePGlTrrpk2bqFatWqlfHyliZQ7QLJEqVmYp6RzLX5nC6qfXsU/CZho8kEzd444OQ7q9U5Zj0q5du9nu3nK3G909kAewGGjxJ9vHAV3+6n2Sk5O9LKZNm1am10eKWJnDXbNEqliZZW/m2LJunY86oasP4lYfe3am79i2reKClUJZjgkwy/fwdTViPpVkZmea2XlFVh0KLAwqj4jI/jVr0mV2HmeOOp7VM3aRVbM3cydMCjpWhQviU0m1zaw/UBNIN7PWhZtWAWlmdqeZPQ1MdPf3w51PROT3WnbpROa6odRqZbx++Qfkt+nBti27+/xMbNgn3Dt097XAwMJH0fVfAJeGO4+ISEnEJyRwzbvD+fLV15l+1QSya9/MiU+1oXV6atDRyl3EXEoSEYkGR114Pr3WDyfp3H2YkTGPvKO7sHnNmqBjlSsVg4jIXooLhbhy0lNcOuNiti43RtS7h+mDng46VrlRMYiIlNIhp55ExupcGnfen0/uXMzIQ1JZs3RZ0LHKTMUgIlIGcaEQl4x+lKvndGXnZsg7eAhv3PJQ0LHKRMUgIlIOGh7TgowV+TS/rhbzhvzM8L+lsOKrr4OOVSoqBhGRctR+6D10W9gH29cY02IEr/S8M+hIe03FICJSzuo2aULa4nxOuPdAFo7aRHbdLiz5eFbQsUpMxSAiUkHOHHATPX/oz75JML71eP5xaZ+ouCmfikFEpALVSKpH969Gc/LQ5vz46naya6cx/423g471p1QMIiJhcPL1Pcj45RGqHg6Tzp/C2LMy2bl9e9CxdkvFICISJgnVq9Plk2c5+7mW/PLBLrJq9Oaz8RODjvUHKgYRkTA7ofPl9N7wDLXbxPFWp4/I/3t3tm7cGHSs/6diEBEJQCg+ns5Tc7jotbPY+KWRU/dWZg7LCzoWoGIQEQnUEeefTa/1w2nQPp73rp1PXosubFq9OtBMKgYRkYDFhUJc8fKTXDHzMrb+aIyofz/THhwaXJ7A9iwiIsU0aX0ivdaM4uCUKsy6exkjm6YEclM+FYOISIS5OG8Q18ztzs5fjbyDh/D6zQ+Edf8qBhGRCNSgxZFk/JTPUTcl8tX/rmF4g1R+mvdVWPatYhARiWDnPX4X3b7vS9z+znPHPMs/u91e4ftUMYiIRLg6jQ6i56IxtHzgIL4fs4WsOl1Z9MGHFbY/FYOISJRod1cf0lYMIOFvzoRTJvLdE89XyH5UDCIiUaRaYiLd5o3mtKyj2O+gOhWyj30q5F1FRKRCtc7swtbp0yvkvXXGICIixagYRESkmLBfSjKzJ4AtwCbgWOBGd19RuO0WoAZQG3jL3SeFO5+ISGUXxPcYNrt7fwAzuw24C7jezP4OtHP3C8xsH2C+mb3r7usDyCgiUmmF/VLSf0qhyP43Ff57B2Bm4XN2APOB08ObTkREzN3L/03N3gSSdrNpwH8uD5lZLeBl4FJ3X2NmOcB8d//fwu3PAdPdfeRu3j8dSAdISkpKHjduXKmzbtq0iWrVqpX69ZEiVuYAzRKpYmWWWJkDyjZLu3btZrt7y91udPewP4CawPPAwUXWPQDcXWR5EnDRX71XcnKyl8W0adPK9PpIEStzuGuWSBUrs8TKHO5lmwWY5Xv4uhr2S0lmlgg8A9zq7t+b2aWFmyYDbQqfEw8cAcwIdz4RkcquQi4l/ekOzT6l4JveawpXbXT3Cwu33ULBJ5JqA697CT6VZGY/A0vKECkRCPbXJZWPWJkDNEukipVZYmUOKNssjd39gN1tCHsxRBozm+V7us4WRWJlDtAskSpWZomVOaDiZtEPuImISDEqBhERKUbFAMODDlBOYmUO0CyRKlZmiZU5oIJmqfTfYxARkeJ0xiAiIsWoGEREpJhK+Yt6zCwOSKPgp63PcPd5RbZdAxwP7AQWuntOMCn3npndC7QtsupBd58STJrSMbOzgI7AKsDd/b6AI5WKmX0IbC1c3OnuZwaZZ2+YWX1gIHCsu7cqXJcAPA78ADQDBrn7t8GlLJk9zNIVyOS/xyfX3ccEk7BkzOwQCub4FDgQ+MXd7zezOsAgYBEFx+VOd19Z1v1VymKg4HbfH1Fw++//Z2YHAv2A493dzewTM5vq7guCCFka7t426AylZWZVgGzgKHf/zcxeMrMz3f2doLOVwhvufm/QIUrpFOAV4Lgi624Elrr7o2Z2NJALnBr+aHttd7MAdHL3xWFPU3p1gHHu/gqAmX1lZpMp+B/ct939RTO7kILyTinrziplMbj7ZwBm9vtN5wKz/b/fkZ8JnA9ETTGY2V3Ab0AIeMrdt/zFSyJJG2CJu/9WuPwB0B6IxmI4uvC28vsDn7j75KADlZS7TzCztr9b3R64s3D7F2Z2rJnVcPcN4c63N/YwC8B1ZrYCqAI87e5rdvOciOHun/xuVRywmYLj8mDhug+A0eWxv5gthpLc4XU36gEbiyxvKFwXMf5sLuAfwGJ332xmvYGngB7hzFdGEf/ffy884u4fm1kImGFmG909mu/9tadjE9HFsAfvApPd/Wczu4CCvzfRdKnvEuBNd//azIoelw1AbTPbxwt+dUGpxWwxuPu5pXjZKuDQIss1gO/KJ1H52Iu5pgK3VGSWCrAKqF5kuUbhuqjj7h8X/nOnmb0HtCO6bwoZS8fm+yKLU4FJZhZy951BZSopM2tHwZ+lGwtX/ee4rKPgmKwtaymAPpX0e28Cyfbfa0xtgNcDzLNXzOyxIovNgIVBZSmlmUBjM9uvcPlkCu66G1XMrLmZFT1Ti8Zj8XtF7358NPB5pF9G2hMze7jwt0RCwbFZHCWl0J6Cy919gPpm1oYix4Vy/PtSKX/AzcxqA9cCNwNjgLHu/mHhtmuAlhR8KunbKPtU0sMUXDNdBRxNwWWziP/kSFFmdjZwGfAzsD0aP5VkZn8DngY+o+D/4uKBvu6+K9BgJWRmpwOpwHlAFjC4cNPjwE8UnFU/FA1/tvYwSzrQAviegr8nQ//z9z9SmVkyBZfAZhWuqkrBry+YBDxCwR2mDwFuL49PJVXKYhARkT3TpSQRESlGxSAiIsWoGEREpBgVg4iIFKNiEBGRYlQMIiJSjIpBRESKUTGIlDMzu8PMfjWz083sZjN7zcwOCzqXSEnpB9xEKoCZ3Q00ArYB/dz914AjiZSYzhhEKsaDFPy+gq9UChJtdMYgUgHM7FIK7np5K9DB3RcFHEmkxHTGIFLOzKw7cDsFd+adBbxceDM3kaigMwYRESlGZwwiIlKMikFERIpRMYiISDEqBhERKUbFICIixagYRESkGBWDiIgU839RDWOiZQpn2gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-10, 20, 5) # start, finish, n points\n", "y1 = 1 - x\n", "y2 = 2/2 - (2/2)*x\n", "y3 = 3/3 - (3/3)*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "ax.plot(x, y3, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "7d3f5d01", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3481ca46", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cfa7a77f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "77b53d07", "metadata": {}, "source": [ "**(iii) InConsistent Overdetermined System:**\n", "$$x+y=3$$\n", "$$x-y=1$$\n", "$$ 2x-5y=10$$" ] }, { "cell_type": "code", "execution_count": 102, "id": "95caee93", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "x = np.linspace(-5, 5, 10) # start, finish, n points\n", "y1 = 3 - x\n", "y2 = -1 + x\n", "y3 = -2 + (2/5)*x\n", "\n", "fig, ax = plt.subplots()\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "ax.plot(x, y1, c='green')\n", "ax.plot(x, y2, c='red')\n", "ax.plot(x, y3, c='purple')\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "20c507c7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "099b5fd7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c34fbe70", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "70138234", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "46561bac", "metadata": {}, "source": [ "### b. Undertermined Systems of Linear Equations\n", "- An underdetermined system of equations is a system in which the number of equations is less than the number of unknowns. \n", "- Such a system cannot be solved using simple matrix inversion method, as the coefficient matrix is not square and thus cannot be inverted. \n", "- In deep learning many a times we have underdetermined systems that we need to solve. For example, we have thousands of training data points, while there are millions of parameters in the model.\n", "\n", "

$ A_{n\\times m}\\hspace{.2 cm}x_{m\\times 1}\\hspace{.3 cm}=\\hspace{.3 cm}b_{n\\times 1} \\hspace{1 cm}$ and $ \\hspace{.3 cm}n\\hspace{.3 cm}\\lt\\hspace{.3 cm}m$

" ] }, { "cell_type": "markdown", "id": "e4be70a0", "metadata": {}, "source": [ "**Consistent Underdetermined System having `Infinite` Solution:**\n", "$$x+y=3$$\n", "- A single equation having two unknowns is an example of undertermined system of linear equation. If you plot it you get a straight line and there are infinite many points that satisfies this equation." ] }, { "cell_type": "markdown", "id": "a3f18f2a", "metadata": {}, "source": [ "**InConsistent Underdetermined System:**\n", "$$x+2y+2z=2$$\n", "$$x+2y+2z=4$$\n", "- This is an example of underdetermined system of linear equations having two equations and three unknowns. \n", "- We have seen that an equation having three variables when plotted gives you a plane.\n", "- Since both the equations have same coefficient, but different constants so these two equations represent two parallel planes in 3D space with no common point. So no solution. \n", "- Therefore, this system of liner equation is inconsistent." ] }, { "cell_type": "code", "execution_count": null, "id": "ad3e3225", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "96cfe5cc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "4d6ecf38", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0823cfcc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c7c2d66c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "ab719b87", "metadata": {}, "source": [ "## 6. Solving Inconsistent Overdetermined System of Linear Equations using Least Squares" ] }, { "cell_type": "markdown", "id": "03b51fcd", "metadata": {}, "source": [ "### a. Modeling Linear Equation in Machine Learning with Two Variables\n", "| Dependent Variable ($y$) | Independent Variable ($x$) |\n", "| ----------- | ----------- |\n", "| GPA of a student | Number of hours studied daily |\n", "| Forgetness level | Drug dosage in ml |\n", "| Salary of a person | Number of Education years |\n", "| House price | Covered area of the house |\n", "| Electricity Bill | Amount of electricity consumed |\n", "| Distance travelled | Time |\n", "| Sales | Advertising Expenditures |\n", "\n", "- This relationship can be represented in the following format in machine learning:\n", "

${\\hspace 9 cm}y = c + mx $

\n", "

${\\hspace 9 cm}y = \\beta_0 + \\beta_1x $

" ] }, { "cell_type": "code", "execution_count": null, "id": "d5d2e715", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "605a72a5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "135a5272", "metadata": {}, "source": [ "### b. Modeling Linear Equation in Machine Learning with `m` Variables\n", "| Dependent Variable ($y$) | Independent Variable ($x_1$) |Independent Variable ($x_2$) |Independent Variable ($x_3$) |\n", "| ----------- | ----------- |----------- | ----------- |\n", "| GPA of a student | Number of hours studied daily | Teaching Aids | Instructor Qualification|\n", "| Forgetness level | Drug dosage in ml |Social bindings | Family Environment|\n", "| Salary of a person | Number of Education years |Managerial skills | Communication skills|\n", "| House price | Covered area of the house |Number of bed rooms | distance from office|\n", "| Electricity Bill | Amount of electricity consumed |Loadshedding | Billing slabs|\n", "| Distance travelled | Time |type of car | traffic conditions|\n", "| Sales of AC | Advertising Expenditures |Marketing | Season|\n", "\n", "\n", "- This relationship can be represented in the following format in machine learning:\n", "\n", "

${\\hspace 9 cm}y = \\beta_0 + \\beta_1x_1 + \\beta_2x_2 + \\beta_3x_3 + \\cdots + \\beta_mx_m $

\n", "\n", "\n", "- Where, \n", " - $y$ is the dependent or outcome or response variable.\n", " - $x_1, x_2, x_3, \\cdots, x_m$ are the independent or feature or predictor variables.\n", " - $\\beta_0$ is the minimum value of $y$ when all the feature variables are zero.\n", " - $\\beta_1, \\beta_2, \\beta_3, \\cdots, \\beta_m$ are the values that quantify the effect of respective independent variables on the output or dependent variable. " ] }, { "cell_type": "code", "execution_count": null, "id": "784c3c0d", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b335d4a7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "57149837", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c2b014ac", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5b2163e0", "metadata": {}, "source": [ "### c. Simple Linear Regression using Least Squares Method\n", "\n", "\n", "\n", "####
A `Simple Linear Regression Model` is a mathematical equation that allows us to predict the output/response/dependent variable for a given input/predictor/independent variable.
\n", "

$\\hspace{7 cm}y = \\beta_0 + \\beta_1x + \\epsilon$

\n", "\n", "$\\hspace{7 cm}\\epsilon_i = \\hat{y_i} - y_i = 0$\n", "\n", "\n", "- **Simple** means there is one independent and on dependent variable, e.g., the GPA of a student depends only on the number of study hours.\n", "- **Linear** means the relationship is approximated/described using straight line.\n", "- **Regression** allows us means a measure of the relation between the mean value of one variable (e.g. output) and corresponding values of other variables.\n", "\n", "\n", "

\n", "\n", "####
The method of `Linear Least Squares` is a statistical procedure to approximate the solution of Inconsistent overdetermined systems by minimizing the sum of the offsets of points from the plotted curve.
\n", "\n", "

$$\\hspace{2 cm} \\beta_1 = \\frac{cov(x,y)}{var(x)} = \\frac{\\frac{\\sum_{i=1}^n (x_i - \\bar{x})(y_i - \\bar{y}) }{n}} {\\frac{\\sum(x_i-\\bar{x})^2}{n}} = \\frac{\\sum_{i=1}^n(x_i - \\bar{x})(y_i - \\bar{y})}{\\sum_{i=1}^n(x_i - \\bar{x})^2}$$

\n", "\n", "

$$\\hspace{2 cm} \\beta_0 = \\bar{y} - \\beta_1\\bar{x}$$

" ] }, { "cell_type": "code", "execution_count": null, "id": "60301af7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "dea44999", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "9c5edcde", "metadata": {}, "source": [ "**Example 17:**\n", "- Consider that a teacher has collected a sample data of seven students, their GPA and the number of hours they have studied on daily basis in the entire semester.\n", "- Suppose, a teacher want to determine the relationship between the two variables `GPA` and `study hours` is positive or negative.\n", "- The teacher also wants to determine how much impact the dependent variable `study hours` has on the independent variable `GPA`\n", "- For this she has collected a sample data of seven students as tupple containing (`daily study hours` and `acquired GPA`):\n", " $$(1,\\hspace{.2 cm}1.4), \\hspace{.5 cm}(2,\\hspace{.2 cm}1.6),\\hspace{.5 cm}(3,\\hspace{.2 cm}2.5),\\hspace{.5 cm}(4,\\hspace{.2 cm}2.6), \\hspace{.5 cm}(5,\\hspace{.2 cm}3.5),\\hspace{.5 cm}(6,\\hspace{.2 cm}3.7),\\hspace{.5 cm}(7,\\hspace{.2 cm}4.0) $$" ] }, { "cell_type": "code", "execution_count": null, "id": "0f7158f8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "56786e9b", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "40b61cc9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "68241da4", "metadata": {}, "source": [ ">- **`Step 1:` Plot the seven observations using a scatter chart:**" ] }, { "cell_type": "code", "execution_count": 103, "id": "53648db7", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sh = np.array([1, 2, 3, 4, 5, 6, 7.]) # study hours \n", "gpa = np.array([1.4, 1.6, 2.5, 2.6, 3.5, 3.7, 4.0]) # gpa\n", "fig, ax = plt.subplots()\n", "plt.title(\"Study Hours vs GPA of Students\")\n", "plt.xlabel(\"Study Hours\")\n", "plt.ylabel(\"GPA\")\n", "ax.scatter(sh,gpa)\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "c29eea6a", "metadata": {}, "source": [ "- From the graph, we can note that if a student study 2 hours daily, he/she gets a GPA of 1.6. Similarly, if a student studies 7 hours daily, he or she gets a GPA of 4.0\n", "- So, it appears that there exist a positive relationship between the study hours and GPA achieved.\n", "- However, by just seeing the graph it appears that there exist no straight line or in other words no single equation that passes through all the seven points." ] }, { "cell_type": "code", "execution_count": null, "id": "589e3b2a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d27e8583", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c617ca23", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "cd98e4f3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "bbc503fa", "metadata": {}, "source": [ ">- **`Step 2:` Write down seven linear equations, one for each observation/point:**\n", "\n", "$$(1,1.4), \\hspace{.5 cm} (2,1.6), \\hspace{.5 cm}(3,2.5), \\hspace{.5 cm}(4,2.6), \\hspace{.5 cm}(5,3.5), \\hspace{.5 cm}(6,3.7), \\hspace{.5 cm}(7,4.0) $$\n", "$$y=c+mx$$ \n", "$$y = \\beta_0 + \\beta_1x + \\epsilon$$\n", "- Where,\n", " - $\\beta_0$ is the y-intercept\n", " - $\\beta_1$ is the slope of the line \n", " - $\\epsilon_i = \\hat{y}_i - y_i$, For a given instance $i$, $\\epsilon_i$ is a measure of the difference between the true $y_i$ and the model's estimate, $\\hat{y}_i$. If the model predicts $y_i$ perfectly, then the error is zero\n", "\n", " \n", "- Together, $\\beta_0$ and $\\beta_1$ are called the **model coefficients**. Our objective is to find the parameters $\\beta_0$ and $\\beta_1$ that minimize $\\epsilon$ across all the available data points. \n", "\n", "- Mention the seven equations for the seven points, having two unknowns: y-intercept ($\\beta_0$) and slope ($\\beta_1$)\n", "\n", "$$f(1):\\hspace{1 cm}\\beta_0 + \\beta_1 = 1.4$$\n", "$$f(2):\\hspace{1 cm}\\beta_0 + 2\\beta_1 = 1.6$$\n", "$$f(3):\\hspace{1 cm}\\beta_0 + 3\\beta_1 = 2.5$$\n", "$$f(4):\\hspace{1 cm}\\beta_0 + 4\\beta_1 = 2.6$$\n", "$$f(5):\\hspace{1 cm}\\beta_0 + 5\\beta_1 = 3.5$$\n", "$$f(6):\\hspace{1 cm}\\beta_0 + 6\\beta_1 = 3.7$$\n", "$$f(7):\\hspace{1 cm}\\beta_0 + 7\\beta_1 = 4.0$$\n" ] }, { "cell_type": "code", "execution_count": null, "id": "ccf56daf", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "64a543e6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "b7988f7f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "03d5da04", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "72651870", "metadata": {}, "source": [ ">- **Step 3: Create matrix equation from above seven equations: $Ax=b$**" ] }, { "cell_type": "markdown", "id": "5c69dd5c", "metadata": {}, "source": [ "- Let us write the above `Inconsistent Overdetermined System` of seven linear equations having two unknowns in matrix form.\n", "$$\n", "\\begin{bmatrix} 1 & 1 \\\\ 1 & 2 \\\\ 1 & 3 \\\\ 1 & 4 \\\\ 1 & 5 \\\\ 1 & 6 \\\\ 1 & 7 \\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\end{bmatrix} = \n", "\\begin{bmatrix} 1.4 \\\\ 1.6 \\\\ 2.5 \\\\ 2.6\\\\ 3.5 \\\\ 3.7 \\\\ 4.0 \\end{bmatrix}\n", "$$\n", "- Since the y-intercept is constant, so we have set it equal to `1` across the board\n", "\n", "- So the above equations can be written as:\n", "$$Ax = b$$\n", "\n", "- Where,\n", " - $A$ is a $7\\times 2$ matrix of known coefficients.\n", " - $x$ is a $2\\times 1$ vector of unknowns (y-intercept and slope)\n", " - $b$ is a $7\\times 1$ vector of known independent or output variable values." ] }, { "cell_type": "code", "execution_count": null, "id": "f2bfb14c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3a27d777", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "edb8a04a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "46abfe0f", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "3175128b", "metadata": {}, "source": [ ">- **`Step 4:` Solve the system of linear equations using Linear Least Squares Method:**" ] }, { "cell_type": "markdown", "id": "31b66200", "metadata": {}, "source": [ "**Option 1:** Use Pearson Correlation coefficient, which is used to quantify the strength and direction of linear relationship between two quantitative variables\n", "

$$\\hspace{2 cm} \\beta_1 = \\frac{cov(x,y)}{var(x)} = \\frac{\\frac{\\sum_{i=1}^n (x_i - \\bar{x})(y_i - \\bar{y}) }{n}} {\\frac{\\sum(x_i-\\bar{x})^2}{n}} = \\frac{\\sum_{i=1}^n(x_i - \\bar{x})(y_i - \\bar{y})}{\\sum_{i=1}^n(x_i - \\bar{x})^2}$$

\n", "\n", "

$$\\hspace{2 cm} \\beta_0 = \\bar{y} - \\beta_1\\bar{x}$$

" ] }, { "cell_type": "code", "execution_count": 104, "id": "e8d70558", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope: 0.4642857142857143\n", "Y-intercept: 0.8999999999999999\n" ] } ], "source": [ "x = np.array([1, 2, 3, 4, 5, 6, 7])\n", "y = np.array([1.4, 1.6, 2.5, 2.6, 3.5, 3.7, 4.0])\n", "N = 7 \n", "xbar = sum(x)/N\n", "ybar = sum(y)/N\n", "\n", "b1 = (sum((x - xbar)*(y - ybar)))/(sum((x - xbar)**2))\n", "b0 = ybar - b1*xbar\n", "print(\"Slope: \", b1)\n", "print(\"Y-intercept: \", b0)" ] }, { "cell_type": "code", "execution_count": null, "id": "d6b6f27a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d177bcc7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1fb4182c", "metadata": {}, "source": [ "**Option 2:** Use `np.cov(x,y)` to calculate variance-covariance matrix. The diagornal values of the matrix show variances while the other values are the covariances. For two variables the covariance matrix is shown below:\n", "\n", "$$\\begin{bmatrix} \\sigma(x,x) & \\sigma(x,y) \\\\ \\sigma(y,x) & \\sigma(y,y) \\end{bmatrix}$$\n", "\n", "$ b_1 = \\frac{\\sigma(x,y)}{\\sigma(x,x)}\\hspace{2 cm}$ and $ \\hspace{2 cm}b_0 = \\bar{y} - b_1\\bar{x}$" ] }, { "cell_type": "code", "execution_count": 105, "id": "47337268", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Covariance matrix: \n", " [[4.66666667 2.16666667]\n", " [2.16666667 1.04285714]]\n", "\n", "Slope: 0.4642857142857143\n", "Y-intercept: 0.8999999999999999\n" ] } ], "source": [ "# OPTION 2\n", "x = np.array([1, 2, 3, 4, 5, 6, 7])\n", "y = np.array([1.4, 1.6, 2.5, 2.6, 3.5, 3.7, 4.0])\n", "cov_mat = np.cov(x, y)\n", "print(\"Covariance matrix: \\n\",cov_mat)\n", "\n", "b1 = cov_mat[0,1]/cov_mat[0,0] #slope = cov(x,y)/var(x)\n", "b0 = sum(y)/N - b1 * sum(x)/N\n", "\n", "print(\"\\nSlope: \", b1)\n", "print(\"Y-intercept: \", b0)" ] }, { "cell_type": "code", "execution_count": null, "id": "14cf40b8", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "290b0b78", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9efb45bb", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "d4cdf1dc", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "0b146732", "metadata": {}, "source": [ ">- **`Step 5:`Draw the regression line using the computed slope and y-intercept, which is the best fit line**\n", "\n", "$$y = 0.9 + 0.464*x $$" ] }, { "cell_type": "code", "execution_count": 106, "id": "976b6aa1", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.array([1, 2, 3, 4, 5, 6, 7]) \n", "y = np.array([1.4, 1.6, 2.5, 2.6, 3.5, 3.7, 4.0]) \n", "fig, ax = plt.subplots()\n", "plt.title(\"Study Hours vs GPA of Students\")\n", "plt.xlabel(\"Study Hours\")\n", "plt.ylabel(\"GPA\")\n", "ax.scatter(sh,gpa);\n", "\n", "x2 = np.linspace(0,8, 10)\n", "b0 = 0.9\n", "b1 = 0.464\n", "y2 = b0 + b1*x2\n", "ax.plot(x2,y2)\n", "plt.grid(True)" ] }, { "cell_type": "markdown", "id": "82e459e2", "metadata": {}, "source": [ ">- **`Step 6:`Perform prediction**\n", "- You can perform prediction from the graph. Given a x value you predict the value from the line and the actual data point. Note the difference between the predicted value and the actual value." ] }, { "cell_type": "code", "execution_count": null, "id": "7a071ee3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "0fee1506", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "6ee7b6e3", "metadata": {}, "source": [ ">- **`Step 7:` Finally calculate the least square errors to determine how well the regression line actually fits the data:**\n", "\n", "- **R-squared Error/Coefficient of Determination**. Tells us how well the regression line fit the data. can range from 0 to 1. A value of 0 indicates that the response variable cannot be explained by the predictor variable at all. A value of 1 indicates that the response variable can be perfectly explained without error by the predictor variable.\n", "$$R^2 = \\frac{SSR}{SST}$$\n", "- **Sum of Squares due to Regression (SSR)** is calculated as the sum of the squares deviations of each predicted value of y, i.e., $\\hat{y}$, and subtract the avarage y, i.e., $\\bar{y}$. So it measures the difference between the predicted values and its average.\n", "$$SSR = \\sum(\\hat{y}_i - \\bar{y})^2$$ \n", "- **Sum of Squares Total (SST)** is the total variation squared.\n", "$$SST = SSR + SSE$$\n", "- **Sum of Squares Error (SSE)** is the unexplained deviation:\n", "$$SSE = \\sum(\\hat{y}_i - y_i)^2$$ " ] }, { "cell_type": "code", "execution_count": 107, "id": "1875f68f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9645681098359337" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([1, 2, 3, 4, 5, 6, 7]) \n", "y = np.array([1.4, 1.6, 2.5, 2.6, 3.5, 3.7, 4.0]) \n", "yhat = b0 + b1*x \n", "sse = sum((yhat - y)**2)\n", "ssr = sum((yhat- np.mean(y))**2)\n", "sst = ssr + sse\n", "r2 = ssr/sst\n", "r2" ] }, { "cell_type": "markdown", "id": "0075fa8f", "metadata": {}, "source": [ "This tells us that 96.4% of the variation in GPA can be explained by the number of hours studied." ] }, { "cell_type": "code", "execution_count": null, "id": "113317c7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3a8700b7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "f3af77d5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "71f4f247", "metadata": {}, "source": [ "### Example 18\n", "Given four observations of some random experiment, use paper pencil and calculate equation for the best fit linear regression line and calculate R-squared error to to determine how well the regression line fits the dataset. Finally write Python code to verify your answers.\n", " $$(-1, \\hspace{.2 cm}0),\\hspace{.5 cm} (0,\\hspace{.2 cm} 1),\\hspace{.5 cm}(1, \\hspace{.2 cm}2), \\hspace{.5 cm}(2,\\hspace{.2 cm} 1) $$" ] }, { "cell_type": "markdown", "id": "6c91093b", "metadata": {}, "source": [ "- **Write down seven linear equations, one for each observation/point:**\n", "$$f(-1): \\beta_0 - \\beta_1 = 0$$\n", "$$f(0): \\beta_0 + 0\\beta_1 = 1$$\n", "$$f(1): \\beta_0 + 1\\beta_1 = 2$$\n", "$$f(2): \\beta_0 + 2\\beta_1 = 1$$\n", "\n", "\n", "- **Create matrix equation from above seven equations: $Ax=b$**\n", "$$\n", "\\begin{bmatrix} 1 & -1 \\\\ 1 & 0 \\\\ 1 & 1 \\\\ 1 & 2 \\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\end{bmatrix} = \n", "\\begin{bmatrix} 0 \\\\ 1 \\\\ 2 \\\\ 1 \\end{bmatrix}\n", "$$\n", "\n", "$$Ax = b$$\n", "\n", "\n", "- **Solve the system of linear equations using pseudoinverse:**\n", "$$A^TAx = A^Tb $$\n", "\n", "$$\n", "\\begin{bmatrix} -1 & 0 & 1 & 2 \\\\ 1 & 1 & 1 & 1 \\end{bmatrix}\n", "\\begin{bmatrix} -1 & 1 \\\\ 0 & 1 \\\\ 1 & 1 \\\\ 2 & 1 \\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\end{bmatrix} = \n", "\\begin{bmatrix} -1 & 0 & 1 & 2 \\\\ 1 & 1 & 1 & 1 \\end{bmatrix}\n", "\\begin{bmatrix} 0 \\\\ 1 \\\\ 2 \\\\ 1 \\end{bmatrix}\n", "$$\n", "\n", "\n", "\n", "\n", "$$\n", "\\begin{bmatrix} 6 & 2 \\\\ 2 & 4 \\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\end{bmatrix} = \n", "\\begin{bmatrix} 4 \\\\ 4\\end{bmatrix}\n", "$$\n", "\n", "$$Ax = b$$\n", "\n", "\n", "$$Ax = b$$\n", "\n", "$$x = A^{-1}b$$\n", "\n", "$$x = \\frac{1}{det(A)}\\begin{bmatrix} 4 & -2\\\\ -2 & 6 \\end{bmatrix} \\begin{bmatrix} 4 \\\\ 4\\end{bmatrix}$$\n", "\n", "$$x = \\frac{1}{20}\\begin{bmatrix} 4 & -2\\\\ -2 & 6 \\end{bmatrix} \\begin{bmatrix} 4 \\\\ 4\\end{bmatrix}$$\n", "\n", "$$x = \\begin{bmatrix} 1/5 & -1/10\\\\ -1/10 & 3/10 \\end{bmatrix} \\begin{bmatrix} 4 \\\\ 4\\end{bmatrix}$$ \n", "\n", "$$x = \\begin{bmatrix} 2/5 \\\\ 4/5\\end{bmatrix}$$\n", "- Using this way, you get the same slope and y-intercept: $m=2/5$ and $c = 4/5$\n" ] }, { "cell_type": "code", "execution_count": 114, "id": "cad5ec64", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope: 0.4\n", "Y-intercept: 0.8\n", "R-Squared Error: 0.4000000000000001\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import scipy.stats\n", "x = np.array([-1, 0, 1, 2])\n", "y = np.array([0, 1, 2, 1])\n", "result = scipy.stats.linregress(x,y)\n", "b1 = result.slope\n", "b0 = result.intercept\n", "print(\"Slope: \", b1)\n", "print(\"Y-intercept: \", b0)\n", "\n", "\n", "yhat = b0 + b1*x\n", "sse = sum((yhat - y)**2)\n", "ssr = sum((yhat- np.mean(y))**2)\n", "sst = ssr + sse\n", "r2 = ssr/sst\n", "print(\"R-Squared Error: \", r2)\n", "\n", "fig, ax = plt.subplots()\n", "ax.scatter(x, y);\n", "x2 = np.linspace(-3,6, 10)\n", "y2 = b0 + b1*x2\n", "ax.plot(x2,y2)\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "1c7faeaa", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "9d7daea5", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "eb2363f0", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "de9c8cf9", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "322127d4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "619b021d", "metadata": {}, "source": [ "### Example 19\n", "- Consider that a doctor has collected a sample data of eight patients, on which he/she has administered a special drug that is used to reduce the level of fogetfullness of a patient.\n", "- Suppose, a doctor want to determine the relationship between the two variables `forgetness level` and `drug dosage` is positive or negative.\n", "- The doctor also wants to determine how much impact the dependent variable `drug dosage` has on the independent variable `forgetness level`\n", "- For this she has collected a sample data of eight patients as shown below:\n", " $$(0,\\hspace{.2 cm}1.86),\\hspace{.5 cm} (1,\\hspace{.2 cm}1.31),\\hspace{.5 cm}(2, \\hspace{.2 cm}0.62),\\hspace{.5 cm}(3, \\hspace{.2 cm}0.33), \\hspace{.5 cm}(4,\\hspace{.2 cm}0.09),\\hspace{.5 cm}(5,\\hspace{.2 cm}-0.67),\\hspace{.5 cm}(6, \\hspace{.2 cm}-1.23), \\hspace{.5 cm}(7,\\hspace{.2 cm} -1.37) $$\n", " \n", "- Write down Python code to plot the points, and use least squares method to calculate equation for the best fit linear regression line and calculate R-squared error to to determine how well the regression line fits the dataset. " ] }, { "cell_type": "code", "execution_count": 113, "id": "0d809cec", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Slope: -0.4692857142857143\n", "Y-intercept: 1.76\n", "R-Squared Error: 0.9834425543516645\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.array([0, 1, 2, 3, 4, 5, 6, 7.]) # Drug dosage in ml\n", "y = np.array([1.86, 1.31, 0.62, 0.33, 0.09, -0.67, -1.23, -1.37]) # Level of forgetfullness\n", "\n", "result = scipy.stats.linregress(x,y)\n", "b1 = result.slope\n", "b0 = result.intercept\n", "print(\"Slope: \", b1)\n", "print(\"Y-intercept: \", b0)\n", "\n", "\n", "yhat = b0 + b1*x\n", "sse = sum((yhat - y)**2)\n", "ssr = sum((yhat- np.mean(y))**2)\n", "sst = ssr + sse\n", "r2 = ssr/sst\n", "print(\"R-Squared Error: \", r2)\n", "\n", "\n", "\n", "fig, ax = plt.subplots()\n", "plt.title(\"Clinical Trial\")\n", "plt.xlabel(\"Drug dosage (mL)\")\n", "plt.ylabel(\"Forgetfulness\")\n", "ax.scatter(x, y)\n", "\n", "x2 = np.linspace(0, 8, 10)\n", "y2 = result.slope*x2 + result.intercept\n", "ax.plot(x2,y2)\n", "plt.grid(True)" ] }, { "cell_type": "code", "execution_count": null, "id": "0861ac94", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "3a509921", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "995e7fa7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "22090f35", "metadata": {}, "source": [ "### d. Multiple Linear Regression using Ordinary Least Squares (OLS) Method" ] }, { "cell_type": "markdown", "id": "24ea9711", "metadata": {}, "source": [ "#### Equation for Multiple Linear Regression\n", "- The equation of multiple linear regression can be written as:\n", "

${\\hspace 9 cm}\\beta_0 + x_1\\beta_1 + x_2\\beta_2 + x_3\\beta_3 + \\cdots + x_m\\beta_m = y$

\n", "\n", "\n", "- Where, \n", " - $y$ is the dependent or outcome or response variable, e.g., gpa achieved (**known**).\n", " - $x_1, x_2, x_3, \\cdots, x_m$ are the predictor variables, e.g., study hours, instructor teaching skills, lab work and so on (**known**).\n", " - $\\beta_0$ is the minimum value of $y$ when all the feature variables are zero, e.g., minimum gpa achived by a student. Also called the y-intercept (**unknown**).\n", " - $\\beta_1, \\beta_2, \\beta_3, \\cdots, \\beta_m$ are the model parameters that we want to determine (**unknown**)." ] }, { "cell_type": "code", "execution_count": null, "id": "de6e7930", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "15c897a3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "a1673cd7", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "1134b4e3", "metadata": {}, "source": [ "#### Overdetermined System having `n` Equations and `m` Variables\n", "- Suppose we have `n` observations, or `n` data points one for each student. So this system of of `n` linear equations involving `m` variables can be written as:\n", "\n", "$$\\beta_0 + x_{1,1}\\beta_1 + x_{1,2}\\beta_2 + x_{1,3}\\beta_3 + \\cdots + x_{1,m}\\beta_m = y_1$$\n", "$$\\beta_0 + x_{2,1}\\beta_1 + x_{2,2}\\beta_2 + x_{2,3}\\beta_3 + \\cdots + x_{2,m}\\beta_m = y_2$$\n", "$$\\beta_0 + x_{3,1}\\beta_1 + x_{3,2}\\beta_2 + x_{3,3}\\beta_3 + \\cdots + x_{3,m}\\beta_m = y_3$$\n", "$$\\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm}\\cdots\\hspace{1 cm} \\cdots $$\n", "$$\\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm}\\cdots\\hspace{1 cm} \\cdots $$\n", "$$\\beta_0 + x_{n,1}\\beta_1 + x_{n,2}\\beta_2 + x_{n,3}\\beta_3 + \\cdots + x_{n,m}\\beta_m = y_n$$" ] }, { "cell_type": "markdown", "id": "6be235dc", "metadata": {}, "source": [ "#### Writing in Matrix Form\n", "- Let us write above set of linear equations in matrix form, by keeping a 1 for the unknown variable `a`, which is the minimum gpa that a student can get
\n", "\n", "$$\n", "\\begin{bmatrix} 1 & x_{1,1} & x_{1,2} & x_{1,3} & \\cdots & x_{1,m} \\\\\n", " 1 & x_{2,1} & x_{2,2} & x_{2,3} & \\cdots & x_{2,m} \\\\\n", " 1 & x_{3,1} & x_{3,2} & x_{3,3} & \\cdots & x_{3,m} \\\\\n", " \\vdots & \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", " 1 & x_{n,1} & x_{n,2} & x_{n,3} & \\cdots & x_{n,m} \n", "\\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\\\ \\beta_2 \\\\ \\vdots \\\\ \\beta_m \\end{bmatrix} =\n", "\\begin{bmatrix} y_1 \\\\ y_2 \\\\ y_3 \\\\ \\vdots \\\\ y_n \\end{bmatrix}\n", "$$\n", "\n", "$$ Ax = b$$\n", "- The matrix $A$ is known. For example, each row contains the value of study hours, instruction teaching skills, lab work and so on.\n", "- The vector $x$ is unknown, called the model's learnable parameters.\n", "- The vector $b$ is known. For example, each $y_i$ is the known gpa of a student." ] }, { "cell_type": "code", "execution_count": null, "id": "baebc886", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "62f0bbb4", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "71faf2f6", "metadata": {}, "source": [ "**Example 20:**\n", "- Consider that a teacher has collected a sample data of seven students, their GPA (0-4), the number of hours they have studied on daily basis in the entire semester (0-7) and instructor teaching skills (0-4).\n", "- For this she has collected a sample data of seven students as tupple containing (`daily study hours`, `instructor teaching skills` and `acquired GPA`):\n", "$$\n", "(1,\\hspace{.2 cm}4, \\hspace{.2 cm}2.4),\\hspace{.5 cm}\n", "(2,\\hspace{.2 cm}1, \\hspace{.2 cm}2.2),\\hspace{.5 cm}\n", "(3,\\hspace{.2 cm}3, \\hspace{.2 cm}2.9),\\hspace{.5 cm}\n", "(4,\\hspace{.2 cm}4, \\hspace{.2 cm}3.8),\\hspace{.5 cm}\n", "(5,\\hspace{.2 cm}3, \\hspace{.2 cm}3.0),\\hspace{.5 cm}\n", "(6,\\hspace{.2 cm}1, \\hspace{.2 cm}2.0),\\hspace{.5 cm}\n", "(7,\\hspace{.2 cm}2, \\hspace{.2 cm}3.0),\\hspace{.5 cm}\n", "$$" ] }, { "cell_type": "markdown", "id": "ebcab230", "metadata": {}, "source": [ ">- **Write down seven linear equations, one for each observation/point:**\n", "- There are a total of seven observations.\n", "- We need to predict the `GPA` based on two feature or input or predictor variables, `study_hours` and `instr_teaching_skills`.\n", "- The regression equation for this situation is:\n", "$$\\beta_0 + x_1\\beta_1 + x_2\\beta_2 = y$$\n", "- In this example of multiple regression, $\\beta_0$, $\\beta_1$, and $\\beta_2$ are called the **model coefficients**. \n", "\n", "- The seven equations for the seven data points, makes up a system of overdetermined system as shown below:\n", "$$\\beta_0 + \\beta_1 + 4\\beta_2 = 2.4$$\n", "$$\\beta_0 + 2\\beta_1 + \\beta_2 = 2.2$$\n", "$$\\beta_0 + 3\\beta_1 + 3\\beta_2 = 2.9$$\n", "$$\\beta_0 + 4\\beta_1 + 4\\beta_2 = 3.8$$\n", "$$\\beta_0 + 5\\beta_1 + 3\\beta_2 = 3.0$$\n", "$$\\beta_0 + 6\\beta_1 + 1\\beta_2 = 2.0$$\n", "$$\\beta_0 + 7\\beta_1 + 2\\beta_2 = 3.0$$" ] }, { "cell_type": "markdown", "id": "7c2b4e91", "metadata": {}, "source": [ ">- **Create matrix equation from above seven equations: $Ax=b$**\n", "- Let us write the above `Inconsistent Overdetermined System` of seven linear equations having two unknowns in matrix form.\n", "$$\n", "\\begin{bmatrix} 1 & 1 & 4\\\\ 1 & 2 &1\\\\ 1 & 3 &3\\\\ 1 & 4 &4\\\\ 1 & 5 &3 \\\\ 1 & 6 &1\\\\ 1 & 7 &2 \\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\\\ \\beta_2 \\end{bmatrix} = \n", "\\begin{bmatrix} 2.4 \\\\ 2.2 \\\\ 2.9 \\\\ 3.8\\\\ 3.0 \\\\ 2.0 \\\\ 3.0 \\end{bmatrix}\n", "$$\n", "- Since the y-intercept is constant, so we have set it equal to `1` across the board\n", "\n", "- So the above equations can be written as:\n", "$$Ax = b$$\n", "\n", "- Where,\n", " - $A$ is a $7\\times 3$ matrix of known coefficients.\n", " - $x$ is a $3\\times 1$ vector of unknowns.\n", " - $b$ is a $7\\times 1$ vector of known independent or output variable values." ] }, { "cell_type": "markdown", "id": "aced446f", "metadata": {}, "source": [ ">- **Solve the system of linear equations using Ordinary Least Squares Method:**" ] }, { "cell_type": "code", "execution_count": 108, "id": "2964e1dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Input Variables (sh, skills):\n", " [[1. 4.]\n", " [2. 1.]\n", " [3. 3.]\n", " [4. 4.]\n", " [5. 3.]\n", " [6. 1.]\n", " [7. 2.]]\n", "\n", "Output Variable (gpa): [2.4 2.2 2.9 3.8 3. 2. 3. ]\n" ] } ], "source": [ "import numpy as np\n", "sh = np.array([1, 2, 3, 4, 5, 6, 7.]) # study hours \n", "skills = np.array([4, 1, 3, 4, 3, 1, 2]) # instructor's teaching skills\n", "gpa = np.array([2.4, 2.2, 2.9, 3.8, 3.0, 2.0, 3.0]) # gpa\n", "X = np.array(list(zip(sh,skills)))\n", "y = gpa\n", "print(\"Input Variables (sh, skills):\\n\", X)\n", "print(\"\\nOutput Variable (gpa):\", y)" ] }, { "cell_type": "markdown", "id": "0af87338", "metadata": {}, "source": [ "- **Use `LinearRegression()` method of scikit-learn Library**" ] }, { "cell_type": "code", "execution_count": 109, "id": "d54a550f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Intercept: 1.1627118644067802\n", "Coeffient of Study hour: 0.13983050847457615\n", "Coeffient of Instructor Teaching Skills: 0.40254237288135586\n", "R-Squared Errors: 0.6464164339675734\n" ] } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "#initiate linear regression model\n", "model = LinearRegression()\n", "\n", "#fit regression model\n", "model.fit(X, y)\n", "\n", "\n", "#display regression coefficients and R-squared value of model\n", "intercept = model.intercept_\n", "sh_coef = model.coef_[0]\n", "skill_coef = model.coef_[1]\n", "r2 = model.score(X,y)\n", "\n", "print('Intercept: ', intercept)\n", "print('Coeffient of Study hour: ', sh_coef)\n", "print('Coeffient of Instructor Teaching Skills: ', skill_coef)\n", "print('R-Squared Errors: ', r2)" ] }, { "cell_type": "markdown", "id": "3f43e3ce", "metadata": {}, "source": [ "- So the equation for the fitted regression model:
\n", "$\\hspace{1 cm}y \\hspace{.3 cm}=\\hspace{.3 cm} \\hspace{.3 cm}1.16 \\hspace{.3 cm}+\\hspace{.3 cm} 0.1398 \\hspace{.1 cm}$(study_hours) $\\hspace{.3 cm} + 0.402 \\hspace{.1 cm}$(instr_skills)\n", "\n", "- We can also see that the R2 value of the model is 0.64. This means that 64% of the variation in the response variable can be explained by the two predictor variables in the model." ] }, { "cell_type": "code", "execution_count": null, "id": "8ffc9fe6", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 112, "id": "617cf342", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GPA: [1.70508475]\n" ] } ], "source": [ "# Carry out the prediction with new study hours and instructor's teaching skills\n", "gpa = intercept + sh_coef*1 + skill_coef*2\n", "gpa = model.predict([[1, 1]])\n", "\n", "print(\"GPA: \", gpa)" ] }, { "cell_type": "code", "execution_count": null, "id": "17f6781c", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c8759a11", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "43ca9d71", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "a8c53049", "metadata": {}, "source": [ "**Example 21:**\n", "- There are a total of 24 observations in a file `datasets/stockdata.csv`, containing year, month, interest_rate, unemployment_rate, and stock_index_prices.\n", "- We need to predict the `stock_index_price` based on two feature variables, `interest_rate`, and `unemployment_rate`." ] }, { "cell_type": "code", "execution_count": null, "id": "de9cd389", "metadata": {}, "outputs": [], "source": [ "! cat datasets/stockdata.csv" ] }, { "cell_type": "markdown", "id": "f1320c26", "metadata": {}, "source": [ ">- **Write down 24 linear equations, one for each observation/point:**\n", "$$\\beta_0 + 2.75\\beta_1 + 5.3\\beta_2 = 1464$$\n", "$$\\beta_0 + 2.5\\beta_1 + 5.3\\beta_2 = 1394$$\n", "$$\\beta_0 + 2.5\\beta_1 + 5.3\\beta_2 = 1357$$\n", "$$\\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots $$\n", "$$\\cdots \\hspace{1 cm} \\cdots \\hspace{1 cm} \\cdots $$\n", "$$\\beta_0 + 1.75\\beta_1 + 6.1\\beta_2 = 719$$" ] }, { "cell_type": "markdown", "id": "eb2fc331", "metadata": {}, "source": [ ">- **Create matrix equation from above seven equations: $Ax=b$**\n", "$$\n", "\\begin{bmatrix} 1 & 2.75 & 5.3 \\\\\n", " 1 & 2.5 & 5.3 \\\\\n", " 1 & 2.5 & 5.3 \\\\\n", " \\vdots & \\vdots & \\vdots \\\\\n", " 1 & 1.75 & 6.1 \n", "\\end{bmatrix}\n", "\\begin{bmatrix} \\beta_0 \\\\ \\beta_1 \\\\ \\beta_2 \\end{bmatrix} =\n", "\\begin{bmatrix} y_1 \\\\ y_2 \\\\ y_3 \\\\ \\vdots \\\\ y_{24} \\end{bmatrix}\n", "$$\n", "\n", "$$ Ax = b$$" ] }, { "cell_type": "markdown", "id": "a489a92c", "metadata": {}, "source": [ ">- **Solve the system of linear equations using Ordinary Least Squares Method:**" ] }, { "cell_type": "code", "execution_count": null, "id": "1dba07e8", "metadata": {}, "outputs": [], "source": [ "dataset = np.genfromtxt(\"datasets/stockdata.txt\", delimiter=',')\n", "# Two input or dependent or predictor variables are interest_rate and unemployment_rate\n", "X = dataset[:,2:4]\n", "X" ] }, { "cell_type": "code", "execution_count": null, "id": "410c1a5a", "metadata": {}, "outputs": [], "source": [ "# The only independent or response variable is stock_index_price\n", "Y = dataset[:,4]\n", "Y" ] }, { "cell_type": "code", "execution_count": null, "id": "d6611ddb", "metadata": {}, "outputs": [], "source": [ "# Use sklearn to determine the y-intercept and two model coefficients\n", "import sklearn.linear_model\n", "regr = sklearn.linear_model.LinearRegression()\n", "regr.fit(X, Y)\n", "\n", "\n", "\n", "intercept = regr.intercept_ # beta0\n", "interest_rate_coef = regr.coef_[0] # beta1\n", "unemployment_rate_coef = regr.coef_[1] # beta2\n", "\n", "\n", "print('Intercept: ', intercept)\n", "print('Coeffient of Interest Rate: ', interest_rate_coef)\n", "print('Coeffient of Unemployment Rate: ', unemployment_rate_coef)" ] }, { "cell_type": "code", "execution_count": null, "id": "d0e8d0d0", "metadata": {}, "outputs": [], "source": [ "# Carry out the prediction with new interest_rate and unemployment_rate\n", "stock_index_price = intercept + interest_rate_coef*2.75 + unemployment_rate_coef*5.3\n", "stock_index_price = regr.predict([[2.75, 5.3]])\n", "\n", "stock_index_price" ] }, { "cell_type": "code", "execution_count": null, "id": "66e437df", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "482bcd98", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "346f98b2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }