kilka programów w RPL

sezrG
Posty: 0
Rejestracja: 21 sty 2014, o 13:44
Płeć: Mężczyzna
Lokalizacja: Polska

kilka programów w RPL

Post autor: sezrG »

Witam,

Nie wiem czy to właściwie miejsce. Nie miałem pomysłu gdzie to wrzucić, ale znalazłem na komputerze wyciągniętym z dna szafy kilka krótkich programów, które napisałem w języku RPL jakieś 20 lat temu na kalkulator HP (to był chyba model 28S, ale powinny chyba działać również na serii HP-48, może nawet późniejszych). Mnie się już są niepotrzebne, ale może ktoś to wykorzysta.
Pozdrawiam




Program CHAF
Wykreśla charakterystykę amplitudowo-fazową.
Parametrem programu jest transmitancja operatorowa (funkcja s) zapisana pod nazwą K

<< CLLCD DRAX 0 100
FOR j 0 j R->C 'S'
STO K EVAL PIXEL j 1
+ 20 /
STEP
>>

Program CHAW
Wykreśla zależność modułu transmitancji K(jω) od ω.

<< CLLCD DRAX 0 100
FOR j 0 j R->C 'S'
STO K EVAL ABS j
SWAP R->C PIXEL j 1 +
20 /
STEP
>>

Program CHFW
Wykreśla zależność argumentu transmitancji K(jω) od ω.

<< CLLCD DRAX 0 100
FOR j 0 j R->C 'S'
STO K EVAL ARG j
SWAP R->C PIXEL j 1 +
20 /
STEP
>>

Program PPRM
Wykres funkcji danej w postaci parametrycznej.
Argumentem jest funkcja dana dwoma obiektami x(r) zapisanym pod nazwą X oraz y(r) zapisanym pod nazwą Y

<< CLLCD DRAX 1 50
FOR j j 'R' STO X
EVAL Y EVAL R->C
PIXEL .1
STEP
>>

Program AXB
Oblicza macierz X z równania macierzowego AX=B. Macierze A i B są argumentami programu.

<< -> B A
<< B A / B A 3 PICK
RSD A / +
>>
>>


Program AROT

Wyznaczenie kąta obrotu i wektora n, wokół którego dokonuje się obrót opisany macierzą T, która jest argumentem programu.

np.
T=[[1 0 0
0 0 1
0 -1 0]]

odpowiedź
90
[-1 0 0]
tzn, że macierz ta opisuje obrót o kąt 90° wokół osi -x (skierowanej przeciwnie do osi x).

<< 'T(1,1)+T(2,2)+T(3
,3)-1' ->NUM .5 * DUP
ACOS -> z t
<< t 'T(2,3)-T(3,2)
' ->NUM SIGN SIG2 '(T
(1,1)-z)/(1-z)' ->NUM
√ * 'T(1,3)-T(3,1)'
->NUM SIGN SIG2 '(T(2
,2)-z)/(1-z)' ->NUM √
* 'T(1,3)-T(1,2)'
->NUM SIGN SIG2 '(T(3
,3)-z)/(1-z)' ->NUM √
*
>> 3 ->ARRY
>>

Program WIZ2

Oblicza wyznacznik macierzy I-zP gdzie P jeast macierzą daną o wymiarze 2*2, I jest macierzą jednostkową o tym samym rozmiarze co P. Argumentem programu jest macierz P zapisana pod nazwą 'P'

<< 'P(1,1)' EVAL
'P(1,2)' EVAL
'P(2,1)' EVAL
'P(2,2)' EVAL
-> a b c d
<< a d * b c * -
'Z' 2 ^ * a d +
NEG 'Z' * + 1 +
>>
>>

Program WIZ3

Instrukcja analogiczna do WIZ2 lecz dla macierzy P[3*3]

<< 'P(1,1)' EVAL
'P(1,2)' EVAL
'P(1,3)' EVAL
'P(2,1)' EVAL
'P(2,2)' EVAL
'P(2,3)' EVAL
'P(3,1)' EVAL
'P(3,2)' EVAL
'P(3,3)' EVAL
-> a b c d e f g h i
<< 1 a e i + + NEG
a e i + * b d * - c
g * - e i * + f h *
- a e i * f h * - *
b f g * d i * - * c
d h * e g * - * + +
NEG
>>
>>

Program DOD
Sumuje wszystkie liczby znajdujące się na stosie.

<< DEPTH -> n
<< 1 n 1 -
FOR i +
NEXT
>>
>>

Program NWD
Największy wspólny dzielnik dwóch liczb.

<< DUP2
IF <
THEN SWAP
END
DO -> a b
<< a b MOD b SWAP
DUP
>>
UNTIL 0 SAME
END DROP
>>


Program FCONV
Zamiana ułamków zwykłych. Ułamki w postaci listy np. {1 2 3} oznacza jeden i dwie trzecie

Przykład:

1: {5 3}
FCONV
1: {1 2 3}
FCONV
1: {5 3}

<< LIST-> -> n
<<
IF n 3 SAME
THEN -> a b c
<< a c * b + c
DUP2 NWD -> w
<< w / SWAP w
/ SWAP
>> 2 ->LIST
>>
ELSE DUP2 NWD ->
w
<< w / SWAP w /
SWAP
>> -> a b
<< a b / IP DUP
b * a SWAP - b 3
->LIST
>>
END
>>
>>

Program FDIV
Dzielenie ułamków zwykłych.
Przykład:

2: {2 3}
1: {4 7}
FDIV
1: {7 6}

<< LIST-> DROP SWAP 2
->LIST FMUL
>>

Program FMUL
Mnożenie ułamków zwykłych.

Przykład:
2: {1 5}
1: {4 7}
FMUL
1: {4 3 5}

<< LIST-> DROP -> a b
<< LIST-> DROP -> c d
<< a c * b d *
DUP2 NWD -> w
<< w / SWAP w /
SWAP
>> 2 ->LIST
>>
>>
>>

Program FSUB
Odejmowanie ułamków zwykłych.
Przykład:
2: {1 5}
1: {4 7}
FSUB
1: {-13 35}

<< LIST-> DROP NEG 2
->LIST FSUM
>>

Program FSUM
Suma ułamków zwykłych
Przykład:
2: {1 5}
1: {4 7}
FSUM
1: {27 35}

<< LIST-> DROP -> a b
<< LIST-> DROP -> c d
<< a d * c b * +
b d * DUP2 NWD -> w
<< w / SWAP w /
SWAP
>> 2 ->LIST
>>
>>
>>

Program D2F
Zamiana ułamka dziesiętnego nieokresowego na zwykły.

Przykład:
1: 0.2488
D2F
1: {311 1250}

<< 1.E12 * 1.E12 DUP2
NWD -> w
<< w / SWAP w /
SWAP
>> 2 ->LIST
>>


Program BERN
Program oblicza schemat Bernoulliego
<< -> n k p
<< n k COMB p k ^ 1
p - n k - ^ * *
>>
>>

Program ARC
Program oblicza długość łuku krzywej w przedziale <a,b>

Argumenty programu Przykład

funkcja analityczna 5: SIN(X)
zmienna 4: X
początek przedziału (a) 3: 0
koniec przedziału (b) 2: 1
dokładność obliczeń (e) 1: 0.001

<< -> x a b e
<< x ∂ 2 ^ 1 + √ x a
b 3 ->LIST e ∫
>>
>>

Program RMNK

Rekurencyjna ważona metoda najmniejszych kwadratów Gaussa.
Wyniki obliczeń zostają zapisane pod nazwą RWYN
Argumenty programu

macierz danych ∑DAT
ocena początkowa BI ( )
macierz PI ( P0 )
współczynnik zapominania ALFA ( α )

<< ∑DAT SIZE LIST->
DROP2 -> n
<< 1 n
FOR j 'PI*∑DAT(j
,1)/(ALFA+PI*∑DAT(j,
1)^2)' EVAL 'KI' STO
"k" j ->STR + "=" +
KI ->STR + 'BI+KI*(
∑DAT(j,2)-∑DAT(j,1)*
BI)' EVAL 'BI' STO
"b" j ->STR + "=" +
BI ->STR + '1/ALFA*(
PI-PI^2*∑DAT(j,1)^2/
(ALFA+PI*∑DAT(j,1)^2
))' EVAL 'PI' STO
"p" j ->STR + "=" +
PI ->STR +
NEXT n 3 * ->LIST
'RWYN' STO
>>
>>

Program VIEW
Interaktywne oglądanie wykresu funkcji.
Pozwala korzystając z klawiszy J,L,E,Q przesuwać wykres funkcji.
Zamiast komendy DRAW wydajemy VIEW.
Argumentem programu jest funkcja lub równanie zapisane pod nazwą EQ

<< 1 -> w
<<
DO { EE QQ JJ LL
KK RF }
DO
DO
UNTIL KEY
END
UNTIL { "E"
"Q" "J" "L" "K" "R"
} SWAP POS
IF DUP
THEN 1
ELSE
END
END GET EVAL
CLMF 1000 .01 BEEP
UNTIL w 0 <
END
>>
>>

EE - VIEW subprogram
<< PPAR LIST-> 4 DROPN
SWAP C->R 1.5 + R->C
SWAP C->R 1.6 + R->C
PMAX PMIN CLLCD DRAW
>>

QQ - VIEW subprogram
<< PPAR LIST-> 4 DROPN
SWAP C->R 1.5 - R->C
SWAP C->R 1.6 - R->C
PMAX PMIN CLLCD DRAW
>>

JJ - VIEW subprogram
<< PPAR LIST-> 4 DROPN
SWAP C->R SWAP 6.8 -
SWAP R->C SWAP C->R
SWAP 6.8 - SWAP R->C
PMAX PMIN CLLCD DRAW
>>

LL - VIEW subprogram
<< PPAR LIST-> 4 DROPN
SWAP C->R SWAP 6.8 +
SWAP R->C SWAP C->R
SWAP 6.8 + SWAP R->C
PMAX PMIN CLLCD DRAW
>>

KK - VIEW subprogram
<< CLLCD DRAW
>>

FF - VIEW subprogram
<< STEQ CLLCD DRAW
DGTIZ
>>

RF - VIEW subprogram
<< 'PPAR' PURGE CLLCD
DRAW
>>

Program SRED
Oblicza średnią arytmetyczną z liczb znajdujących się na stosie

<< DEPTH -> n
<< 1 n 1 -
FOR i +
NEXT n /
>>
>>

Program NV->∑
Z N wektorów znajdujących się na stosie tworzy macierz danych ∑DAT

<<
WHILE DUP TYPE 3
==
REPEAT ∑+
END
>>
ODPOWIEDZ