HP Forums
41 MCODE - Hermite and Lagrange Polynomials - Printable Version

+- HP Forums (https://www.hpmuseum.org/forum)
+-- Forum: HP Software Libraries (/forum-10.html)
+--- Forum: HP-41C Software Library (/forum-11.html)
+--- Thread: 41 MCODE - Hermite and Lagrange Polynomials (/thread-2712.html)



41 MCODE - Hermite and Lagrange Polynomials - Ángel Martin - 12-25-2014 06:00 PM

As usual when you thought a project was done new ideas pop up that just can't be ignored... like this sweet & short MCODE implementation for the Hermite and Lagrange orthogonal polynomials using the recurrence approach - as an afterthought to be included in the SandMatrix module.

Code:

0D4    "T"    Hermite Polynomials
04D    "M"    n,x in {Y,X}
048    "H"    Ángel Martin
284    CLRF 7    
02B    JNC +05    
0C7    "G"    Legendre Polynomials
045    "E"    n,x in {Y,X}
04C    "L"    Ángel Martin
288    SETF 7    
1A5    ?NC XQ    Check for valid entries
100    ->4069    [CHKST2] - sets DEC mode
04E    C=0  ALL    
35C    PT=12         C= 1
050    LD@PT- 1    
168    WRIT 5(M)    
0F8    READ 3(X)    x
10E    A=C ALL    
28C    ?FSET 7    Legendre?
01D    ?NC XQ    no, ergo Hermite
060    ->1807    [AD2_10]
1A8    WRIT 6(N)    2x or x
0B8    READ 2(Y)    n
088    SETF 5    do integer portion
0ED    ?NC XQ    leaves result in 13-digit form
064    ->193B    [INTFRC] - doesn't need DEC
070    N=C ALL    update counter
2FA    ?C#0 M    n = 0?
18B    JNC +49d    yes, result in (5)M
009    ?NC XQ    {A,B} = {A,B}-1
060    ->1802    [SUBONE]
2FA    ?C#0 M    was n=1 ?
19B    JNC +51d    yes, result in (6)N
28C    ?FSET 7    Legendre?
025    ?NC XQ          No, 2 (n-1)
060    ->1809    [AD1-10 ]
178    READ 5(M)    H(n-2)
13D    ?NC XQ      
060    ->184F    [MP1_10]
2BE    C=-C-1 MS    sign change
11E    A=C MS    ditto in 13-digit form
089    ?NC XQ    
064    ->1922    [STSCR]
28C    ?FSET 7    Legendre?
05B    JNC +11d    
0B0    C=N ALL    n
10E    A=C ALL    
01D    ?NC XQ    2n
060    ->1807    [AD2_10]
009    ?NC XQ    2n-1
060    ->1802    [SUBONE]
0F8    READ 3(X)    x
13D    ?NC XQ      (2n-1)*x
060    ->184F    [MP1_10]
02B    JNC +05    
0F8    READ 3(X)    x
10E    A=C ALL    
01D    ?NC XQ    2x
060    ->1807    [AD2_10]
1B8    READ 6(N)    H(n-1) or: P(n-1)
168    WRIT 5(M)    the new H(n-2) / P(n-2)
13D    ?NC XQ      2x* H(n-1) or: (2n-1)*x*P(n-1)
060    ->184F    [MP1_10]
0D1    ?NC XQ    recall first term
064    ->1934    [RCSCR]
031    ?NC XQ    add to complete it
060    ->180C    [AD2-13]
28C    ?FSET 7    Legendre?
023    JNC +04    no, skip
0B0    C=N ALL    n
269    ?NC XQ    
060    ->189A    [DV1-10]
1A8    WRIT 6(N)    the new H(n-1)
0B0    C=N ALL    
1FD    ?NC XQ    {A,B} = C-1
100    ->407F    [DECC10] - sets DEC
273    JNC - 50d    
178    READ 5(M)    
070    N=C ALL    parameter passing
260    SETHEX    
3AD    PORT DEP:    Abandon ship
08C    GO    in orderly fashion
13E    ->AD3E    [NFRX2]
1B8    READ 6(N)    
3D3    JNC -06

Only valid for integer orders. More complex formulas exist for non-integer cases, see JM Baillard's pages for details:
http://hp41programs.yolasite.com/orthopoly.php

Note that the listing above is for a sub-function sitting in a bank-switched page.
Comments and suggestions for improvement are welcome.

Enjoy, as usual ;-)