<?xml version="1.0" encoding="UTF-8"?>
<Worksheet><Version major="6" minor="1"/><View-Properties><Zoom percentage="100"/></View-Properties><Styles><Layout alignment="left" bullet="none" firstindent="0.0" leftmargin="0.0" linebreak="space" linespacing="0.0" name="Normal" rightmargin="0.0" spaceabove="0.0" spacebelow="0.0"/><Layout alignment="centred" bullet="none" linespacing="0.5" name="Maple Output"/><Font background="[0,0,0]" bold="true" executable="true" family="Monospaced" foreground="[255,0,0]" name="Maple Input" opaque="false" size="12"/><Font background="[0,0,0]" bold="false" executable="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Text" opaque="false" size="12" underline="false"/><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,255]" name="2D Output" opaque="false" readonly="true" size="12"/></Styles><Group><Input><Text-field layout="Normal" style="Text">This is an example of a singular value decomposition.  A = U E V^t</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">with( LinearAlgebra ):
A := Matrix( [[ -2, 1, 2], [6, 6, 3]] );</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiM+SSJBRzYiLUknUlRBQkxFR0YlNiUiKTs8cUAtSSdNQVRSSVhHRiU2IzckNyUhIiMiIiIiIiM3JSIiJ0YzIiIkSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGN0koX3N5c2xpYkdGJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">Compute the singular values, which are the square roots of the spectrum( A*A ).  Note that A*A is hermitian,
so if A is real, all of the eigenvalues will be positive reals as well.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">( singVals, eVecs ) := Eigenvectors( HermitianTranspose( A ) . A ):
Map( x-&gt;sqrt(x), singVals ):

( cDim, rDim ) := Dimension( eVecs ): 
for i from 1 to Dimension( singVals ) do
    for j from i to Dimension( singVals ) do 
        if ( singVals[ i ] &lt; singVals[ j ] ) then 
            tempVal := singVals[ i ];
            singVals[ i ] := singVals[ j ];
            singVals[ j ] := tempVal;
            tempVec := Column( eVecs, i );
            eVecs[ 1..rDim, i ] := Column( eVecs, j );
            eVecs[ 1..rDim, j ] := tempVec;
        end if;
    end do;
end do;

( singVals, eVecs );
</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiM+NiRJKXNpbmdWYWxzRzYiSSZlVmVjc0dGJjYkLUknUlRBQkxFR0YmNiUiJ0tRay1JJ01BVFJJWEdGJjYjNyU3IyIjIik3IyIiKjcjIiIhJkknVmVjdG9yRzYkSSpwcm90ZWN0ZWRHRjpJKF9zeXNsaWJHRiY2I0knY29sdW1uR0YmLUYqNiUiKSMqXHNALUYuNiM3JTclIiIjISIiIyIiIkZFNyVGRUZHRkY3JUZIRkhGSEknTWF0cml4R0Y5</Equation></Text-field></Output><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiQtSSdSVEFCTEVHNiI2JSInS1FrLUknTUFUUklYR0YlNiM3JTcjIiIqNyMiIiQ3IyIiISZJJ1ZlY3Rvckc2JEkqcHJvdGVjdGVkR0Y1SShfc3lzbGliR0YlNiNJJ2NvbHVtbkdGJS1GJDYlIikjKlxzQC1GKTYjNyU3JSIiIyEiIiMiIiJGQDclRkBGQkZBNyVGQ0ZDRkNJJ01hdHJpeEdGNA==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">We now normalize all of the eigenvectors.  Since A*A is hermitian, we know that all the eigenvectors are
already orthogonal.  These normalized eigenvectors give us the matrix V.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">V := Matrix( eVecs ):
for i from 1 to cDim do
    V[ 1..rDim, i ] := ( 1 / sqrt( Transpose( Column( V, i ) ) . Column( V, i ) ) ) . Column( V, i );
end do:
V;</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiMtSSdSVEFCTEVHNiI2JSIpUzFJQi1JJ01BVFJJWEdGJTYjNyU3JSMiIiMiIiQjISIjRi8jIiIiRi83JUYtRjJGMDclRjJGLUYtSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGOEkoX3N5c2xpYkdGJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">The E matrix is built from the nonzero singular values on the diagonal.  The overall shape is the same as A.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">E := Matrix( Dimension( A ) ):
for i from 1 to Dimension( singVals ) do
    if ( singVals[ i ] &lt;&gt; 0 ) then 
        E[ i, i ] := singVals[ i ];
    end if:
end do:
E;</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiMtSSdSVEFCTEVHNiI2JSIpc0hZQy1JJ01BVFJJWEdGJTYjNyQ3JSIiKiIiIUYuNyVGLiIiJEYuSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGM0koX3N5c2xpYkdGJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">Now I'm trying to build U</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">U := ( A . Column( V, 1 ) ) / singVals[ 1 ]:
for i from 2 to Dimension( singVals ) do 
    if ( singVals[ i ] &lt;&gt; 0 ) then 
        U := &lt; U | (( A . Column( V, i ) ) / singVals[ i ] ) &gt;;
    end if:
end do;
U;

</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiMtSSdSVEFCTEVHNiI2JSIoO2hTJi1JJ01BVFJJWEdGJTYjNyQ3JCIiISIiIjckRi5GLUknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRjJJKF9zeXNsaWJHRiU=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">That's it.  A = U E V^t</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">Equal( A, U . E . Transpose( V ) );</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiNJJXRydWVHSSpwcm90ZWN0ZWRHRiQ=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text">All this work could easily have been achieved using Maple's built-in functionality.
Note that while the built in function can spit out the singular values, it doesn't build a pretty</Text-field><Text-field layout="Normal" style="Text">Sigma (E) matrix like I did above.</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">( mU, mVt ) := SingularValues( A, output=['U', 'Vt'] );
Equal( A, mU . E . mVt );</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiM+NiRJI21VRzYiSSRtVnRHRiY2JC1JJ1JUQUJMRUdGJjYlIik/MSRbIy1JJ01BVFJJWEdGJjYjNyQ3JCQiIiFGMyQiIiJGMzckRjRGMkknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRjlJKF9zeXNsaWJHRiYtRio2JSIoR1BjJS1GLjYjNyU3JSQiM0htbW1tbW1tbSEjPSQiMz1sbW1tbW1tbUZEJCIzOUxMTExMTExMRkQ3JSQhM1NubW1tbW1tbUZEJCIzcUxMTExMTExMRkQkIjNTbm1tbW1tbW1GRDclRkckITNIbW1tbW1tbW1GREZCRjc=</Equation></Text-field></Output><Output><Text-field layout="Maple Output" style="2D Output"><Equation>NiNJJXRydWVHSSpwcm90ZWN0ZWRHRiQ=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"/></Input></Group><Text-field/><RTable handle="21701716" >TTdSMApJNVJUQUJMRV9TQVZFLzIxNzAxNzE2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJyIjIiQhIiMiIiciIiJGKCIiIyIiJEYmCg==</RTable><RTable handle="643832" >TTdSMApJM1JUQUJMRV9TQVZFLzY0MzgzMlgqJSphbGdlYnJhaWNHNiI2IltnbCEjJSEhISIkIiQiIioiIiQiIiFGJgo=</RTable><RTable handle="21724992" >TTdSMApJNVJUQUJMRV9TQVZFLzIxNzI0OTkyWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIiIjRiciIiIhIiIjRihGJ0YoRipGKUYoCkYmCg==</RTable><RTable handle="643832" >TTdSMApJM1JUQUJMRV9TQVZFLzY0MzgzMlgqJSphbGdlYnJhaWNHNiI2IltnbCEjJSEhISIkIiQiIioiIiQiIiFGJgo=</RTable><RTable handle="21724992" >TTdSMApJNVJUQUJMRV9TQVZFLzIxNzI0OTkyWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIiIjRiciIiIhIiIjRihGJ0YoRipGKUYoCkYmCg==</RTable><RTable handle="23300640" >TTdSMApJNVJUQUJMRV9TQVZFLzIzMzAwNjQwWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIyIiIyIiJEYnIyIiIkYpIyEiI0YpRipGCidGKkYsRidGJgo=</RTable><RTable handle="24462972" >TTdSMApJNVJUQUJMRV9TQVZFLzI0NDYyOTcyWCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJyIjIiQiIioiIiFGKCIiJEYoRihGJgo=</RTable><RTable handle="5406116" >TTdSMApJNFJUQUJMRV9TQVZFLzU0MDYxMTZYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISMlIiMiIyIiISIiIkYoRidGJgo=</RTable><RTable handle="24830620" >TTdSMApJNVJUQUJMRV9TQVZFLzI0ODMwNjIwWCwlKWFueXRoaW5nRzYiNiJbZ2wnIiUhISEjJSIjIiMwMDAwMDAwMDAwMDAwMDAwM0ZGMDAwMDAwCjAwMDAwMDAzRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYmCg==</RTable><RTable handle="4563728" >TTdSMApJNFJUQUJMRV9TQVZFLzQ1NjM3MjhYLCUpYW55dGhpbmdHNiI2IltnbCciJSEhISMqIiQiJDNGRTU1NTU1NTU1NTU1NTVCRkU1NTU1NTU1CjU1NTU1NjNGRDU1NTU1NTU1NTU1NTUzRkU1NTU1NTU1NTU1NTU0M0ZENTU1NTU1NTU1NTU1NkJGRTU1NTU1NTU1NTU1NTUzRkQ1NTU1NTUKNTU1NTU1NTNGRTU1NTU1NTU1NTU1NTYzRkU1NTU1NTU1NTU1NTU1RiYK</RTable></Worksheet>