home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 5 / FreshFish_July-August1994.bin / bbs / misc / chembalance-3.0.lha / ChemBalance-3.0 / ChemBalance.doc < prev    next >
Text File  |  1994-06-08  |  12KB  |  304 lines

  1.  
  2.  
  3. In 1986, while I was tutoring a chemistry student on the art of balancing
  4. chemical equations, it occurred to me that the undetermined coefficients
  5. we were looking for were just algebraic unknowns that could be solved
  6. for by solving a system of linear equations for them. I soon figured
  7. out how to explain my quasi-algorithm to others, but I also felt that
  8. creating and distributing ChemBalance might encourage people to use the
  9. algebraic approach themselves.
  10.  
  11. This program, ChemBalance, v3.0, (Copyright 1994) is distributed free
  12. of charge to all who want to use it. Anyone may redistribute it as they
  13. please as long as due acknowledgement is given to the author, the program
  14. name, and the version number. Version 2.0 is found on FredFish 916. The
  15. current version can solve equations with as many as nine terms in it.
  16. It can also deal with terms having multiple asterisks as shown later in
  17. this writeup. The reason the program is shorter is because of the new
  18. recursive procedure for doing determinants.
  19.  
  20. I am not expecting to release improved versions, although I haven't ruled-
  21. out the possibility in the distant future. If you have any questions or
  22. suggestions, please feel free to write me at
  23.  
  24.      Patrick Reany                    Phone: (602) 995-1637
  25.      2408 W Myrtle #26
  26.      Phoenix  AZ  85021
  27.      USA
  28.  
  29. What follows is a brief introduction to ChemBalance, but if you'd like a
  30. more thorough explanation, send me $3.00 and I'll send you a copy of the
  31. user's manual for ChemBalance and a writeup on the history and
  32. controvery over using the algebraic method rather than the
  33. oxidation-reduction method.
  34.  
  35.  
  36. WARNING: This program will overwrite the files ram:list, ram:mylist,
  37. and ram:solutions if you have them.
  38.  
  39. To run the program, you must have ARexx ready to go. With that done,
  40. put ChemBalance in ram: then open a shell and enter
  41. "rx ram:chembalance".
  42.  
  43. Before we start we need to establish some terminology.
  44.  
  45. 1) "RHS" = right hand side
  46. 2) "LHS" = left hand side
  47. 3) "total number of terms" means the sum of terms
  48.    from both sides of the equation
  49. 4) "eq" is short for equation
  50. 5) "coef" is short for coefficient
  51. 6) the "terminal coef" is the coef of the rightmost
  52.    term of the RHS
  53. 7) an eq that has at least as many elements as one less
  54.    than the total number of terms is said to be "regular"
  55. 8) if an eq is not regular it is said to be "nonregular"
  56. 9) "ansatz" means a trial solution
  57.  
  58.  
  59. Some of the syntax rules for ChemBalance are
  60.  
  61. 1) use "=" to separate LHS from RHS
  62. 2) use "_" to indicate a subscript
  63. 3) use "*" to preface a (generalized) hydration such as ...*6H_2O
  64.    or ...*NH_3
  65. 4) use any single capital or any single capital
  66.    followed by a small-case letter as an element
  67. 5) nested parentheses are not allowed
  68. 6) allowable input characters are all upper- and lower-case
  69.    letters, digits, "+","=","_","*"," ","(",")"
  70. 7) parentheses cannot follow an asterisk in a given term
  71.  
  72.  
  73. Some of the formation rules are
  74.  
  75. 1) each eq has exactly one equal sign
  76. 2) both sides of every eq have at least one term
  77. 3) each eq has at least one plus sign
  78.    (thus each eq has at least 3 terms total)
  79. 4) an eq can have up to 9 terms, perhaps more
  80. 5) every element in each eq must be found on both sides
  81. 6) only 1 or 2 digits may immediately follow an asterisk
  82. 7) only 1, 2, or 3 digits may immediately follow an "_"
  83.    in input or in internal calculation
  84. 8) use the "+" only as a binary operator on terms
  85.  
  86.  
  87. ChemBalance does have its limitations. It won't do very simple stuff
  88. like O_2 + O_2 = O_3. It also won't do equations with ions in them. It
  89. won't do equations like
  90.  
  91. HAuCl_3+K_4Fe(CN)_6=KAu(CN)_4+KAu(CN)_2+KAu(CN)_2Cl_2+KCl+HCl+
  92.                                               +[4Fe(CN)_3*3Fe(CN)_2]
  93. the problem being the last term. Since C and N always appear as a
  94. multiple of CN, (CN) can be replaced by X, say, yielding
  95.  
  96. HAuCl_3+K_4FeX_6=KAuX_4+KAuX_2+KAuX_2Cl_2+KCl+HCl+*4FeX_3*3FeX_2
  97.  
  98. Note that with additional changes we have brought the final term into
  99. correct form. Remember that parentheses cannot follow an asterisks.
  100.  
  101. Unfortunately, this last eq is nonregular and it is not easy to find
  102. any solutions for it. User-defined coefs are necessary.
  103.  
  104. Now for a bit of explanation. It's pretty obvious that every unbalanced
  105. eq that has a solution, has an infinite number of solutions derived
  106. by multiplying the solved eq thru by any positive integer you like.
  107. Thus the coef's are determined only up to their mutual ratios. We can derive
  108. a unique solution then (at least for regular eq's) by setting any one of
  109. the coef's to a fixed integer. For convenience ChemBalance always chooses
  110. to set the terminal coef equal to 1.
  111.  
  112. Let's try an example. Consider the eq
  113.  
  114.          CO + O_2 = CO_2
  115.  
  116. We put a variable in front of each term to be solved for, except that
  117. we put a 1 in front of the terminal term, thus giving us
  118.  
  119.           xCO + yO_2 = 1CO_2
  120.  
  121. Now, we have two unknowns, so we need two elements in the eq to solve for.
  122. We're in luck, since we have carbon, 'C', and oxygen, 'O'. (Thus we have
  123. a regular eq.) Next we balance the eq one element at a time!
  124.  
  125.   element    term1   term2   term3
  126.  
  127.     C:        1x   +   0y   =  1
  128.     O:        1x   +   2y   =  2
  129.  
  130. If you know some linear algebra you can solve these types of problems
  131. easily, perhaps by using Cramer's rule (which is what ChemBalance uses),
  132. though the present problem can be easily solved by inspection.
  133.  When you do you get
  134.  
  135.      x = 1,  y = 1/2
  136.  
  137. This fraction was introduced because of a mathematical object called
  138. a transformation determinant. It's there to keep us honest: If the
  139. transformation determinant is different from zero you get a solution.
  140. If it's equal to zero, you don't---at least you don't for the combination
  141. of elements you've chosen. In the present example it's do or die because
  142. there are no other elements to choose from.
  143.  
  144. Now, ChemBalance does not like to deal with fractions (a trait no doubt
  145. inherited from me), so it eliminates them by multiplying the balanced
  146. eq thru by the value of the transformation determinant. The form we get
  147. then is
  148.  
  149.  
  150.   Lcoef_1 x Lterm_1 + ... + Lcoef_L x Lterm_L =
  151.           Rcoef_1 x Rterm_1 + ... + det x Rterm_(terminal_term#)
  152.  
  153. where all the coef's are integers. Well, we did have "unique" coef's
  154. but we changed them. That's OK. We may change them again to put the answer
  155. in "reduced" form, a form in which there is no prime integer which will
  156. evenly divide all the coef's. Actually, it's the existence of a unique
  157. reduced eq for regular eq's that is of importance to us.
  158.  
  159. ChemBalance finds the elements it needs to set up the simultaneous
  160. eq's in the elements_list. In the last problem it contained only 'C' and 'O'.
  161. Now let's look at the eq
  162.  
  163.           SO_2 + Cl_2 = SO_2Cl_2.
  164.  
  165. It will contain the three elements 'S O Cl' in the elements_list, and let's
  166. say, for the sake of argument, that they're in it in that particular order.
  167. Then when ChemBalance goes to form the 2 linear eq's it needs, by taking
  168. the two leftmost elements in the list, after "balancing" for 'S' and 'O'
  169. it will have completely ignored the second term on the left. This leads to
  170. a 'det = 0' problem. What ChemBalance does about this is fairly good in
  171. practice, but not perfect in theory.
  172.  
  173. The perfect thing to do is to make sure that ChemBalance takes at least one
  174. element to balance from each term, but for this version all it does is
  175. to cyclicly permute the elements_list and then try again. Don't laugh
  176. ---it seems to work very well. In this case the new list would be in the
  177. order 'O Cl S'. Then ChemBalance would balance for 'O' and 'Cl', which brings
  178. all terms to bear, and the solution is found.
  179.  
  180. Now let's show some typical forms for input.
  181.  
  182. ------->  (NH_4)_2Cr_2O_7 = Cr_2O_3 + H_2O + N_2
  183.  
  184. ------->  CoCl_2*6H_2O = CoCl_2*4H_2O + H_2O
  185.  
  186. To exit ChemBalance enter "quit" on the input line.
  187.  
  188. The simplest way to enter the skeletal equations presented in this
  189. writeup is to 1) split the screen between the shell window on top
  190. and the Ed window on bottom, 2) highlight one of the skeletal eqs and then
  191. press right-amiga key and 'c'. This will copy the highlighted phrase to
  192. to the clipboard. Then activate the shell window and press the
  193. right-amiga and 'v', which will copy the clipboar