mBASIC  -  uživatelská příručka
               *******************************
  mBASIC ( dále jen mB ) je rozšířením BF zaměřeným na numerické
výpočty potřebné zejména ve fyzice, teoretické chemii, technic-
kých výpočtech atd.
 Vzhledem k tomu že některé užitečné příkazy a funkce se již
vyskytují v nadstavbovém jazyce Basic-D ( dBASIC - dále jen dB )
byly tyto převzaty. Z důvodů kompatibility nahrávek programů
používajících tyto příkazy a fce z dB obsahuje mB tabulku všech
příkazů a fcí z dB. mB verze 1 umí nahrát a vylistovat každý
program napsaný v dB který NEOBSAHUJE FCE FN. Při spuštění
takového programu pak nepřevzaté příkazy a fce způsobí ERR 31.
Byly převzaty následující příkazy a fce:
     erase                          escrn
     error                          line
     pop                            push
     time$                          while
     wend                           ginit
     outw                           inkey
     pos                            color
     point                          rcrt
     inpw                           rdchr$
   Dále byl dopněn příkaz TIME=č analogický k TIME$=...  pro
nastavení vzestupného čítače ( = POKEW &7043,č).
   Změněn byl příkaz DIM, aby šlo dimenzovat pole s některým
rozměrem degenerovaným. Takové pole však smí být dimenzováno
jen jako první pole uvedené za DIM:
          DIM A(0,0,0),B(1,1)       správně
          DIM B(1,1),A(1,1,0)       ohlásí chybu
   Pro účely ladění a spolupráce s programy ve strojovém kódu
byla použita instrukce RST 30, která uloží všechny registry pro
fci REG(x), kde x má tento význam:
       x= 4...AF             10...DE'
          5...BC             11...HL'
          6...DE             12...IX
          7...HL             13...IY
          8...AF'            14...PC
          9...BC'            15...SP
                             16...(SP)  - vrchol zásobníku
   MB poskytuje tyto běžné funkce:
   -------------------------------
      arcsin ... ASIN          |
      arccos ... ACOS          >  závisí na THETA
       arctg ... je již v BF   |
        sinh ... SINH          |
        cosh ... COSH          |
         tgh ... TGH           >  nezávisí na THETA
     arcsinh ... ASINH         |
     arccosh ... ACOSH         |
      arctgh ... ATGH          |
   Z méně běžných jsou to gamafunkce GAMA(x) (zobecněné i pro
záporný argument) s přesností na 10-11 platných číslic.
GAMA(n)=(n-1)! vycházý přesně celočíslný.
   Dalším významným přínosem pro numerické úlohy je rozšíření
fce CALC a fce NEWTON a SIMPSON. Jedna výstraha: dejte si pozor,
zda při použití těchto fcí máte TYPE DBL!!!
   CALC:
   -----
   Protože CALC(A$) vždy nejprve kompiluje řetězec do tvaru
vhodného pro interpretaci (tak jak je uložen program v paměti),
lze v mB použít tvar CALC(). Poprvé dáme CALC(A$) a potom
CALC(), dělá totéz co CALC(A$) ale rychleji, protože se řetězec
již nekompiluje, ale použije se tak, jak byl poprvé zkopilován.
   NEWTON - řešení obecné rovnice o jedné neznámé:
   -----------------------------------------------
Rovnice se řeší Newtonovou metodou.
Syntaxe:  NEWTON(string,var,X0,přes)
string ... text rovnice
   var ... jméno proměmmé podle které rovnici řešíme
    X0 ... počáteční odhad
  přes ... požadvaná přesnost
příklad:
        X=9:TYPE DBL:Y=4:PRINT NEWTON("X*X-Y",X,5,1E-6)
        2                 výsledek rovnice
        PRINT X
        9
Proměnná X je formální (viz příklad) její hodnota se neruší.
Pokud metoda nekonverguje (v daném poctu cyklů nebylo dosaženo
požadované přesnosti), hlásí chybu. V tomto okamžiku ma proménná
X (myšlena je ta formání) nedefinovanou hodnotu. Vyvoláním fce
NEWTON() se obnoví hodnota formální proměnné X a zároveň
výsledkem této fce je poslední aproximace kořene rovnice.
   SIMPSON - výpočet určitého integrálu Simpsonovým pravidem
   ---------------------------------------------------------
Syntaxe: SIMPSON(string,var,a,b,n)
string ... funkce
   var ... proměnná podle níž se integruje
   a,b ... meze intervalu
     n ... počet dělení intervalu
příklad:
               SIMPSON("T*T*EXP(X*T),T,-1,1,900)
Naposledy vypočtenou hodnotu lze zjíSkat jako SIMPSIN().
   Dále byla odstraněna chyba EXP(-176), která v BF ohlásí
error, ačkoliv výsledek má být 0.
   Byla zpřesněna funkce SQR(x), zkuste BF a v mB porovnat
SQR(1)-1.
   Funkce CALC, NEWTON a SIMPSON se mohou navzájem kombinovat,
příslušné formální proměnné pak musí být různé!! Lze tak např.
integrovat implicitně zadano funkci nebo řešit rovnici v níž se
vyskytuje integrál. Pro některé rovnice s integrálem je však
lepší použít program v Basicu. Pakliže máte program na kreslení
grafů funkcí, lze snadno s použitím LINE INPUT, NEWTON a SIMPSON
kreslit grafy impicitních fcí atd. To je však vhodné pouze pro
trpělivého uživatele, neboť takové výpočty nejou zrovna
nejrychlejší.
 !!! Funkce CALC, NEWTON, SIMPSON nesmí volat sami sebe, !!!
 !!! protože každá má pouze jeden kompilační buffer. !!!
   Otázky konvergence a přesnosti numerických metod zde
použitých lze najít v každé učebnici numerické matematiky např.
Základy numerické matematiky.
   Další dvě funkce - TRACE a DETERM - už souvisí s maticovým
počtem, hlavní náplní mB. Je možné je použít jen při nastavení
na reálné výpočty .
   TRACE(A) - stopa matice A
   TRACE()  - poslední vypočtená hodnota
   DETERM(A)- determinant matice A
   DETERM() - poslední vypočtená hodnota např při inverzi
              matice a při řešení maticové rovnice- viz dále
              při výpočtu determinantu se matice A zničí,
              pokud je regulérní, přejde v jednotkovou matici
            Výpočty s maticemi  komplexními čísly
            =====================================
            Příkazy MAT, TRANSFER, COMP, SCRATCH
            ------------------------------------
   SCRATCH - zrušení pole
   ----------------------
Syntaxe: SCRATCH jméno, jméno, jméno, ...
příklad: SCRATCH A,C$,d%
    COMP - výpočty s kompleními čísly
    ---------------------------------
Definice: komplexní číslo (skalár) se zapisuje jako:
          (reál. část (,/;)imag. část)
                                           nebo jen:
          (reál.část) při nastavení na reálné výpočty
Příklad: (SIN(5);M(4,5,6))         značení: k.č.
   Komplexní proměnná je pole o aspoň 1 rozměru, přičemž
poslední rozměr (nejvíce vpravo) je dimenzován na 1.
Příklad: DIM A(4,5,1),C(1),D(1)
         nadimenzuje komplexní proměnné, přičemž A je nutno
         chápat jako DVOJROZMĚRNÉ pole komplexních čísel,
         imag. část má index 1
                                    značení: k.p.
Koplexní výraz je v tomto textu míněn jako buď k.č. nebo k.p.
značení k.v.
Syntaxe: COMP operace (,/;) operace
         povolené typy operací
               k.p. = k.v. + k.v.
               k.p. = k.v. - k.v.
               k.p. = k.v. * k.v.
               k.p. = k.v. / k.v.
               k.p. = k.v.
Je třeba upozornit, že při nastavení na reálné výpočty i příkaz
COMP pracuje jen s reálnými částmi kompleXních čísel - viz dále.
Příklad: DIM A(1),B(1),C(1),D(2,1)
         COMP A=(1,2), B=(3,4), C=A*B
              A=C/(5,6), D(J,0)=C*C
   dále: COMP A(0)=.... je totéž jako COMP A=....
         (A(0),A(1)) má tutéž hodnotu jako A, avšak jeho
         použití je pomalejší, neboť se 2* volá výpočet
         výrazu a výsledky se přesunují do zvláštního
         bufferu pro operandy.
                     Operace s maticemi
                     ==================
Příkazy: MAT, TRANSFER
Definice: reálnou maticí typu m,n rozumíme pole dojrozměrné,
          přičemž poslední dva indexy jsou dimenzovány na
          m-1,n-1 (počítá se i hodnota 0). Pole více než
          dvojrozměrné je třeba považovat za pole reálných
          matic.
          Komplex. maticí typu m,n rozumíme pole třírozměrné
          přičemž poslední index je dimenzován na 1,
          předposlední dva na m-1,n-1. Reálná část má
          poslední index 0, imaginární část 1. Pole více než
          třírozměrné s posledním indexem 1 můžeme chápat
          jako pole komplexních matic
Značení matic v syntaxi příkazů MAT a TRANSFER:
 Matice reálné: zkratka rm
 předpokládejme že bylo DIM R(5,6,7,8),S(3,4)
            S nebo S(0,0) značí matici S
            R značí matici 0,0 z pole matic R
            R(i,j,0,0) značí i,j-tou matici z pole R
 Komplexní matice: zkratka km
 Předpokládejme že bylo DIM A(2,3,1),B(3,3,3,1)
            A nebo A(0,0,0) značí matici A
            b(i,0,0,0) znač i-tou matici z pole matic B
   Vzhledem k tomu, že i reálné výpočty se provádějí s
komplexními maticemi, ale tak, že jejich imaginární části se
IGNORUJÍ a při přiřazení a všech výpočtech ZUSTANOU NEDOTKNUTY,
lze takovou komplexní matici A použít jako 2 reálné matice, na
něž se odvoláváme značením A či A(0,0,0) a na tu druhou
A(0,0,1).
   Upozornění: vzhledem k tomu, že při výpočtu adresy matice
značené i s indexy se používá rutina z BF pro nalezení obyčejné
proměnné, se nekontroluje nulovost indexů, a tak přiřazením
nějaké hodnoty matici označené např. A(1,1,0) se přepíše část
proměných uložených za maticí A a tak dojde ke zmatku.
    TRANSFER - slouží k převádění re. matic na ko. a naopak
    -------------------------------------------------------
Syntaxe: TRANSFER REAL cm TO rm  ;*
         TRANSFER IMAG cm TO rm
         TRANSFER rm TO REAL cm
         TRANSFER rm TO IMAG cm
* reálná část matice cm se převede do matice rm, ostatní
analogicky.
   MAT - výpočty s komplexními maticemi
   ------------------------------------
Syntaxe: MAT operace (,/;) operace
 Všechny operace se provádějí pouze s kopmlexními maticemi,
přičemž při nastavení na reálné výpočty se imaginární části
prvků matice ignrují a zůstávají nezměněny. po inicializaci je
nastaven režim komplexních výpočtů. POZOR - nastavení na reálné
výpočty působí i na příkaz COMP.
 V dalším textu předpokládejme, že máme dimenzovány matice A,B,C
a nastaveno TYPE DBL.
 REAL         nastavení na reálné výpočty
 COMPLEX      nastavení na kpmplexní výpočty
 INV B,A      B <== A^(-1), A <== 1 když A je regulérní,
              jinak obsah ,B je nedefinovaný a nastává error
              zároveň se spočítá determ A a zůstane uschován
              viz dále
 GAUSS B,A    A,B Ctvercové stejného řádu, řešení rovnice
              A*X=B. Bude-li A regulérní, tak B=X, A=1,
              jinak se spočte determ A a uschová
 EXREIM A     výměna reálé a imaginární části matice A
 DETERM A     determinant  matice  spočítaný  při  INV  nebo
              GAUSS se přiřadí komplexní proměnné
 DETERM A=kp  spočte se determ A a přiřadí se kp
              A regulérní ==>  A=1
 TRACE A=kl   výpočet stopy matice
 A=0          vynulování celé matice nebo její části
 A IMAG=0
 A REAL=0
 A=1          nastavení jednotkové matice  (A je čtvercová)
 A=TRANSP B   A <== B'  pouze pro čtercové matice
              lze A=TRANSP A
 A=B*         komplexně sdružená matice
              lze A=A*
 A=#kv        každý prvek matice bude roven kv
 A=#kv*B      násobení matice skalárem
 A=B*kv#       -""-     -""-   -""-
 A=B/#kv      dělení matice skalárem
              lze A=A*#kv apod.
 A=B          přiřazení matic
 A=B+C        základní operace,
 A=B-C          nelze  A=B-A   A=A*B A=B*A
 A=B*C
Při nastavení na reálné výpočty lze použít funkce TRASE a
DETERM. Přitom DETERM(A) přepíše původní matici A a DETERM() lze
použít na získání determinantu vypočteného při INV nebo GAUSS.
       CHYBOVÁ HLÁŠENÍ ZAVEDENÁ V mBASICu
       ==================================
 ERR 26   Newtonova metoda nekonverguje (pro danou přesnost)
 ERR 27   Špatné rozměry matic - operace není definována
 ERR 28   singulární matici nelze invertovat
 ERR 29   nedovolené přiřazení např. MAT A=B-A
                                     MAT A=A*B
 ERR 31   příkaz nebo funkce v mBASIC neexistuje
Příklady:
DIM A(2,2,1),B(2,3,1),C(3,2,1),D(4,2,2,1),K(1)
         .
         .
         .
MAT A=D(3,0,0,0);DETERM A=K;A=#(3,5);A=B*C;D(0,0,0,0)=A(0,0,
0)/#K
mBASICv2 je doplněn of funkci FN ( err 26 ), MCD(x,y) - největší
společný dělitel, fce ROMBERG(str,var,a,b,eps,[mink,maxk]), fce
SORT (up nebo down): SORT pole,pole,...
Pro získání podrobnějších informací si odchyťte Jiřího Pittnera.