Re: HP50g - subset of a matrix - how to (335 Views)
Reply
Advisor
andy11
Posts: 35
Registered: ‎03-10-2013
Message 1 of 6 (346 Views)

HP50g - subset of a matrix - how to

Could somebody give an example how to extract a subset of a matrix, say extract a double column matrix from NxM matrix?

I have data in NxM matrix and want to perform approximation with LAGRANGE command, which needs a 2 column input data.  For example from 3x4 matrix 

1    1     1      2

2    4     8      4

3    9    27    6

extract columns 1 & 3,  ie. get 3x2 matrix

1     1

2     8

3     27

Thanks

 

Please use plain text.
Trusted Contributor
Joseph Horn
Posts: 92
Registered: ‎09-25-2006
Message 2 of 6 (335 Views)

Re: HP50g - subset of a matrix - how to

[ Edited ]

I doubt this is the simplest way, but at least it works.  Just put your matrix on the stack then do this:

 

DUP

{1 3} {3 3} SUB

{1 2} SWAP REPL

{1 1} {3 2} SUB

--> [[1 1] [2 8] [3 27]] as requested.

 

For more information about the SUB and REPL commands, see the Advanced Users Reference Manual, pages 3-242 and 3-199, respecively.  Other useful commands for column work are ->COL, COL->, COL-, and COL+ (pages 3-39 and 3-40).

-Joe-
Please use plain text.
Advisor
andy11
Posts: 35
Registered: ‎03-10-2013
Message 3 of 6 (314 Views)

Re: HP50g - subset of a matrix - how to

Thank you Joe. Your solution works. After a few tests I picked another way with CSWP command. For the special case above it would be something like

<< 2 3 CSWP {1 1} {3 2} SUB >>

In general it could be something like

<<  -> T I

   << T 2 I CSWP DUP

           SIZE 1GET 2 2 ->LIST

           {1 1} SUB

   >>

>>

Program takes 2 parameters: matrix T and column number I, then extracts two columns (1 and I) from T matrix. In column 1 are x'es, in other columns are values for approximation. The line with SIZE, GET and ->LIST  is to detetrmine number of rows of the matrix (I don't know simpler way :-) 

BTW, SCATRPLOT takes 2 columns from NxM matrix

 Thank you for the hint.

Please use plain text.
Esteemed Contributor
Bart dB
Posts: 416
Registered: ‎02-04-2010
Message 4 of 6 (288 Views)

Re: HP50g - subset of a matrix - how to

[ Edited ]

You can also use the COL- command ( MTH  MATRIX  COL  COL- ).

 

Removes the desired column number from the matrix, returning new matrix and deleted column as a vector.

 

Here's a simple program.

 

Matrix is on Level 2 and a list of columns to delete is on level 1:

 

<<

SORT LIST-> -> n

   <<  n 1 + PICK

       1 n FOR j

         SWAP COL- DROP

       NEXT

    >>

>>

 

So this:

col_frm_mat1.gif

 

 

returns this:

col_frm_mat2.gif

Please use plain text.
Trusted Contributor
Joseph Horn
Posts: 92
Registered: ‎09-25-2006
Message 5 of 6 (268 Views)

Re: HP50g - subset of a matrix - how to

Here's another approach to Bart's program.  Same inputs.

 

<< SORT REVLIST 1 << COL- DROP >> DOLIST >>

 

Unlike Bart's program, however, this only returns the new (smaller) matrix; the original is lost.

-Joe-
Please use plain text.
Esteemed Contributor
Bart dB
Posts: 416
Registered: ‎02-04-2010
Message 6 of 6 (257 Views)

Re: HP50g - subset of a matrix - how to

[ Edited ]

Joseph Horn wrote:

<< SORT REVLIST 1 << COL- DROP >> DOLIST >>

Brilliant solution Joe. I sometimes forget the 50g has recursive commands like DOLIST.

 

 

 


Joseph Horn wrote:

Unlike Bart's program, however, this only returns the new (smaller) matrix; the original is lost.


That's because I used PICK instead of ROLL, but usually only the answer is required anyway - so your solution is "cleaner" :-).

 

 

Please use plain text.
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation