Tuesday, December 16, 2014

HP Prime and HP 50g: Using the LSQ Function to find the Moore-Penrose Inverse of a Matrix

HP Prime and HP 50g:  Using the LSQ Function to find the Moore-Penrose Inverse of a Matrix

  
Recall that the Moore-Penrose Inverse of a Matrix A, A^+, with r rows and c columns is:

If r ≤ c and rank(A) = r  (horizontal matrix), then:
A^+ = A^T * (A*A^T)^-1

If r ≥ c and rank(A) = c  (vertical matrix), then:
A^+ = (A^T * A)^-1 * A^T

You can see the blog entry about the Moore-Penrose inverse here:  http://edspi31415.blogspot.com/2014/08/moore-penrose-inverse-of-matrix.html.

On the LSQ (Least Squares Solution Command) function, featured on both the HP Prime and HP 50G, you can find A^+.

Syntax to find A^+ using the LSQ Command

HP Prime:

LSQ(matrix, IDENMAT(r))

Where IDENMAT is the identity matrix command. 

Path to IDENMAT:  Toolbox, Math, 7. Matrix, 4. Create, 2. Identity
Path to LSQ:  Toolbox, Math, 7. Matrix, 7. Factorize, 2. LSQ

HP 50g:

2:  identity matrix of dimension r x r  (R IDN)
1:  matrix
LSQ

Build the identity matrix by entering r, then [Left Shift], [5] (MATRICES), [F1] (CREATE), [F4] (IDN)
Path to LSQ:  [Left Shift], [5] (MATRICES), [F2] (OPER), [NXT], [F2] (LSQ)

Examples (answers are rounded to five decimal places):

Example 1

M =
[[2, 5],
[3, 3],
[4, 5]]  
(3 x 2 matrix, r = 3)

HP Prime:  LSQ(M, IDENMAT(3))
HP 50g:   2:  (3 IDN), 1: M

Result:

M^+ »
[[-0.45026, 0.31579, 0.21579],
[0.35263, -0.15789, -0.05789]]

Example 2

M =
[[4, 0.3, -0.8, 4.8, 2.5],
[-1.8, 3.6, 4.2, 4.4, -7]] 
(2 x 5, r = 2)

HP Prime:  LSQ(M, IDENMAT(2))
HP 50g:   2:  (2 IDN), 1: M

Result:

M^+ »
[[0.0853, -0.01272],
[0.01109, 0.03586],
[-0.01224, 0.04039],
[0.11059, 0.04939],
[0.04594, -0.06586]]

  This blog is property of Edward Shore. 2014. 


1 comment:

Adventures in Python: String Manipulation and Function/Derivative Table (Subroutines)

Adventures in Python:  String Manipulation and Function/Derivative Table (Subroutines) String Manipulation This script demonstrate...