Answer To: Theory (40 points/10 points each) 1. We have three vectors, v1=(1, 2, 5), v2=(4, 2, 7), and v3=(6,...
Abr Writing answered on Oct 15 2021
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Importing the necessary libraries"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import sys\n",
"import matplotlib.pyplot as plt\n",
"import scipy.optimize as optimization"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Theory"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Question 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Linear Independence"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2.13798760e+01 1.70320365e+00 1.17478406e-15]\n",
"3\n"
]
}
],
"source": [
"v1 = [1,2,5]\n",
"v2 = [4,2,7]\n",
"v3 = [6,6,17]\n",
"\n",
"A = np.row_stack([v1, v2, v3])\n",
"\n",
"# MATLAB definition of tolerance\n",
"eps = np.finfo(np.linalg.norm(A).dtype).eps\n",
"TOLERANCE = max(eps * np.array(A.shape))\n",
"\n",
"U, s, V = np.linalg.svd(A)\n",
"print(s)\n",
"print(np.sum(s > TOLERANCE))"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n"
]
}
],
"source": [
"TOLERANCE = 1e-14\n",
"print(np.sum(s > TOLERANCE))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can see if you choose too small a TOLERANCE, nothing looks like zero. T he finding with TOLERANCE=1e-14 implies the rows are not linearly independent. Let's see that one row can be represented as the other rows' linear combination."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The number of rows is greater than the rank, so these vectors are not independent. Let's demonstrate that one vector can be defined as a linear combination of the other two vectors. Mathematically we represent this as:\n",
"\n",
"$x_1 \\mathit{v_1} + x_2 \\mathit{v_2} = v_3$\n",
"\n",
"or\n",
"\n",
"$[x_1 x_2][v_1; v_2] = v_3$\n",
"\n",
"This is not the usual linear algebra form of Ax = b. To get there, we transpose each side of the equation to get:\n",
"\n",
"$[v_1^T v_2^T][x_1; x_2] = v_3^T$\n",
"\n",
"which is the form Ax = b. We solve it in a least-squares sense."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2. 1.]\n"
]
}
],
"source": [
"A = np.column_stack([v1, v2])\n",
"x = np.linalg.lstsq(A, v3, rcond=1)\n",
"print(x[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This shows that $v_3=2v_1+v_2$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Question 2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We say that 2 vectors are orthogonal if they are perpendicular\n",
"to each other. i.e. the dot product of the two vectors is zero\n",
"\n",
"$(2,4,1).(3,-1,-3)=6-4-3=-1$\n",
"\n",
"Therefore, the two vectors are not orthogonal to each other. Now finding the project of $v_1$ on $v_2$.\n",
"\n",
"$Proj_{v_2}(v_1)=\\frac{v_1.u_1}{|v_2|^2}v_2=\\frac{-1}{\\sqrt{19}}(3,-1,-3)$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Question 3"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Matrix is Singular\n"
]
}
],
"source": [
"A = [[1,3],[2,6]]\n",
"if np.linalg.cond(A) < 1/sys.float_info.epsilon:\n",
" B = np.linalg.inv(A)\n",
"else:\n",
" print('Matrix is Singular')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"