Dalším tématem (za první lze považovat faktoriál velkých čísel), které našlo inspiraci na stránkách www.hpmuseum.org, je parciální derivace funkce. Na stránce Partial Derivative for Any Variable for the HP-32SII je výchozí materiál pro tuto kapitolu. Postrádalo by smyslu pouhé přenesení programu z www.hpmuseum.org na toto místo. Důvodem pro vznik této stránky je inovace výchozího řešení. Nový název by mohl znít Partial Derivative of ANY Function for Any Variable. Je to tak: dalším stupněm volnosti je explicitní zadání derivované funkce.
Ale nepředbíhejme. Kouzlo vzorového řešení spočívá v tom, že nezávislá proměnná (argument vyšetřované funkce - zde implicitně definované návěštím LBL F) je určena její adresou vloženou do registru/proměnné i. To je samozřejmě hozená rukavice, která musí být zdvižena! Což takhle kromě proměnné určit nepřímo i funkci? Než se zasněně zahledíme na program, který je odpovědí na takovou výzvu, zopakujme některá důležitá fakta:
Symbol | Význam | |
---|---|---|
Mnemo | Komentář | |
i | &var | adresa nezávislé proměnné *) | n | &var | úschova adresy nezávislé proměnné |
Σx | dxi | krok nezávislé proměnné (v původním textu "deltaxi") *) |
Σy | &fnc | adresa zkoumané funkce *) |
Σx² | res1 | úschova mezivýsledku |
Konečně výpis programu. Samozřejmě pro HP-32sII.
Pozn.: Pozor na změnu významu sloupců. V posledním sloupci nejsou hodnoty T-registru RPN stacku, ale proměnné i!
ADDR | CODE | X | Y | Z | i |
---|---|---|---|---|---|
D01 | LBL D | ||||
D02 | 28 | &n | &var | ||
D03 | x<> i | &var | &n | ||
D04 | STO(i) | n = &var | |||
D05 | STO i | &var | &var | ||
D06 | Σx | dxi | |||
D07 | STO-(i) | var -= dxi | |||
D08 | Σy | &fnc | |||
D09 | STO i | &fnc | &fnc | ||
D10 | XEQ(i) | res1 | |||
D11 | 31 | &Σx² | res1 | ||
D12 | STO i | &Σx² | res1 | &Σx² | |
D13 | R↓ | res1 | |||
D14 | STO(i) | Σx² = res1 | |||
D15 | n | &var | |||
D16 | STO i | &var | &var | ||
D17 | Σx | dxi | |||
D18 | STO+(i) | var += dxi | |||
D19 | STO+(i) | var += dxi | |||
D20 | Σy | &fnc | |||
D21 | STO i | &fnc | &fnc | ||
D22 | XEQ(i) | res2 | |||
D23 | n | &var | res2 | ||
D24 | STO i | &var | res2 | &var | |
D25 | R↓ | res2 | |||
D26 | Σx² | res1 | res2 | ||
D27 | - | res2 - res1 | |||
D28 | Σx | dxi | res | ||
D29 | ENTER | dxi | dxi | res | |
D30 | STO-(i) | var -= dxi | dxi | res | |
D31 | + | 2 dxi | res | ||
D32 | ÷ | res / (2 dxi) | |||
D33 | RTN | výsledek | |||
LN=49.5, CK=5B1A |
Laskavý čtenář promine ledacos, ale ukončení dnešní pohádky předchozími řádky asi stěží. Naštěstí takovou měrou cynismu není obdařen ani autor tohoto pojednání. Ale bylo to o fous, že?!
Pojďme se podívat, na co by se ta bejkárna dala použít. Bylo by hloupé dělat machry a snažit se vymyslet něco vlastního (zvláště, je-li to daleko za intelektuálním obzorem autorovým). Držme se obsahem vzoru a pokusme se také vyšetřit extrém funkce y = x² ln(x) pro rozsah vstupních hodnot nezávislé proměnné 0.5 až 0.7. Nepěkný cockpit-drill v podobě zadávání hodnot nahradí nově vzniklá sekvence instrukcí začínající návěštím LBL E. Je to vstupní bod přípravy hodnot pro spuštění výpočtu extrému.
ADDR | CODE | X | Y | Z | T | i |
---|---|---|---|---|---|---|
E01 | LBL E | &fnc | &var | high | low | |
E02 | STO i | &fnc | &var | high | low | &fnc |
E03 | CLx | 0 | &var | high | low | |
E04 | 30 | &Σy | &var | high | low | |
E05 | x<> i | &fnc | &var | high | low | &Σy |
E06 | STO(i) | Σy = &fnc | ||||
E07 | DSE i | &fnc | &var | high | low | &Σx |
E08 | CLx | 0 | &var | high | low | |
E09 | + | &var | high | low | low | |
E10 | STO(i) | Σx = &var | ||||
E11 | R↓ | high | low | low | &var | |
E12 | ENTER | high | high | low | low | |
E13 | R↓ | high | low | low | high | |
E14 | - | low - high | low | high | high | |
E15 | -5E4 | -50,000 | low - high | low | high | |
E16 | ÷ | dxi | low | high | high | |
E17 | x<>(i) | Σx = dxi | ||||
E18 | STO i | &var | low | high | high | &var |
E19 | R↓ | low | high | high | &var | &var |
E20 | STO(i) | var = low | ||||
E21 | x<>y | high | low | &var | ||
E22 | FN= D | |||||
E23 | SOLVE(i) | výsledek | ||||
E24 | RTN | |||||
LN=44.0, CK=FE82 |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
. 5 ENTER | dolní mez | 0.5000 |
. 7 ENTER | horní mez | 0.7000 |
2 4 ENTER | adresa proměnné X | 24.0000 |
6 | adresa funkce F | 6_ |
XEQ E | spuštění programu | RUNNING → SOLVING |
výsledek | 0.6065 | |
SHOW | celá mantisa výsledku | 606530656888 |
Výkonné části jsou pod střechou, zbývá zkoumaná funkce. Pro názornost si ponechala původní návěští LBL F.
ADDR | CODE | X | Y |
---|---|---|---|
F01 | LBL F | ||
F02 | RCL X | x | |
F03 | x² | x² | |
F04 | LASTx | x | x² |
F05 | LN | ln(x) | x² |
F06 | × | x² ln(x) | |
F07 | RTN | výsledek | |
LN=10.5, CK=024A |
Pozn.: Pokud by se výpočet prováděl opakovaně, třeba s měnícími se hodnotami mezí, stálo by za úvahu předřadit před spuštění XEQ E ještě krátký úsek kódu pro náhradu zadávání neměnících se hodnot.
Platí-li úvodní předpoklad, že vstupy nově vzniklého programu označeného návěštími LBL D a LBL E jsou tvořeny adresami zkoumané funkce a její nezávislé proměnné, důsledek je vcelku příjemný: zjišťování mezních hodnot různých funkcí lze spouštět bez nutnosti modifikace programu. Předveďme si tuto fascinující vlastnost na dvou funkcích. (1) Napíšeme novou y = sin(a) označenou návěštím LBL A a budeme hledat maximum v rozsahu 0 až π. Když pánbůh dá, vyjde π / 2. (2) Jako pokusný králík číslo 2 poslouží funkce z předchozí ukázky. Je jenom trochu upravená za účelem dosažení úspor: kratší o jeden programový řádek a pracující pouze s X-registrem RPN stacku.
ADDR | CODE | X |
---|---|---|
A01 | LBL A | |
A02 | RCL A | a |
A03 | SIN | sin(a) |
A04 | RTN | výsledek |
LN=6.0, CK=E29B | ||
F01 | LBL F | |
F02 | RCL X | x |
F03 | LN | ln(x) |
F04 | RCL× X | x ln(x) |
F05 | RCL× X | x² ln(x) |
F06 | RTN | výsledek |
LN=9.0, CK=C64F |
Použití programu:
Stisk kláves | Činnost | Display |
---|---|---|
1) y = sin(a) | ||
0 | dolní mez | 0_ |
π | horní mez | 3.1416 |
1 ENTER | adresa proměnné A | 1.0000 |
1 | adresa funkce A | 1_ |
XEQ E | spuštění programu | RUNNING → SOLVING |
výsledek | 1.5708 | |
π 2 ÷ | π / 2 | 1.5708 |
- | chyba výsledku | -1.3900E-9 |
2) y = x² ln(x) | ||
. 5 ENTER | dolní mez | 0.5000 |
. 7 ENTER | horní mez | 0.7000 |
2 4 ENTER | adresa proměnné X | 24.0000 |
6 | adresa funkce F | 6_ |
XEQ E | spuštění programu | RUNNING → SOLVING |
výsledek | 0.6065 | |
SHOW | celá mantisa výsledku | 606530676085 |
Pozn.: Na kontrolních zobrazeních celé mantisy je u funkcí F vidět rozdíl začínající na osmém místě. Je to způsobeno danou přesností kalkulátoru při výpočtech dvou možných postupů:
Pokud se čirou náhodou našel ten, kdo v četbě setrval až do těchto míst, dá se předpokládat, že týž bude míst dostatek sil a vzmužilosti, aby se pustil do pokračování. Ostatním je veleno "Rota na můj povel, rota pozor! Po četách na ubikace rozchod!"