# hp41programs

Overview

-A Quadric ( or quadratic surface ) is defined by its cartesian equation:  a.x2 + b.y2 + c.z2 + d.x.y + e.x.z + f.y.z + g.x + h.y + i.z = j
where at least one of the 6 coefficients   a , b , c , d , e , f  is different from zero.
-After a suitable transformation of coordinates, this equation is reduced to one of the 17 standard forms:

1°)    x2/a2 + y2/b2 + z2/c2 = 1    Ellipsoid
2°)    x2/a2 + y2/b2 - z2/c2 = 1    Hyperboloid of one sheet
3°)    x2/a2 - y2/b2 - z2/c2 = 1     Hyperboloid of two sheets
4°)    x2/a2 + y2/b2  = z              Elliptic Paraboloid
5°)    x2/a2 - y2/b2  = z               Hyperbolic Paraboloid

6°)    x2/a2 + y2/b2 - z2/c2 = 0    Cone
7°)    x2/a2 + y2/b2  = 1              Elliptic Cylinder
8°)    x2/a2 - y2/b2  = 1               Hyperbolic Cylinder
9°)    x2/a2  = y                          Parabolic Cylinder
10°) -x2/a2 - y2/b2 - z2/c2 = 1     Imaginary Ellipsoid
11°)  x2/a2 + y2/b2 + z2/c2 = 0    One Point  ( more precisely an Imaginary Cone )
12°) -x2/a2 - y2/b2  = 1               Imaginary Elliptic Cylinder
13°)  x2/a2 = 0                            One Plane
14°)  x2/a2 = 1                            Two Parallel Planes
15°)  -x2/a2 = 1                          Two Imaginary Parallel Planes
16°)  x2/a2 + y2/b2  = 0              One Straight-Line ( more precisely Two Imaginary Intersecting Planes )
17°)  x2/a2 - y2/b2  = 0               Two Intersecting Planes

-The following program uses the Jacobi's iterating method to determine these reduced equations and the type of the quadric.

Data Registers:     R00:  unused                                     ( Registers R01 thru R10 are to be initialized before executing "QUADRIC" )

• R01 = a   • R02 = b   • R03 = c   • R04 = d   • R05 = e
• R06 = f    • R07 = g   • R08 = h   • R09 = i    • R10 = j

When the program stops, the coefficients of the reduced form are in R01 thru R10
Flags: /
Subroutines: /

-Line 121 is a three-byte  GTO 04

 01  LBL "QUADRIC"   02  LBL 01   03  VIEW 04   04  RCL 01   05  RCL 04   06  RCL 01   07  RCL 02   08  ST+ T   09  -   10  R-P   11  RDN   12  X<> 04   13  LASTX   14  R-P   15  X<>Y   16  RDN   17  ST- Z   18  +   19  2   20  ST/ 04   21  ST/ Z   22  /   23  STO 01   24  X<>Y   25  STO 02   26  RCL 04   27  RCL 07   28  P-R   29  RCL 04   30  RCL 08   31  P-R   32  R^   33  -   34  STO 08   35  RDN   36  +   37  STO 07   38  RCL 04   39  RCL 05   40  P-R   41  RCL 04   42  RCL 06   43  P-R   44  R^   45  -   46  STO 06   47  RDN   48  +   49  STO 05   50  R^   51  R-P   52   E-8   53  X>Y?   54  GTO 03   55  LASTX 56  ABS   57  RCL 05   58  ABS   59  X>Y?   60  GTO 02   61  RCL 01   62  X<> 03   63  STO 01   64  CLX   65  X<> 06   66  STO 04   67  RCL 07                 68  X<> 09   69  STO 07   70  GTO 01   71  LBL 02   72  RCL 02   73  X<> 03   74  STO 02   75  CLX   76  X<> 05   77  STO 04   78  RCL 08   79  X<> 09   80  STO 08   81  GTO 01   82  LBL 03   83  CLX   84  STO 04   85  XEQ 05   86  RCL 01   87  X#0?   88  GTO 02   89  X<> 02   90  STO 01   91  RCL 07   92  X<> 08   93  STO 07   94  LBL 02   95  RCL 01   96  X#0?   97  GTO 02   98  X<> 03   99  STO 01 100  RCL 07 101  X<> 09 102  STO 07 103  LBL 02 104  RCL 02 105  X#0? 106  GTO 02 107  X<> 03 108  STO 02 109  RCL 08 110  X<> 09 111  STO 08 112  LBL 02 113  RCL 07 114  X^2 115  RCL 01 116  / 117  RCL 08 118  X^2 119  RCL 02 120  X=0? 121  GTO 04  122  / 123  + 124  RCL 09 125  X^2 126  RCL 03 127  X=0? 128  GTO 03 129  / 130  + 131  4 132  / 133  ST+ 10 134  CLX 135  STO 07 136  STO 08 137  STO 09 138  XEQ 05 139  RCL 10 140  X=0? 141  GTO 02 142  ST/ 01 143  ST/ 02 144  ST/ 03 145  ST/ 10 146  LBL 02 147  RCL 01 148  SIGN 149  RCL 02 150  SIGN 151  + 152  RCL 03 153  SIGN 154  + 155  RCL 10 156  X=0? 157  GTO 02 158  " IM ELLIPS"  159  SIGN 160  X=Y? 161  " 1-SH HYP"  162  XY 171  ABS 172  " POINT"  173  X=Y? 174  " CONE" 175  PROMPT 176  LBL 03 177  X<> Z 178  4 179  / 180  ST+ 10 181  CLX 182  STO 07 183  STO 08 184  XEQ 05 185  RCL 01 186  RCL 02 187  * 188  RCL 09 189  X=0? 190  GTO 02 191  ST/ 01 192  ST/ 02 193  ST/ 09 194  CLX 195  STO 10 196  X<>Y 197  " ELL PARAB"  198  X<0? 199  " HYP PARAB" 200  PROMPT 201  LBL 02 202  CLX 203  RCL 10 204  X=0? 205  GTO 02 206  ST/ 01 207  ST/ 02 208  ST/ 10 209  X<>Y 210  " HYP CYL" 211  X<0? 212  PROMPT 213  RCL 01 214  " ELL CYL"  215  X<0? 216  " IM ELL CYL"   217  PROMPT 218  LBL 02 219  X<>Y 220  " STR LINE" 221  X<0? 222  " 2 PLANES" 223  PROMPT 224  LBL 04 225  X<> Z 226  4 227  / 228  ST+ 10 229  CLX 230  STO 07 231  XEQ 05 232  RCL 08 233  RCL 09 234  R-P 235  X=0? 236  GTO 02 237  RCL 01 238  ST/ 01 239  / 240  STO 08 241  CLX 242  STO 09 243  STO 10 244  " PARAB CYL" 245  PROMPT 246  LBL 02 247  " PLANE" 248  RCL 10 249  X=0? 250  PROMPT 251  ST/ 01 252  ST/ 10 253  " 2 IM PLANES" 254  RCL 01 255  X>0? 256  " 2//PLANES"  257  PROMPT 258  LBL 05 259  1 260  10^X    261   E-7        262  LBL 06 263  RCL IND Y 264  ABS 265  X

( 503 bytes / SIZE 011 )

 STACK INPUTS OUTPUTS X / /

Example1:     (Q):  2xy + 3xz + 4yz = 7

0  STO 01  STO 02  STO 03  2  STO 04  3  STO 05  4  STO 06  0  STO 07  STO 08  STO 09  7  STO 10
XEQ "QUADRIC"  the HP-41 displays the successive contents of register R04 ( which tend to zero )

and eventually displays " 2-SH HYP"     (Q) is an hyperboloid of 2 sheets

-Recalling the new coefficients in registers R01 thru R10 we find:   0.433905256 x2 - 0.299134471 y2 - 0.134770785 z2 = 1

which may be re-written:   x2/a2 - y2/b2 - z2/c2 = 1   with  a = 1.518107565 , b = 1.828381291 , c = 2.723968753

-The signs may be  + - - ; - + - or - - +  for a 2-sheeted hyperboloid.

Example2:      (Q):   2x2 + y2 + 2z2 - 3xy + 4xz -3yz + 7x + y + 5z = 10

2  STO 01   1  STO 02  ................  10  STO 10     XEQ "QUADRIC"  >>>>  " HYP PARAB"          (Q) is an hyperbolic Paraboloid

and the new coefficients in R01 to R10 yield:   -3.604884263 x2 + 0.069350354 y2 + z = 0

which may be re-written:    x2/a2 - y2/b2  = z   with  a = 0.526689108 ,  b = 3.797306556

Remarks:

-The numbers displayed line 04 may seem to increase in the beginning, but they soon tend to zero.
-Of course, execution time depends on the coefficients, but it's usually less than 1 minute.
-When the program stops, R04 = R05 = R06 = 0
-There will be a DATA ERROR line 116  if  a = b = c = d = e = f = 0  ( the equation reduces to  g.x + h.y + i.z = j )

-If you want to take this case into account, add the following instructions after line 270
RTN  LBL 07  RCL 07  RCL 08  R-P  RCL 09  R-P  " PLANE"  X#0?  PROMPT  " EMPTY SET"  RCL 10  X=0?  " SPACE"  PROMPT
and add   X=0?  GTO 07  after line 115

-Practically, lines 158-216-253  may replaced with " EMPTY SET"
-Many bytes can be saved if you use more abbreviated alpha strings.
-Register R00 may be used instead of R10 but in this case, replace line 269  by  ISG Y and lines 259-260  by  9   CHS

-This program uses 10-7 ( line 261 ) to identify and delete tiny elements.
-Change this value if, for instance, the coefficients are of the order of 106  ( or divide them by 1 million )