This is an example of a singular value decomposition. A = U E V^twith( LinearAlgebra ): A := Matrix( [[ -2, 1, 2], [6, 6, 3]] );NiM+SSJBRzYiLUknUlRBQkxFR0YlNiUiKTs8cUAtSSdNQVRSSVhHRiU2IzckNyUhIiMiIiIiIiM3JSIiJ0YzIiIkSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGN0koX3N5c2xpYkdGJQ==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.( singVals, eVecs ) := Eigenvectors( HermitianTranspose( A ) . A ): Map( x->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 ] < 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 ); NiM+NiRJKXNpbmdWYWxzRzYiSSZlVmVjc0dGJjYkLUknUlRBQkxFR0YmNiUiJ0tRay1JJ01BVFJJWEdGJjYjNyU3IyIjIik3IyIiKjcjIiIhJkknVmVjdG9yRzYkSSpwcm90ZWN0ZWRHRjpJKF9zeXNsaWJHRiY2I0knY29sdW1uR0YmLUYqNiUiKSMqXHNALUYuNiM3JTclIiIjISIiIyIiIkZFNyVGRUZHRkY3JUZIRkhGSEknTWF0cml4R0Y5NiQtSSdSVEFCTEVHNiI2JSInS1FrLUknTUFUUklYR0YlNiM3JTcjIiIqNyMiIiQ3IyIiISZJJ1ZlY3Rvckc2JEkqcHJvdGVjdGVkR0Y1SShfc3lzbGliR0YlNiNJJ2NvbHVtbkdGJS1GJDYlIikjKlxzQC1GKTYjNyU3JSIiIyEiIiMiIiJGQDclRkBGQkZBNyVGQ0ZDRkNJJ01hdHJpeEdGNA==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.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;NiMtSSdSVEFCTEVHNiI2JSIpUzFJQi1JJ01BVFJJWEdGJTYjNyU3JSMiIiMiIiQjISIjRi8jIiIiRi83JUYtRjJGMDclRjJGLUYtSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGOEkoX3N5c2xpYkdGJQ==The E matrix is built from the nonzero singular values on the diagonal. The overall shape is the same as A.E := Matrix( Dimension( A ) ): for i from 1 to Dimension( singVals ) do if ( singVals[ i ] <> 0 ) then E[ i, i ] := singVals[ i ]; end if: end do: E;NiMtSSdSVEFCTEVHNiI2JSIpc0hZQy1JJ01BVFJJWEdGJTYjNyQ3JSIiKiIiIUYuNyVGLiIiJEYuSSdNYXRyaXhHNiRJKnByb3RlY3RlZEdGM0koX3N5c2xpYkdGJQ==Now I'm trying to build UU := ( A . Column( V, 1 ) ) / singVals[ 1 ]: for i from 2 to Dimension( singVals ) do if ( singVals[ i ] <> 0 ) then U := < U | (( A . Column( V, i ) ) / singVals[ i ] ) >; end if: end do; U; NiMtSSdSVEFCTEVHNiI2JSIoO2hTJi1JJ01BVFJJWEdGJTYjNyQ3JCIiISIiIjckRi5GLUknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRjJJKF9zeXNsaWJHRiU=That's it. A = U E V^tEqual( A, U . E . Transpose( V ) );NiNJJXRydWVHSSpwcm90ZWN0ZWRHRiQ=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 prettySigma (E) matrix like I did above.( mU, mVt ) := SingularValues( A, output=['U', 'Vt'] ); Equal( A, mU . E . mVt );NiM+NiRJI21VRzYiSSRtVnRHRiY2JC1JJ1JUQUJMRUdGJjYlIik/MSRbIy1JJ01BVFJJWEdGJjYjNyQ3JCQiIiFGMyQiIiJGMzckRjRGMkknTWF0cml4RzYkSSpwcm90ZWN0ZWRHRjlJKF9zeXNsaWJHRiYtRio2JSIoR1BjJS1GLjYjNyU3JSQiM0htbW1tbW1tbSEjPSQiMz1sbW1tbW1tbUZEJCIzOUxMTExMTExMRkQ3JSQhM1NubW1tbW1tbUZEJCIzcUxMTExMTExMRkQkIjNTbm1tbW1tbW1GRDclRkckITNIbW1tbW1tbW1GREZCRjc=NiNJJXRydWVHSSpwcm90ZWN0ZWRHRiQ=TTdSMApJNVJUQUJMRV9TQVZFLzIxNzAxNzE2WCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJyIjIiQhIiMiIiciIiJGKCIiIyIiJEYmCg==TTdSMApJM1JUQUJMRV9TQVZFLzY0MzgzMlgqJSphbGdlYnJhaWNHNiI2IltnbCEjJSEhISIkIiQiIioiIiQiIiFGJgo=TTdSMApJNVJUQUJMRV9TQVZFLzIxNzI0OTkyWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIiIjRiciIiIhIiIjRihGJ0YoRipGKUYoCkYmCg==TTdSMApJM1JUQUJMRV9TQVZFLzY0MzgzMlgqJSphbGdlYnJhaWNHNiI2IltnbCEjJSEhISIkIiQiIioiIiQiIiFGJgo=TTdSMApJNVJUQUJMRV9TQVZFLzIxNzI0OTkyWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIiIjRiciIiIhIiIjRihGJ0YoRipGKUYoCkYmCg==TTdSMApJNVJUQUJMRV9TQVZFLzIzMzAwNjQwWCwlKmFsZ2VicmFpY0c2IjYiW2dsISIlISEhIyoiJCIkIyIiIyIiJEYnIyIiIkYpIyEiI0YpRipGCidGKkYsRidGJgo=TTdSMApJNVJUQUJMRV9TQVZFLzI0NDYyOTcyWCwlKWFueXRoaW5nRzYiNiJbZ2whIiUhISEjJyIjIiQiIioiIiFGKCIiJEYoRihGJgo=TTdSMApJNFJUQUJMRV9TQVZFLzU0MDYxMTZYLCUpYW55dGhpbmdHNiI2IltnbCEiJSEhISMlIiMiIyIiISIiIkYoRidGJgo=TTdSMApJNVJUQUJMRV9TQVZFLzI0ODMwNjIwWCwlKWFueXRoaW5nRzYiNiJbZ2wnIiUhISEjJSIjIiMwMDAwMDAwMDAwMDAwMDAwM0ZGMDAwMDAwCjAwMDAwMDAzRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYmCg==TTdSMApJNFJUQUJMRV9TQVZFLzQ1NjM3MjhYLCUpYW55dGhpbmdHNiI2IltnbCciJSEhISMqIiQiJDNGRTU1NTU1NTU1NTU1NTVCRkU1NTU1NTU1CjU1NTU1NjNGRDU1NTU1NTU1NTU1NTUzRkU1NTU1NTU1NTU1NTU0M0ZENTU1NTU1NTU1NTU1NkJGRTU1NTU1NTU1NTU1NTUzRkQ1NTU1NTUKNTU1NTU1NTNGRTU1NTU1NTU1NTU1NTYzRkU1NTU1NTU1NTU1NTU1RiYK