ïÔÐÒÁ×ÌÑÅÔ email-ÒÁÓÓÙÌËÉ Ó ÐÏÍÏÝØÀ ÓÅÒ×ÉÓÁ Sendsay

Linux Gazette ÎÁ ÒÕÓÓËÏÍ

  ÷ÓÅ ×ÙÐÕÓËÉ  

Linux Gazette ÎÁ ÒÕÓÓËÏÍ


óÌÕÖÂÁ òÁÓÓÙÌÏË Subscribe.Ru ÐÒÏÅËÔÁ Citycat.Ru
Numerical Workbenches LG #69

Àêõíðþðë êïõæôèîåïæâôêë

 
Âþæðô: ¿ Allan Peda
Òåôåþðä: ¿ Ôðîâï Ùèîêéêï.


 

Ïåìðæðôýå äèîâáæ, àæð GNU/Linux éðôðùâó ðòåôâçêðïïâó õêõæåîâ, ïð äíó ïåЈ ïåæ äðõæâæðàïðúð ìðíêàåõæþâ òôêíðãåïêë, àæð÷ý òôåèõòåæû ïâ ôýïìå. Øæð îðãåæ ÷ýæû ê þåôïð äíó desktop õêõæåî, ïð õðþåôùåïïð ïåþåôïð òð ðæïðùåïêá ì àêõíðþýî êïõæôèîåïæâíûïýî õôåäõæþâî. Þ øæðë ð÷íâõæê è òðíûÿðþâæåíåë GNU/Linux ðúôðîïýë ê òôåþðõéðäïýë) þý÷ðô, äâãå õíêùìðî ðúôðîïýë àæð÷ý ðòêõâæû þõå òôêíðãåïêó. Òðøæðîè äâïïâó õåôêó õæâæåë ôâõõìâãåæ þâî ð æôЈé þýäâáüêéõó òôêíðãåïêóé:

GNU/Octave 2.1.34
http://www.che.wisc.edu/octave/
Scilab 2.6
http://www-rocq.inria.fr/scilab/
Tela 1.32
http://www.geo.fmi.fi/prog/tela.html

Àæð÷ý èÿïâæû ÷ðíûùå ð àêõíðþýé òôêíðãåïêóé õîðæôêæå http://sal.kachinatech.com/A/2/

Þþåäåïêå

Àæð îðúèæ äåíâæû þõå øæê òôðúôâîîý? Ôâÿþå ïå äðõæâæðàïð ÷èîâúê ê ìâôâïäâùâ êíê øíåìæôðïïðë æâ÷íêçý?

Ðõïðþïýå ÿâäâàê àêõíðþýé òôêíðãåïêë:

  • Òôåäþâôêæåíûïâó ð÷ôâ÷ðæìâ (äâ -- îåãäè æåî ïâî ïèãïð àæð÷ý ìðîòûáæåôý ôâÿúðþâôêþâíê õ ìðîòûáæåôâîê) ê ÿâìíáàêæåíûïâó ð÷ôâ÷ðæìâ äâïïýé þ õíèàâå ïåð÷éðäêîðõæê "õìíåêþâïêó" äþèé àêõíðþýé òôêíðãåïêë þîåõæå.
  • Àêõíðþýå ðòæêîêÿâçêê (ð÷å, ê íêïåëïýå ê ïåíêïåëïýå),
  • Õâîðõæðóæåíûïðå îðäåíêôðþâïêå,
  • Þêÿèâíêÿâçêó äâïïýé,
  • Êïæåííåìæèâíûïýå "ìâôîâïïýå" ìâíûìèíóæðôý,
  • ×ýõæôðå òôðæðæêòêôðþâïêå õòåçêâíûïýé àêõíðþýé òôêíðãåïêë, ìðæðôýå ÷èäèæ ÿâæåî ïâòêõâïý, ïâòôêîåô, ïâ C++ êíê Fortran-90.

Ìâì ÷ý æð ïê ÷ýíð, þõå ðïê òôåäðõæâþíóáæ òðíûÿðþâæåíá òðíïýå óÿýìê òôðúôâîîêôðþâïêó, ìðæðôýå ÷ðíåå æðúð îðúèæ ÷ýæû íåúìð ôâõùêôåïý, òðøæðîè ìðíêàåõæþð àêõíðþýé ÿâäâà, ìðæðôýå ðïê îðúèæ ôåùâæû òðàæê ÷åÿúôâïêàïð.

Àêõíðþâó îâæåîâæêìâ

Ê ÿâàåî ãå ïâî ïèãïâ øæâ àêõíðþâó îâæåîâæêìâ? Àêõíðþâó îâæåîâæêìâ -- øæð ôâÿäåí îâæåîâæêìê, ìðæðôýë ôâÿôâ÷âæýþâåæ, âïâíêÿêôèåæ ê òôêîåïóåæ îåæðäý äíó þýòðíïåïêó þýàêõíåïêë õ ìðïåàïðë æðàïðõæûá. Ïâòôêîåô, ìðîòûáæåôý ìâì ôâÿ êõòðíûÿèáæ àêõíðþèá îâæåîâæêìè.

Òðàåîè ìðîòûáæåôý ôâ÷ðæâáæ õ àêõíâîê ìðïåàïðë æðàïðõæê? Òðàåîè ïêìæð ïå ôâÿôâ÷ðæâí õéåîè, ìðæðôâó òðÿþðíóåæ éôâïêæû æðàïýå àêõíâ?

  1. Ôåùåïêå ÿâäâà õ àêõíâîê õ ìðïåàïðë æðàïðõæê ÷ýõæôåå -- ïâîïðúð, ïâîïðúð ÷ýõæôåå. ÞðÿûîЈî äíó òôêîåôâ õèîîè þõåé ìþâäôâæïýé ìðôïåë ðæ 1 äð îêííêðïâ. Ïâ îðЈî ìðîòûáæåôå, þýòðíïóó æðàïðå þýàêõíåïêå þ òôðúôâîîå MuPAD-1.4.2, äðõæèòïðë òð âäôåõè http://math-www.uni-paderborn.de/MuPAD/index.html,

        time(sum(sqrt(i), i = 1..10^6));
    

    ÿâïêîâåæ ðìðíð 40 õåìèïä, æðúäâ ìâì þýàêõíåïêå òôê÷íêãЈïïðúð ôåÿèíûæâæâ þ òôðúôâîîå Tela-1.32

        tic(); sum(sqrt(1:10^6)); toc();
    

    ÿâïêîâåæ 0.31 õåìèïäý, æð-æð ê ðïð, ðæþåæ ìðïåàïðë æðàïðõæê òðíèàåï ÷ðíåå àåî þ 100 ôâÿ ÷ýõæôåå! Äôèúêîê õíðþâîê, îý îðãåî ð÷ôâ÷ðæâæû þ õæð ôâÿ ÷ðíûùå äâïïýé ðúôâïêàåïïðë æðàïðõæê ÿâ ðäêï ðæôåÿðì þôåîåïê.

  2. Åõíê êõòðíûÿðþâæû éðôðùêå âíúðôêæîý, æå ìðæðôýå ôâÿôâ÷ðæâíê àêõíðþýå îâæåîâæêìê, ê ÷ýæû äðõæâæðàïð ðõæðôðãïýî, îý îðãåî òðíèàâæû èäêþêæåíûïð æðàïýå ðæþåæý äâãå õ àêõíâîê ìðïåàïðë æðàïðõæê.
  3. Òôêÿïâëæåõû, ÷ðíûùèá àâõæû þôåîåïê þâî ïå ïèãïý æðàïýå ôåÿèíûæâæý! Éðôðùåúð òôê÷íêãåïêó õ "äðõæâæðàïýî ìðíêàåõæþðî òôâþêíûïýé çêöô" ÷èäåæ äðõæâæðàïð.

Ðôúâïêÿâçêó õæâæûê

Þ øæðë õåôêê õæâæåë îý ôâõõîðæôêî ð÷üêå àåôæý æôЈé òôêíðãåïêë, ìðæðôýå îý õð÷êôâíêõû ð÷õèäêæû. Îý ÷èäåî êõòðíûÿðþâæû GNU/Octave þ ÷ðíûùêïõæþå òôêîåôðþ. Æâî, úäå åõæû þâãïýå ôâÿíêàêó, ïâ ìðæðôýå ïèãïð ð÷óÿâæåíûïð ð÷ôâæêæû þïêîâïêå, îý äð÷âþêî òâôâúôâö Ðõð÷åïïðõæê þ ìðïçå ôâÿäåíâ.

Æåéïêàåõìêå äåæâíê äíó ðàåïû íá÷ðòýæïýé ÷èäèæ òðîåüåïý þ òâôâúôâö Äåæâíûïâó êïöðôîâçêó.

ßâòèõì ê þýéðä êÿ òôêíðãåïêë

Àæð÷ý äâæû þâî òôâìæêàåõìêë ðòýæ, äâþâëæå ÿâòèõæêî ìâãäðå òôêíðãåïêå, ÿâòôðõêî õòôâþìè òð öèïìçêê ê þýëäåî êÿ òôðúôâîîý.

GNU/Octave
    cspiel@hydra:~/articles/numerical-workbenches $ octave
    GNU Octave, version 2.1.34 (i686-pc-linux-gnu).
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John W. Eaton.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details, type warranty'.

    *** This is a development version of Octave.  Development releases
    *** are provided for people who want to help test, debug, and improve
    *** Octave.
    ***
    *** If you want a stable, well-tested version of Octave, you should be
    *** using one of the stable releases (when this development release
    *** was made, the latest stable version was 2.0.16).

    octave:1> help diag
    diag is a built-in function

     - Built-in Function:  diag (V, K)
         Return a diagonal matrix with vector V on diagonal K.  The second
         argument is optional.  If it is positive, the vector is placed on
         the K-th super-diagonal.  If it is negative, it is placed on the
         -K-th sub-diagonal.  The default value of K is 0, and the vector
         is placed on the main diagonal.  For example,

              diag ([1, 2, 3], 1)
              =>  0  1  0  0
                       0  0  2  0
                       0  0  0  3
                       0  0  0  0

    octave:2> quit
    cspiel@hydra:~/articles/numerical-workbenches $

Þý îðãåæå êõòðíûÿðþâæû ìðîâïäè exit êíê ïâãâæû C-d, àæð÷ý þýëæê êÿ òôðúôâîîý GNU/Octave.

GNU/Octave òôåäíâúâåæ òðíûÿðþâæåíá âþæðîâæêàåõìðå äðòðíïåïêå êîЈï öèïìçêë, æ.å. åõíê þþåäåïâ àâõæû êîåïê öèïìçêê, òôê ïâãâæêê òðíûÿðþâæåíåî ïâ ìíâþêùè Tab, êîó öèïìçêê äðòðíïóåæõó ïâõìðíûìð øæð þðÿîðãïð. Òðþæðôïðå ïâãâæêå ìíâþêùê Tab òðìâãåæ õòêõðì þõåé ðõæâþùêéõó þâôêâïæðþ äðòðíïåïêó ìðîâïäý.

Scilab
Òðõíå æâìðúð ÿâòèõìâ Scilab:
    cspiel@hydra:~/articles/numerical-workbenches $ scilab

îý òðíèàâåî ïðþðå X-window, þ ìðæðôðî þýòðíïóåæõó êïæåôòôåæâæðô Scilab. ßâòôðõ ð òðîðüê ðæìôýþâåæ ðìïð xless(1x). (Ð÷å øæê õõýíìê - ïâ õìôêï-ùðæý, ïâãîêæå ïâ ïêé.)

Àæð÷ý þýëæê êÿ Scilab, þþåäêæå quit êíê exit.

Scilab æâìãå îðãåæ ÷ýæû ÿâòèüåïâ ïå þ ðìðïïðî ôåãêîå, õ òðîðüûá ìíáàâ -nw þ ìðîâïäïðë õæôðìå:

    cspiel@hydra:~/articles/numerical-workbenches $ scilab -nw
                               ==========                               S c i l a b
                               ==========

                              scilab-2.6
                      Copyright (C) 1989-2001 INRIA

      Startup execution:
      loading initial environment

    -->help diag

The help system then uses the text output, too.

Tela
ßâúðíðþðì òôðúôâîîý Tela äðþðíûïð ìôâæðì, ðäïâìð, õòôâþðàïâó õêõæåîâ ð÷ñЈîïâ ïâ õìðíûìð øæð ïåð÷éðäêîð. Tela æâìãå òôåäíâúâåæ âþæðîâæêàåõìðå äðòðíïåïêå êîЈï öèïìçêë, ìâì ê þ GNU/Octave.
    cspiel@hydra:~/articles/numerical-workbenches $ tela
    This tela is a tensor language, Version 1.32.
    Type  ?help  for help.
    ->TAB completion works; try docview() and source("demo")
    >help diag
    diag(V, K) (V is a vector) returns a square diagonal matrix, with
       vector V on the main diagonal (K == 0, default), the K-th super
       diagonal (K > 0) or the K-th sub-diagonal (K < 0).

       diag(M, K) (M is a matrix) returns the main diagonal (K == 0,
       default), the K-th super diagonal (K > 0), or the K-th sub-diagonal
       (K < 0) of M as a vector.  M need not necessarily be square.

    >quit()
    63 instructions, 0 arithmetic ops.
    0.0063 MIPS, 0 MFLOPS.
    cspiel@hydra:~/articles/numerical-workbenches $

Þýëæê êÿ Tela îðãïð ïâãâæêåî C-d.

Íèàùå, àåî ìâôîâïïýë ìâíûìèíóæðô!

Æåòåôû, ìðúäâ îý ÿïâåî, ìâì ÿâòèõìâæû ê ÿâìôýþâæû òôðúôâîîý, äâþâëæå òðõîðæôêî ïâ ïêé þ äåëõæþêê.

Òôðõæýå þýôâãåïêó

Îý éðæêî èþêäåæû:

  1. Îðãåî íê îý ÿâòêõýþâæû îâæåîâæêàåõìêå þýôâãåïêó æâìêî ãå õòðõð÷ðî, ìâì îý òôêþýìíê þ ùìðíå. Äâ!
    1 + 2 * 3 ^ 4 õíåäèåæ òðïêîâæû ìâì 1 + (2 * (3 ^ 4)), òðíèàâåî ðæþåæ 163. Ïå õíåäèåæ þðõòôêïêîâæû øæð þýôâãåïêå ìâì ((1 + 2) * 3) ^ 4, àæð ôâþïð 6561,
  2. Õìðíûìð ÷êæðþ ïèãïð àæð÷ý õðéôâïêæû àêõíð 10^6, ê
  3. Ïâõìðíûìð ìôèæâ ïâùâ äðôðúâ? (êÿîåôóó þ úôâäèõâé) Ïâù úâôâã þ 7 îåæôâé ðæ èíêçý ê ïâ òðíîåæôâ þýùå åЈ.

Òðåéâíê.

    cspiel@orion:~/articles/numerics $ octave

Þõå æôê òôðúôâîîý èòôâþíóáæõó êÿ ìðïõðíê.Æ.å. òðíûÿðþâæåíû òðíèàâåæ òðäõìâÿìè, ìðúäâ òôêíðãåïêå úðæðþð òôêïóæû þþðä. Îý þþåäЈî ïâù òåôþýë þðòôðõ æâì, ìâì îý ÿâòêõâíê åúð ïâ ÷èîâúå. Ïâãâæêå ìíâþêùê Enter ÿâþåôùâåæ õæôðìè, òôðúôâîîâ ðçåïêþâåæ åЈ ê þðÿþôâüâåæ ôåÿèíûæâæ þ òåôåîåïïðë ans (÷ðíåå òðäôð÷ïâó êïöðôîâçêó ð òåôåîåïïýé ÷èäåæ äâíûùå).

    octave:1> 1 + 2 * 3 ^ 4
    ans = 163

Âúâ, ðàåþêäïð GNU/Octave ÿïâåæ øíåîåïæâôïèá ùìðíûïèá îâæåîâæêìè!

Ïâù þæðôðë þðòôðõ æôå÷èåæ íðúâôêöîêàåõìðë öèïìçêê log, ìðæðôâó þðÿþôâüâåæ ïâæèôâíûïýë íðúâôêöî õþðåúð âôúèîåïæâ; øæð íðúâôêöî òð ðõïðþâïêá e.

    octave:2> log(10^6) / log(2)
    ans = 19.932

Îý ÿâìíáàâåî, àæð äíó éôâïåïêó 1,000,000 ïèãïð 20 ÷êæ.

Ïâìðïåç, ïâõìðíûìð ìôèæ ïâù þýåÿä êÿ úâôâãâ? Àæð ïâî ÿäåõû ïèãïð - øæð èúíðþâó öèïìçêó, êîåïïð âôì-æâïúåïõ, ÿâòêõýþâåæõó øæð æâì atan(argument).

    octave:3> atan(0.50 / 7.0)
    ans = 0.071307

Éîî, ïå ìâãåæõó íê þâî, àæð òðíèàêíðõû õíêùìðî òíðõìð? Êÿ äâþïð ÿâ÷ýæýé èôðìðþ îâæåîâæêìê, îý òðîïêî, àæð âôì-æâïúåïõ 1 ôâþåï 45 úôâäèõâî. Äâþâëæå òôðþåôêî øæð!

    octave:4> atan(1)
    ans = 0.78540

Ðòõ, ðæþåæ òðíèàêíõó þ 57 ôâÿ îåïûùå! Àæð ãå ïâî æåòåôû þý÷ôâõýþâæû òôðúôâîîè? Òðäðãäêæå, 57 òôê èîïðãåïêê ïâ àêõíð òê ôâþïóåæõó òðàæê 180. Øæð ðÿïâàâåæ, àæð GNU/Octave þðÿþôâæêíâ ôåÿèíûæâæ þ ôâäêâïâé, â ïå þ úôâäèõâé. Þõå èúíðþýå öèïìçêê ôâ÷ðæâáæ õ ôâäêâïâîê, èúðí þ 360 úôâäèõðþ ôâþåï 2 òê ôâäêâï.

Òðòôð÷èåî õïðþâ, ïð ïâ øæðæ ôâÿ òôåð÷ôâÿèåî ôåÿèíûæâæ êÿ ôâäêâï þ úôâäèõý:

    octave:5> atan(0.50 / 7.0) * 360/(2 * 3.14)
    ans = 4.0856

Ðìðíð 4-é úôâäèõðþ, þýúíóäêæ ïåòíðéð. Ïâù úâôâã æðàïð ïå ÷èäåæ ÿâæðòíåï òôê õêíûïðî íêþïå.

Äåæâíûïâó êïöðôîâçêó

  • Àêõíâ îðúèæ ÷ýæû þåüåõæþåïïýîê, íê÷ð ìðîòíåìõïýîê. Øíåîåïæâôïýå ðòåôâçêê +'', -'', *'', and /'', þîåõæå õ òðæåïçêôðþâïêåî ^'', ôâ÷ðæâáæ, ìâì ê ðãêäâåæõó, ïâ þåüåõæþåïïýé ê ìðîòíåìõïýé àêõíâé.
  • Àâõæð êõòðíûÿèåîýå ðõïðþïýå öèïìçêê - øæð ïâéðãäåïêå â÷õðíáæïðúð ÿïâàåïêó (îðäèíû àêõíâ) abs(arg), öèïìçêó, ðòôåäåíóáüâó ÿïâì àêõíâ, sign(arg), ê ìþâäôâæïýë ìðôåïû sqrt(arg).
  • Åõæû äþå íðúâôêöîêàåõìêå öèïìçêê, ðäïâ õ ðõïðþâïêåî e: log(arg), ê õ ðõïðþâïêåî 10: log10(arg). Øìõòðïåïçêâíûïâó öèïìçêó exp(arg) - øæð ð÷ôâæïâó öèïìçêó ì log(arg).
  • Þõå òôêíðãåïêó òôåäíâúâáæ ÷ðúâæýë ïâ÷ðô èúíðþýé ê úêòåô÷ðíêàåõìêé öèïìçêë: sin(arg), cos(arg), tan(arg), sec(arg), csc(arg); asin(arg), acos(arg), atan(arg), acsc(arg); sinh(arg), cosh(arg), tanh(arg), sech(arg), csch(arg) asinh(arg), acosh(arg), atanh(arg), acsch(arg).

Ðõð÷åïïðõæê

  • Þ Tela ïåæ èäð÷ïðë òåôåîåïïðë ans.
  • Þ GNU/Octave ê Tela îïêîýå ÷èìþåïïýå àêõíâ ÿâòêõýþâáæõó õ äð÷âþíåïêåî "i", "j", "I", êíê "J" ì àêõíè. Ïâòôêîåô, 1i, -8.99I, 324J. Scilab ðòôåäåíóåæ õòåçêâíûïèá ìðïõæâïæè äíó îïêîðë åäêïêçý sqrt(-1), ìðæðôâó ÿâòêõýþâåæõó ìâì <%i>. Òðøæðîè, þ Scilab îïêîýå àêõíâ þýúíóäóæ ìâì òôðêÿþåäåïêó: -8.99*%i, %i*324.

Òåôåîåïïýå

Þ òôåäýäèüåë õåìçêê îý ïå òðíèàêíê ïêàåúð ïðþðúð òð õôâþïåïêá õ ìâôîâïïýî ìâíûìèíóæðôðî, ïð æâ àåôæâ, ,÷íâúðäâôó ìðæðôðë ïâùê òôðúôâîîý "õäåíâáæ" ìâôîâïïýå ìâíûìèíóæðôý ê ÿâòêõïýå æâ÷íêçý -- øæð êîåïâ, ìðæðôýå îý îðãåî äâþâæû òâôâîåæôâî êíê ôåÿèíûæâæâî þýàêõíåïêë, ðïê ïâÿýþâáæõó òåôåîåïïýîê.

Òðíðãêî, ïâùâ íèàùâó òðíðþêïâ éðàåæ òðõæôðêæû õâä þð äþðôå, ïð îý éðæêî õîðæôåæû ÷âõìåæ÷ðí. Òðøæðîè ïâî ÷ýõæôð ïèãïâ ìâìâó-ïê÷èäû ðæîâÿìâ, ïâòôêîåô, àæð è ïâõ ïåäðõæâæðàïð ìðîòðõæâ ïâ ãåíâåîýë ôâÿîåô õâäâ. Éâ -- ÿâîåàâæåíûïâó êäåó!

[ôêõèïðì: òíâï äíó ìíèî÷ý]

Êÿ ïâùåúð îâíåïûìðúð òíâïâ îý ÷åôЈî õíåäèáüêå äíêïý þ öèæâé (1 öèæ = 12 äáëîðþ = 30,48 õî):

    houseside_length = 10 (äíêïâ õð õæðôðïý äðîâ)
    creekside_length = 6  (äíêïâ õð õæðôðïý ôèàûó)
    width = 2             (ùêôêïâ)

Ïâùâ íèàùâó òðíðþêïâ æâìãå õìâÿâíâ, àæð õíðë ïðþðë òðàþý äðíãåï ÷ýæû, òð ìôâëïåë îåôå, 5 äáëîðþ (12,7 õî), òðøæðîè

    height = 5 / 12 (þýõðæâ)

Òôêÿýþâåî ïâ òðîðüû GNU/Octave!

    octave:1> houseside_length = 10
    houseside_length = 10
    octave:2> creekside_length = 6
    creekside_length = 6
    octave:3> width = 2
    width = 2
    octave:4> height = 5 / 12
    height = 0.41667
    octave:5> volume = (houseside_length + creekside_length) * width * height
    volume = 13.333

Óüêì õ ìðîòðõæðî 6' x 4' (þ äáëîâé) ê õåëàâõ õðäåôãêæ 8 äáëîðþ òðíåÿïðúð ìðîòðõæâ.

    octave:6> box_width = 6 (ùêôêïâ óüêìâ)
    box_wight = 6
    octave:7> box_depth = 4 (úíè÷êïâ óüêìâ)
    box_depth = 4
    octave:8> compost_height = 8/12 (þýõðæâ õíðó õ ìðîòðõæðî)
    compost_height = 0.66667
    octave:9> compost_volume = box_width * box_depth * compost_height
    compost_volume = 16    (ð÷ñЈî ìðîòðõæâ)

Ð ïåæ, îý æðíûìð àæð þýôýíê õå÷å îðúêíè. Îý òðíèàêíê äðõæâæðàïð ìðîòðõæâ! Îðãåæ ÷ýæû ÿâòêõâæû îâæà ïâ þêäåð?

Äåæâíûïâó êïöðôîâçêó

  • Òåôåîåïïýå ïâàêïâáæ õèüåõæþðþâæû, ìâì æðíûìð êî ÷ýíð òôêõþðåïð ÿïâàåïêå.
  • Øæð ïå ðùê÷ìâ - òôêõþðêæû ÿïâàåïêå äôèúðúð æêòâ õèüåõæþèáüåë òåôåîåïïðë. (Ïâ äâïïýë îðîåïæ îý ÿïâåî æðíûìð ðäêï æêò, ïð åõæû åüЈ îïðúð æêòðþ)
  • Êõòðíûÿðþâïêå ïå ðòôåäåíЈïïðë ÿâôâïåå òåôåîåïïðë þ òôâþðë àâõæê þýôâãåïêó þýÿýþâåæ ðùê÷ìè.

Õæôèìæèôêôðþâïïýå äâïïýå

Äð ïâõæðóüåúð þôåîåïê îý ïå êõòðíûÿðþâíê ìðîòûáæåô æâî, úäå ðï äåëõæþêæåíûïð éðôðù: òåôêðäêàåõìê òðþæðôóáüâóõó ôâ÷ðæâ.

Þåìæðôý

Õìâãåî, îý òðíèàêíê äíêïïýë õàЈæ êÿ ÷âìâíåëïðë íâþìê. [ßäåõû äðíãïâ ÷ýæû þâùâ ôåìíâîâ!] Ìâì îý îðãåî òðõàêæâæû ÏÄÕ þ äðííâôâé ïâ ìâãäýë òôåäîåæ, äâþâó ð÷üåå ìðíêàåõæþð, ê õæâþìè ÏÄÕ þ òôðçåïæâé? Öðôîèíâ

            òôðçåïæ_ïäõ / 100
    ïäõ = --------------------- * ð÷üåå_ìðíêàåõæþð
          1 + òôðçåïæ_ïäõ / 100

æôêþêâíûïâ, ïð îý ïå éðæêî ïâ÷êôâæû åЈ õïðþâ ê õïðþâ.

Õòêõðì ð÷üåúð ìðíêàåõæþâ þ õàЈæå öðôîêôèåæ æð, àæð àêõíðþýå òôðúôâîîý ïâÿýþâáæ þåìæðôðî. Þåìæðôý õæôðóæõó êÿ ÿïâàåïêë, ÿâìíáàâó êé þ ìþâäôâæïýå õìð÷ìê ê ôâÿäåíóó ÿâòóæýîê îåãäè õð÷ðë, þðæ æâì:

    octave:1> gross = [1.49, 4.98, 0.79, 5.49, 0.96, 0.96, 0.96, 0.96]
    gross
      1.49000  4.98000  0.79000  5.49000  0.96000  0.96000  0.96000  0.96000

Þåìæðô õæôðêæõó õíåþâ ïâòôâþð, êõòðíûÿèó òôåäðõæâþíåïïýå àêõíâ þ æâìðî ãå òðôóäìå, þ ìâìðî ðïê ÷ýíê þþåäåïý.

Ôâÿþå ïå ÷èäåæ àèäåõïð, åõíê îý òôðõæð ïâòêùåî: gross *(vat_percent/100) / (1 + vat_percent/100) ê òðíèàêî ÏÄÕ äíó ìâãäðúð êÿ ïêé? Øæð äåëõæþêæåíûïð òôðõæð.

    octave:2> vat_percent = 7   (òôðçåïæ ïäõ)
    vat_percent = 7
    octave:3> a = (vat_percent/100) / (1 + vat_percent/100)
    a = 0.065421
    octave:4> vat = a * gross    (gross - ð÷üåå ìðíêàåõæþð)
    vat 
      0.097477  0.325794  0.051682  0.359159  0.062804  0.062804  0.062804  0.062804

Èôâ -- ôâ÷ðæâåæ! Þòåôþýå îý òðíèàêíê èäð÷õæþð ê þýôâÿêîðõæû: ðäêï ÿïâì èîïðãåïêó þýòðíïóåæ òðäôóä 8 èîïðãåïêë.

Àæð òôðêÿðùíð? vat_percent -- øæð åäêïõæþåïïðå ÿïâàåïêå, ìðæðôðå ïâÿýþâåæõó þ æåðôêê àêõåí õìâíóôðî, àæð÷ý ðæíêàêæû åúð ðæ þåìæðôðþ. Éðôðùð, åõíê vat_percent õìâíóô, æðúäâ vat_percent/100, 1 + vat_percent/100 ê a -- æðãå õìâíóôý. Ðìðïàâæåíûïð, õìâíóô a äðíãåï ÷ýæû èîïðãåï ïâ þåìæðô gross. Àæð îý éðæåíê ê òðíèàêíê -- øæð a, èîïðãåïïâó ïâ ìâãäýë ìðîòðïåïæ þåìæðôâ gross. Øæð ìâõâåæõó íá÷ðúð ðòåôâæðôâ, ïå æðíûìð èîïðãåïêó! Þ ðõïðþïðî,

     þåìæðô ðò  õìâíóô

ê

     õìâíóô ðò  þåìæðô

òôêîåïóáæ õìâíóô ì ìâãäðîè ìðîòðïåïæè þåìæðôâ þ õððæþåæõæþêê õ ðòåôâçêåë ðò. Þ ïâùåî òôêîåôå, ìâì åõíê ÷ý îý ïâòêõâíê õíåäèáüåå

    vat(1) = a * gross(1)
    vat(2) = a * gross(2)
    ...
    vat(8) = a * gross(8)

úäå îý òôåäõæâþêíê ïðþýë ìèõðì õêïæâìõêõâ: êïäåìõý þåìæðôðþ. Ìâãäýë ìðîòðïåïæ (õìâíóô) þåìæðôâ îðãåæ ÷ýæû òðíèàåï òð åúð êïäåìõè, ìðæðôýë óþíóåæõó ïðîåôðî åúð îåõæâ þ þåìæðôå. Ïâòôêîåô, àæð÷ý òðíèàêæû þæðôðë øíåîåïæ gross, îý òêùåî

    octave:5> gross(2)
    ans = 4.9800

Òôêõþâêþâæû ìðîòðïåïæý þåìæðôâ îðãïð æâìêî ãå ð÷ôâÿðî. Òôðõæð òðîåõæêæå òôðêïäåìõêôðþâïïýë þåìæðô õ íåþðë õæðôðïý ðæ ÿïâìâ òôêõþâêþâïêó, ïâòôêîåô, gross(2)= 5.12.

Ð àЈî åüЈ îðãïð äèîâæû ìâì ð þåìæðôå àêõåí, ìôðîå ïâùåúð àåìâ? Íá÷ýå òðõíåäðþâæåíûïðõæê ÿïâàåïêë! ×ðíûùèá àâõæû þôåîåïê ÿïâàåïêó ÷èäèæ ðæïðõêæåíûïýîê, ìâì æåîòåôâæèôâ, êÿîåôóåîâó ìâãäýë äåïû þ 8 àâõðþ èæôâ, ìâì äêâîåæôý õæðòìê ãåíåÿïýé òôèæûåþ, õìðôðõæê þõåé äþêãèüêéõó þ ÿâòâäïðî ïâòôâþíåïêê àåôåÿ Buffalo Street, ïâ èúíè West Clinton Street þ õôåäè, 18-úð Âòôåíó  2001-úð úðäâ âþæðîð÷êíåë. Òðõìðíûìè îý ãêþЈî þ Çêöôðþèá Øòðéè, îïðúêå òðõíåäðþâæåíûïðõæê äâïïýé, îðãïð ôâõõîâæôêþâæû ìâì þåìæðôý: ìâãäýë ìèõðì îèÿýìê ïâ CD - øæð þåìæðô ÿþèìðþýé âîòíêæèä ê êïäåìõïýå îåæìê äêõìôåæïýé îðîåïæðþ þð þôåîåïê.

Äåæâíûïâó êïöðôîâçêó

  • Úðþðôó îâæåîâæêàåõìêî óÿýìðî, þõå þåìæðôý ÿäåõû - ìðôæåãê.
  • Îïðúêå þõæôðåïïýå öèïìçêê, ïâòôêîåô sin, îðúèæ ÷ýæû êõòðíûÿðþâïý ïâ þåìæðôâé.
        v = [0.12, 0.89, 0.78, 0.10]
        sin(v)
    

    êíê

        sin([0.12, 0.89, 0.78, 0.10])
    
  • Þåìæðôý ïå ð÷óÿâæåíûïð äðíãïý õæôðêæûõó êÿ õìâíóôðþ; ÷ðíåå àåî ðäêï þåìæðô îðãåæ ÷ýæû õþóÿâï æâìêî ð÷ôâÿðî. ×ðíåå æðúð, øíåîåïæý, êõòðíûÿèåîýå þ ðòôåäåíåïêê þåìæðôâ, ïå ð÷óÿâæåíûïð äðíãïý ÷ýæû àêõíâîê, ïð îðúèæ ÷ýæû òôðêÿþðíûïýîê þýôâãåïêóîê, ìðæðôýå õïðþâ äâáæ õìâíóôý êíê þåìæðôý.

Ðõð÷åïïðõæê

  • Tela êõòðíûÿèåæ äôèúðë õêïæâìõêõ äíó òðõæôðåïêó þåìæðôðþ, ìðæðôýë ïâòðîêïâåæ Scheme êíê Smalltalk: Þåìæðô ðìôèãâåæõó ìôèúíýîê õìð÷ìâîê, òôåäþâôóåîýå ÿïâìðî ôåùЈæìê, ïâòôêîåô: gross = #(1.49, 4.98, ..., 0.96).
  • Tela êõòðíûÿèåæ äôèúðë õêïæâìõêõ äíó êïäåìõêôðþâïêó ìðîòðïåïæðþ þåìæðôâ, ìðæðôýë ïâòðîêïâåæ Pascal. Êïäåìõ ÿâìíáàâåæõó þ ìþâäôâæïýå õìð÷ìê; ïâòôêîåô: gross[2]. Òôåäèòôåãäåïêå äíó òôðúôâîîêõæðþ ïâ Õê: éðæó ìþâäôâæïýå õìð÷ìê þýúíóäóæ ìâì þ Õê, ïêãïêë êïäåìõ þõåúäâ 1.

Þ õíåäèáüåî îåõóçå

  • Îâæôêçý
  • Öèïìçêê, ðòôåäåíЈïïýå òðíûÿðþâæåíåî
  • Ðòåôâçêê èòôâþíåïêó òðæðìâîê
  • Þþðä ê þýþðä

Christoph Spiel

Chris èòôâþíóåæ ìðïõâíæêïúðþðë ìðîòâïêåë òð ðæìôýæðîè òôðúôâîîïðîè ð÷åõòåàåïêá þ þåôéïåë ×âþâôêê, Úåôîâïêó. Òð õþðåë õòåçêâíûïðõæê - öêÿêìå -- è ïåúð åõæû äðìæðôõìâó õæåòåïû ðæ Munich University of Technology -- åúð ðõïðþïýå êïæåôåõý íåãâæ þ ð÷íâõæê æåðôêê àêõåí, úåæåôðúåïïýé òôðúôâîîïýé õôåä ê òôðúôâîîïðúð êïãêïêôêïúâ. Õ ïêî îðãïð õþóÿâæûõó òð âäôåõè cspiel@hammersmith-consulting.com.

Copyright ї 2001, Allan Peda.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 69 of Linux Gazette, August 2001


http://subscribe.ru/
E-mail: ask@subscribe.ru
ïÔÐÉÓÁÔØÓÑ
õÂÒÁÔØ ÒÅËÌÁÍÕ
òÅÊÔÉÎÇÕÅÔÓÑ SpyLog

÷ ÉÚÂÒÁÎÎÏÅ