Post Reply 
41C/CV root finders
05-21-2015, 07:36 PM
Post: #10
RE: 41C/CV root finders
(05-21-2015 12:51 PM)Dave Britten Wrote:  I knocked out a simple lazy Newton's method solver (lazy in that it approximates the 1st derivative using f(1.000001x) and f(.999999x)), and it seems functional but definitely suboptimal.

Well.... ;-)

(05-21-2015 12:51 PM)Dave Britten Wrote:  I'll have to study the HP-80 article more so as to have a better approximation of its algorithm.

I would not recommend the HP80 as a reference. It used a different TVM paradigm with unsigned variables that was changed with the HP92, which essentially used the method that was later implemented in many classic HP financial calculators.

(05-21-2015 12:51 PM)Dave Britten Wrote:  I don't even necessarily need a general purpose solver, just one that's suited for handling the TVM equation.

I already suggested the method in post #7 of the older thread linked in my previous post. Here is a quick and dirty implementation of that idea. Try it and see what you get.

Code:
Registers:
R01 = n
R02 = i%
R03 = PV
R04 = PMT
R05 = FV

R07 = i%/100
R08 = used for variable a = (1+i%/100)^(-n)
R09 = used for variable b = pmt / (i%/100) * (1 - a)

Flag 01 clr = END mode
Flag 01 set = BEGIN mode

HP-41 program:

01 LBL"I%"
02 RCL 01
03 RCL 04
04 *
05 RCL 03
06 +
07 RCL 05
08 +
09 X=0?      // in this case we're already done
10 GTO 99
11 1
12 FC? 01
13 CHS
14 RCL 01
15 +
16 RCL 05
17 *
18 1
19 FC? 01
20 CHS
21 RCL 01
22 -
23 RCL 03
24 *
25 +
26 /
27 X>0?      // can be omitted, but seems to improve the guess
28 ST+ X
29 STO 07    // save first guess as i%/100
30 LBL 01    // start iteration
31 RCL 07
32 LN1+X
33 RCL 01
34 *
35 CHS
36 E^X
37 STO 08    // save (1+i%/100)^(-n)
38 LASTX
39 E^X-1     // evaluate (1+i%/100)^(-n) - 1 accurately
40 CHS
41 RCL 04
42 *
43 RCL 07
44 /
45 STO 09
46 RCL 09
47 RCL 07
48 *
49 FC? 01
50 CLX
51 +
52 RCL 03
53 +
54 RCL 08
55 RCL 05
56 *
57 +      // = TVM(i)
58 RCL 07
59 1/x
60 1
61 FC? 01
62 CLX
63 +
64 RCL 04
65 *
66 RCL 05
67 -
68 RCL 01
69 *
70 RCL 08
71 *
72 RCL 07
73 1
74 +
75 /
76 RCL 09
77 RCL 07
78 /
79 -         // = TVM'(i)
80 /         // = correction term for i%/100
81 ST- 07    // adjust i%/100
82 RCL 07
83 /
84 ABS       // = abs(relative error)
85 100
86 +
87 LASTX
88 X#Y?      // is relative error not yet below 5 E-8 ?
89 GTO 01    // then do another iteration
90 RCL 07
91 *         // calculate i% (here Y still holds the 100 from step 85/87)
92 LBL 99
93 STO 02    // save result in R02
94 END       // and exit

This is essentially untested code, so beware. ;-) But it seems to work.
Try the standard example:

  10 STO 01 (n)
  50 STO 03 (PV)
–30 STO 04 (PMT)
400 STO 05 (FV)

XEQ"I%" => 14,4359

The program evaluates a first guess of 9,8361% and finally returns 14,4359% after five iterations. With flag 01 set (BEGIN) the result is 10,2051%.

Dieter
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
41C/CV root finders - Dave Britten - 05-20-2015, 07:07 PM
RE: 41C/CV root finders - Thomas Klemm - 05-20-2015, 07:36 PM
RE: 41C/CV root finders - Dieter - 05-20-2015, 07:44 PM
RE: 41C/CV root finders - Dave Britten - 05-20-2015, 08:08 PM
RE: 41C/CV root finders - Massimo Gnerucci - 05-20-2015, 08:40 PM
RE: 41C/CV root finders - Dave Britten - 05-20-2015, 08:49 PM
RE: 41C/CV root finders - Didier Lachieze - 05-21-2015, 11:12 AM
RE: 41C/CV root finders - Dieter - 05-21-2015, 11:40 AM
RE: 41C/CV root finders - Dave Britten - 05-21-2015, 12:51 PM
RE: 41C/CV root finders - Dieter - 05-21-2015 07:36 PM
RE: 41C/CV root finders - Dieter - 05-22-2015, 08:34 AM
RE: 41C/CV root finders - bshoring - 05-27-2015, 10:09 PM
RE: 41C/CV root finders - Dieter - 05-27-2015, 11:16 PM
RE: 41C/CV root finders - Ángel Martin - 05-28-2015, 06:19 AM
RE: 41C/CV root finders - Dieter - 05-28-2015, 08:42 AM
RE: 41C/CV root finders - bshoring - 05-28-2015, 09:37 PM
RE: 41C/CV root finders - Ángel Martin - 05-22-2015, 01:14 PM
RE: 41C/CV root finders - Dieter - 05-22-2015, 07:07 PM
RE: 41C/CV root finders - Dieter - 05-24-2015, 07:10 PM
RE: 41C/CV root finders - Ángel Martin - 05-25-2015, 05:35 AM
RE: 41C/CV root finders - Dieter - 05-25-2015, 07:19 PM
RE: 41C/CV root finders - Ángel Martin - 05-26-2015, 05:06 AM
RE: 41C/CV root finders - Dieter - 05-26-2015, 05:39 PM
RE: 41C/CV root finders - Ángel Martin - 05-26-2015, 09:26 PM
RE: 41C/CV root finders - Dieter - 05-26-2015, 10:08 PM
RE: 41C/CV root finders - rprosperi - 05-27-2015, 12:30 AM
RE: 41C/CV root finders - Dieter - 05-27-2015, 11:08 PM
RE: 41C/CV root finders - Ángel Martin - 05-28-2015, 05:44 AM
RE: 41C/CV root finders - Dieter - 05-28-2015, 09:50 PM
RE: 41C/CV root finders - Ángel Martin - 05-29-2015, 07:58 AM
RE: 41C/CV root finders - Ángel Martin - 05-27-2015, 05:17 AM
RE: 41C/CV root finders - Dieter - 05-27-2015, 01:50 PM
RE: 41C/CV root finders - Ángel Martin - 05-27-2015, 03:03 PM
RE: 41C/CV root finders - Dieter - 05-27-2015, 07:15 PM
RE: 41C/CV root finders - Dieter - 05-28-2015, 09:59 AM
RE: 41C/CV root finders - Ángel Martin - 05-28-2015, 11:27 AM
RE: 41C/CV root finders - Ángel Martin - 05-28-2015, 01:54 PM
RE: 41C/CV root finders - Dieter - 05-28-2015, 06:33 PM
RE: 41C/CV root finders - Ángel Martin - 05-29-2015, 08:04 AM
RE: 41C/CV root finders - Ángel Martin - 05-29-2015, 05:54 PM
RE: 41C/CV root finders - Dieter - 05-29-2015, 06:15 PM
RE: 41C/CV root finders - Ángel Martin - 05-29-2015, 06:44 PM
RE: 41C/CV root finders - Dieter - 05-29-2015, 07:19 PM
RE: 41C/CV root finders - Dieter - 05-30-2015, 12:37 PM
RE: 41C/CV root finders - Ángel Martin - 05-30-2015, 02:04 PM
RE: 41C/CV root finders - Dieter - 05-29-2015, 08:00 PM



User(s) browsing this thread: 1 Guest(s)