home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / math / solution.lzh / READ.ME < prev    next >
Text File  |  1992-12-15  |  66KB  |  1,890 lines

  1. ************************************
  2. *    PLEASE READ THIS CAREFULLY    *
  3. ************************************
  4.  
  5. *********** L I C E N S E   A G R E E M E N T ******************** 
  6. You may freely and give this demo version to anyone, but you must 
  7. always copy ALL the files provided with the demo.  The Demo files 
  8. may NOT be modified in any way whatsoever.  The demo version of 
  9. Solutions may be copied onto a BBS without Elan Software's 
  10. permission.
  11.  
  12.  This program and all accompanying data are the sole proprety  of
  13. Elan Software, Copyright 1992, all rights reserved.
  14.  
  15. *********** L I M I T E D   W A R R A N T Y ******************** 
  16. Because of the way the demo version of the program is distributed,
  17. Elan Software may not offer any warranty whatsoever.
  18. You use this demonstration version of Solutions at your own risk. 
  19. Elan Software specifically disclaims all warranties express or 
  20. implied, including, but not limited to, any implied warranty  of
  21. merchantability or fitness for a particular purpose.
  22. *****************************************************************
  23.  
  24. LIMITATIONS OF THE DEMO VERSION:
  25. - GDOS cannot be bundled with the version demo, so unless you
  26.   have GDOS yourself, you will have some strange characters appearing
  27.   on screen.
  28. - Loading, saving and printing are disabled.
  29. - The software will only plot the equation 'SIN(X)-COS(1.3*X)'  
  30. despite the equation you enter.
  31. - The demo version does not allow any object of more than 9 nodes. 
  32. Of course, is no such limit in the original version.  Any such
  33. object will be rejected and the message "ERROR: Too complex for
  34. demo version" will appear.
  35.  
  36. Before using the Solutions demo, it is necessary to install it
  37. using the installation program (INSTALL.PRG).
  38.  
  39. - Solutions' installation may be done from any drive.
  40. - You may install Solutions on diskette by installing on B: when
  41. asked for paths and file names.  In that case, use a double-sided
  42. pre-formatted diskette and, on single drive systems, always swap
  43. your destination and source diskettes when the system asks "Please
  44. insert disk ? into Drive B:". - The installation itself will not
  45. begin until you answer "Yes" to the dialog box "Are you ready to
  46. begin installation?" showing all the settings you have made.  If
  47. anything is wrong, answer "No" and run "INSTALL.PRG" again.
  48.  
  49. Before using Solutions, you must reboot, so that GDOS and the
  50. Solutions fonts are correctly installed.
  51.  
  52.  
  53. Thank you for trying Solutions!
  54.  
  55. To order or for any additionnal information:
  56. Elan Software
  57. 550 Charest Est
  58. P.O. Box 30232
  59. Quebec, G1K 8Y2
  60. Canada
  61. Voice: (418) 692-0565
  62. Fax:   (418) 683-9189
  63.  
  64. GEnie:      P.DUBE
  65. CompuServe: 70471,3676
  66.  
  67. December 1, 1992
  68.  
  69. Solutions est aussi disponible en français.
  70.  
  71. **************************** T U T O R I A L **********************
  72.  
  73. **********************************************
  74. *** NOTE: SYMBOL CONVENTION IN ASCII FILES ***
  75. **********************************************
  76.  
  77. Solutions uses some special characters that cannot be reproduced in
  78. normal ascii text.  Those caracters are represented in this text in
  79. this way:  (*symbol*).  For example (*integral*) means the
  80. integration symbol.  The special caracters are all represented and
  81. accessible in the "Special Keys" item under the "Help" menu.  The
  82. right arrow symbol is represented as -> in this text but takes only
  83. one character within solutions.  The same thing is true for <=, >=.
  84.  
  85.  
  86. Chapter 1
  87. ---------
  88.  
  89.  
  90. Introduction
  91. ------------
  92.  
  93.  
  94. This text is intended to teach you how to use the software more
  95. efficiently and be able to concentrate more on your mathematical
  96. problems than on software problems.  There are important notions
  97. you should read in the following pages, followed by explanations by
  98. the editor, different modes (display mode, multi-line, angle mode,
  99. etc.), recovery commands, memory library, loading and saving to
  100. disk, printing.  The following sections explain in detail the
  101. particularities of every object type and family of functions. 
  102.  
  103.  
  104. Solutions is designed with a user friendly interface and has many
  105. functions to solve mathematical, engineering and computer science
  106. problems.  And you are not limited to working with numbers,
  107. problems can be formulated symbolically, and equations can be
  108. manipulated directly and converted into numerical results later if
  109. desired.
  110.  
  111. Solutions will assist you in the following areas:
  112.  
  113.      ∙  Algebraic computation: simplification, manipulation and
  114. expansion of expressions are just a few clicks away.
  115.  
  116.      ∙  Calculus: Solutions features numerical integration as well
  117. as fully algebraic differentiation.
  118.  
  119.      ∙  Graphics: you can plot algebraic expressions and
  120. statistical data.
  121.  
  122.      ∙  Statistics: you can handle single-variable and multi-
  123. variable statistics, and instantly obtain the mean, standard
  124. deviation, etc.
  125.  
  126.      ∙  Integer and bit manipulations: you can execute many
  127. functions with binary integer numbers, from base conversion to bit
  128. manipulation.  These numbers can have up to 64 bits.
  129.  
  130.      ∙  Unit conversions: you can convert from one unit to another
  131. amongst the 120 built-in units.  If that is not enough, you can
  132. define your own units.
  133.  
  134.  
  135. Since the documentation focuses on the use of Solutions, it assumes
  136. that you are already familiar with mathematics.
  137. Chapter 2
  138.  
  139.  
  140.  
  141. Using Solutions
  142. ---------------
  143.  
  144.  
  145. 2.1. Installation
  146. -----------------
  147.  
  148. Please read the instructions at the beginning of this file.
  149.  
  150.  
  151.  
  152. 2.2. Concepts used in Solutions
  153. -------------------------------
  154.  
  155. Solutions is a mathematical package that will assist you in solving
  156. a wide range of mathematical, engineering and computer science
  157. problems.  It is intended to be easy to use and provides you with
  158. many helpful functions.
  159.  
  160. The way it works is very uniform, efficient and versatile.
  161.  
  162. If you are not familiar with the concepts used in Solutions, we
  163. suggest that you carefully read this chapter in order to make
  164. efficient use of the software.  You are provided with 11 object
  165. types for your calculation needs, as follows:
  166.  
  167. ∙  Real numbers: range from -9.999999999999E4899 to
  168. 9.999999999999E4899, the lowest representable numbers being +/-
  169. 1E-4899.
  170.  
  171. ∙  Complex numbers: both the real and imaginary parts each have the
  172. same range as real numbers.
  173.  
  174. ∙  Strings: characters strings of arbitrary length.
  175.  
  176. ∙  Vectors: unidimensional arrays containing real and/or complex
  177. numbers.
  178.  
  179. ∙  Matrices: bidimensional arrays containing real and/or complex
  180. numbers.
  181.  
  182. ∙  Binary integers: integer numbers up to 64 bits long.
  183.  
  184. ∙  Lists: data structures of arbitrary length containing objects of
  185. any type.
  186.  
  187. ∙  Names: used to identify variables in the mathematical sense of
  188. the word.
  189.  
  190. ∙  Algebraics: equations containing names and operators (e.g. 'X^2
  191. + SIN(Y)' )
  192.  
  193. ∙  Programs: contain a series of instructions to be executed
  194. sequentially.  The flow of control can be altered by special
  195. functions (IF...THEN...ELSE, DO...UNTIL, WHILE...REPEAT,
  196. FOR...NEXT).
  197.  
  198. ∙  Operations: this object type performs all the work you want to
  199. do.  They are the base of the kernel.  There are more than 240
  200. functions, each one capable of accomplishing many different tasks.
  201.  
  202.  
  203.  
  204. Because Solutions not only works with simple numbers, but with many
  205. different types of data, we have introduced the concept of object. 
  206. An object is a piece of information with which you intend to work. 
  207. There are 11 different types of objects which you can work with. 
  208. These objects can be combined in various ways by applying operators
  209. to them in order to obtain new objects.  To correctly harness the
  210. power of objects, Solutions makes use of a STACK.  Every object is
  211. manipulated on the stack.  Functions always take their arguments
  212. from the stack and return their results to it.  The stack has
  213. arbitrary depth, and it can hold intermediate results for use in
  214. further calculations.  Remember that pressing Esc will always
  215. cancel the current system operation.
  216.  
  217. Solutions uses a simple technique, called RPN (Reverse Polish
  218. Notation), to combine all these functions and facilities.  When you
  219. work in RPN, function arguments must precede the function.
  220.  
  221. For example, if you want to add 1 and 2, in RPN you would enter 1,
  222. 2, +.
  223.  
  224.      This notation was chosen for several reasons.  First of all,
  225. with RPN, you will be able to keep intermediate results on the
  226. stack.  Secondly, when using RPN, there is no need for parentheses. 
  227. Finally, the technique is consistent through the use of all
  228. functions (which is not what you see on most handheld calculators:
  229. e.g. arithmetic operations are used in true algebraic notation, and
  230. trigonometric functions used in RPN).  With a little practice, it
  231. will become easy and natural.  If you prefer, you may also enter
  232. your equations in true algebraic notation by typing a quote (')
  233. before the equation and evaluating it (EVAL) by pressing CTRL-H.
  234.  
  235. The following example illustrates the use of RPN:
  236.  
  237. Suppose you want to calculate  3+LOG(100)
  238.  
  239.  
  240.  
  241. Type  3  and  ENTER.
  242.  
  243. Type 100  and  ENTER.
  244.  
  245. The stack will look like this:
  246.  
  247.  
  248.  
  249.   ______________________________
  250.   |           Stack            |
  251.   |           (2 pi)           |
  252.   |4:                          |
  253.   |3:                          |
  254.   |2:                         3|
  255.   |1:                       100|
  256.   ------------------------------
  257.  
  258.  
  259. Now type  LOG and ENTER.
  260.  
  261. The stack will look like this:
  262.  
  263.   ______________________________
  264.   |           Stack            |
  265.   |           (2 pi)           |
  266.   |4:                          |
  267.   |3:                          |
  268.   |2:                         3|
  269.   |1:                         2|
  270.   ------------------------------
  271.  
  272.  
  273. Finally press  +.
  274.  
  275. The final result (5) will appear on the first level of the stack:
  276.  
  277.   ______________________________
  278.   |           Stack            |
  279.   |           (2 pi)           |
  280.   |4:                          |
  281.   |3:                          |
  282.   |2:                          |
  283.   |1:                         5|
  284.   ------------------------------
  285.  
  286.  
  287. All functions take their arguments from the stack (they remove the
  288. objects from the stack) and return the result to the stack.  
  289.  
  290.  
  291. The tools palette contains functions associated with the currently
  292. selected entry in the class menu.  If you select a function from
  293. the tools palette, and the command editor is not empty, the
  294. function name will either be inserted in the command editor buffer,
  295. or normally executed after the execution of the content of the
  296. command editor buffer (depending on the current entry mode).  To
  297. see the tool palette select "Show Tools Menu" in the "Options"
  298. menu.  For more information, refer to the next section: "Editor".
  299.  
  300.  
  301.  
  302. 2.3. Editor
  303. -----------
  304.  
  305. This section explains how to work efficiently with the editor.  You
  306. will learn what the editor and its numerous related functions can
  307. do.
  308.  
  309. All the data for your calculations must be entered via the
  310. keyboard.  This information first goes through the command editor. 
  311. When you are finished editing, press "Enter" (or "Return"), and the
  312. command editor buffer will be analyzed.  If an error is found
  313. during the analysis, a dialog box appears displaying which error
  314. has been detected.  The cursor is then set at the point where the
  315. error is located.
  316.  
  317. You insert a new line in the editor by pressing Control-Return.
  318.  
  319.  
  320.  
  321. 2.3.1. Entry modes
  322. ------------------
  323.  
  324. There are 3 different entry modes: numeric, text and algebraic. 
  325. The current mode is displayed on the move bar of the editor window.
  326.  
  327. Numeric mode is used to enter simple data.  If you select a command
  328. or a function in the menu, the command editor buffer is analyzed
  329. and executed (if no errors occur), just as if you had pressed
  330. "Enter" before selecting the menu item.
  331.  
  332. Text mode is used for free editing of any object.  In text mode,
  333. the only way to enter data into the stack is to press "Enter".  If
  334. you select a function or command, the name is inserted into the
  335. command editor.  When "  or « is pressed, text mode is
  336. automatically set (unless another mode is already locked in).
  337.  
  338. Algebraic mode is used to enter algebraic equations.  The
  339. particularity of this mode is that when you select a function, its
  340. name is inserted into the command editor buffer with a parenthesis
  341. following it, so that the function's arguments can be entered
  342. immediately.  If the entry mode is not locked, pressing ' allows
  343. entry into and out of algebraic entry mode.  The entry mode can be
  344. changed by pressing "Tab".  It then changes from numeric to text to
  345. algebraic and finally back to numeric.
  346.  
  347. If you press Control-X (or click on the corresponding item in the
  348. menu) while editing, a minus sign will be added to the object you
  349. just entered.  If you press Control-X again, it will toggle to a +. 
  350. If you press Control-X while not editing, the NEG function is
  351. applied to the selected object (default is level 1).
  352.  
  353.  
  354.  
  355. Locking an entry mode
  356. ---------------------
  357.  
  358. When you finish editing your data and enter it on the stack, the
  359. entry mode is automatically reset to numeric mode, unless another
  360. entry mode is locked in.  You may lock in an entry mode by pressing
  361. "Control" before selecting the mode.  The indication "[Locked]"
  362. will then appear in the menu, telling you that this entry mode is
  363. set and will not be reset to numeric after editing.  Even pressing
  364. keys like '  or " will not change the entry mode.  You may unlock
  365. the entry mode by selecting another entry mode or by pressing
  366. "Tab".  If you press "Control" to unlock an entry mode, this new
  367. entry mode will be locked in.  The entry lock mode is also
  368. controlled by flag 17.
  369.  
  370.  
  371.  
  372. Insert mode
  373. -----------
  374.  
  375. When editing, you may insert instead of overwriting by pressing the
  376. "Insert" key.  It toggles between the overwrite and insert modes. 
  377. The insert mode is controlled by flag 16.  The replace mode is the
  378. default.
  379.  
  380. Of course, using the arrow keys will move the cursor accordingly in
  381. the direction of the arrow.
  382.  
  383.  
  384.  
  385. Being efficient at entering data
  386. --------------------------------
  387.  
  388. In this section, we will give you some tips to help you enter data
  389. more efficiently by using less keystrokes and mouse operations. 
  390. Let's see, for example, how you can save keystrokes when computing 
  391. 3+4.  The long and slow way would be to type: 3, [Enter], 4,
  392. [Enter], +.  A more efficient way would be to type: 3 [space] 4  +. 
  393. In this last example, if the entry mode was numeric, the last
  394. character (+) would not be entered into the command editor but
  395. directly executed.  You can almost always replace the space
  396. delimiter with a comma (unless the radix character is the comma, in
  397. which case you would use a period).  Comma (or period) and space
  398. are the two valid separators.  They can be used in the editor to
  399. enter several objects at a time.
  400.  
  401. Another way to save keystrokes is to use the tools palette
  402. containing functions.  You simply select a function from the menu
  403. and this function is either executed or inserted into the command
  404. editor buffer (depending on the entry mode).  You make the tools
  405. palette appear by selecting "Show Tools Menu" under Options (or by
  406. pressing Control-O).
  407.  
  408. If you are only editing single objects, you don't have to type its
  409. ending delimiter ( ], ), ", ', } or »).  For example, if you want
  410. to enter the vector [ 1 2 3 ], you would type [ 1 2 3 without the
  411. ending ].  But if you want to enter the vector [ 1 2 3 ] and the
  412. name xyz on the same line, you would have to type  [ 1 2 3 ]  xyz
  413. and not [ 1 2 3 xyz, because otherwise xyz would be considered as
  414. a vector element and an error would occur.
  415.  
  416.  
  417.  
  418. Name restrictions
  419. -----------------
  420.  
  421. You cannot use any variable name for object storage.  There are a
  422. few names you should avoid in order not to make any errors.  All
  423. Solutions' functions (in uppercase) cannot be used as variable
  424. names.  You must also avoid the built-in names i, e and (*Pi*).
  425.  
  426. There are also some variable names that are used for specific
  427. functions, for example EQ for plotting and solving.  As for PPAR,
  428. (*SIGMA*)DAT, (*SIGMA*)PAR, you can use them, but is not
  429. recommended.  You should leave them to their specific Solutions'
  430. uses.
  431.  
  432. 2.3.2. Editing, Visiting
  433. ------------------------
  434.  
  435. You can edit the object in level 1 by selecting Edit Object in the
  436. menu or just pressing Control-E.  You can then edit the object any
  437. way you want.  If you press ESC or delete all characters from the
  438. editor buffer, editing is cancelled.  Press Enter to confirm and
  439. enter your modifications.
  440.  
  441.  
  442. If you want to edit the contents of an object stored in user
  443. memory, you just have to select Visit Variable or press Control-F
  444. while the object name is on the stack.  This operation is called
  445. visiting.  It is equivalent to 'name' RCL followed by editing and
  446. 'name' STO.  If you press ESC or delete all characters from the
  447. editor buffer, editing is cancelled.  Press Enter to confirm and
  448. enter your modifications.
  449.  
  450.  
  451.  
  452. 2.4. Evaluation
  453. ---------------
  454.  
  455. Evaluation plays a major part in Solutions since it occurs almost
  456. all the time, usually automatically.  For example when you enter
  457. the name of a variable without entering the name delimiter ('), it
  458. is automatically evaluated.  When you click on a variable name with
  459. the mouse in your tools palette, the variable name is entered on
  460. the stack and is evaluated.  Some functions will evaluate arguments
  461. before using them (PUT, PUTI, GET, GETI, ->ARRAY, ROOT, and
  462. (*integrate*)).
  463.  
  464. There are two functions that can be used to "manually" evaluate an
  465. object: EVAL and ->NUM.
  466.  
  467.  
  468.  
  469. 2.5. Some modes
  470.  
  471. The Modes class contains several functions that involve the various
  472. operational modes found in Solutions.  The functions in the Modes
  473. class deal with number representation modes, recovery modes, the
  474. radix mode, and the multi-line display mode.
  475.  
  476.  
  477.  
  478. 2.5.1. Number display
  479.  
  480. The number representation modes only affect the way numbers are
  481. shown on the stack and have no impact on the precision of
  482. computations.  You can change modes by using the STD, FIX, SCI and
  483. ENG commands. 
  484.  
  485. The standard mode displays all significant digits skipping the
  486. ending zeros.
  487.  
  488. The fix mode displays numbers to a fixed number of digits, padding
  489. with zeros at the end of the number if necessary.
  490.  
  491. The scientific mode displays numbers with a fixed length mantissa
  492. and an exponent preceded by an 'E'.
  493.  
  494. The engineering mode displays numbers with a fixed length mantissa
  495. and an exponent preceded by an 'E'.  The exponent is a factor of 3.
  496.  
  497. These four modes have an adjustable number of digits, i.e. you can
  498. force Solutions to display less digits than the maximum.
  499.  
  500.  
  501.  
  502. 2.5.2. Multi-line display
  503. -------------------------
  504.  
  505. This mode determines if objects on the stack are displayed on more
  506. than one line, when appropriate.  This mode is controlled by flag
  507. 45.  It can also be modified using the ML command, which you will
  508. find in the Modes class.
  509.  
  510.  
  511.  
  512. 2.5.3. Angle mode
  513. -----------------
  514.  
  515. This mode determines how computations involving angular
  516. considerations will be done: in degrees or radians.  This mode is
  517. controlled by flag 60.  It can also be changed by the DEG and RAD
  518. functions.
  519.  
  520.  
  521.  
  522. 2.5.4. Radix mark
  523. -----------------
  524.  
  525. The radix mark indicates how the decimal point is displayed: it can
  526. be a period or a comma.  This mode is controlled by flag 48.  It
  527. can also be changed by the RADIX, command; you will find this
  528. command in the Modes class.  When the radix mark is a comma, the
  529. objects delimiter is a period, and vice versa.
  530.  
  531.  
  532.  
  533. 2.5.5. System flags
  534. ------------------
  535.  
  536. There are two kind of flags: system flags and user flags.  There
  537. are 64 flags of each type.  The 64 user flags can be freely used by
  538. the user (you).  The 64 system flags are dedicated to various
  539. predefined system settings.  You can change the state of any of
  540. these flags, although, special care should be taken when using
  541. system flags to avoid unexpected results.
  542.  
  543. The system flags are frequently updated without your knowledge. 
  544. For example, when you change the binary integer base
  545. (DEC/BIN/OCT/HEX) or the number format (STD/FIX/SCI/ENG), the
  546. corresponding flags are automatically updated.  You could also
  547. change the same flags directly with functions CSF and SSF to
  548. achieve the same result.
  549.  
  550.  
  551. 2.6. Recovery commands
  552. ----------------------
  553. Some special commands automatically make a copy of the stack before
  554. the execution of a function, or the arguments of the last function
  555. executed.
  556.  
  557. The UNDO command allows you to recall the stack state as it was
  558. before execution of the last function or program.  When UNDO is
  559. executed, after execution of a user program, the stack state is
  560. restored to what it was before the execution of the program.  The
  561. UNDO mode is controlled by flag 29.
  562.  
  563. The "Last Arguments" command allows you to recall the arguments of
  564. the last function executed.  This command allows you to recall the
  565. arguments of the last function that was executed before the
  566. execution of the user program.  The "Last Arguments" mode is
  567. controlled by flag 31.
  568.  
  569.  
  570. 2.7. Memory library
  571. -------------------
  572.  
  573. Functions found in the Memory class deal with the management of
  574. user memory.  User memory is a region of memory that is reserved
  575. for the user.  The user can save objects in this memory for future
  576. use.  Objects stored in user memory can be recalled or, in the case
  577. of programs, executed with a simple mouse selection.  User memory
  578. is organized in a manner very similar to the organization of a disk
  579. directory.
  580.  
  581. You can save (STO) objects in a directory, and even create
  582. subdirectories (CRDIR).  Access to saved objects works on the
  583. current directory and up; this means that if Solutions searches for
  584. a certain name, it first checks if it can be found in the current
  585. directory; if it is not found, the search proceeds upwards through
  586. the directories, until the HOME directory is reached or the name is
  587. found.  
  588.  
  589. To move into a subdirectory, you just have to click on the
  590. corresponding name in the tools palette.  Alternatively you may
  591. type the directory name and press "Enter".  Directory names are
  592. shown with a down-arrow at their left.  To go to the HOME directory
  593. (root), just type or click on HOME; to go to the parent directory,
  594. just type or click on UP.
  595.  
  596. RCL is used to recall an object associated with a name and PURGE is
  597. used to delete it from user memory.
  598.  
  599.  
  600. 2.8. Load and Save
  601. ------------------
  602.  
  603.  ** NOT AVAILABLE IN DEMO VERSION **
  604.  
  605. You may store all computed result on disk and recall them later. 
  606. This is easily accomplished with items Load... and Save... in the
  607. File menu, but can also be done with functions LOAD and SAVE.  You
  608. do not need to specify the type when loading.
  609.  
  610. At startup, Solutions tries to load "SOLUTION.CFG", located in the
  611. same directory as the program, as the default configuration.  See
  612. also section 2.8.7.
  613.  
  614. 2.8.1. Objects
  615. --------------
  616.  
  617. You can store single objects on disk with the Save... command from
  618. the File menu.  The object is taken from level one of the stack.
  619.  
  620.  
  621.  
  622. 2.8.2 Variable
  623. --------------
  624. You can store a single variable from the memory library to disk by
  625. pushing its name on the stack, selecting Save... from the File menu
  626. and choosing the variable button in the dialog box.
  627.  
  628.  
  629.  
  630. 2.8.3 Stack
  631. -----------
  632. You can store the contents of the stack to disk by selecting
  633. Save... from the File menu and choosing Stack from the dialog box.
  634.  
  635.  
  636.  
  637. 2.8.4. System flags
  638. -------------------
  639. You can store all the system flags on disk by selecting Save...
  640. from the File menu and choosing Flags from the dialog box.  You
  641. cannot directly save user flags.  However, you can do 1  RCLUF  2 
  642. nLIST  "filename"  SAVE  to save user flags and do "filename"  LOAD 
  643. STOUF  to recall saved user flags.
  644.  
  645.  
  646.  
  647. 2.8.5. User library
  648. -------------------
  649.  
  650. You can store all objects in user memory along with their
  651. associated names on disk by selecting Save... from the File menu
  652. and choosing Library from the dialog box.
  653.  
  654.  
  655.  
  656. 2.8.6. Graphic coordinates
  657. --------------------------
  658.  
  659. The graphic coordinates option enables you to export the values of
  660. a function in a text file.  These values are comma delimited and
  661. may easily be imported in most spreadsheet and graphic software.
  662.  
  663.  
  664.  
  665. 2.8.7. Configuration
  666. --------------------
  667.  
  668. You can store Solutions' configuration by selecting Save... from
  669. the File menu and choosing Configuration from the dialog box.  The
  670. configuration includes the location of every window, their size and
  671. so on; in fact it includes a lot of  system variables that are not
  672. directly accessible to the user.  User flags are also  saved with
  673. the configuration.
  674.  
  675.  
  676.  
  677. 2.8.8. Context
  678. --------------
  679.  
  680. You can store the Solutions context by selecting Save... from the
  681. File menu and choosing Context from the dialog box.  The context is
  682. a combination of all objects on the stack, system flags, user
  683. memory, and the configuration.  Therefore loading a context will
  684. return you to the exact state Solutions was in before saving the
  685. context.
  686.  
  687.  
  688.  
  689. 2.9. Printing
  690. -------------
  691.  
  692. ** NOT AVAILABLE IN DEMO VERSION **
  693.  
  694. The functions found in the Print class are used to output graphics
  695. or stack objects to the printer.  Graphics are sent to the printer
  696. via the GDOS software interface.  GDOS is bundled with Solutions
  697. and should be installed following the instructions at the beginning
  698. of this file.  Any other type of output to the printer is done in
  699. plain ASCII without any special control or formating codes.  You
  700. are free to set up your printer the way you like (NLQ mode,
  701. condensed mode, etc.).  You should make sure your printer is in a
  702. mode where it recognizes the extended ASCII IBM character set or
  703. some printouts will look strange.
  704.  
  705.  
  706.  
  707. 2.9.1. A single stack level
  708. ---------------------------
  709. You may print stack level 1 with function PR1.  The object is
  710. printed in multi-line format, when possible.
  711.  
  712.  
  713.  
  714. 2.9.2. Stack
  715. ------------
  716.  
  717. The PRSTACK function is used to print every stack level.  Multi-
  718. line format is used, when possible.
  719.  
  720.  
  721.  
  722. 2.9.3. Objects in memory library
  723. --------------------------------
  724. The PRUSR function is used to print all variables in the current
  725. directory and their content.  If the current directory holds no
  726. user variables, the message No User Variables is printed.
  727.  
  728.  
  729.  
  730. 2.9.4. Object names in memory library
  731. -------------------------------------
  732.  
  733. The PRVAR function is used to print all variables in the current
  734. directory.
  735.  
  736.  
  737.  
  738. 2.9.5. Graphic
  739. --------------
  740.  
  741. The PRGRAPH function is used to print the graphic appearing in the
  742. current graphic window.
  743.  
  744.  
  745.  
  746. 2.10. Unit conversions
  747. ----------------------
  748.  
  749. Solutions allows you to convert from any unit into another unit
  750. from the 120 predefined units or their combinations.  CONVERT is
  751. the function that computes the conversion.
  752.  
  753. Each one of the 120 predefined units is expressed in terms of SI
  754. units (International System of Units).  You may use units as you
  755. find them in the Units catalog, or use a combination of units to
  756. make a new unit, taking care to have consistent units.  For
  757. example, you can convert 'm' (meters) into 'ft' (feet) but not into
  758. 's' (seconds).  You can build units by using operators *, / and  ^. 
  759. Only one / symbol is allowed.  The delimiters ', space and
  760. parentheses are ignored. So, you could, for example, convert 'kph'
  761. (kilometers per hour) into 'in/s' (inches per second).  You may
  762. also use a prefix preceding the unit which represents a
  763. multiplicative power of 10.
  764.  
  765. CONVERT computes a multiplicative factor for the two units given in
  766. argument.  The operand is multiplied by this result and returned to
  767. the stack.
  768.  
  769. Temperatures also involve additive constants.  However, if any unit
  770. includes a prefix, an exponent or any other unit that is not a
  771. temperature unit, a relative conversion is done.
  772.  
  773. You may use user-defined units, that will act as built-in unit
  774. types.  The new unit type has to be stored in user memory and be
  775. accessible for use with CONVERT.
  776.  
  777. For example, if you want to define a new unit called 'week',
  778. execute
  779.  
  780. { 7  "d" }  'week'  STO
  781.  
  782. You may now use 'week' in your future conversions.
  783.  
  784. You may also want to define dimensionless units or units that are
  785. not expressible in SI units.  You just have to use "?" for unit.
  786.  
  787. For example to convert between bytes and kilobytes define:
  788.  
  789. { 1 "?" } 'byte' STO
  790.  
  791. {1024 "?" } 'Kbyte' STO
  792.  
  793. You may now convert between the two units.
  794.  
  795. Check section 2.11.2 for a list of all the available units
  796.  
  797.  
  798. 2.11. Catalogs
  799. --------------
  800.  
  801. There are two useful catalogs that can be used for looking up a
  802. function's arguments or a certain conversion unit.
  803.  
  804.  
  805.  
  806. 2.11.1. Functions catalog
  807. -------------------------
  808.  
  809. You can access the catalog of all Solutions functions from the Help
  810. menu; it can also be accessed by pressing Control-J.
  811.  
  812. The small window shows all Solutions functions.  You can scroll the
  813. window up or down to view additional functions.  You can select any
  814. function and look at its possible argument types.  There may be up
  815. to three object types represented on stack levels.  The Next and
  816. Previous buttons are used to show the next and previous argument
  817. type combinations.  You can press the Help button to obtain more
  818. information on the selected function.  Pressing Fetch fetches the
  819. function name for the command editor.  Pressing the up and down
  820. arrow keys moves the function selector up or down.  Pressing a
  821. letter on the keyboard brings you to the first function beginning
  822. with that letter.
  823.  
  824.  
  825.  
  826. 2.11.2 Units catalog
  827. --------------------
  828.  
  829. You can access the built-in SI unit catalog from the Help menu; it
  830. can also be accessed by pressing Control-K.
  831.  
  832. The small window shows all SI units.  You can scroll the window up
  833. or down to view additional entries.  Each line in this catalog
  834. shows you a unit name, its symbol and its value given in SI units. 
  835. You can select a unit and fetch it for the command editor. 
  836. Pressing the up or down arrow keys moves the units selector up or
  837. down.  Pressing a letter on the keyboard brings you to the first
  838. unit beginning with that letter.
  839.  
  840.  
  841.  
  842. 2.12. Memory management
  843.  
  844. In order to maximize memory availability, it was necessary to
  845. implement a new memory manager, which is totally transparent to the
  846. user.  This manager uses memory as efficiently as possible, and
  847. warns you when you are out of memory.  The item "Memory..." in the
  848. "Help" menu displays the memory dialog box.
  849.  
  850. This is where the amount of remaining memory is displayed.  The
  851. "Garbage Collect" button can be used to force the system to perform
  852. garbage collection.  This process causes the system to optimize the
  853. available memory.  Automatic garbage collection is done by the
  854. system when a request for more memory is done.  The system may be
  855. slowed down if you have just enough memory for a demanding task;
  856. this happens because the system is continuously doing garbage
  857. collection to obtain the memory it needs.
  858.  
  859. Chapter 3
  860.  
  861.  
  862.  
  863. Functions categories and object types
  864. -------------------------------------
  865.  
  866. What follows is an explanation of each functions category and a
  867. list of the functions related to these categories.  There is one
  868. category for each submenu in the Menus menu.
  869.  
  870. Some functions appear in more than one section, so you should check
  871. all the appropriate sections to find the most pertinent information
  872. for your needs.
  873.  
  874.  
  875.  
  876. 3.1 Algebra
  877. -----------
  878.  
  879. An algebraic object is an equation that may contain one or more of
  880. the following:
  881.  
  882. ∙ Real or complex numbers.
  883.  
  884. ∙ Names (also called variables).
  885.  
  886. ∙ Functions: any function that accepts algebraic objects as input. 
  887. The function name will appear followed by one or more arguments
  888. within parentheses.
  889.  
  890. ∙ Operators: There are two kinds of operators: prefix operators
  891. such as NOT, (*square root*) and NEG (which appears as the unary -
  892. sign in algebraic objects) and infix operators such as +, -, *, /, 
  893. ^, =, ==, (*Not equal*), <, >, <=, >=, AND, OR and XOR.  Prefix
  894. operators precede their arguments, while infix operators act on the
  895. expressions leading and trailing them.
  896.  
  897.  
  898.  
  899.      Operator precedence
  900.  
  901.      The evaluation of an algebraic object proceeds in an order
  902. dictated by the relative priority (called precedence) of the
  903. operators in it.  The precedence rules are as follows:
  904.  
  905. 1.  Expressions within parentheses are always evaluated first; in
  906. the case of nested parentheses, evaluation proceeds outwards from
  907. the deepest nesting level.
  908.  
  909. 2.  Functions are evaluated once their arguments are evaluated and
  910. before the expressions they belong to can be evaluated.
  911.  
  912. 3.  Operators are evaluated according to the following precedence
  913. rules or from left to right when they have the same precedence.
  914.  
  915.  
  916.      a)   Exponentiation (^) and square root
  917.      b)   Negation (-), multiplication (*), and division (/)      
  918.     c)   Addition (+) and substraction (-)
  919.      d)   Relational operators (==, (*Not equal*), <, >, (*less or 
  920.           equal*), (*greater or equal*))
  921.      e)   AND and NOT
  922.      f)   OR and XOR
  923.      g)   =
  924.  
  925.  
  926. where a) is the highest precedence and g) the lowest.
  927.  
  928. When an equation contains the equality operator (=), the expression
  929. is divided into two subexpressions which are the arguments of the
  930. operator.  When you apply a function to such an expression, the
  931. function is applied to each subexpression.  When the expression is
  932. evaluated, the = operator is treated like a substraction (-).
  933.  
  934. Unlike certain computer languages (like BASIC), the = operator
  935. doesn't mean "replace by" as in "A = 2".  This operation is
  936. performed by the STO function.  The = operator involves two
  937. arguments, and its purpose is to equate these two arguments.  It
  938. behaves like = in mathematics.
  939.  
  940.  
  941.  
  942. Automatic simplification
  943. ------------------------
  944.  
  945. All entered data can be simplified automatically by evaluating it. 
  946. For example, if you enter  X 1 * , the result will simply be 'X'. 
  947. The same thing happens when you evaluate an algebraic object.  For
  948. example evaluation of '1*X' returns 'X'. 
  949.  
  950.  
  951. Symbolic constants: e, i, (*Pi*), MAXR and MINR
  952.  
  953. There are five predefined objects that represent often used
  954. constants.  The evaluation of these constants is affected by the
  955. state of flag 35 (Constants mode) and flag 36 (Results mode).
  956.  
  957. If flag 35 or flag 36 is clear, these objects will evaluate to
  958. their numeric values.
  959.  
  960. If flags 35 and 36 are set, these objects will retain their
  961. symbolic form when evaluated.
  962.  
  963.  
  964.  
  965. Here is the numerical value of each constant:
  966.  
  967. e: 2.718281828459045
  968.  
  969. i: (0,1)
  970.  
  971. (*Pi*): 3.141592653589793
  972.  
  973. MAXR: 9.999999999999999E4899  (maximum real number)
  974.  
  975. MINR: 1.E-4899  (minimum real number)
  976.  
  977.  
  978.  
  979. The algebra menu has functions to perform simplifications,
  980. expansions and various reorganizations of algebric expressions
  981. without affecting their value.
  982.  
  983. The functions found in the Algebra class are: COLLECT, EXPAND,
  984. SIZE, FORM, OBSUB, EXSUB, TAYLOR, ISOL, OBGET, EXGET and SDIFF.
  985.  
  986.  
  987.  
  988. 3.2. Arithmetic
  989. ---------------
  990.  
  991. The usual arithmetic functions are available.  They are: +, -, *, 
  992. /,  ^, INV, (*Square root*), SQ and NEG.  For more informations
  993. about these functions you should consult the dictionary (Chapter
  994. 4).
  995.  
  996.  
  997.  
  998. 3.3. Array
  999. ----------
  1000.  
  1001. An array is composed of real or complex numbers.  Arrays can have
  1002. one or two dimensions.  One-dimensional arrays are called vectors;
  1003. two-dimensionnal arrays are called matrices.
  1004.  
  1005.  
  1006.  
  1007. Example of a 6 element vector:
  1008.  
  1009. [ 1 2 3 4 5 6 ]
  1010.  
  1011.  
  1012.  
  1013. Example of a 2 row by 3 column matrix:
  1014.  
  1015. [[ 1 2 3 ]
  1016.  [ 4 5 6 ]]
  1017.  
  1018.  
  1019.  
  1020. Entering arrays with the command editor
  1021.  
  1022. To enter a vector, first type [ followed by the vector elements
  1023. separated by blank spaces.  A vector must always contain at least
  1024. one element. The elements may be real or complex.  If you want to
  1025. enter a single vector at this point, the ending ] is optional and
  1026. will be added automatically.  But if you start entering another
  1027. object without typing ] at the end of your vector, the following
  1028. objects will be treated as vector elements and an error is likely
  1029. to occur.  A matrix is entered as a series of vectors, one per row,
  1030. separated by [ symbols.
  1031.  
  1032. Ex.: [[2 3 [4 5  will become  
  1033.  
  1034. [[ 2  3 ]
  1035.  [ 4  5 ]]
  1036.  
  1037. Some functions require the array dimensions.  Array dimensions are
  1038. given as a list of real numbers; the first number is the number of
  1039. rows and the second number is the number of elements per row.  In
  1040. the case of a vector, only one number, specifying the number of
  1041. elements, is used.
  1042.  
  1043. The array functions are: ->ARRAY, ARRAY->, PUT, GET, PUTI, GETI,
  1044. SIZE, RDM, TRN, CON, IDN, CROSS, DOT, DET, ABS, RNRM, CNRM, R->C,
  1045. C->R, RE, IM, CONJ and NEG.
  1046.  
  1047.  
  1048.  
  1049. 3.4. Binary
  1050. -----------
  1051.  
  1052. Binary integers are whole unsigned numbers that are represented
  1053. internally on up to 64 bits.  Binary integers are displayed with a
  1054. # sign preceding them and end with a letter representing the
  1055. current binary mode (b, d, o or h for binary, decimal, octal and
  1056. hexadecimal respectively).  These binary bases are only four
  1057. different ways to view binary integer numbers.  Internally, their
  1058. representations do not change.  The binary representation mode or
  1059. base can be changed by using the functions BIN, DEC, OCT and HEX;
  1060. the base is also controlled by flags 43 and 44.
  1061.  
  1062. The binary wordsize indicates the number of bits used for
  1063. calculations and determines how the numbers will be displayed.  The
  1064. binary wordsize can be changed with the STWS function and is also
  1065. controlled by flags 37 to 42.
  1066.  
  1067. In binary base, only digits 0 and 1 are allowed.  In octal base,
  1068. digits 0 through 7 are allowed.  In decimal base, digits 0 through
  1069. 9 are allowed, and in hexadecimal base, digits 0 through 9 and
  1070. uppercase letters A through F are allowed.  When entering a binary
  1071. number, you first have to type # and then the number.  The number
  1072. will be entered in the current binary mode.  You can force another
  1073. binary mode by ending your number with b, d, o or h for binary,
  1074. decimal, octal or hexadecimal respectively.
  1075.  
  1076.  
  1077.  
  1078. The +, -, * and / functions can be applied to binary integer
  1079. numbers.  
  1080.  
  1081. The functions described below are useful when working with binary
  1082. integer numbers: they work with the bits that compose binary
  1083. numbers.  These functions perform rotations, translations, or do
  1084. logical operations.  They are: DEC, HEX, OCT, BIN, STWS, RCWS, RL,
  1085. RR, RLB, RRB, RnB, BnR, SL, SR, SLB, SRB, ASR, AND, OR, XOR and
  1086. NOT.
  1087.  
  1088. 3.5. Calculus
  1089. -------------
  1090.  
  1091. Calculus is an important field in mathematics.  There are two
  1092. primary and important operations in calculus: differentiation and
  1093. integration.  Essentially, differentiation is used to find the
  1094. slope of a given equation at any point, while integration is used
  1095. to compute the area under the curve of an equation, over an
  1096. interval.  Differentiation is also used for the expansion of an
  1097. expression into a Taylor series.
  1098.  
  1099. Calculus functions are: (*differentiation*), (*integration*) and
  1100. TAYLOR.
  1101.  
  1102.  
  1103.  
  1104. 3.5.1. Differentiation
  1105. ----------------------
  1106.  
  1107. Differentiation is essentially used to find an equation describing
  1108. the slope of an equation.  The equation returned by the
  1109. differentiation describes the slope at every point of the original
  1110. equation.
  1111.  
  1112. You can differentiate an equation in a single pass or do step by
  1113. step differentiation.  You execute the (*differentiation*) function
  1114. with an equation on stack level 2 and the variable of interest on
  1115. stack level 1.
  1116.  
  1117. For example if you type 'X*SIN(X)' 'X' (*differentiation*), the
  1118. returned expression will be 'X*COS(X)+SIN(X)', but if you type
  1119. '(*differentiation*)X(X*SIN(X))' and repeatedly evaluate (EVAL)
  1120. this expression, the result will be calculated step by step.
  1121.  
  1122. This can be useful when you want to see every intermediate result
  1123. of the differentiation.  Before differentiating, the function
  1124. always does an expression substitution, that is if a name is the
  1125. name of a stored expression, the expression is substituted for the
  1126. name in the equation.
  1127.  
  1128. When the derivative of a function or a user-defined function is not
  1129. available, partial differentiation is done, and is noted by der. 
  1130. For example, if you want to differentiate the equation '%(X,Y)'
  1131. with respect to X, you get the result 'der%(X,Y,1,0)'.  The name
  1132. following der is the function name that has been partially
  1133. differentiated, and the last two arguments are the initial two
  1134. arguments differentiated with respect to the variable name.  You
  1135. can use this feature to implement the derivative of any new
  1136. function you create and store it in your library.  For example, to
  1137. fully define the derivative of the % function, you would define the
  1138. following function:
  1139.  
  1140. «  ->  a  b  da  db  '(a*db+b*da)/100'  »  'der%'  STO
  1141.  
  1142. You may now calculate the derivative of '%(3*X,Y^2)' for 'X' which
  1143. would return 'Y^2*3/100'.
  1144.  
  1145.  
  1146.  
  1147. 3.5.2. Integration
  1148. ------------------
  1149.  
  1150. Integration plays an important role in calculus and in mathematics;
  1151. it also is involved in many engineering and physics problems.  Its
  1152. purpose is not only to compute the area under a curve, but if you
  1153. don't know about integration, you can think of it this way.  We
  1154. recommend that you read an introductory book on calculus and
  1155. integration if you want to understand it and use it correctly in
  1156. Solutions.
  1157.  
  1158. Numerical integration is possible with Solutions.  Numerical
  1159. integration is used to obtain a numerical result from a definite
  1160. integral.  This result can be represented as the area under the
  1161. curve (the equation) between two given points (a and b).  The
  1162. accuracy determines the wanted precision of the result.  The
  1163. equation can be an algebraic expression or a program.  If the
  1164. argument in level 3 is a program, it can be of two types: it can
  1165. demand arguments or not.  If the program takes many arguments, you
  1166. must explicitly name the variable of integration, and the result
  1167. should be returned on the stack.  If the program takes no argument,
  1168. it must use the given argument on the stack and return its result
  1169. to the stack.  For example these two programs will produce the same
  1170. results when numerically integrated:
  1171.  
  1172. « X SIN » in level 3 with { X 1 2 } in level 2 and .001 in level 1
  1173.  
  1174. and
  1175.  
  1176. « SIN »  in level 3 with { 1 2 } in level 2 and .001 in level 1.
  1177.  
  1178. Here is another example of how to use numerical integration:
  1179.  
  1180. 'SIN(X)' in level 3 with {X 1 2} in level 2 and .001 in level 1.
  1181.  
  1182.  
  1183. As you can see, there are different ways to numerically integrate
  1184. the equation 'SIN(X)' over the interval 1-2.  Given these arguments
  1185. on the stack, you just have to execute (*integration*).
  1186.  
  1187.  
  1188.  
  1189. 3.5.3. Taylor series
  1190. --------------------
  1191.  
  1192. The TAYLOR function is used to compute the taylor series polynomial
  1193. approximation for a function.  The approximation is computed around
  1194. point pt, or at 0 if no point is specified.
  1195.  
  1196. You should look at your results closely if flag 59 is clear
  1197. (infinite results do not generate errors) because incorrect results
  1198. may occur if the equation is not differentiable at x=pt.
  1199.  
  1200.  
  1201.  
  1202. 3.6. Complex numbers
  1203. --------------------
  1204.  
  1205. Complex numbers are made up of two real numbers enclosed in
  1206. parentheses.  Most arithmetic (+, -, *, /, INV, (*square root*),
  1207. SQ, ^), trigonometric (SIN, ASIN, COS, ACOS, TAN, ATAN), hyperbolic
  1208. (SINH, ASINH, COSH, ACOSH, TANH, ATANH) and logarithmic functions
  1209. (EXP, LN, LOG, ALOG) accept complex numbers as arguments.  The
  1210. symbolic constant  i  represents the complex number (0,1).
  1211.  
  1212. Functions found in the Complex class are: R->C, C->R, RE, IM, CONJ,
  1213. SIGN, ABS, NEG and ARG.
  1214.  
  1215.  
  1216.  
  1217. 3.7. Lists
  1218. ----------
  1219.  
  1220. Lists are collections of objects which appear on the stack
  1221. surrounded by the { and } delimiters.  Any object can be part of a
  1222. list.  There is no preset limit on the size of lists.  It can be
  1223. empty or contain many objects.
  1224.  
  1225. The indexes of arrays and lists are usually described as lists; a
  1226. one-element list describes an index within a vector or a list, and
  1227. a two-element list describes a row and column index within a
  1228. matrix.
  1229.  
  1230. Functions available in the List class are: ->LIST, LIST->, PUT,
  1231. GET, PUTI, GETI, SUB and SIZE.
  1232.  
  1233.  
  1234.  
  1235. 3.8. Logs
  1236. ---------
  1237.  
  1238. Logarithmic and hyperbolic functions can be found in the Logs
  1239. class.  These functions are: LOG, ALOG, LN, EXP, SINH, ASINH, COSH,
  1240. ACOSH, TANH and ATANH.
  1241.  
  1242.  
  1243.  
  1244. 3.9. Memory
  1245. -----------
  1246.  
  1247. This topic has already been discussed in section 2.8.  Functions
  1248. available in the Memory class are: MEM, MENU, PATH, HOME, UP,
  1249. CRDIR, VARS, PURGE and CLUSR.
  1250.  
  1251.  
  1252.  
  1253. 3.10. Modes
  1254. -----------
  1255.  
  1256. This topic has already been discussed in section 2.6.  Functions
  1257. available in the Modes class are: STD, FIX, SCI, ENG, DEG, RAD and
  1258. the commands CMD, UNDO, LAST, ML and RADIX,.
  1259.  
  1260.  
  1261.  
  1262. 3.11. Plot
  1263. ----------
  1264.  
  1265. ** DEMO VERSION: PLEASE NOTE SOLUTIONS WILL ALWAYS PLOT THE
  1266. EXPRESSION 'SIN(X) + COS(1.3*X)' REGARDLESS OF THE EQUATION YOU
  1267. ENTER
  1268.  
  1269. Items found in the Plot class will allow you to plot mathematical
  1270. expressions, or generate statistical scatter plots.  These graphics
  1271. will always appear in the graphics window.  The following steps
  1272. describe how to plot a simple graphic.
  1273.  
  1274. Suppose you want to plot the expression 'SIN(X) + COS(1.3*X)'. 
  1275. First, enter this equation on the stack, and execute STEQ.  This
  1276. stores the equation in the variable EQ.  This variable is always
  1277. used when plotting equations, so its name should be reserved for
  1278. this application.  Then you just have to execute DRAW.  You should
  1279. see the graphic window appear.
  1280.  
  1281. When the computations are terminated, you can use the cursor to
  1282. peek at the exact location of a pixel in the window.  You can
  1283. readjust the window's size to see more details or make the graphic
  1284. smaller.  The coordinates within the window are fixed, so changing
  1285. the window's size should not change the graphic's form; you will
  1286. just see the same graphic enlarged or reduced.  The window's
  1287. coordinates and some other parameters related to the current
  1288. graphic are stored in variable PPAR (plotting parameters; PPAR is
  1289. another name that should be reserved for plotting).  When DRAW is
  1290. executed, the variable PPAR is consulted for the current plot
  1291. settings, or if it is not found, a default PPAR is created.  A new
  1292. default PPAR is created each time a function involving the graphic
  1293. window is called and no PPAR has been created.  The variable PPAR
  1294. is a list containing the following 5 elements:
  1295.  
  1296. (xmin, ymin): a complex number indicating the coordinates of the
  1297. lower-left hand corner of the graphic window.  Can also be changed
  1298. with function PMIN.
  1299.  
  1300. (xmax, ymax): a complex number indicating the coordinates of the
  1301. upper-right hand corner of the graphic window.  Can also be changed
  1302. with function PMAX.
  1303.  
  1304. independent: a variable name representing the abscissa of the plot. 
  1305. Can also be changed with function INDEP.
  1306.  
  1307. resolution: a real number indicating the step between each
  1308. calculated point.  For example 2 would indicate that every 2 pixels
  1309. the exact coordinate is to be computed.  If flag 22 is set, a line
  1310. is drawn through each computed point.  Can also be changed with
  1311. function RES.
  1312.  
  1313. axes: a complex number indicating the center coordinates of the
  1314. axes.  By default, the axes are drawn at (0,0), but you can change
  1315. this with the function AXES.
  1316.  
  1317.  
  1318.  
  1319. You can also use programs to make plots.  Your program must take
  1320. one real argument on the stack and return one real number.  The
  1321. argument indicates the horizontal coordinate, and the result
  1322. represents the vertical coordinate.  The DRAW function plots the
  1323. graph from the results returned by the program.
  1324.  
  1325.  
  1326.  
  1327. You can also make statistical scatter plots.  First enter your data
  1328. points (refer to the Statistics section).  Then execute
  1329. SCL(*Sigma*) to scale the coordinates so all points will be
  1330. displayed in the graphic window.  And then execute DRAW(*sigma*) to
  1331. generate the scatter plot.
  1332.  
  1333. Functions available in the Plot class are: STEQ, RCEQ, PMIN, PMAX,
  1334. INDEP, DRAW, PPAR, RES, AXES, CENTR, *W, *H, STO(*sigma*),
  1335. RCL(*sigma*), COL(*sigma*), SCL(*sigma*), DRAW(*sigma*), CLSCR,
  1336. PIXEL, DRAX, PRGRAPH.
  1337.  
  1338.  
  1339.  
  1340. 3.12. Print
  1341. -----------
  1342.  
  1343. ** NOT AVAILABLE IN DEMO VERSION 
  1344.  
  1345. This topic has already been discussed in section 2.9.  Functions
  1346. available in the Print class are: PR1, PRVAR, PRGRAPH, PRSTACK,
  1347. PRUSR, PRMD and the command TRACE.
  1348.  
  1349.  
  1350.  
  1351. 3.13. Programming
  1352. -----------------
  1353.  
  1354. If you want to do more than simple manual execution of functions,
  1355. you can do programming.  A program is a powerful object type that
  1356. allows you to execute a serie of functions and to make decisions
  1357. allowing conditional execution and loops.  Programs are delimited
  1358. by « and » and appear as a series of structured instructions
  1359. (functions) and objects.  In fact, the contents of any editor
  1360. buffer may be preceded with « to make it a program.  All
  1361. programming structures uses the RPN form (the arguments must
  1362. precede the function).
  1363.  
  1364. The purpose of this section is to teach you how to use the
  1365. Solutions language for your needs.  In fact, programs are just
  1366. series of instructions or objects that are sequentially executed as
  1367. if they were typed directly on the keyboard, one by one.  There are
  1368. special functions that are only available within programs that
  1369. allow conditional execution and looping.  Some of them
  1370. conditionally alter the flow of execution (IF...THEN...END,
  1371. IF...THEN...ELSE...END), some define conditional loops (FOR...NEXT,
  1372. START...NEXT, DO...UNTIL...END, WHILE...REPEAT...END) and some trap
  1373. errors (IFERR...THEN...END, IFERR...THEN...ELSE...END).  These
  1374. functions or program structures are explicitely defined in the
  1375. Program Branch section below.
  1376.  
  1377. The Program Control class contains the following functions: CLSCR,
  1378. ERRN, ERRM and WAIT.
  1379.  
  1380. The Program Branch class contains the following functions: IF,
  1381. IFERR, THEN, ELSE, END, START, FOR, NEXT, STEP, IFT, IFTE, DO,
  1382. UNTIL, WHILE and REPEAT.
  1383.  
  1384. The Program Test class contains the following functions: SSF, CSF,
  1385. SFS?, SFC?, SFS?C, SFC?C, SUF, CUF, UFS?, UFC?, UFS?C, UFC?C, AND,
  1386. OR, XOR, NOT, SAME, ==, STOSF, RCLSF, STOUF, RCLUF and TYPE.
  1387.  
  1388. You can include programs within programs to postpone their
  1389. evaluation.  For example, the program  «  1  2  «  a  b  »  » 
  1390. pushes the numbers 1 and 2 on the stack, then pushes the program « 
  1391. a  b  » on the stack.  Executing EVAL would then execute the
  1392. program.  The included program can be any valid program regardless
  1393. of its complexity.
  1394.  
  1395.  
  1396.  
  1397. 3.13.1. Local variables
  1398. -----------------------
  1399.  
  1400. Until now, all variables stored in the user menu were global
  1401. variables.  Local variables are variables that only exist within
  1402. specific parts of programs and are erased when execution of the
  1403. part is finished.  Two functions can be used to create local
  1404. variables: -> and FOR.  The local variables created with the ->
  1405. function can be used at any time within the program and thus will
  1406. supersede any global variable of the same name without erasing
  1407. them.  When the program ends, the local variables are deleted. 
  1408. When searching for a variable name, Solutions always searches local
  1409. variables first (from the inner most program outwards) and then the
  1410. user library.  The following examples illustrate the use of local
  1411. variables:
  1412.  
  1413. « ->  A  B
  1414.      « 4  A  *  B  +
  1415.      »
  1416. »
  1417.  
  1418. Here, two local variables (A and B) are created when beginning the
  1419. execution of the program.  The -> function also requires that
  1420. arguments be present on the stack to initialize the local
  1421. variables.  The first stack entry is used to initialize the last
  1422. argument, and so on.
  1423.  
  1424. «  1  5  FOR  A  2  A  *  NEXT
  1425.  
  1426. »
  1427.  
  1428. Here, the variable A is local and only exists within the scope of
  1429. the FOR loop (i.e. between the FOR and its corresponding NEXT).
  1430.  
  1431.  
  1432.  
  1433. Recursion is the possibility for a program to call itself.  For
  1434. example, the factorial function can be defined recursively, where:
  1435.  
  1436.      x! = x*(x-1)!      and
  1437.      1! = 1
  1438.  
  1439. In the Solutions language, it would appear like this:
  1440.  
  1441. «  ->  X
  1442.      «
  1443.           IF   X  1  ==
  1444.           THEN  1
  1445.           ELSE   X   X  1  -  MYFACT  *
  1446.           END
  1447.      »
  1448. »
  1449. 'MYFACT'   STO
  1450.  
  1451. As you can see in this example, a recursive program contains a call
  1452. to itself.  There must be a test clause to end the recursion, or
  1453. the program will run until it runs out of memory.
  1454.  
  1455.  
  1456.  
  1457. 3.13.2. User-defined functions
  1458. ------------------------------
  1459.  
  1460. You can create user-defined functions that act like built-in
  1461. functions.  They consist of a program that takes arguments off the
  1462. stack and returns a result based on an expression in the code. 
  1463. Here's an example:
  1464.  
  1465. The program:
  1466.  
  1467. «  ->  X  Y  Z  'X + 2*Y + 3*Z'»
  1468.  
  1469. 'XYZ'  STO
  1470.  
  1471. is a user-defined function.  You could now execute the function in
  1472. the traditionnal way:
  1473.  
  1474. 1  4  9  XYZ
  1475.  
  1476. or like this:
  1477.  
  1478. 'XYZ(1,4,9)'  EVAL
  1479.  
  1480. and obtain the same result: 36.
  1481.  
  1482. 'XYZ(3,4,3*B)' EVAL  would return:
  1483.  
  1484. '11+3*(3*B)'. Using COLLECT, the expression would simplify to
  1485. '11+9*B'
  1486.  
  1487. You may define the derivative and the inverse of a user-defined
  1488. function.  Please see sections 3.5.1 and 3.15 respectively.
  1489.  
  1490.  
  1491. 3.13.3. Program branch
  1492. ----------------------
  1493.  
  1494. The Program Branch class contains the various branching and looping
  1495. constructs available for structured programming.  These structures
  1496. can be nested, i.e. there can be a conditional statement within
  1497. another one, but the entire inner conditional statement must reside
  1498. within the outer one.
  1499.  
  1500. The various conditional branching and looping structures make
  1501. decisions based on the evaluation of a test expression.  A test
  1502. expression is an expression that returns a flag.  A flag is a
  1503. number that is interpreted as "false" or "clear" when it equals 0
  1504. and as "true" or "set" when it equals 1 (or any other non zero
  1505. value).  Except for the IFT and IFTE functions, all the functions
  1506. listed in this section can only be used within programs.
  1507.  
  1508.  
  1509.  
  1510. 3.13.4. Decision structures
  1511. ---------------------------
  1512.  
  1513. There are two possible decision making structures:
  1514.  
  1515. ∙ IF  test-clause  THEN  true-clause  END
  1516.  
  1517. ∙ IF  test-clause  THEN  true-clause  ELSE  else-clause  END
  1518.  
  1519. Each clause may contain any sequence of instructions (even
  1520. nothing).  When THEN is executed, the first stack level contains
  1521. the result of the test-clause evaluation, which is used to
  1522. determine whether the program continues its execution after the
  1523. THEN (true result), or after the ELSE (false result).  If no ELSE
  1524. is present, execution continues after the END.  When executing a
  1525. true-clause, if we encounter an ELSE function, we will jump to the
  1526. corresponding END.
  1527.  
  1528.  
  1529.  
  1530. 3.13.5. Error-trapping structures
  1531. ---------------------------------
  1532.  
  1533. There are two possible error-trapping structures:
  1534.  
  1535. ∙ IFERR  trap-clause  THEN  error-clause  END
  1536.  
  1537. ∙ IFERR  trap-clause  THEN  error-clause  ELSE  normal-clause  END
  1538.  
  1539. These structures are used to detect any anomalies within the trap-
  1540. clause and immediately branch to an error-clause, or execute the
  1541. normal-clause (if any) when no error occurs.
  1542.  
  1543. For example, take a look at this program:
  1544.  
  1545. «
  1546.      IFERR  X  Y  /  5
  1547.      THEN  "Division by 0"
  1548.      ELSE  "Ok!"
  1549.      END
  1550. »
  1551.  
  1552. Assuming that flag 59 is set, if Y is equal to 0, a division by 0
  1553. occurs and the execution jumps to the error-clause (number 5 is not
  1554. pushed on the stack).  The error clause pushes the string "Division
  1555. by 0" on the stack, and ends the program.  Otherwise, 5 is pushed
  1556. on the stack, followed by the string "Ok!".
  1557.  
  1558.  
  1559.  
  1560. 3.13.6. Definite loop structures
  1561. --------------------------------
  1562.  
  1563. There are 4 possible definite loop structures:
  1564.  
  1565. ∙ start finish  START loop-clause NEXT
  1566.  
  1567. ∙ start finish  START  loop-clause  step  STEP
  1568.  
  1569. ∙ start finish  FOR  name  loop-clause  NEXT
  1570.  
  1571. ∙ start finish  FOR  name  loop-clause  step  STEP
  1572.  
  1573. These structures define loops where the loop-clause is executed a
  1574. number of times determined by start, finish and step.  FOR creates
  1575. a local variable called name, which will be active for the duration
  1576. of the loop.  The START function can be used when there is no need
  1577. to refer to a variable within the loop-clause.  step indicates the
  1578. increment to apply to the variable (explicit or implicit) before
  1579. repeating the loop or exiting the loop.  Here are some examples:
  1580.  
  1581. «
  1582.      1  4
  1583.      FOR  A  A
  1584.      NEXT
  1585. »
  1586.  
  1587. This program pushes numbers 1 through 4 on the stack.
  1588.  
  1589. «
  1590.      1  4
  1591.      FOR  A  A  2  +  .2
  1592.      STEP
  1593. »
  1594.  
  1595. This program pushes A+2 on the stack, incrementing A by .2 after
  1596. each loop.  The loop ends when A reaches 4.
  1597.  
  1598.  
  1599.  
  1600. «
  1601.      1  4
  1602.      START  SIN
  1603.      NEXT
  1604. »
  1605.  
  1606. This program executes SIN four times.
  1607.  
  1608.  
  1609.  
  1610. 3.13.7. Indefinite loop structures
  1611. ----------------------------------
  1612.  
  1613. There are 2 possible indefinite loop structures:
  1614.  
  1615. ∙ DO loop-clause UNTIL test-clause END
  1616.  
  1617. ∙ WHILE test-clause REPEAT loop-clause END
  1618.  
  1619. The first loop structure causes the loop-clause to be executed at
  1620. least once since the test-clause is at the end of the loop, and
  1621. repeats the loop-clause as long as the test-clause remains true
  1622. (non-zero).
  1623.  
  1624. The second loop structure causes the loop-clause to be repeated
  1625. until the test-clause is false (zero).  If the test-clause is false
  1626. on the first pass, the loop-clause is never executed.
  1627.  
  1628. Here are examples of these loop structures:
  1629.  
  1630. «
  1631.      { }  { 1  1 }  3  ROLL  SWAP
  1632.      DO  GETI  4  ROLL  SWAP  +  3  ROLLD
  1633.      UNTIL  46  SFS?
  1634.      END  DROP2
  1635. »
  1636.  
  1637. This program takes a matrix as an argument and returns its elements
  1638. in a list.  The condition (46 SFS?) determines when to exit the
  1639. loop as flag 46 is set when the last element has been retrieved
  1640. with the GETI command.
  1641.  
  1642.  
  1643. «
  1644.      WHILE  DUP  10  <
  1645.      REPEAT  1  +
  1646.      END
  1647. »
  1648.  
  1649. This program adds 1 to a real number as long as it has not reached
  1650. 10.
  1651.  
  1652.  
  1653.  
  1654. 3.13.8. Program Test
  1655. --------------------
  1656.  
  1657. Functions found in the Program Test class are used to test several
  1658. possible conditions.  The result of a test is a number, called a
  1659. flag.  A flag only has two possible values: true or false.  In
  1660. Solutions, zero is used for the false result, and non-zero (usually
  1661. 1) for the true result.  There are two sets of flags you can use:
  1662. the system flags and the user flags.  There are 64 of each.  The
  1663. system flags are reserved for special functions affecting the
  1664. operation of Solutions.  You can modify these flags to suit your
  1665. needs, but you should check in appendix A when using a flag
  1666. directly, so that you know exactly what you are doing.  User flags
  1667. are fully accessible to the user, and you may do what you want with
  1668. these flags.  You may copy the state of the system or user flags to
  1669. the stack using the RCLSF and RCLUF functions respectively.  The
  1670. state of the flags are given to you as a binary number.  Functions
  1671. STOSF and STOUF use a binary number to set the state of the system
  1672. or user flags respectively.
  1673.  
  1674.  
  1675.  
  1676. 3.14. Real
  1677. ----------
  1678.  
  1679. A real number is the most simple object type, since it just
  1680. consists of a number as we know it.  But there are some
  1681. restrictions to the real numbers handled by Solutions.  The domain
  1682. of real numbers is not infinite.  They range from
  1683. -9.999999999999999E4899 to 9.999999999999999E4899, and the smallest
  1684. value is +/-9.999999999999999E-4899.
  1685.  
  1686. The format of a real number is as follows:
  1687.  
  1688.      (sign) mantissa E (sign) exponent
  1689.  
  1690. and
  1691.  
  1692.      1 <= mantissa <= 10
  1693.  
  1694.      0 <= exponent <= 4899
  1695.  
  1696. where the mantissa may have up to 16 significant digits, and the
  1697. exponent may have up to 4 digits.  Of course, you can enter and
  1698. display numbers in other formats than the scientific format.  You
  1699. may enter numbers by typing them as they appear on the stack in any
  1700. format.
  1701.  
  1702. Functions found in the Real class are: NEG, FACT, RAND, RDZ, MAXR,
  1703. MINR, ABS, SIGN, MANT, XPON, IP, FP, FLOOR, CEIL, RND, MAX, MIN,
  1704. MOD, %T and %CH.
  1705.  
  1706.  
  1707.  
  1708. 3.15. Solve
  1709. -----------
  1710.  
  1711. The functions found in the Solve class can be seen as extensions to
  1712. the Algebra functions, as applied to the solving of equations.
  1713.  
  1714. ISOL will help you solve equations symbolically.  This may be more
  1715. useful since you will often need to have mathematical results
  1716. instead of numerical results.
  1717.  
  1718. The results of the symbolic solver (ISOL) are dependant on flag 34,
  1719. which determines if the principal value (flag set) or the general
  1720. solution (flag cleared) is returned.  When in general solution
  1721. mode, the result may contain one or more variables named 'sx' and
  1722. 'nx', where x represents an integer greater than 0.  The variable
  1723. 'sx' is used when Solutions wants to express a conditional sign or
  1724. +/-.  And the variable 'nx' is used when Solutions wants to express
  1725. any unsigned integer.  For example, if you type 'X^2+4'  'X'  ISOL,
  1726. the result is 's1*(0,4)/2' which means +/-4i/2.
  1727.  
  1728. And if you type 'SIN(X)=1' 'X' ISOL, the result is
  1729. '1.570796326794897*(-1)^n1+(*Pi*)*n1' which means you can assign
  1730. any positive integer to n1 to solve the equation.
  1731.  
  1732. When the inverse of a function or a user-defined function is not
  1733. available, partial inversion is done, and is noted by inv.  For
  1734. example, if you want to isolate X in the equation 'IP(X)=5', you
  1735. get the result 'invIP(5)'.  The name following inv is the function
  1736. name that has been partially inverted.  You can use this feature to
  1737. implement the inverse of any new function you create and store it
  1738. in your library.  For example, to fully define the (fictive)
  1739. inverse of the IP function, you would define the following
  1740. function:
  1741.  
  1742. «  ->  a  'a+1'  »  'invIP'  STO
  1743.  
  1744. You may now isolate X in 'IP(x)=5', which would give 6.
  1745.  
  1746. The functions in the Solve class are: STEQ, RCEQ, ISOL and ROOT.
  1747.  
  1748.  
  1749.  
  1750. 3.16. Stack
  1751. -----------
  1752.  
  1753. Functions found in the Stack class are general functions that are
  1754. used for stack manipulation.
  1755.  
  1756. Functions available in the Stack class are: DUP, SWAP, OVER, DUP2,
  1757. DROP2, ROT, ->LIST, ROLL, ROLLD, PICK, DROP, DUPN, DROPN, DEPTH and
  1758. LIST->.
  1759.  
  1760.  
  1761.  
  1762. 3.17. Statistics
  1763. ----------------
  1764.  
  1765. Functions found in the Statistics class can be used to compute
  1766. several statistical functions.  Statistical data is stored in a
  1767. matrix in the user menu, and is named '(*sigma*)DAT'.  Each column
  1768. of the (*sigma*)DAT matrix represents a set of samples.  The data
  1769. is usually entered with the (*sigma*)+ function.  This function
  1770. accepts real numbers, vectors or matrices as input.  A real number
  1771. is entered as a single sample.  A vector is entered as related
  1772. coordinate values.  And a matrix is entered as several related
  1773. coordinate values.  The first sample entered defines the number of
  1774. columns you will have to use in all subsequent entries.
  1775.  
  1776. Some functions work on two different columns, and thus require the
  1777. variable (*sigma*)PAR, which is a list of 4 elements, where
  1778.  
  1779. 1st and 2nd: columns used by multivariate statistical functions. 
  1780. The default is 1 and 2.
  1781.  
  1782. 3rd: a
  1783.  
  1784. 4th: b
  1785.  
  1786. 5th: type of regression: NULF, LINF, EXPF, LOGF or POWF.
  1787.  
  1788.  
  1789.  
  1790. a and b are calculated depending on the type of regression.  The
  1791. four curves used are:
  1792.  
  1793. linear fit (LINF): y = ax + b
  1794.  
  1795. exponential fit (EXPF): y = a e^(bx)
  1796.  
  1797. logarithmic fit (LOGF): y = a + b ln x
  1798.  
  1799. power fit (POWF): y = a x^b (a > 0)
  1800.  
  1801. NULF means that you have not yet executed one of the regression
  1802. functions.
  1803.  
  1804.  
  1805.  
  1806. You can also store an entire data matrix using STO(*sigma*), or
  1807. delete the last sample entered using (*sigma*)-.
  1808.  
  1809. For more information on statistics, you should read a good book on
  1810. the subject.
  1811.  
  1812. Functions available in the Statistics class are: (*sigma*)+,
  1813. (*sigma*)-, N(*sigma*), CL(*sigma*), STO(*sigma*), RCL(*sigma*),
  1814. TOT, MEAN, SDEV, VAR, MAX(*sigma*), MIN(*sigma*), COL(*sigma*),
  1815. CORR, COV, LINFIT, EXPFIT, LOGFIT, POWFIT, BESTFIT and PREDV.
  1816.  
  1817.  
  1818.  
  1819. 3.18. Store
  1820. -----------
  1821.  
  1822. Items found in the Store class are related to the storage of
  1823. objects in memory, providing some facilities and shortcuts.  The
  1824. two functions STO and RCL can also be found in the menu under Edit.
  1825.  
  1826. Functions available in the Store class are: STO+, STO-, STO*, STO/,
  1827. SNEG and SINV.
  1828.  
  1829.  
  1830.  
  1831. 3.19. Strings
  1832. -------------
  1833.  
  1834. A string is a sequence of characters delimited by double quotes
  1835. (").  A string may contain any character.  You can edit any string,
  1836. but be careful not to include a double quote within a string,
  1837. because when you return the string to the stack, Solutions tries to
  1838. match double quotes by pair.  If you want to add a double quote
  1839. within a string, you must use the instructions 33 CHR +.  The
  1840. logical operators (AND, OR, XOR, NOT) can also be applied to
  1841. strings.
  1842.  
  1843. Functions available in the String class are: ->STR, STR->, CHR,
  1844. NUM, SUB and SIZE.
  1845.  
  1846.  
  1847.  
  1848. 3.20. Trigonometry
  1849. ------------------
  1850.  
  1851. The Trigonometry class contains trigonometric functions, conversion
  1852. functions between degrees and radians and conversion functions
  1853. between hours-minutes-seconds format and real number format.
  1854.  
  1855. Functions available in the Trigonometry class are: SIN, ASIN, COS,
  1856. ACOS, TAN, ATAN, R->C, C->R, ARG, ->HMS, HMS->, HMS+, HMS-, D->R
  1857. and R->D.
  1858.  
  1859.  
  1860.  
  1861. HMS format
  1862. ----------
  1863.  
  1864. The HMS format is used to represent a unit of time in terms of
  1865. hours, minutes, seconds and fractions of a second or angles in
  1866. degrees, arc minutes, arc seconds and fractions of an arc second. 
  1867. The format is h.MMSSs where
  1868.  
  1869. h has zero or more digits representing the number of hours.
  1870.  
  1871. MM are two digits representing the number of minutes
  1872.  
  1873. SS are two digits representing the number of seconds
  1874.  
  1875. s is zero or more digits representing the decimal fractional part
  1876. of seconds.
  1877.  
  1878.  
  1879.  
  1880. Here are some examples of numbers in HMS format.
  1881.  
  1882. 1 hour, 23 minutes, 45 seconds                    ==> 1.2345 5
  1883. hours, 3 minutes, 0 second and 34/100 seconds   ==> 5.030034 42
  1884. minutes                                        ==> .42
  1885.  
  1886.  
  1887. There are two functions (->HMS and HMS->) that convert HMS format
  1888. into decimal numbers.  For example 30 minutes (.30 in HMS format)
  1889. is converted by HMS-> to .5 .
  1890.