HP Forums
Recommend root-finder for HP 67 - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Calculators (and very old HP Computers) (/forum-3.html)
+--- Forum: General Forum (/forum-4.html)
+--- Thread: Recommend root-finder for HP 67 (/thread-14073.html)



Recommend root-finder for HP 67 - Trond - 11-29-2019 06:19 PM

I don't particularly like the root finder from the HP 67 standard pac. I have to insert the program lines into the other code, and it gets stuck frequently it seems. Do you have a simple end elegant root finder that you would recommend? Thanks!


RE: Recommend root-finder for HP 67 - Namir - 11-30-2019 03:08 AM

Here is the code for Newton's method for the HP-67:

Code:
Memory Map
============

R0 = Torelance
R1 = x
R2 = h
R3 = fx(x)

Listing
=======

LBL A
STO 1    # Store x
RDN
STO 0    # Store tolerance
LBL 0    # start iteration loop
RCL 1
PAUSE     # View curent guess for root
ABS
1
+
EEX
2
CHS
*
STO 2     # Store h
RCL 1
GSB E     # calculate fx(x)
STO 3
RCL 1
RCL 2
+
GSB E     # calculate fx(x+h)
RCL 3
-
1/X
RCL 3
*
RCL 2
*         # Calculate difference
STO- 1    # X = X - difference
ABS
RCL 0
X<=Y?     # |difference| >= tolerance?
GTO 0     # resume iteration
RCL 1     # display x
RTN
LBL E     # define f(x)
EXP
LASTX
X^2
3
*
-
RTN

Load the above program. Edit the code in LBL E to implement the function you want to find the root for. Then:

1) Enter the tolerance value.
2) Press Enter.
3) Enter the guess for the root.
4) Press the A key.
5) The program will display the intermediate guesses for the solution using a PAUSE statement. Then the program displays the refined guess for the root, based on the tolerance value supplied.

You can calculate fx(x) values by entering a value for x and then pressing the E key.


RE: Recommend root-finder for HP 67 - Trond - 11-30-2019 04:44 AM

(11-30-2019 03:08 AM)Namir Wrote:  Here is the code for Newton's method for the HP-67:

Code:
Memory Map
============

R0 = Torelance
R1 = x
R2 = h
R3 = fx(x)

Listing
=======

LBL A
STO 1    # Store x
RDN
STO 0    # Store tolerance
LBL 0    # start iteration loop
RCL 1
PAUSE     # View curent guess for root
ABS
1
+
EEX
2
CHS
*
STO 2     # Store h
RCL 1
GSB E     # calculate fx(x)
STO 3
RCL 1
RCL 2
+
GSB E     # calculate fx(x+h)
RCL 3
-
1/X
RCL 3
*
RCL 2
*         # Calculate difference
STO- 1    # X = X - difference
ABS
RCL 0
X<=Y?     # |difference| >= tolerance?
GTO 0     # resume iteration
RCL 1     # display x
RTN
LBL E     # define f(x)
EXP
LASTX
X^2
3
*
-
RTN

Load the above program. Edit the code in LBL E to implement the function you want to find the root for. Then:

1) Enter the tolerance value.
2) Press Enter.
3) Enter the guess for the root.
4) Press the A key.
5) The program will display the intermediate guesses for the solution using a PAUSE statement. Then the program displays the refined guess for the root, based on the tolerance value supplied.

You can calculate fx(x) values by entering a value for x and then pressing the E key.

Thanks! I am looking in vain for "RDN", do you mean "RND"?
EDIT: ah, I guess it's "roll down"

EDIT2: and "EXP" would be yX right?

EDIT3: What needs to remain in "E"? Should it always start with LASTX, and then put my function behind that?


RE: Recommend root-finder for HP 67 - Namir - 11-30-2019 06:14 AM

EXP is e^X.

LBL E ia the label you use to code f(x)=0. In my example, f(x)=e^x-3*x^2. You can start the code for f(x) by storing the value of x in an unused register, so you can reuse it to calculate x. I chose LASTX is recall X after calculate e^x.

Namir


RE: Recommend root-finder for HP 67 - Trond - 11-30-2019 05:17 PM

(11-30-2019 06:14 AM)Namir Wrote:  EXP is e^X.

LBL E ia the label you use to code f(x)=0. In my example, f(x)=e^x-3*x^2. You can start the code for f(x) by storing the value of x in an unused register, so you can reuse it to calculate x. I chose LASTX is recall X after calculate e^x.

Namir

Ah that makes sense. Sorry, I was a bit tired yesterday. And it works! Thank you very much!