{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapter 2 - Vector spaces" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 37 Example 2.8" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a1 = [1, 2, 0, 3, 0]\n", "a2 = [0, 0, 1, 4, 0]\n", "a3 = [0, 0, 0, 0, 1]\n", "By theorem 3, vector a is in subspace W of F**5 spanned by a1, a2, a3\n", "if and only if there exist scalars c1, c2, c3 such that\n", "a= c1a1 + c2a2 + c3a3\n", "So, a = (c1,2*c1,c2,3c1+4c2,c3)\n", "c1 = -3\n", "c2 = 1\n", "c3 = 2\n", "Therefore, a = [0, 0, 1, 4, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]\n", "This shows, a is in W\n", "And (2,4,6,7,8) is not in W as there is no value of c1 c2 c3 that satisfies the equation\n" ] } ], "source": [ "\n", "a1 = [1, 2 ,0 ,3, 0]#\n", "a2 =[0, 0 ,1 ,4 ,0]#\n", "a3 = [0 ,0 ,0 ,0, 1]#\n", "print 'a1 = ',a1\n", "print 'a2 = ',a2\n", "print 'a3 = ',a3\n", "print 'By theorem 3, vector a is in subspace W of F**5 spanned by a1, a2, a3'\n", "print 'if and only if there exist scalars c1, c2, c3 such that'\n", "print 'a= c1a1 + c2a2 + c3a3'\n", "print 'So, a = (c1,2*c1,c2,3c1+4c2,c3)'\n", "c1 = -3#\n", "c2 = 1#\n", "c3 = 2#\n", "a = c1*a1 + c2*a2 + c3*a3#\n", "print 'c1 = ',c1\n", "print 'c2 = ',c2\n", "print 'c3 = ',c3\n", "print 'Therefore, a = ',a\n", "print 'This shows, a is in W'\n", "print 'And (2,4,6,7,8) is not in W as there is no value of c1 c2 c3 that satisfies the equation'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 38 Example 2.10" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A = \n", "[[1 2 0 3 0]\n", " [0 0 1 4 0]\n", " [0 0 0 0 1]]\n", "The subspace of F**5 spanned by a1 a2 a3(row vectors of A) is called row space of A.\n", "a1 = [1 2 0 3 0]\n", "a2 = [0 0 1 4 0]\n", "a3 = [0 0 0 0 1]\n", "And, it is also the row space of B.\n", "B = \n", "[[ 1 2 0 3 0]\n", " [ 0 0 1 4 0]\n", " [ 0 0 0 0 1]\n", " [-4 -8 1 -8 0]]\n" ] } ], "source": [ "import numpy as np\n", "\n", "A = np.array([[1, 2, 0 ,3 ,0],[0, 0, 1, 4, 0],[0, 0, 0, 0, 1]])\n", "print 'A = \\n',A\n", "print 'The subspace of F**5 spanned by a1 a2 a3(row vectors of A) is called row space of A.'\n", "a1 = A[0,:]\n", "a2 = A[1,:]\n", "a3 = A[2,:]\n", "print 'a1 = ',a1\n", "print 'a2 = ',a2\n", "print 'a3 = ',a3\n", "print 'And, it is also the row space of B.'\n", "B = np.array([[1, 2, 0, 3, 0],[0, 0, 1, 4, 0],[0, 0, 0, 0, 1],[-4, -8, 1 ,-8, 0]])\n", "print 'B = \\n',B" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 39 Example 2.11" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "V is the space of all polynomial functions over F.\n", "S contains the functions as:\n", "n = 17\n", "f0(x) = 1\n", "f1(x) = x\n", "f2(x) = x**2\n", "f3(x) = x**3\n", "f4(x) = x**4\n", "f5(x) = x**5\n", "f6(x) = x**6\n", "f7(x) = x**7\n", "f8(x) = x**8\n", "f9(x) = x**9\n", "f10(x) = x**10\n", "f11(x) = x**11\n", "f12(x) = x**12\n", "f13(x) = x**13\n", "f14(x) = x**14\n", "f15(x) = x**15\n", "f16(x) = x**16\n", "Then, V is the subspace spanned by set S.\n" ] } ], "source": [ "import sympy as sp\n", "import numpy as np\n", "print 'V is the space of all polynomial functions over F.'\n", "print 'S contains the functions as:'\n", "x = sp.Symbol(\"x\")\n", "#n = round(rand()*10)#\n", "n=np.random.randint(0,19)\n", "print 'n = ',n\n", "for i in range (0,n):\n", " f = x**i#\n", " print 'f%d(x) = '%(i,),f\n", " \n", "\n", "print 'Then, V is the subspace spanned by set S.'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 41 Example 2.12" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a1 = [ 3 0 -3]\n", "a2 = [-1 1 2]\n", "a3 = [ 4 2 -2]\n", "a4 = [2 1 1]\n", " Since, 2 * a1 + 2 * a2 - a3 + 0 * a4 = [0 0 0] = 0\n", "a1,a2,a3,a4 are linearly independent\n", "Now, e1 = [1, 0, 0]\n", "e2 = [0, 1, 0]\n", "e3 = [0, 0, 1]\n", "Also, e1,e2,e3 are linearly independent.\n" ] } ], "source": [ "import numpy as np\n", "a1 = np.array([3 ,0, -3])\n", "a2 = np.array([-1 ,1 ,2])\n", "a3 = np.array([4 ,2, -2])\n", "a4 = np.array([2 ,1, 1])\n", "print 'a1 = ',a1\n", "print 'a2 = ',a2\n", "print 'a3 = ',a3\n", "print 'a4 = ',a4\n", "t = 2 * a1 + 2 * a2 - a3 + 0 * a4\n", "print ' Since, 2 * a1 + 2 * a2 - a3 + 0 * a4 = ',t,'= 0'\n", "print 'a1,a2,a3,a4 are linearly independent'\n", "e1 = [1, 0, 0]#\n", "e2 = [0 ,1 ,0]#\n", "e3 = [0 ,0, 1]#\n", "print 'Now, e1 = ',e1\n", "print 'e2 = ',e2\n", "print 'e3 = ',e3\n", "print 'Also, e1,e2,e3 are linearly independent.'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 41 Example 2.13" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S is the subset of F**n consisting of n vectors.\n", "n = 10\n", "e1 = \n", "[ 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "e2 = \n", "[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]\n", "e3 = \n", "[ 0. 0. 1. 0. 0. 0. 0. 0. 0. 0.]\n", "e4 = \n", "[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]\n", "e5 = \n", "[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]\n", "e6 = \n", "[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]\n", "e7 = \n", "[ 0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n", "e8 = \n", "[ 0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]\n", "e9 = \n", "[ 0. 0. 0. 0. 0. 0. 0. 0. 1. 0.]\n", "e10 = \n", "[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]\n", "x1,x2,x3...xn are the scalars in F\n", "Putting a = x1*e1 + x2*e2 + x3*e3 + .... + xn*en\n", "So, a = (x1,x2,x3,...,xn)\n", "Therefore, e1,e2..,en span F**n\n", "a = 0 if x1 = x2 = x3 = .. = xn = 0\n", "So,e1,e2,e3,..,en are linearly independent.\n", "The set S = {e1,e2,..,en} is called standard basis of F**n\n" ] } ], "source": [ "import numpy as np\n", "print 'S is the subset of F**n consisting of n vectors.'\n", "#n = round(rand() *10 + 1)#\\\n", "n=np.random.randint(0,19)\n", "print 'n = ',n\n", "I = np.identity(n)\n", "for i in range(0,n):\n", " e = I[i,:]\n", " print 'e%d = '%(i+1)\n", " print e\n", "\n", "print 'x1,x2,x3...xn are the scalars in F'\n", "print 'Putting a = x1*e1 + x2*e2 + x3*e3 + .... + xn*en'\n", "print 'So, a = (x1,x2,x3,...,xn)'\n", "print 'Therefore, e1,e2..,en span F**n'\n", "print 'a = 0 if x1 = x2 = x3 = .. = xn = 0'\n", "print 'So,e1,e2,e3,..,en are linearly independent.'\n", "print 'The set S = {e1,e2,..,en} is called standard basis of F**n'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 54 Example 2.20" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P = \n", "[[-1 4 5]\n", " [ 0 2 -3]\n", " [ 0 0 8]]\n", "\n", "inverse(P) = \n", "[[-1. 2. 1.375 ]\n", " [ 0. 0.5 0.1875]\n", " [ 0. 0. 0.125 ]]\n", "The vectors forming basis of F**3 are a1, a2, a3\n", "a1' = \n", "[-1 0 0]\n", "\n", "a2' = \n", "[4 2 0]\n", "\n", "a3' = \n", "[ 5 -3 8]\n", "The coordinates x1,x2,x3 of vector a = [x1,x2,x3] is given by inverse(P)*[x1# x2# x3]\n", "And, -10*a1 - 1/2*a2 - a3 = [ 3. 2. -8.]\n" ] } ], "source": [ "import numpy as np\n", "P = np.array([[-1, 4, 5],[ 0, 2, -3],[ 0, 0, 8]])\n", "print 'P = \\n',P\n", "print '\\ninverse(P) = \\n',np.linalg.inv(P)\n", "a1 = P[:,0]\n", "a2 = P[:,1]\n", "a3 = P[:,2]\n", "print 'The vectors forming basis of F**3 are a1'', a2'', a3'''\n", "print \"a1' = \\n\",np.transpose(a1)\n", "print \"\\na2' = \\n\",np.transpose(a2)\n", "print \"\\na3' = \\n\",np.transpose(a3)\n", "print 'The coordinates x1'',x2'',x3'' of vector a = [x1,x2,x3] is given by inverse(P)*[x1# x2# x3]'\n", "t = -10*a1 - 1./2*a2 - a3#\n", "print 'And, -10*a1'' - 1/2*a2'' - a3'' = ',t" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 60 Example 2.21" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Given row vectors are:\n", "a1 = [1, 2, 2, 1]\n", "a2 = [0, 2, 0, 1]\n", "a3 = [-2, 0, -4, 3]\n", "The matrix A from these vectors will be:\n", "A = \n", "[[ 1 2 2 1]\n", " [ 0 2 0 1]\n", " [-2 0 -4 3]]\n", "Finding Row reduced echelon matrix of A that is given by R\n", "And applying same operations on identity matrix Q such that R = QA\n", "Q = \n", "[[ 1. 0. 0.]\n", " [ 0. 1. 0.]\n", " [ 0. 0. 1.]]\n", "Applying row transformations on A and Q,we get\n", "R1 = R1-R2\n", "A = \n", "[[ 1 0 2 0]\n", " [ 0 2 0 1]\n", " [-2 0 -4 3]]\n", "Q = \n", "[[ 1. -1. 0.]\n", " [ 0. 1. 0.]\n", " [ 0. 0. 1.]]\n", "R3 = R3 + 2*R1\n", "A = \n", "[[1 0 2 0]\n", " [0 2 0 1]\n", " [0 0 0 3]]\n", "Q = \n", "[[ 1. -1. 0.]\n", " [ 0. 1. 0.]\n", " [ 2. -2. 1.]]\n", "R3 = R3/3\n", "A = \n", "[[1 0 2 0]\n", " [0 2 0 1]\n", " [0 0 0 1]]\n", "Q = \n", "[[ 1. -1. 0. ]\n", " [ 0. 1. 0. ]\n", " [ 0.66666667 -0.66666667 0.33333333]]\n", "R2 = R2/2\n", "A = \n", "[[1 0 2 0]\n", " [0 1 0 0]\n", " [0 0 0 1]]\n", "Q = \n", "[[ 1. -1. 0. ]\n", " [ 0. 5. 0. ]\n", " [ 0.66666667 -0.66666667 0.33333333]]\n", "R2 = R2 - 1/2*R3\n", "A = \n", "[[1 0 2 0]\n", " [0 1 0 0]\n", " [0 0 0 1]]\n", "Q = \n", "[[ 1. -1. 0. ]\n", " [-0.33333333 5.33333333 -0.16666667]\n", " [ 0.66666667 -0.66666667 0.33333333]]\n", "Row reduced echelon matrix:\n", "A = \n", "[[1 0 2 0]\n", " [0 1 0 0]\n", " [0 0 0 1]]\n", "Q = \n", "[[ 1. -1. 0. ]\n", " [-0.33333333 5.33333333 -0.16666667]\n", " [ 0.66666667 -0.66666667 0.33333333]]\n", "rank of R = 2\n", "Since, Rank of R is 3, so a1, a2, a3 are independent\n", "Now, basis for W can be given by row vectors of R i.e. p1,p2,p3\n", "b is any vector in W. b = [b1 b2 b3 b4]\n", "Span of vectors p1,p2,p3 consist of vector b with b3 = 2*b1\n", "So,b = b1p1 + b2p2 + b4p3\n", "And,[p1 p2 p3] = R = Q*A\n", "So, b = [b1 b2 b3]* Q * A\n", "hence, b = x1a1 + x2a2 + x3a3 where x1 = [b1 b2 b4] * Q(1) and so on\n", "Now, given 3 vectors a1 a2 a3:\n", "a1 = [1, 0, 2, 0]\n", "a2 = [0, 2, 0, 1]\n", "a3 = [0, 0, 0, 3]\n", "Since a1 a2 a3 are all of the form (y1 y2 y3 y4) with y3 = 2*y1, hence they are in W.\n", "So, they are independent.\n", "Required matrix P such that X = PX is:\n", "P = \n", "[[ 0. -0. 2.]\n", " [-0. 0. -2.]\n", " [ 0. -0. 1.]]\n" ] } ], "source": [ "import numpy as np\n", "a1 = [1 ,2 ,2, 1]#\n", "a2 = [0 ,2 ,0 ,1]#\n", "a3 = [-2, 0, -4, 3]#\n", "print 'Given row vectors are:'\n", "print 'a1 = ',a1\n", "print 'a2 = ',a2\n", "print 'a3 = ',a3\n", "print 'The matrix A from these vectors will be:'\n", "#A = [a1],[a2], [a3]]\n", "A=np.array([a1,a2,a3])\n", "print 'A = \\n',A\n", "\n", "print 'Finding Row reduced echelon matrix of A that is given by R'\n", "print 'And applying same operations on identity matrix Q such that R = QA'\n", "Q = np.identity(3)\n", "print 'Q = \\n',Q\n", "T = A# #Temporary matrix to store A\n", "print 'Applying row transformations on A and Q,we get'\n", "print 'R1 = R1-R2'\n", "A[0,:] = A[0,:] - A[1,:]\n", "Q[0,:] = Q[0,:] - Q[1,:]\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "print 'R3 = R3 + 2*R1'\n", "A[2,:] = A[2,:] + 2*A[0,:]\n", "Q[2,:] = Q[2,:] + 2*Q[0,:]\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "print 'R3 = R3/3'\n", "A[2,:] = 1./3*A[2,:]\n", "Q[2,:] = 1./3*Q[2,:]\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "print 'R2 = R2/2'\n", "A[1,:] = 1./2*A[1,:]\n", "Q[1,:] = 10/2*Q[1,:]\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "print 'R2 = R2 - 1/2*R3'\n", "A[1,:] = A[1,:] - 1./2*A[2,:]\n", "Q[1,:] = Q[1,:] - 1./2*Q[2,:]\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "R = A#\n", "A = T#\n", "print 'Row reduced echelon matrix:'\n", "print 'A = \\n',A\n", "print 'Q = \\n',Q\n", "#part a\n", "print 'rank of R = ',np.rank(R)\n", "\n", "print 'Since, Rank of R is 3, so a1, a2, a3 are independent'\n", "#part b\n", "print 'Now, basis for W can be given by row vectors of R i.e. p1,p2,p3'\n", "print 'b is any vector in W. b = [b1 b2 b3 b4]'\n", "print 'Span of vectors p1,p2,p3 consist of vector b with b3 = 2*b1'\n", "print 'So,b = b1p1 + b2p2 + b4p3'\n", "print 'And,[p1 p2 p3] = R = Q*A'\n", "print 'So, b = [b1 b2 b3]* Q * A'\n", "print 'hence, b = x1a1 + x2a2 + x3a3 where x1 = [b1 b2 b4] * Q(1) and so on' # #Equation 1\n", "#part c\n", "print 'Now, given 3 vectors a1'' a2'' a3'':'\n", "c1 = [1, 0, 2, 0]#\n", "c2 = [0 ,2 ,0, 1]#\n", "c3 = [0 ,0 ,0 ,3]#\n", "print 'a1'' = ',c1\n", "print 'a2'' = ',c2\n", "print 'a3'' = ',c3\n", "print 'Since a1'' a2'' a3'' are all of the form (y1 y2 y3 y4) with y3 = 2*y1, hence they are in W.'\n", "print 'So, they are independent.'\n", "#part d\n", "c = np.array([c1,c2,c3])\n", "P = np.identity(3)\n", "for i in range(0,3):\n", " b1 = c[i,0]\n", " b2 = c[i,1]\n", " b4 = c[i,3]\n", " x1 = np.array([b1, b2, b4]) * Q[:,0]\n", " x2 = np.array([b1, b2, b4])*Q[:,1]\n", " x3 = np.array([b1, b2, b4])*Q[:,2]\n", " \n", "\n", "print 'Required matrix P such that X = PX'' is:'\n", "P=np.vstack([x1,x2,x3])\n", "print 'P = \\n',P\n", "#print x1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Page 63 Example 2.22" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A = \n", "[[ 1 2 0 3 0]\n", " [ 1 2 -1 -1 0]\n", " [ 0 0 1 4 0]\n", " [ 2 4 1 10 1]\n", " [ 0 0 0 0 1]]\n", "Taking an identity matrix P:\n", "P = \n", "[[ 1. 0. 0. 0. 0.]\n", " [ 0. 1. 0. 0. 0.]\n", " [ 0. 0. 1. 0. 0.]\n", " [ 0. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 0. 1.]]\n", "Applying row transformations on P and A to get a row reduced echelon matrix R:\n", "R2 = R2 - R1 and R4 = R4 - 2* R1\n", "A = \n", "[[ 1 2 0 3 0]\n", " [ 0 0 -1 -4 0]\n", " [ 0 0 1 4 0]\n", " [ 0 0 1 4 1]\n", " [ 0 0 0 0 1]]\n", "P = \n", "[[ 1. 0. 0. 0. 0.]\n", " [-1. 1. 0. 0. 0.]\n", " [ 0. 0. 1. 0. 0.]\n", " [-2. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 0. 1.]]\n", "R2 = -R2 , R3 = R3 - R1 + R2 and R4 = R4 - R1 + R2\n", "A = \n", "[[1 2 0 3 0]\n", " [0 0 1 4 0]\n", " [0 0 0 0 0]\n", " [0 0 0 0 1]\n", " [0 0 0 0 1]]\n", "P = \n", "[[ 1. 0. 0. 0. 0.]\n", " [ 1. -1. -0. -0. -0.]\n", " [-1. 1. 1. 0. 0.]\n", " [-3. 1. 0. 1. 0.]\n", " [-3. 1. 0. 1. 0.]]\n", "Mutually interchanging R3, R4 and R5\n", "Row reduced echelon matrix R = \n", "[[1 2 0 3 0]\n", " [0 0 1 4 0]\n", " [0 0 0 0 1]\n", " [0 0 0 0 1]\n", " [0 0 0 0 0]]\n", "Invertible Matrix P = \n", "[[ 1. 0. 0. 0. 0.]\n", " [ 1. -1. -0. -0. -0.]\n", " [-3. 1. 0. 1. 0.]\n", " [-3. 1. 0. 1. 0.]\n", " [ 0. 0. 0. 0. 0.]]\n", "Invertible matrix P is not unique. There can be many that depends on operations used to reduce A\n", "-----------------------------------------\n", "For the basis of row space W of A, we can take the non-zero rows of R\n", "It can be given by p1, p2, p3\n", "p1 = [1 2 0 3 0]\n", "p2 = [0 0 1 4 0]\n", "p3 = [0 0 0 0 1]\n", "-----------------------------------------\n", "The row space W consists of vectors of the form:\n", "b = c1p1 + c2p2 + c3p3\n", "i.e. b = (c1,2*c1,c2,3*c1+4*c2,c3) where, c1 c2 c3 are scalars.\n", "So, if b2 = 2*b1 and b4 = 3*b1 + 4*b3 => (b1,b2,b3,b4,b5) = b1p1 + b3p2 + b5p3\n", "then,(b1,b2,b3,b4,b5) is in W\n", "-----------------------------------------\n", "The coordinate matrix of the vector (b1,2*b1,b2,3*b1+4*b2,b3) in the basis (p1,p2,p3) is column matrix of b1,b2,b3 such that:\n", " b1\n", " b2\n", " b3\n", "-----------------------------------------\n", "Now, to write each vector in W as a linear combination of rows of A:\n", "Let b = (b1,b2,b3,b4,b5) and if b is in W, then\n", "we know,b = (b1,2*b1,b3,3*b1 + 4*b3,b5) => [b1,b3,b5,0,0]*R\n", "=> b = [b1,b3,b5,0,0] * P*A => b = [b1+b3,-b3,0,0,b5] * A\n", "if b = (-5,-10,1,-11,20)\n", "b = ( [-4, -1, 0, 0, 20] ) *[ [[1 2 0 3 0]\n", " [0 0 1 4 0]\n", " [0 0 0 0 1]\n", " [0 0 0 0 1]\n", " [0 0 0 0 0]] ]\n", "-----------------------------------------\n", "The equations in system RX = 0 are given by R * [x1 x2 x3 x4 x5]\n", "i.e., x1 + 2*x2 + 3*x4\n", "x3 + 4*x4\n", "x5\n", "so, V consists of all columns of the form\n", "[ X=\n", " -2*x2 - 3*x4\n", " x2\n", " -4*x4\n", " x4\n", " 0\n", "where x2 and x4 are arbitrary ]\n", "-----------------------------------------\n", "Let x2 = 1,x4 = 0 then the given column forms a basis of V\n", "[[-2], [1], [0], [0], [0]]\n", "Similarly,if x2 = 0,x4 = 1 then the given column forms a basis of V\n", "[[-3], [0], [-4], [1], [0]]\n", "-----------------------------------------\n", "The equation AX = Y has solutions X if and only if\n", "-y1 + y2 + y3 = 0\n", "-3*y1 + y2 + y4 -y5 = 0\n", "where, Y = (y1 y2 y3 y4 y5)\n" ] } ], "source": [ "import numpy as np\n", "A = np.array([[1, 2, 0, 3, 0],[1, 2, -1, -1, 0],[0 ,0 ,1 ,4 ,0],[2, 4 ,1 ,10, 1],[0 ,0 ,0 ,0 ,1]])\n", "print 'A = \\n',A\n", "#part a\n", "T = A# #Temporary storing A in T\n", "print 'Taking an identity matrix P:'\n", "P = np.identity(5)\n", "print 'P = \\n',P\n", "print 'Applying row transformations on P and A to get a row reduced echelon matrix R:'\n", "print 'R2 = R2 - R1 and R4 = R4 - 2* R1'\n", "A[1,:] = A[1,:] - A[0,:]\n", "P[1,:] = P[1,:] - P[0,:]\n", "A[3,:] = A[3,:] - 2 * A[0,:]\n", "P[3,:] = P[3,:] - 2 * P[0,:]\n", "print 'A = \\n',A\n", "print 'P = \\n',P\n", "print 'R2 = -R2 , R3 = R3 - R1 + R2 and R4 = R4 - R1 + R2'\n", "A[1,:] = -A[1,:]\n", "P[1,:] = -P[1,:]\n", "A[2,:] = A[2,:] - A[1,:]\n", "P[2,:] = P[2,:] - P[1,:]\n", "A[3,:] = A[3,:] - A[1,:]\n", "P[3:] = P[3,:] - P[1,:]\n", "print 'A = \\n',A\n", "print 'P = \\n',P\n", "print 'Mutually interchanging R3, R4 and R5'\n", "x = A[2,:]\n", "A[2,:] = A[4,:]\n", "y = A[3,:]\n", "A[3,:] = x#\n", "A[4,:] = y - A[2,:]\n", "x = P[2,:]\n", "P[2,:] = P[4,:]\n", "y = P[3,:]\n", "P[3,:] = x#\n", "P[4,:] = y - P[2,:]\n", "R = A#\n", "A = T#\n", "print 'Row reduced echelon matrix R = \\n',R\n", "print 'Invertible Matrix P = \\n',P\n", "print 'Invertible matrix P is not unique. There can be many that depends on operations used to reduce A'\n", "print '-----------------------------------------'\n", "#part b\n", "print 'For the basis of row space W of A, we can take the non-zero rows of R'\n", "print 'It can be given by p1, p2, p3'\n", "p1 = R[0,:]\n", "p2 = R[1,:]\n", "p3 = R[2,:]\n", "print 'p1 = ',p1\n", "print 'p2 = ',p2\n", "print 'p3 = ',p3\n", "print '-----------------------------------------'\n", "#part c\n", "print 'The row space W consists of vectors of the form:'\n", "print 'b = c1p1 + c2p2 + c3p3'\n", "print 'i.e. b = (c1,2*c1,c2,3*c1+4*c2,c3) where, c1 c2 c3 are scalars.'\n", "print 'So, if b2 = 2*b1 and b4 = 3*b1 + 4*b3 => (b1,b2,b3,b4,b5) = b1p1 + b3p2 + b5p3'\n", "print 'then,(b1,b2,b3,b4,b5) is in W'\n", "print '-----------------------------------------'\n", "#part d\n", "print 'The coordinate matrix of the vector (b1,2*b1,b2,3*b1+4*b2,b3) in the basis (p1,p2,p3) is column matrix of b1,b2,b3 such that:'\n", "print ' b1'\n", "print ' b2'\n", "print ' b3'\n", "print '-----------------------------------------'\n", "#part e\n", "print 'Now, to write each vector in W as a linear combination of rows of A:'\n", "print 'Let b = (b1,b2,b3,b4,b5) and if b is in W, then'\n", "print 'we know,b = (b1,2*b1,b3,3*b1 + 4*b3,b5) => [b1,b3,b5,0,0]*R'\n", "print '=> b = [b1,b3,b5,0,0] * P*A => b = [b1+b3,-b3,0,0,b5] * A'\n", "print 'if b = (-5,-10,1,-11,20)'\n", "b1 = -5#\n", "b2 = -10#\n", "b3 = 1#\n", "b4 = -11#\n", "b5 = 20#\n", "x = [b1 + b3,-b3,0,0,b5]#\n", "print 'b = (',x,')','*[',A,']'\n", "print '-----------------------------------------'\n", "#part f\n", "print 'The equations in system RX = 0 are given by R * [x1 x2 x3 x4 x5]'\n", "print 'i.e., x1 + 2*x2 + 3*x4'\n", "print 'x3 + 4*x4'\n", "print 'x5'\n", "print 'so, V consists of all columns of the form'\n", "print '[','X='\n", "print ' -2*x2 - 3*x4'\n", "print ' x2'\n", "print ' -4*x4'\n", "print ' x4'\n", "print ' 0'\n", "print 'where x2 and x4 are arbitrary',']'\n", "print '-----------------------------------------'\n", "#part g\n", "print 'Let x2 = 1,x4 = 0 then the given column forms a basis of V'\n", "\n", "x2 = 1#\n", "x4 = 0#\n", "print [[-2*x2-3*x4],[ x2],[ -4*x4],[ x4],[ 0]]\n", "print 'Similarly,if x2 = 0,x4 = 1 then the given column forms a basis of V'\n", "x2 = 0#\n", "x4 = 1#\n", "print [[-2*x2-3*x4],[ x2],[ -4*x4],[ x4],[ 0]]\n", "print '-----------------------------------------'\n", "#part h\n", "print 'The equation AX = Y has solutions X if and only if'\n", "print '-y1 + y2 + y3 = 0'\n", "print '-3*y1 + y2 + y4 -y5 = 0'\n", "print 'where, Y = (y1 y2 y3 y4 y5)'" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.9" } }, "nbformat": 4, "nbformat_minor": 0 }