]> code.delx.au - gnu-emacs/blob - man/calc.texi
(Rewrite rules): Remove an exercise (on 0^0) which is no longer applicable.
[gnu-emacs] / man / calc.texi
1 \input texinfo @c -*-texinfo-*-
2 @comment %**start of header (This is for running Texinfo on a region.)
3 @c smallbook
4 @setfilename ../info/calc
5 @c [title]
6 @settitle GNU Emacs Calc 2.02g Manual
7 @setchapternewpage odd
8 @comment %**end of header (This is for running Texinfo on a region.)
9
10 @c The following macros are used for conditional output for single lines.
11 @c @texline foo
12 @c `foo' will appear only in TeX output
13 @c @infoline foo
14 @c `foo' will appear only in non-TeX output
15
16 @c @expr{expr} will typeset an expression;
17 @c $x$ in TeX, @samp{x} otherwise.
18
19 @iftex
20 @macro texline{stuff}
21 \stuff\
22 @end macro
23 @alias infoline=comment
24 @tex
25 \gdef\exprsetup{\tex \let\t\ttfont \turnoffactive}
26 \gdef\expr{\exprsetup$\exprfinish}
27 \gdef\exprfinish#1{#1$\endgroup}
28 @end tex
29 @alias mathit=expr
30 @macro cpi{}
31 @math{@pi{}}
32 @end macro
33 @macro cpiover{den}
34 @math{@pi/\den\}
35 @end macro
36 @end iftex
37
38 @ifnottex
39 @alias texline=comment
40 @macro infoline{stuff}
41 \stuff\
42 @end macro
43 @alias expr=samp
44 @alias mathit=i
45 @macro cpi{}
46 @expr{pi}
47 @end macro
48 @macro cpiover{den}
49 @expr{pi/\den\}
50 @end macro
51 @end ifnottex
52
53
54 @tex
55 % Suggested by Karl Berry <karl@@freefriends.org>
56 \gdef\!{\mskip-\thinmuskip}
57 @end tex
58
59 @c Fix some other things specifically for this manual.
60 @iftex
61 @finalout
62 @mathcode`@:=`@: @c Make Calc fractions come out right in math mode
63 @tex
64 \gdef\coloneq{\mathrel{\mathord:\mathord=}}
65
66 \gdef\beforedisplay{\vskip-10pt}
67 \gdef\afterdisplay{\vskip-5pt}
68 \gdef\beforedisplayh{\vskip-25pt}
69 \gdef\afterdisplayh{\vskip-10pt}
70 @end tex
71 @newdimen@kyvpos @kyvpos=0pt
72 @newdimen@kyhpos @kyhpos=0pt
73 @newcount@calcclubpenalty @calcclubpenalty=1000
74 @ignore
75 @newcount@calcpageno
76 @newtoks@calcoldeverypar @calcoldeverypar=@everypar
77 @everypar={@calceverypar@the@calcoldeverypar}
78 @ifx@turnoffactive@undefinedzzz@def@turnoffactive{}@fi
79 @ifx@ninett@undefinedzzz@font@ninett=cmtt9@fi
80 @catcode`@\=0 \catcode`\@=11
81 \r@ggedbottomtrue
82 \catcode`\@=0 @catcode`@\=@active
83 @end ignore
84 @end iftex
85
86 @copying
87 This file documents Calc, the GNU Emacs calculator.
88
89 Copyright (C) 1990, 1991, 2001, 2002 Free Software Foundation, Inc.
90
91 @quotation
92 Permission is granted to copy, distribute and/or modify this document
93 under the terms of the GNU Free Documentation License, Version 1.1 or
94 any later version published by the Free Software Foundation; with the
95 Invariant Sections being just ``GNU GENERAL PUBLIC LICENSE'', with the
96 Front-Cover texts being ``A GNU Manual,'' and with the Back-Cover
97 Texts as in (a) below.
98
99 (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
100 this GNU Manual, like GNU software. Copies published by the Free
101 Software Foundation raise funds for GNU development.''
102 @end quotation
103 @end copying
104
105 @dircategory Emacs
106 @direntry
107 * Calc: (calc). Advanced desk calculator and mathematical tool.
108 @end direntry
109
110 @titlepage
111 @sp 6
112 @center @titlefont{Calc Manual}
113 @sp 4
114 @center GNU Emacs Calc Version 2.02g
115 @c [volume]
116 @sp 1
117 @center January 2002
118 @sp 5
119 @center Dave Gillespie
120 @center daveg@@synaptics.com
121 @page
122
123 @vskip 0pt plus 1filll
124 Copyright @copyright{} 1990, 1991, 2001, 2002 Free Software Foundation, Inc.
125 @insertcopying
126 @end titlepage
127
128 @c [begin]
129 @ifinfo
130 @node Top, , (dir), (dir)
131 @chapter The GNU Emacs Calculator
132
133 @noindent
134 @dfn{Calc} is an advanced desk calculator and mathematical tool
135 that runs as part of the GNU Emacs environment.
136
137 This manual is divided into three major parts: ``Getting Started,''
138 the ``Calc Tutorial,'' and the ``Calc Reference.'' The Tutorial
139 introduces all the major aspects of Calculator use in an easy,
140 hands-on way. The remainder of the manual is a complete reference to
141 the features of the Calculator.
142
143 For help in the Emacs Info system (which you are using to read this
144 file), type @kbd{?}. (You can also type @kbd{h} to run through a
145 longer Info tutorial.)
146
147 @end ifinfo
148 @menu
149 * Copying:: How you can copy and share Calc.
150
151 * Getting Started:: General description and overview.
152 * Interactive Tutorial::
153 * Tutorial:: A step-by-step introduction for beginners.
154
155 * Introduction:: Introduction to the Calc reference manual.
156 * Data Types:: Types of objects manipulated by Calc.
157 * Stack and Trail:: Manipulating the stack and trail buffers.
158 * Mode Settings:: Adjusting display format and other modes.
159 * Arithmetic:: Basic arithmetic functions.
160 * Scientific Functions:: Transcendentals and other scientific functions.
161 * Matrix Functions:: Operations on vectors and matrices.
162 * Algebra:: Manipulating expressions algebraically.
163 * Units:: Operations on numbers with units.
164 * Store and Recall:: Storing and recalling variables.
165 * Graphics:: Commands for making graphs of data.
166 * Kill and Yank:: Moving data into and out of Calc.
167 * Embedded Mode:: Working with formulas embedded in a file.
168 * Programming:: Calc as a programmable calculator.
169
170 * Installation:: Installing Calc as a part of GNU Emacs.
171 * Reporting Bugs:: How to report bugs and make suggestions.
172
173 * Summary:: Summary of Calc commands and functions.
174
175 * Key Index:: The standard Calc key sequences.
176 * Command Index:: The interactive Calc commands.
177 * Function Index:: Functions (in algebraic formulas).
178 * Concept Index:: General concepts.
179 * Variable Index:: Variables used by Calc (both user and internal).
180 * Lisp Function Index:: Internal Lisp math functions.
181 @end menu
182
183 @node Copying, Getting Started, Top, Top
184 @unnumbered GNU GENERAL PUBLIC LICENSE
185 @center Version 1, February 1989
186
187 @display
188 Copyright @copyright{} 1989 Free Software Foundation, Inc.
189 675 Mass Ave, Cambridge, MA 02139, USA
190
191 Everyone is permitted to copy and distribute verbatim copies
192 of this license document, but changing it is not allowed.
193 @end display
194
195 @unnumberedsec Preamble
196
197 The license agreements of most software companies try to keep users
198 at the mercy of those companies. By contrast, our General Public
199 License is intended to guarantee your freedom to share and change free
200 software---to make sure the software is free for all its users. The
201 General Public License applies to the Free Software Foundation's
202 software and to any other program whose authors commit to using it.
203 You can use it for your programs, too.
204
205 When we speak of free software, we are referring to freedom, not
206 price. Specifically, the General Public License is designed to make
207 sure that you have the freedom to give away or sell copies of free
208 software, that you receive source code or can get it if you want it,
209 that you can change the software or use pieces of it in new free
210 programs; and that you know you can do these things.
211
212 To protect your rights, we need to make restrictions that forbid
213 anyone to deny you these rights or to ask you to surrender the rights.
214 These restrictions translate to certain responsibilities for you if you
215 distribute copies of the software, or if you modify it.
216
217 For example, if you distribute copies of a such a program, whether
218 gratis or for a fee, you must give the recipients all the rights that
219 you have. You must make sure that they, too, receive or can get the
220 source code. And you must tell them their rights.
221
222 We protect your rights with two steps: (1) copyright the software, and
223 (2) offer you this license which gives you legal permission to copy,
224 distribute and/or modify the software.
225
226 Also, for each author's protection and ours, we want to make certain
227 that everyone understands that there is no warranty for this free
228 software. If the software is modified by someone else and passed on, we
229 want its recipients to know that what they have is not the original, so
230 that any problems introduced by others will not reflect on the original
231 authors' reputations.
232
233 The precise terms and conditions for copying, distribution and
234 modification follow.
235
236 @iftex
237 @unnumberedsec TERMS AND CONDITIONS
238 @end iftex
239 @ifinfo
240 @center TERMS AND CONDITIONS
241 @end ifinfo
242
243 @enumerate
244 @item
245 This License Agreement applies to any program or other work which
246 contains a notice placed by the copyright holder saying it may be
247 distributed under the terms of this General Public License. The
248 ``Program'', below, refers to any such program or work, and a ``work based
249 on the Program'' means either the Program or any work containing the
250 Program or a portion of it, either verbatim or with modifications. Each
251 licensee is addressed as ``you''.
252
253 @item
254 You may copy and distribute verbatim copies of the Program's source
255 code as you receive it, in any medium, provided that you conspicuously and
256 appropriately publish on each copy an appropriate copyright notice and
257 disclaimer of warranty; keep intact all the notices that refer to this
258 General Public License and to the absence of any warranty; and give any
259 other recipients of the Program a copy of this General Public License
260 along with the Program. You may charge a fee for the physical act of
261 transferring a copy.
262
263 @item
264 You may modify your copy or copies of the Program or any portion of
265 it, and copy and distribute such modifications under the terms of Paragraph
266 1 above, provided that you also do the following:
267
268 @itemize @bullet
269 @item
270 cause the modified files to carry prominent notices stating that
271 you changed the files and the date of any change; and
272
273 @item
274 cause the whole of any work that you distribute or publish, that
275 in whole or in part contains the Program or any part thereof, either
276 with or without modifications, to be licensed at no charge to all
277 third parties under the terms of this General Public License (except
278 that you may choose to grant warranty protection to some or all
279 third parties, at your option).
280
281 @item
282 If the modified program normally reads commands interactively when
283 run, you must cause it, when started running for such interactive use
284 in the simplest and most usual way, to print or display an
285 announcement including an appropriate copyright notice and a notice
286 that there is no warranty (or else, saying that you provide a
287 warranty) and that users may redistribute the program under these
288 conditions, and telling the user how to view a copy of this General
289 Public License.
290
291 @item
292 You may charge a fee for the physical act of transferring a
293 copy, and you may at your option offer warranty protection in
294 exchange for a fee.
295 @end itemize
296
297 Mere aggregation of another independent work with the Program (or its
298 derivative) on a volume of a storage or distribution medium does not bring
299 the other work under the scope of these terms.
300
301 @item
302 You may copy and distribute the Program (or a portion or derivative of
303 it, under Paragraph 2) in object code or executable form under the terms of
304 Paragraphs 1 and 2 above provided that you also do one of the following:
305
306 @itemize @bullet
307 @item
308 accompany it with the complete corresponding machine-readable
309 source code, which must be distributed under the terms of
310 Paragraphs 1 and 2 above; or,
311
312 @item
313 accompany it with a written offer, valid for at least three
314 years, to give any third party free (except for a nominal charge
315 for the cost of distribution) a complete machine-readable copy of the
316 corresponding source code, to be distributed under the terms of
317 Paragraphs 1 and 2 above; or,
318
319 @item
320 accompany it with the information you received as to where the
321 corresponding source code may be obtained. (This alternative is
322 allowed only for noncommercial distribution and only if you
323 received the program in object code or executable form alone.)
324 @end itemize
325
326 Source code for a work means the preferred form of the work for making
327 modifications to it. For an executable file, complete source code means
328 all the source code for all modules it contains; but, as a special
329 exception, it need not include source code for modules which are standard
330 libraries that accompany the operating system on which the executable
331 file runs, or for standard header files or definitions files that
332 accompany that operating system.
333
334 @item
335 You may not copy, modify, sublicense, distribute or transfer the
336 Program except as expressly provided under this General Public License.
337 Any attempt otherwise to copy, modify, sublicense, distribute or transfer
338 the Program is void, and will automatically terminate your rights to use
339 the Program under this License. However, parties who have received
340 copies, or rights to use copies, from you under this General Public
341 License will not have their licenses terminated so long as such parties
342 remain in full compliance.
343
344 @item
345 By copying, distributing or modifying the Program (or any work based
346 on the Program) you indicate your acceptance of this license to do so,
347 and all its terms and conditions.
348
349 @item
350 Each time you redistribute the Program (or any work based on the
351 Program), the recipient automatically receives a license from the original
352 licensor to copy, distribute or modify the Program subject to these
353 terms and conditions. You may not impose any further restrictions on the
354 recipients' exercise of the rights granted herein.
355
356 @item
357 The Free Software Foundation may publish revised and/or new versions
358 of the General Public License from time to time. Such new versions will
359 be similar in spirit to the present version, but may differ in detail to
360 address new problems or concerns.
361
362 Each version is given a distinguishing version number. If the Program
363 specifies a version number of the license which applies to it and ``any
364 later version'', you have the option of following the terms and conditions
365 either of that version or of any later version published by the Free
366 Software Foundation. If the Program does not specify a version number of
367 the license, you may choose any version ever published by the Free Software
368 Foundation.
369
370 @item
371 If you wish to incorporate parts of the Program into other free
372 programs whose distribution conditions are different, write to the author
373 to ask for permission. For software which is copyrighted by the Free
374 Software Foundation, write to the Free Software Foundation; we sometimes
375 make exceptions for this. Our decision will be guided by the two goals
376 of preserving the free status of all derivatives of our free software and
377 of promoting the sharing and reuse of software generally.
378
379 @iftex
380 @heading NO WARRANTY
381 @end iftex
382 @ifinfo
383 @center NO WARRANTY
384 @end ifinfo
385
386 @item
387 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
388 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
389 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
390 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
391 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
392 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
393 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
394 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
395 REPAIR OR CORRECTION.
396
397 @item
398 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
399 ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
400 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
401 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
402 ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT
403 LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
404 SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE
405 WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
406 ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
407 @end enumerate
408
409 @node Getting Started, Tutorial, Copying, Top
410 @chapter Getting Started
411 @noindent
412 This chapter provides a general overview of Calc, the GNU Emacs
413 Calculator: What it is, how to start it and how to exit from it,
414 and what are the various ways that it can be used.
415
416 @menu
417 * What is Calc::
418 * About This Manual::
419 * Notations Used in This Manual::
420 * Using Calc::
421 * Demonstration of Calc::
422 * History and Acknowledgements::
423 @end menu
424
425 @node What is Calc, About This Manual, Getting Started, Getting Started
426 @section What is Calc?
427
428 @noindent
429 @dfn{Calc} is an advanced calculator and mathematical tool that runs as
430 part of the GNU Emacs environment. Very roughly based on the HP-28/48
431 series of calculators, its many features include:
432
433 @itemize @bullet
434 @item
435 Choice of algebraic or RPN (stack-based) entry of calculations.
436
437 @item
438 Arbitrary precision integers and floating-point numbers.
439
440 @item
441 Arithmetic on rational numbers, complex numbers (rectangular and polar),
442 error forms with standard deviations, open and closed intervals, vectors
443 and matrices, dates and times, infinities, sets, quantities with units,
444 and algebraic formulas.
445
446 @item
447 Mathematical operations such as logarithms and trigonometric functions.
448
449 @item
450 Programmer's features (bitwise operations, non-decimal numbers).
451
452 @item
453 Financial functions such as future value and internal rate of return.
454
455 @item
456 Number theoretical features such as prime factorization and arithmetic
457 modulo @var{m} for any @var{m}.
458
459 @item
460 Algebraic manipulation features, including symbolic calculus.
461
462 @item
463 Moving data to and from regular editing buffers.
464
465 @item
466 Embedded mode for manipulating Calc formulas and data directly
467 inside any editing buffer.
468
469 @item
470 Graphics using GNUPLOT, a versatile (and free) plotting program.
471
472 @item
473 Easy programming using keyboard macros, algebraic formulas,
474 algebraic rewrite rules, or extended Emacs Lisp.
475 @end itemize
476
477 Calc tries to include a little something for everyone; as a result it is
478 large and might be intimidating to the first-time user. If you plan to
479 use Calc only as a traditional desk calculator, all you really need to
480 read is the ``Getting Started'' chapter of this manual and possibly the
481 first few sections of the tutorial. As you become more comfortable with
482 the program you can learn its additional features. In terms of efficiency,
483 scope and depth, Calc cannot replace a powerful tool like Mathematica.
484 But Calc has the advantages of convenience, portability, and availability
485 of the source code. And, of course, it's free!
486
487 @node About This Manual, Notations Used in This Manual, What is Calc, Getting Started
488 @section About This Manual
489
490 @noindent
491 This document serves as a complete description of the GNU Emacs
492 Calculator. It works both as an introduction for novices, and as
493 a reference for experienced users. While it helps to have some
494 experience with GNU Emacs in order to get the most out of Calc,
495 this manual ought to be readable even if you don't know or use Emacs
496 regularly.
497
498 @ifinfo
499 The manual is divided into three major parts:@: the ``Getting
500 Started'' chapter you are reading now, the Calc tutorial (chapter 2),
501 and the Calc reference manual (the remaining chapters and appendices).
502 @end ifinfo
503 @iftex
504 The manual is divided into three major parts:@: the ``Getting
505 Started'' chapter you are reading now, the Calc tutorial (chapter 2),
506 and the Calc reference manual (the remaining chapters and appendices).
507 @c [when-split]
508 @c This manual has been printed in two volumes, the @dfn{Tutorial} and the
509 @c @dfn{Reference}. Both volumes include a copy of the ``Getting Started''
510 @c chapter.
511 @end iftex
512
513 If you are in a hurry to use Calc, there is a brief ``demonstration''
514 below which illustrates the major features of Calc in just a couple of
515 pages. If you don't have time to go through the full tutorial, this
516 will show you everything you need to know to begin.
517 @xref{Demonstration of Calc}.
518
519 The tutorial chapter walks you through the various parts of Calc
520 with lots of hands-on examples and explanations. If you are new
521 to Calc and you have some time, try going through at least the
522 beginning of the tutorial. The tutorial includes about 70 exercises
523 with answers. These exercises give you some guided practice with
524 Calc, as well as pointing out some interesting and unusual ways
525 to use its features.
526
527 The reference section discusses Calc in complete depth. You can read
528 the reference from start to finish if you want to learn every aspect
529 of Calc. Or, you can look in the table of contents or the Concept
530 Index to find the parts of the manual that discuss the things you
531 need to know.
532
533 @cindex Marginal notes
534 Every Calc keyboard command is listed in the Calc Summary, and also
535 in the Key Index. Algebraic functions, @kbd{M-x} commands, and
536 variables also have their own indices.
537 @texline Each
538 @infoline In the printed manual, each
539 paragraph that is referenced in the Key or Function Index is marked
540 in the margin with its index entry.
541
542 @c [fix-ref Help Commands]
543 You can access this manual on-line at any time within Calc by
544 pressing the @kbd{h i} key sequence. Outside of the Calc window,
545 you can press @kbd{M-# i} to read the manual on-line. Also, you
546 can jump directly to the Tutorial by pressing @kbd{h t} or @kbd{M-# t},
547 or to the Summary by pressing @kbd{h s} or @kbd{M-# s}. Within Calc,
548 you can also go to the part of the manual describing any Calc key,
549 function, or variable using @w{@kbd{h k}}, @kbd{h f}, or @kbd{h v},
550 respectively. @xref{Help Commands}.
551
552 Printed copies of this manual are also available from the Free Software
553 Foundation.
554
555 @node Notations Used in This Manual, Demonstration of Calc, About This Manual, Getting Started
556 @section Notations Used in This Manual
557
558 @noindent
559 This section describes the various notations that are used
560 throughout the Calc manual.
561
562 In keystroke sequences, uppercase letters mean you must hold down
563 the shift key while typing the letter. Keys pressed with Control
564 held down are shown as @kbd{C-x}. Keys pressed with Meta held down
565 are shown as @kbd{M-x}. Other notations are @key{RET} for the
566 Return key, @key{SPC} for the space bar, @key{TAB} for the Tab key,
567 @key{DEL} for the Delete key, and @key{LFD} for the Line-Feed key.
568 The @key{DEL} key is called Backspace on some keyboards, it is
569 whatever key you would use to correct a simple typing error when
570 regularly using Emacs.
571
572 (If you don't have the @key{LFD} or @key{TAB} keys on your keyboard,
573 the @kbd{C-j} and @kbd{C-i} keys are equivalent to them, respectively.
574 If you don't have a Meta key, look for Alt or Extend Char. You can
575 also press @key{ESC} or @key{C-[} first to get the same effect, so
576 that @kbd{M-x}, @kbd{@key{ESC} x}, and @kbd{C-[ x} are all equivalent.)
577
578 Sometimes the @key{RET} key is not shown when it is ``obvious''
579 that you must press @key{RET} to proceed. For example, the @key{RET}
580 is usually omitted in key sequences like @kbd{M-x calc-keypad @key{RET}}.
581
582 Commands are generally shown like this: @kbd{p} (@code{calc-precision})
583 or @kbd{M-# k} (@code{calc-keypad}). This means that the command is
584 normally used by pressing the @kbd{p} key or @kbd{M-# k} key sequence,
585 but it also has the full-name equivalent shown, e.g., @kbd{M-x calc-precision}.
586
587 Commands that correspond to functions in algebraic notation
588 are written: @kbd{C} (@code{calc-cos}) [@code{cos}]. This means
589 the @kbd{C} key is equivalent to @kbd{M-x calc-cos}, and that
590 the corresponding function in an algebraic-style formula would
591 be @samp{cos(@var{x})}.
592
593 A few commands don't have key equivalents: @code{calc-sincos}
594 [@code{sincos}].
595
596 @node Demonstration of Calc, Using Calc, Notations Used in This Manual, Getting Started
597 @section A Demonstration of Calc
598
599 @noindent
600 @cindex Demonstration of Calc
601 This section will show some typical small problems being solved with
602 Calc. The focus is more on demonstration than explanation, but
603 everything you see here will be covered more thoroughly in the
604 Tutorial.
605
606 To begin, start Emacs if necessary (usually the command @code{emacs}
607 does this), and type @kbd{M-# c} (or @kbd{@key{ESC} # c}) to start the
608 Calculator. (@xref{Starting Calc}, if this doesn't work for you.)
609
610 Be sure to type all the sample input exactly, especially noting the
611 difference between lower-case and upper-case letters. Remember,
612 @key{RET}, @key{TAB}, @key{DEL}, and @key{SPC} are the Return, Tab,
613 Delete, and Space keys.
614
615 @strong{RPN calculation.} In RPN, you type the input number(s) first,
616 then the command to operate on the numbers.
617
618 @noindent
619 Type @kbd{2 @key{RET} 3 + Q} to compute
620 @texline @math{\sqrt{2+3} = 2.2360679775}.
621 @infoline the square root of 2+3, which is 2.2360679775.
622
623 @noindent
624 Type @kbd{P 2 ^} to compute
625 @texline @math{\pi^2 = 9.86960440109}.
626 @infoline the value of `pi' squared, 9.86960440109.
627
628 @noindent
629 Type @key{TAB} to exchange the order of these two results.
630
631 @noindent
632 Type @kbd{- I H S} to subtract these results and compute the Inverse
633 Hyperbolic sine of the difference, 2.72996136574.
634
635 @noindent
636 Type @key{DEL} to erase this result.
637
638 @strong{Algebraic calculation.} You can also enter calculations using
639 conventional ``algebraic'' notation. To enter an algebraic formula,
640 use the apostrophe key.
641
642 @noindent
643 Type @kbd{' sqrt(2+3) @key{RET}} to compute
644 @texline @math{\sqrt{2+3}}.
645 @infoline the square root of 2+3.
646
647 @noindent
648 Type @kbd{' pi^2 @key{RET}} to enter
649 @texline @math{\pi^2}.
650 @infoline `pi' squared.
651 To evaluate this symbolic formula as a number, type @kbd{=}.
652
653 @noindent
654 Type @kbd{' arcsinh($ - $$) @key{RET}} to subtract the second-most-recent
655 result from the most-recent and compute the Inverse Hyperbolic sine.
656
657 @strong{Keypad mode.} If you are using the X window system, press
658 @w{@kbd{M-# k}} to get Keypad mode. (If you don't use X, skip to
659 the next section.)
660
661 @noindent
662 Click on the @key{2}, @key{ENTER}, @key{3}, @key{+}, and @key{SQRT}
663 ``buttons'' using your left mouse button.
664
665 @noindent
666 Click on @key{PI}, @key{2}, and @t{y^x}.
667
668 @noindent
669 Click on @key{INV}, then @key{ENTER} to swap the two results.
670
671 @noindent
672 Click on @key{-}, @key{INV}, @key{HYP}, and @key{SIN}.
673
674 @noindent
675 Click on @key{<-} to erase the result, then click @key{OFF} to turn
676 the Keypad Calculator off.
677
678 @strong{Grabbing data.} Type @kbd{M-# x} if necessary to exit Calc.
679 Now select the following numbers as an Emacs region: ``Mark'' the
680 front of the list by typing @kbd{C-@key{SPC}} or @kbd{C-@@} there,
681 then move to the other end of the list. (Either get this list from
682 the on-line copy of this manual, accessed by @w{@kbd{M-# i}}, or just
683 type these numbers into a scratch file.) Now type @kbd{M-# g} to
684 ``grab'' these numbers into Calc.
685
686 @example
687 @group
688 1.23 1.97
689 1.6 2
690 1.19 1.08
691 @end group
692 @end example
693
694 @noindent
695 The result @samp{[1.23, 1.97, 1.6, 2, 1.19, 1.08]} is a Calc ``vector.''
696 Type @w{@kbd{V R +}} to compute the sum of these numbers.
697
698 @noindent
699 Type @kbd{U} to Undo this command, then type @kbd{V R *} to compute
700 the product of the numbers.
701
702 @noindent
703 You can also grab data as a rectangular matrix. Place the cursor on
704 the upper-leftmost @samp{1} and set the mark, then move to just after
705 the lower-right @samp{8} and press @kbd{M-# r}.
706
707 @noindent
708 Type @kbd{v t} to transpose this
709 @texline @math{3\times2}
710 @infoline 3x2
711 matrix into a
712 @texline @math{2\times3}
713 @infoline 2x3
714 matrix. Type @w{@kbd{v u}} to unpack the rows into two separate
715 vectors. Now type @w{@kbd{V R + @key{TAB} V R +}} to compute the sums
716 of the two original columns. (There is also a special
717 grab-and-sum-columns command, @kbd{M-# :}.)
718
719 @strong{Units conversion.} Units are entered algebraically.
720 Type @w{@kbd{' 43 mi/hr @key{RET}}} to enter the quantity 43 miles-per-hour.
721 Type @w{@kbd{u c km/hr @key{RET}}}. Type @w{@kbd{u c m/s @key{RET}}}.
722
723 @strong{Date arithmetic.} Type @kbd{t N} to get the current date and
724 time. Type @kbd{90 +} to find the date 90 days from now. Type
725 @kbd{' <25 dec 87> @key{RET}} to enter a date, then @kbd{- 7 /} to see how
726 many weeks have passed since then.
727
728 @strong{Algebra.} Algebraic entries can also include formulas
729 or equations involving variables. Type @kbd{@w{' [x + y} = a, x y = 1] @key{RET}}
730 to enter a pair of equations involving three variables.
731 (Note the leading apostrophe in this example; also, note that the space
732 between @samp{x y} is required.) Type @w{@kbd{a S x,y @key{RET}}} to solve
733 these equations for the variables @expr{x} and @expr{y}.
734
735 @noindent
736 Type @kbd{d B} to view the solutions in more readable notation.
737 Type @w{@kbd{d C}} to view them in C language notation, and @kbd{d T}
738 to view them in the notation for the @TeX{} typesetting system.
739 Type @kbd{d N} to return to normal notation.
740
741 @noindent
742 Type @kbd{7.5}, then @kbd{s l a @key{RET}} to let @expr{a = 7.5} in these formulas.
743 (That's a letter @kbd{l}, not a numeral @kbd{1}.)
744
745 @iftex
746 @strong{Help functions.} You can read about any command in the on-line
747 manual. Type @kbd{M-# c} to return to Calc after each of these
748 commands: @kbd{h k t N} to read about the @kbd{t N} command,
749 @kbd{h f sqrt @key{RET}} to read about the @code{sqrt} function, and
750 @kbd{h s} to read the Calc summary.
751 @end iftex
752 @ifinfo
753 @strong{Help functions.} You can read about any command in the on-line
754 manual. Remember to type the letter @kbd{l}, then @kbd{M-# c}, to
755 return here after each of these commands: @w{@kbd{h k t N}} to read
756 about the @w{@kbd{t N}} command, @kbd{h f sqrt @key{RET}} to read about the
757 @code{sqrt} function, and @kbd{h s} to read the Calc summary.
758 @end ifinfo
759
760 Press @key{DEL} repeatedly to remove any leftover results from the stack.
761 To exit from Calc, press @kbd{q} or @kbd{M-# c} again.
762
763 @node Using Calc, History and Acknowledgements, Demonstration of Calc, Getting Started
764 @section Using Calc
765
766 @noindent
767 Calc has several user interfaces that are specialized for
768 different kinds of tasks. As well as Calc's standard interface,
769 there are Quick mode, Keypad mode, and Embedded mode.
770
771 @menu
772 * Starting Calc::
773 * The Standard Interface::
774 * Quick Mode Overview::
775 * Keypad Mode Overview::
776 * Standalone Operation::
777 * Embedded Mode Overview::
778 * Other M-# Commands::
779 @end menu
780
781 @node Starting Calc, The Standard Interface, Using Calc, Using Calc
782 @subsection Starting Calc
783
784 @noindent
785 On most systems, you can type @kbd{M-#} to start the Calculator.
786 The notation @kbd{M-#} is short for Meta-@kbd{#}. On most
787 keyboards this means holding down the Meta (or Alt) and
788 Shift keys while typing @kbd{3}.
789
790 @cindex META key
791 Once again, if you don't have a Meta key on your keyboard you can type
792 @key{ESC} first, then @kbd{#}, to accomplish the same thing. If you
793 don't even have an @key{ESC} key, you can fake it by holding down
794 Control or @key{CTRL} while typing a left square bracket
795 (that's @kbd{C-[} in Emacs notation).
796
797 @kbd{M-#} is a @dfn{prefix key}; when you press it, Emacs waits for
798 you to press a second key to complete the command. In this case,
799 you will follow @kbd{M-#} with a letter (upper- or lower-case, it
800 doesn't matter for @kbd{M-#}) that says which Calc interface you
801 want to use.
802
803 To get Calc's standard interface, type @kbd{M-# c}. To get
804 Keypad mode, type @kbd{M-# k}. Type @kbd{M-# ?} to get a brief
805 list of the available options, and type a second @kbd{?} to get
806 a complete list.
807
808 To ease typing, @kbd{M-# M-#} (or @kbd{M-# #} if that's easier)
809 also works to start Calc. It starts the same interface (either
810 @kbd{M-# c} or @w{@kbd{M-# k}}) that you last used, selecting the
811 @kbd{M-# c} interface by default. (If your installation has
812 a special function key set up to act like @kbd{M-#}, hitting that
813 function key twice is just like hitting @kbd{M-# M-#}.)
814
815 If @kbd{M-#} doesn't work for you, you can always type explicit
816 commands like @kbd{M-x calc} (for the standard user interface) or
817 @w{@kbd{M-x calc-keypad}} (for Keypad mode). First type @kbd{M-x}
818 (that's Meta with the letter @kbd{x}), then, at the prompt,
819 type the full command (like @kbd{calc-keypad}) and press Return.
820
821 The same commands (like @kbd{M-# c} or @kbd{M-# M-#}) that start
822 the Calculator also turn it off if it is already on.
823
824 @node The Standard Interface, Quick Mode Overview, Starting Calc, Using Calc
825 @subsection The Standard Calc Interface
826
827 @noindent
828 @cindex Standard user interface
829 Calc's standard interface acts like a traditional RPN calculator,
830 operated by the normal Emacs keyboard. When you type @kbd{M-# c}
831 to start the Calculator, the Emacs screen splits into two windows
832 with the file you were editing on top and Calc on the bottom.
833
834 @smallexample
835 @group
836
837 ...
838 --**-Emacs: myfile (Fundamental)----All----------------------
839 --- Emacs Calculator Mode --- |Emacs Calc Mode v2.00...
840 2: 17.3 | 17.3
841 1: -5 | 3
842 . | 2
843 | 4
844 | * 8
845 | ->-5
846 |
847 --%%-Calc: 12 Deg (Calculator)----All----- --%%-Emacs: *Calc Trail*
848 @end group
849 @end smallexample
850
851 In this figure, the mode-line for @file{myfile} has moved up and the
852 ``Calculator'' window has appeared below it. As you can see, Calc
853 actually makes two windows side-by-side. The lefthand one is
854 called the @dfn{stack window} and the righthand one is called the
855 @dfn{trail window.} The stack holds the numbers involved in the
856 calculation you are currently performing. The trail holds a complete
857 record of all calculations you have done. In a desk calculator with
858 a printer, the trail corresponds to the paper tape that records what
859 you do.
860
861 In this case, the trail shows that four numbers (17.3, 3, 2, and 4)
862 were first entered into the Calculator, then the 2 and 4 were
863 multiplied to get 8, then the 3 and 8 were subtracted to get @mathit{-5}.
864 (The @samp{>} symbol shows that this was the most recent calculation.)
865 The net result is the two numbers 17.3 and @mathit{-5} sitting on the stack.
866
867 Most Calculator commands deal explicitly with the stack only, but
868 there is a set of commands that allow you to search back through
869 the trail and retrieve any previous result.
870
871 Calc commands use the digits, letters, and punctuation keys.
872 Shifted (i.e., upper-case) letters are different from lowercase
873 letters. Some letters are @dfn{prefix} keys that begin two-letter
874 commands. For example, @kbd{e} means ``enter exponent'' and shifted
875 @kbd{E} means @expr{e^x}. With the @kbd{d} (``display modes'') prefix
876 the letter ``e'' takes on very different meanings: @kbd{d e} means
877 ``engineering notation'' and @kbd{d E} means ``@dfn{eqn} language mode.''
878
879 There is nothing stopping you from switching out of the Calc
880 window and back into your editing window, say by using the Emacs
881 @w{@kbd{C-x o}} (@code{other-window}) command. When the cursor is
882 inside a regular window, Emacs acts just like normal. When the
883 cursor is in the Calc stack or trail windows, keys are interpreted
884 as Calc commands.
885
886 When you quit by pressing @kbd{M-# c} a second time, the Calculator
887 windows go away but the actual Stack and Trail are not gone, just
888 hidden. When you press @kbd{M-# c} once again you will get the
889 same stack and trail contents you had when you last used the
890 Calculator.
891
892 The Calculator does not remember its state between Emacs sessions.
893 Thus if you quit Emacs and start it again, @kbd{M-# c} will give you
894 a fresh stack and trail. There is a command (@kbd{m m}) that lets
895 you save your favorite mode settings between sessions, though.
896 One of the things it saves is which user interface (standard or
897 Keypad) you last used; otherwise, a freshly started Emacs will
898 always treat @kbd{M-# M-#} the same as @kbd{M-# c}.
899
900 The @kbd{q} key is another equivalent way to turn the Calculator off.
901
902 If you type @kbd{M-# b} first and then @kbd{M-# c}, you get a
903 full-screen version of Calc (@code{full-calc}) in which the stack and
904 trail windows are still side-by-side but are now as tall as the whole
905 Emacs screen. When you press @kbd{q} or @kbd{M-# c} again to quit,
906 the file you were editing before reappears. The @kbd{M-# b} key
907 switches back and forth between ``big'' full-screen mode and the
908 normal partial-screen mode.
909
910 Finally, @kbd{M-# o} (@code{calc-other-window}) is like @kbd{M-# c}
911 except that the Calc window is not selected. The buffer you were
912 editing before remains selected instead. @kbd{M-# o} is a handy
913 way to switch out of Calc momentarily to edit your file; type
914 @kbd{M-# c} to switch back into Calc when you are done.
915
916 @node Quick Mode Overview, Keypad Mode Overview, The Standard Interface, Using Calc
917 @subsection Quick Mode (Overview)
918
919 @noindent
920 @dfn{Quick mode} is a quick way to use Calc when you don't need the
921 full complexity of the stack and trail. To use it, type @kbd{M-# q}
922 (@code{quick-calc}) in any regular editing buffer.
923
924 Quick mode is very simple: It prompts you to type any formula in
925 standard algebraic notation (like @samp{4 - 2/3}) and then displays
926 the result at the bottom of the Emacs screen (@mathit{3.33333333333}
927 in this case). You are then back in the same editing buffer you
928 were in before, ready to continue editing or to type @kbd{M-# q}
929 again to do another quick calculation. The result of the calculation
930 will also be in the Emacs ``kill ring'' so that a @kbd{C-y} command
931 at this point will yank the result into your editing buffer.
932
933 Calc mode settings affect Quick mode, too, though you will have to
934 go into regular Calc (with @kbd{M-# c}) to change the mode settings.
935
936 @c [fix-ref Quick Calculator mode]
937 @xref{Quick Calculator}, for further information.
938
939 @node Keypad Mode Overview, Standalone Operation, Quick Mode Overview, Using Calc
940 @subsection Keypad Mode (Overview)
941
942 @noindent
943 @dfn{Keypad mode} is a mouse-based interface to the Calculator.
944 It is designed for use with terminals that support a mouse. If you
945 don't have a mouse, you will have to operate Keypad mode with your
946 arrow keys (which is probably more trouble than it's worth).
947
948 Type @kbd{M-# k} to turn Keypad mode on or off. Once again you
949 get two new windows, this time on the righthand side of the screen
950 instead of at the bottom. The upper window is the familiar Calc
951 Stack; the lower window is a picture of a typical calculator keypad.
952
953 @tex
954 \dimen0=\pagetotal%
955 \advance \dimen0 by 24\baselineskip%
956 \ifdim \dimen0>\pagegoal \vfill\eject \fi%
957 \medskip
958 @end tex
959 @smallexample
960 |--- Emacs Calculator Mode ---
961 |2: 17.3
962 |1: -5
963 | .
964 |--%%-Calc: 12 Deg (Calcul
965 |----+-----Calc 2.00-----+----1
966 |FLR |CEIL|RND |TRNC|CLN2|FLT |
967 |----+----+----+----+----+----|
968 | LN |EXP | |ABS |IDIV|MOD |
969 |----+----+----+----+----+----|
970 |SIN |COS |TAN |SQRT|y^x |1/x |
971 |----+----+----+----+----+----|
972 | ENTER |+/- |EEX |UNDO| <- |
973 |-----+---+-+--+--+-+---++----|
974 | INV | 7 | 8 | 9 | / |
975 |-----+-----+-----+-----+-----|
976 | HYP | 4 | 5 | 6 | * |
977 |-----+-----+-----+-----+-----|
978 |EXEC | 1 | 2 | 3 | - |
979 |-----+-----+-----+-----+-----|
980 | OFF | 0 | . | PI | + |
981 |-----+-----+-----+-----+-----+
982 @end smallexample
983
984 Keypad mode is much easier for beginners to learn, because there
985 is no need to memorize lots of obscure key sequences. But not all
986 commands in regular Calc are available on the Keypad. You can
987 always switch the cursor into the Calc stack window to use
988 standard Calc commands if you need. Serious Calc users, though,
989 often find they prefer the standard interface over Keypad mode.
990
991 To operate the Calculator, just click on the ``buttons'' of the
992 keypad using your left mouse button. To enter the two numbers
993 shown here you would click @w{@kbd{1 7 .@: 3 ENTER 5 +/- ENTER}}; to
994 add them together you would then click @kbd{+} (to get 12.3 on
995 the stack).
996
997 If you click the right mouse button, the top three rows of the
998 keypad change to show other sets of commands, such as advanced
999 math functions, vector operations, and operations on binary
1000 numbers.
1001
1002 Because Keypad mode doesn't use the regular keyboard, Calc leaves
1003 the cursor in your original editing buffer. You can type in
1004 this buffer in the usual way while also clicking on the Calculator
1005 keypad. One advantage of Keypad mode is that you don't need an
1006 explicit command to switch between editing and calculating.
1007
1008 If you press @kbd{M-# b} first, you get a full-screen Keypad mode
1009 (@code{full-calc-keypad}) with three windows: The keypad in the lower
1010 left, the stack in the lower right, and the trail on top.
1011
1012 @c [fix-ref Keypad Mode]
1013 @xref{Keypad Mode}, for further information.
1014
1015 @node Standalone Operation, Embedded Mode Overview, Keypad Mode Overview, Using Calc
1016 @subsection Standalone Operation
1017
1018 @noindent
1019 @cindex Standalone Operation
1020 If you are not in Emacs at the moment but you wish to use Calc,
1021 you must start Emacs first. If all you want is to run Calc, you
1022 can give the commands:
1023
1024 @example
1025 emacs -f full-calc
1026 @end example
1027
1028 @noindent
1029 or
1030
1031 @example
1032 emacs -f full-calc-keypad
1033 @end example
1034
1035 @noindent
1036 which run a full-screen Calculator (as if by @kbd{M-# b M-# c}) or
1037 a full-screen X-based Calculator (as if by @kbd{M-# b M-# k}).
1038 In standalone operation, quitting the Calculator (by pressing
1039 @kbd{q} or clicking on the keypad @key{EXIT} button) quits Emacs
1040 itself.
1041
1042 @node Embedded Mode Overview, Other M-# Commands, Standalone Operation, Using Calc
1043 @subsection Embedded Mode (Overview)
1044
1045 @noindent
1046 @dfn{Embedded mode} is a way to use Calc directly from inside an
1047 editing buffer. Suppose you have a formula written as part of a
1048 document like this:
1049
1050 @smallexample
1051 @group
1052 The derivative of
1053
1054 ln(ln(x))
1055
1056 is
1057 @end group
1058 @end smallexample
1059
1060 @noindent
1061 and you wish to have Calc compute and format the derivative for
1062 you and store this derivative in the buffer automatically. To
1063 do this with Embedded mode, first copy the formula down to where
1064 you want the result to be:
1065
1066 @smallexample
1067 @group
1068 The derivative of
1069
1070 ln(ln(x))
1071
1072 is
1073
1074 ln(ln(x))
1075 @end group
1076 @end smallexample
1077
1078 Now, move the cursor onto this new formula and press @kbd{M-# e}.
1079 Calc will read the formula (using the surrounding blank lines to
1080 tell how much text to read), then push this formula (invisibly)
1081 onto the Calc stack. The cursor will stay on the formula in the
1082 editing buffer, but the buffer's mode line will change to look
1083 like the Calc mode line (with mode indicators like @samp{12 Deg}
1084 and so on). Even though you are still in your editing buffer,
1085 the keyboard now acts like the Calc keyboard, and any new result
1086 you get is copied from the stack back into the buffer. To take
1087 the derivative, you would type @kbd{a d x @key{RET}}.
1088
1089 @smallexample
1090 @group
1091 The derivative of
1092
1093 ln(ln(x))
1094
1095 is
1096
1097 1 / ln(x) x
1098 @end group
1099 @end smallexample
1100
1101 To make this look nicer, you might want to press @kbd{d =} to center
1102 the formula, and even @kbd{d B} to use Big display mode.
1103
1104 @smallexample
1105 @group
1106 The derivative of
1107
1108 ln(ln(x))
1109
1110 is
1111 % [calc-mode: justify: center]
1112 % [calc-mode: language: big]
1113
1114 1
1115 -------
1116 ln(x) x
1117 @end group
1118 @end smallexample
1119
1120 Calc has added annotations to the file to help it remember the modes
1121 that were used for this formula. They are formatted like comments
1122 in the @TeX{} typesetting language, just in case you are using @TeX{}.
1123 (In this example @TeX{} is not being used, so you might want to move
1124 these comments up to the top of the file or otherwise put them out
1125 of the way.)
1126
1127 As an extra flourish, we can add an equation number using a
1128 righthand label: Type @kbd{d @} (1) @key{RET}}.
1129
1130 @smallexample
1131 @group
1132 % [calc-mode: justify: center]
1133 % [calc-mode: language: big]
1134 % [calc-mode: right-label: " (1)"]
1135
1136 1
1137 ------- (1)
1138 ln(x) x
1139 @end group
1140 @end smallexample
1141
1142 To leave Embedded mode, type @kbd{M-# e} again. The mode line
1143 and keyboard will revert to the way they were before. (If you have
1144 actually been trying this as you read along, you'll want to press
1145 @kbd{M-# 0} [with the digit zero] now to reset the modes you changed.)
1146
1147 The related command @kbd{M-# w} operates on a single word, which
1148 generally means a single number, inside text. It uses any
1149 non-numeric characters rather than blank lines to delimit the
1150 formula it reads. Here's an example of its use:
1151
1152 @smallexample
1153 A slope of one-third corresponds to an angle of 1 degrees.
1154 @end smallexample
1155
1156 Place the cursor on the @samp{1}, then type @kbd{M-# w} to enable
1157 Embedded mode on that number. Now type @kbd{3 /} (to get one-third),
1158 and @kbd{I T} (the Inverse Tangent converts a slope into an angle),
1159 then @w{@kbd{M-# w}} again to exit Embedded mode.
1160
1161 @smallexample
1162 A slope of one-third corresponds to an angle of 18.4349488229 degrees.
1163 @end smallexample
1164
1165 @c [fix-ref Embedded Mode]
1166 @xref{Embedded Mode}, for full details.
1167
1168 @node Other M-# Commands, , Embedded Mode Overview, Using Calc
1169 @subsection Other @kbd{M-#} Commands
1170
1171 @noindent
1172 Two more Calc-related commands are @kbd{M-# g} and @kbd{M-# r},
1173 which ``grab'' data from a selected region of a buffer into the
1174 Calculator. The region is defined in the usual Emacs way, by
1175 a ``mark'' placed at one end of the region, and the Emacs
1176 cursor or ``point'' placed at the other.
1177
1178 The @kbd{M-# g} command reads the region in the usual left-to-right,
1179 top-to-bottom order. The result is packaged into a Calc vector
1180 of numbers and placed on the stack. Calc (in its standard
1181 user interface) is then started. Type @kbd{v u} if you want
1182 to unpack this vector into separate numbers on the stack. Also,
1183 @kbd{C-u M-# g} interprets the region as a single number or
1184 formula.
1185
1186 The @kbd{M-# r} command reads a rectangle, with the point and
1187 mark defining opposite corners of the rectangle. The result
1188 is a matrix of numbers on the Calculator stack.
1189
1190 Complementary to these is @kbd{M-# y}, which ``yanks'' the
1191 value at the top of the Calc stack back into an editing buffer.
1192 If you type @w{@kbd{M-# y}} while in such a buffer, the value is
1193 yanked at the current position. If you type @kbd{M-# y} while
1194 in the Calc buffer, Calc makes an educated guess as to which
1195 editing buffer you want to use. The Calc window does not have
1196 to be visible in order to use this command, as long as there
1197 is something on the Calc stack.
1198
1199 Here, for reference, is the complete list of @kbd{M-#} commands.
1200 The shift, control, and meta keys are ignored for the keystroke
1201 following @kbd{M-#}.
1202
1203 @noindent
1204 Commands for turning Calc on and off:
1205
1206 @table @kbd
1207 @item #
1208 Turn Calc on or off, employing the same user interface as last time.
1209
1210 @item C
1211 Turn Calc on or off using its standard bottom-of-the-screen
1212 interface. If Calc is already turned on but the cursor is not
1213 in the Calc window, move the cursor into the window.
1214
1215 @item O
1216 Same as @kbd{C}, but don't select the new Calc window. If
1217 Calc is already turned on and the cursor is in the Calc window,
1218 move it out of that window.
1219
1220 @item B
1221 Control whether @kbd{M-# c} and @kbd{M-# k} use the full screen.
1222
1223 @item Q
1224 Use Quick mode for a single short calculation.
1225
1226 @item K
1227 Turn Calc Keypad mode on or off.
1228
1229 @item E
1230 Turn Calc Embedded mode on or off at the current formula.
1231
1232 @item J
1233 Turn Calc Embedded mode on or off, select the interesting part.
1234
1235 @item W
1236 Turn Calc Embedded mode on or off at the current word (number).
1237
1238 @item Z
1239 Turn Calc on in a user-defined way, as defined by a @kbd{Z I} command.
1240
1241 @item X
1242 Quit Calc; turn off standard, Keypad, or Embedded mode if on.
1243 (This is like @kbd{q} or @key{OFF} inside of Calc.)
1244 @end table
1245 @iftex
1246 @sp 2
1247 @end iftex
1248
1249 @noindent
1250 Commands for moving data into and out of the Calculator:
1251
1252 @table @kbd
1253 @item G
1254 Grab the region into the Calculator as a vector.
1255
1256 @item R
1257 Grab the rectangular region into the Calculator as a matrix.
1258
1259 @item :
1260 Grab the rectangular region and compute the sums of its columns.
1261
1262 @item _
1263 Grab the rectangular region and compute the sums of its rows.
1264
1265 @item Y
1266 Yank a value from the Calculator into the current editing buffer.
1267 @end table
1268 @iftex
1269 @sp 2
1270 @end iftex
1271
1272 @noindent
1273 Commands for use with Embedded mode:
1274
1275 @table @kbd
1276 @item A
1277 ``Activate'' the current buffer. Locate all formulas that
1278 contain @samp{:=} or @samp{=>} symbols and record their locations
1279 so that they can be updated automatically as variables are changed.
1280
1281 @item D
1282 Duplicate the current formula immediately below and select
1283 the duplicate.
1284
1285 @item F
1286 Insert a new formula at the current point.
1287
1288 @item N
1289 Move the cursor to the next active formula in the buffer.
1290
1291 @item P
1292 Move the cursor to the previous active formula in the buffer.
1293
1294 @item U
1295 Update (i.e., as if by the @kbd{=} key) the formula at the current point.
1296
1297 @item `
1298 Edit (as if by @code{calc-edit}) the formula at the current point.
1299 @end table
1300 @iftex
1301 @sp 2
1302 @end iftex
1303
1304 @noindent
1305 Miscellaneous commands:
1306
1307 @table @kbd
1308 @item I
1309 Run the Emacs Info system to read the Calc manual.
1310 (This is the same as @kbd{h i} inside of Calc.)
1311
1312 @item T
1313 Run the Emacs Info system to read the Calc Tutorial.
1314
1315 @item S
1316 Run the Emacs Info system to read the Calc Summary.
1317
1318 @item L
1319 Load Calc entirely into memory. (Normally the various parts
1320 are loaded only as they are needed.)
1321
1322 @item M
1323 Read a region of written keystroke names (like @kbd{C-n a b c @key{RET}})
1324 and record them as the current keyboard macro.
1325
1326 @item 0
1327 (This is the ``zero'' digit key.) Reset the Calculator to
1328 its default state: Empty stack, and default mode settings.
1329 With any prefix argument, reset everything but the stack.
1330 @end table
1331
1332 @node History and Acknowledgements, , Using Calc, Getting Started
1333 @section History and Acknowledgements
1334
1335 @noindent
1336 Calc was originally started as a two-week project to occupy a lull
1337 in the author's schedule. Basically, a friend asked if I remembered
1338 the value of
1339 @texline @math{2^{32}}.
1340 @infoline @expr{2^32}.
1341 I didn't offhand, but I said, ``that's easy, just call up an
1342 @code{xcalc}.'' @code{Xcalc} duly reported that the answer to our
1343 question was @samp{4.294967e+09}---with no way to see the full ten
1344 digits even though we knew they were there in the program's memory! I
1345 was so annoyed, I vowed to write a calculator of my own, once and for
1346 all.
1347
1348 I chose Emacs Lisp, a) because I had always been curious about it
1349 and b) because, being only a text editor extension language after
1350 all, Emacs Lisp would surely reach its limits long before the project
1351 got too far out of hand.
1352
1353 To make a long story short, Emacs Lisp turned out to be a distressingly
1354 solid implementation of Lisp, and the humble task of calculating
1355 turned out to be more open-ended than one might have expected.
1356
1357 Emacs Lisp doesn't have built-in floating point math, so it had to be
1358 simulated in software. In fact, Emacs integers will only comfortably
1359 fit six decimal digits or so---not enough for a decent calculator. So
1360 I had to write my own high-precision integer code as well, and once I had
1361 this I figured that arbitrary-size integers were just as easy as large
1362 integers. Arbitrary floating-point precision was the logical next step.
1363 Also, since the large integer arithmetic was there anyway it seemed only
1364 fair to give the user direct access to it, which in turn made it practical
1365 to support fractions as well as floats. All these features inspired me
1366 to look around for other data types that might be worth having.
1367
1368 Around this time, my friend Rick Koshi showed me his nifty new HP-28
1369 calculator. It allowed the user to manipulate formulas as well as
1370 numerical quantities, and it could also operate on matrices. I decided
1371 that these would be good for Calc to have, too. And once things had
1372 gone this far, I figured I might as well take a look at serious algebra
1373 systems like Mathematica, Macsyma, and Maple for further ideas. Since
1374 these systems did far more than I could ever hope to implement, I decided
1375 to focus on rewrite rules and other programming features so that users
1376 could implement what they needed for themselves.
1377
1378 Rick complained that matrices were hard to read, so I put in code to
1379 format them in a 2D style. Once these routines were in place, Big mode
1380 was obligatory. Gee, what other language modes would be useful?
1381
1382 Scott Hemphill and Allen Knutson, two friends with a strong mathematical
1383 bent, contributed ideas and algorithms for a number of Calc features
1384 including modulo forms, primality testing, and float-to-fraction conversion.
1385
1386 Units were added at the eager insistence of Mass Sivilotti. Later,
1387 Ulrich Mueller at CERN and Przemek Klosowski at NIST provided invaluable
1388 expert assistance with the units table. As far as I can remember, the
1389 idea of using algebraic formulas and variables to represent units dates
1390 back to an ancient article in Byte magazine about muMath, an early
1391 algebra system for microcomputers.
1392
1393 Many people have contributed to Calc by reporting bugs and suggesting
1394 features, large and small. A few deserve special mention: Tim Peters,
1395 who helped develop the ideas that led to the selection commands, rewrite
1396 rules, and many other algebra features;
1397 @texline Fran\c cois
1398 @infoline Francois
1399 Pinard, who contributed an early prototype of the Calc Summary appendix
1400 as well as providing valuable suggestions in many other areas of Calc;
1401 Carl Witty, whose eagle eyes discovered many typographical and factual
1402 errors in the Calc manual; Tim Kay, who drove the development of
1403 Embedded mode; Ove Ewerlid, who made many suggestions relating to the
1404 algebra commands and contributed some code for polynomial operations;
1405 Randal Schwartz, who suggested the @code{calc-eval} function; Robert
1406 J. Chassell, who suggested the Calc Tutorial and exercises; and Juha
1407 Sarlin, who first worked out how to split Calc into quickly-loading
1408 parts. Bob Weiner helped immensely with the Lucid Emacs port.
1409
1410 @cindex Bibliography
1411 @cindex Knuth, Art of Computer Programming
1412 @cindex Numerical Recipes
1413 @c Should these be expanded into more complete references?
1414 Among the books used in the development of Calc were Knuth's @emph{Art
1415 of Computer Programming} (especially volume II, @emph{Seminumerical
1416 Algorithms}); @emph{Numerical Recipes} by Press, Flannery, Teukolsky,
1417 and Vetterling; Bevington's @emph{Data Reduction and Error Analysis for
1418 the Physical Sciences}; @emph{Concrete Mathematics} by Graham, Knuth,
1419 and Patashnik; Steele's @emph{Common Lisp, the Language}; the @emph{CRC
1420 Standard Math Tables} (William H. Beyer, ed.); and Abramowitz and
1421 Stegun's venerable @emph{Handbook of Mathematical Functions}. I
1422 consulted the user's manuals for the HP-28 and HP-48 calculators, as
1423 well as for the programs Mathematica, SMP, Macsyma, Maple, MathCAD,
1424 Gnuplot, and others. Also, of course, Calc could not have been written
1425 without the excellent @emph{GNU Emacs Lisp Reference Manual}, by Bil
1426 Lewis and Dan LaLiberte.
1427
1428 Final thanks go to Richard Stallman, without whose fine implementations
1429 of the Emacs editor, language, and environment, Calc would have been
1430 finished in two weeks.
1431
1432 @c [tutorial]
1433
1434 @ifinfo
1435 @c This node is accessed by the `M-# t' command.
1436 @node Interactive Tutorial, , , Top
1437 @chapter Tutorial
1438
1439 @noindent
1440 Some brief instructions on using the Emacs Info system for this tutorial:
1441
1442 Press the space bar and Delete keys to go forward and backward in a
1443 section by screenfuls (or use the regular Emacs scrolling commands
1444 for this).
1445
1446 Press @kbd{n} or @kbd{p} to go to the Next or Previous section.
1447 If the section has a @dfn{menu}, press a digit key like @kbd{1}
1448 or @kbd{2} to go to a sub-section from the menu. Press @kbd{u} to
1449 go back up from a sub-section to the menu it is part of.
1450
1451 Exercises in the tutorial all have cross-references to the
1452 appropriate page of the ``answers'' section. Press @kbd{f}, then
1453 the exercise number, to see the answer to an exercise. After
1454 you have followed a cross-reference, you can press the letter
1455 @kbd{l} to return to where you were before.
1456
1457 You can press @kbd{?} at any time for a brief summary of Info commands.
1458
1459 Press @kbd{1} now to enter the first section of the Tutorial.
1460
1461 @menu
1462 * Tutorial::
1463 @end menu
1464 @end ifinfo
1465
1466 @node Tutorial, Introduction, Getting Started, Top
1467 @chapter Tutorial
1468
1469 @noindent
1470 This chapter explains how to use Calc and its many features, in
1471 a step-by-step, tutorial way. You are encouraged to run Calc and
1472 work along with the examples as you read (@pxref{Starting Calc}).
1473 If you are already familiar with advanced calculators, you may wish
1474 @c [not-split]
1475 to skip on to the rest of this manual.
1476 @c [when-split]
1477 @c to skip on to volume II of this manual, the @dfn{Calc Reference}.
1478
1479 @c [fix-ref Embedded Mode]
1480 This tutorial describes the standard user interface of Calc only.
1481 The Quick mode and Keypad mode interfaces are fairly
1482 self-explanatory. @xref{Embedded Mode}, for a description of
1483 the Embedded mode interface.
1484
1485 @ifinfo
1486 The easiest way to read this tutorial on-line is to have two windows on
1487 your Emacs screen, one with Calc and one with the Info system. (If you
1488 have a printed copy of the manual you can use that instead.) Press
1489 @kbd{M-# c} to turn Calc on or to switch into the Calc window, and
1490 press @kbd{M-# i} to start the Info system or to switch into its window.
1491 Or, you may prefer to use the tutorial in printed form.
1492 @end ifinfo
1493 @iftex
1494 The easiest way to read this tutorial on-line is to have two windows on
1495 your Emacs screen, one with Calc and one with the Info system. (If you
1496 have a printed copy of the manual you can use that instead.) Press
1497 @kbd{M-# c} to turn Calc on or to switch into the Calc window, and
1498 press @kbd{M-# i} to start the Info system or to switch into its window.
1499 @end iftex
1500
1501 This tutorial is designed to be done in sequence. But the rest of this
1502 manual does not assume you have gone through the tutorial. The tutorial
1503 does not cover everything in the Calculator, but it touches on most
1504 general areas.
1505
1506 @ifinfo
1507 You may wish to print out a copy of the Calc Summary and keep notes on
1508 it as you learn Calc. @xref{Installation}, to see how to make a printed
1509 summary. @xref{Summary}.
1510 @end ifinfo
1511 @iftex
1512 The Calc Summary at the end of the reference manual includes some blank
1513 space for your own use. You may wish to keep notes there as you learn
1514 Calc.
1515 @end iftex
1516
1517 @menu
1518 * Basic Tutorial::
1519 * Arithmetic Tutorial::
1520 * Vector/Matrix Tutorial::
1521 * Types Tutorial::
1522 * Algebra Tutorial::
1523 * Programming Tutorial::
1524
1525 * Answers to Exercises::
1526 @end menu
1527
1528 @node Basic Tutorial, Arithmetic Tutorial, Tutorial, Tutorial
1529 @section Basic Tutorial
1530
1531 @noindent
1532 In this section, we learn how RPN and algebraic-style calculations
1533 work, how to undo and redo an operation done by mistake, and how
1534 to control various modes of the Calculator.
1535
1536 @menu
1537 * RPN Tutorial:: Basic operations with the stack.
1538 * Algebraic Tutorial:: Algebraic entry; variables.
1539 * Undo Tutorial:: If you make a mistake: Undo and the trail.
1540 * Modes Tutorial:: Common mode-setting commands.
1541 @end menu
1542
1543 @node RPN Tutorial, Algebraic Tutorial, Basic Tutorial, Basic Tutorial
1544 @subsection RPN Calculations and the Stack
1545
1546 @cindex RPN notation
1547 @ifinfo
1548 @noindent
1549 Calc normally uses RPN notation. You may be familiar with the RPN
1550 system from Hewlett-Packard calculators, FORTH, or PostScript.
1551 (Reverse Polish Notation, RPN, is named after the Polish mathematician
1552 Jan Lukasiewicz.)
1553 @end ifinfo
1554 @tex
1555 \noindent
1556 Calc normally uses RPN notation. You may be familiar with the RPN
1557 system from Hewlett-Packard calculators, FORTH, or PostScript.
1558 (Reverse Polish Notation, RPN, is named after the Polish mathematician
1559 Jan \L ukasiewicz.)
1560 @end tex
1561
1562 The central component of an RPN calculator is the @dfn{stack}. A
1563 calculator stack is like a stack of dishes. New dishes (numbers) are
1564 added at the top of the stack, and numbers are normally only removed
1565 from the top of the stack.
1566
1567 @cindex Operators
1568 @cindex Operands
1569 In an operation like @expr{2+3}, the 2 and 3 are called the @dfn{operands}
1570 and the @expr{+} is the @dfn{operator}. In an RPN calculator you always
1571 enter the operands first, then the operator. Each time you type a
1572 number, Calc adds or @dfn{pushes} it onto the top of the Stack.
1573 When you press an operator key like @kbd{+}, Calc @dfn{pops} the appropriate
1574 number of operands from the stack and pushes back the result.
1575
1576 Thus we could add the numbers 2 and 3 in an RPN calculator by typing:
1577 @kbd{2 @key{RET} 3 @key{RET} +}. (The @key{RET} key, Return, corresponds to
1578 the @key{ENTER} key on traditional RPN calculators.) Try this now if
1579 you wish; type @kbd{M-# c} to switch into the Calc window (you can type
1580 @kbd{M-# c} again or @kbd{M-# o} to switch back to the Tutorial window).
1581 The first four keystrokes ``push'' the numbers 2 and 3 onto the stack.
1582 The @kbd{+} key ``pops'' the top two numbers from the stack, adds them,
1583 and pushes the result (5) back onto the stack. Here's how the stack
1584 will look at various points throughout the calculation:
1585
1586 @smallexample
1587 @group
1588 . 1: 2 2: 2 1: 5 .
1589 . 1: 3 .
1590 .
1591
1592 M-# c 2 @key{RET} 3 @key{RET} + @key{DEL}
1593 @end group
1594 @end smallexample
1595
1596 The @samp{.} symbol is a marker that represents the top of the stack.
1597 Note that the ``top'' of the stack is really shown at the bottom of
1598 the Stack window. This may seem backwards, but it turns out to be
1599 less distracting in regular use.
1600
1601 @cindex Stack levels
1602 @cindex Levels of stack
1603 The numbers @samp{1:} and @samp{2:} on the left are @dfn{stack level
1604 numbers}. Old RPN calculators always had four stack levels called
1605 @expr{x}, @expr{y}, @expr{z}, and @expr{t}. Calc's stack can grow
1606 as large as you like, so it uses numbers instead of letters. Some
1607 stack-manipulation commands accept a numeric argument that says
1608 which stack level to work on. Normal commands like @kbd{+} always
1609 work on the top few levels of the stack.
1610
1611 @c [fix-ref Truncating the Stack]
1612 The Stack buffer is just an Emacs buffer, and you can move around in
1613 it using the regular Emacs motion commands. But no matter where the
1614 cursor is, even if you have scrolled the @samp{.} marker out of
1615 view, most Calc commands always move the cursor back down to level 1
1616 before doing anything. It is possible to move the @samp{.} marker
1617 upwards through the stack, temporarily ``hiding'' some numbers from
1618 commands like @kbd{+}. This is called @dfn{stack truncation} and
1619 we will not cover it in this tutorial; @pxref{Truncating the Stack},
1620 if you are interested.
1621
1622 You don't really need the second @key{RET} in @kbd{2 @key{RET} 3
1623 @key{RET} +}. That's because if you type any operator name or
1624 other non-numeric key when you are entering a number, the Calculator
1625 automatically enters that number and then does the requested command.
1626 Thus @kbd{2 @key{RET} 3 +} will work just as well.
1627
1628 Examples in this tutorial will often omit @key{RET} even when the
1629 stack displays shown would only happen if you did press @key{RET}:
1630
1631 @smallexample
1632 @group
1633 1: 2 2: 2 1: 5
1634 . 1: 3 .
1635 .
1636
1637 2 @key{RET} 3 +
1638 @end group
1639 @end smallexample
1640
1641 @noindent
1642 Here, after pressing @kbd{3} the stack would really show @samp{1: 2}
1643 with @samp{Calc:@: 3} in the minibuffer. In these situations, you can
1644 press the optional @key{RET} to see the stack as the figure shows.
1645
1646 (@bullet{}) @strong{Exercise 1.} (This tutorial will include exercises
1647 at various points. Try them if you wish. Answers to all the exercises
1648 are located at the end of the Tutorial chapter. Each exercise will
1649 include a cross-reference to its particular answer. If you are
1650 reading with the Emacs Info system, press @kbd{f} and the
1651 exercise number to go to the answer, then the letter @kbd{l} to
1652 return to where you were.)
1653
1654 @noindent
1655 Here's the first exercise: What will the keystrokes @kbd{1 @key{RET} 2
1656 @key{RET} 3 @key{RET} 4 + * -} compute? (@samp{*} is the symbol for
1657 multiplication.) Figure it out by hand, then try it with Calc to see
1658 if you're right. @xref{RPN Answer 1, 1}. (@bullet{})
1659
1660 (@bullet{}) @strong{Exercise 2.} Compute
1661 @texline @math{(2\times4) + (7\times9.4) + {5\over4}}
1662 @infoline @expr{2*4 + 7*9.5 + 5/4}
1663 using the stack. @xref{RPN Answer 2, 2}. (@bullet{})
1664
1665 The @key{DEL} key is called Backspace on some keyboards. It is
1666 whatever key you would use to correct a simple typing error when
1667 regularly using Emacs. The @key{DEL} key pops and throws away the
1668 top value on the stack. (You can still get that value back from
1669 the Trail if you should need it later on.) There are many places
1670 in this tutorial where we assume you have used @key{DEL} to erase the
1671 results of the previous example at the beginning of a new example.
1672 In the few places where it is really important to use @key{DEL} to
1673 clear away old results, the text will remind you to do so.
1674
1675 (It won't hurt to let things accumulate on the stack, except that
1676 whenever you give a display-mode-changing command Calc will have to
1677 spend a long time reformatting such a large stack.)
1678
1679 Since the @kbd{-} key is also an operator (it subtracts the top two
1680 stack elements), how does one enter a negative number? Calc uses
1681 the @kbd{_} (underscore) key to act like the minus sign in a number.
1682 So, typing @kbd{-5 @key{RET}} won't work because the @kbd{-} key
1683 will try to do a subtraction, but @kbd{_5 @key{RET}} works just fine.
1684
1685 You can also press @kbd{n}, which means ``change sign.'' It changes
1686 the number at the top of the stack (or the number being entered)
1687 from positive to negative or vice-versa: @kbd{5 n @key{RET}}.
1688
1689 @cindex Duplicating a stack entry
1690 If you press @key{RET} when you're not entering a number, the effect
1691 is to duplicate the top number on the stack. Consider this calculation:
1692
1693 @smallexample
1694 @group
1695 1: 3 2: 3 1: 9 2: 9 1: 81
1696 . 1: 3 . 1: 9 .
1697 . .
1698
1699 3 @key{RET} @key{RET} * @key{RET} *
1700 @end group
1701 @end smallexample
1702
1703 @noindent
1704 (Of course, an easier way to do this would be @kbd{3 @key{RET} 4 ^},
1705 to raise 3 to the fourth power.)
1706
1707 The space-bar key (denoted @key{SPC} here) performs the same function
1708 as @key{RET}; you could replace all three occurrences of @key{RET} in
1709 the above example with @key{SPC} and the effect would be the same.
1710
1711 @cindex Exchanging stack entries
1712 Another stack manipulation key is @key{TAB}. This exchanges the top
1713 two stack entries. Suppose you have computed @kbd{2 @key{RET} 3 +}
1714 to get 5, and then you realize what you really wanted to compute
1715 was @expr{20 / (2+3)}.
1716
1717 @smallexample
1718 @group
1719 1: 5 2: 5 2: 20 1: 4
1720 . 1: 20 1: 5 .
1721 . .
1722
1723 2 @key{RET} 3 + 20 @key{TAB} /
1724 @end group
1725 @end smallexample
1726
1727 @noindent
1728 Planning ahead, the calculation would have gone like this:
1729
1730 @smallexample
1731 @group
1732 1: 20 2: 20 3: 20 2: 20 1: 4
1733 . 1: 2 2: 2 1: 5 .
1734 . 1: 3 .
1735 .
1736
1737 20 @key{RET} 2 @key{RET} 3 + /
1738 @end group
1739 @end smallexample
1740
1741 A related stack command is @kbd{M-@key{TAB}} (hold @key{META} and type
1742 @key{TAB}). It rotates the top three elements of the stack upward,
1743 bringing the object in level 3 to the top.
1744
1745 @smallexample
1746 @group
1747 1: 10 2: 10 3: 10 3: 20 3: 30
1748 . 1: 20 2: 20 2: 30 2: 10
1749 . 1: 30 1: 10 1: 20
1750 . . .
1751
1752 10 @key{RET} 20 @key{RET} 30 @key{RET} M-@key{TAB} M-@key{TAB}
1753 @end group
1754 @end smallexample
1755
1756 (@bullet{}) @strong{Exercise 3.} Suppose the numbers 10, 20, and 30 are
1757 on the stack. Figure out how to add one to the number in level 2
1758 without affecting the rest of the stack. Also figure out how to add
1759 one to the number in level 3. @xref{RPN Answer 3, 3}. (@bullet{})
1760
1761 Operations like @kbd{+}, @kbd{-}, @kbd{*}, @kbd{/}, and @kbd{^} pop two
1762 arguments from the stack and push a result. Operations like @kbd{n} and
1763 @kbd{Q} (square root) pop a single number and push the result. You can
1764 think of them as simply operating on the top element of the stack.
1765
1766 @smallexample
1767 @group
1768 1: 3 1: 9 2: 9 1: 25 1: 5
1769 . . 1: 16 . .
1770 .
1771
1772 3 @key{RET} @key{RET} * 4 @key{RET} @key{RET} * + Q
1773 @end group
1774 @end smallexample
1775
1776 @noindent
1777 (Note that capital @kbd{Q} means to hold down the Shift key while
1778 typing @kbd{q}. Remember, plain unshifted @kbd{q} is the Quit command.)
1779
1780 @cindex Pythagorean Theorem
1781 Here we've used the Pythagorean Theorem to determine the hypotenuse of a
1782 right triangle. Calc actually has a built-in command for that called
1783 @kbd{f h}, but let's suppose we can't remember the necessary keystrokes.
1784 We can still enter it by its full name using @kbd{M-x} notation:
1785
1786 @smallexample
1787 @group
1788 1: 3 2: 3 1: 5
1789 . 1: 4 .
1790 .
1791
1792 3 @key{RET} 4 @key{RET} M-x calc-hypot
1793 @end group
1794 @end smallexample
1795
1796 All Calculator commands begin with the word @samp{calc-}. Since it
1797 gets tiring to type this, Calc provides an @kbd{x} key which is just
1798 like the regular Emacs @kbd{M-x} key except that it types the @samp{calc-}
1799 prefix for you:
1800
1801 @smallexample
1802 @group
1803 1: 3 2: 3 1: 5
1804 . 1: 4 .
1805 .
1806
1807 3 @key{RET} 4 @key{RET} x hypot
1808 @end group
1809 @end smallexample
1810
1811 What happens if you take the square root of a negative number?
1812
1813 @smallexample
1814 @group
1815 1: 4 1: -4 1: (0, 2)
1816 . . .
1817
1818 4 @key{RET} n Q
1819 @end group
1820 @end smallexample
1821
1822 @noindent
1823 The notation @expr{(a, b)} represents a complex number.
1824 Complex numbers are more traditionally written @expr{a + b i};
1825 Calc can display in this format, too, but for now we'll stick to the
1826 @expr{(a, b)} notation.
1827
1828 If you don't know how complex numbers work, you can safely ignore this
1829 feature. Complex numbers only arise from operations that would be
1830 errors in a calculator that didn't have complex numbers. (For example,
1831 taking the square root or logarithm of a negative number produces a
1832 complex result.)
1833
1834 Complex numbers are entered in the notation shown. The @kbd{(} and
1835 @kbd{,} and @kbd{)} keys manipulate ``incomplete complex numbers.''
1836
1837 @smallexample
1838 @group
1839 1: ( ... 2: ( ... 1: (2, ... 1: (2, ... 1: (2, 3)
1840 . 1: 2 . 3 .
1841 . .
1842
1843 ( 2 , 3 )
1844 @end group
1845 @end smallexample
1846
1847 You can perform calculations while entering parts of incomplete objects.
1848 However, an incomplete object cannot actually participate in a calculation:
1849
1850 @smallexample
1851 @group
1852 1: ( ... 2: ( ... 3: ( ... 1: ( ... 1: ( ...
1853 . 1: 2 2: 2 5 5
1854 . 1: 3 . .
1855 .
1856 (error)
1857 ( 2 @key{RET} 3 + +
1858 @end group
1859 @end smallexample
1860
1861 @noindent
1862 Adding 5 to an incomplete object makes no sense, so the last command
1863 produces an error message and leaves the stack the same.
1864
1865 Incomplete objects can't participate in arithmetic, but they can be
1866 moved around by the regular stack commands.
1867
1868 @smallexample
1869 @group
1870 2: 2 3: 2 3: 3 1: ( ... 1: (2, 3)
1871 1: 3 2: 3 2: ( ... 2 .
1872 . 1: ( ... 1: 2 3
1873 . . .
1874
1875 2 @key{RET} 3 @key{RET} ( M-@key{TAB} M-@key{TAB} )
1876 @end group
1877 @end smallexample
1878
1879 @noindent
1880 Note that the @kbd{,} (comma) key did not have to be used here.
1881 When you press @kbd{)} all the stack entries between the incomplete
1882 entry and the top are collected, so there's never really a reason
1883 to use the comma. It's up to you.
1884
1885 (@bullet{}) @strong{Exercise 4.} To enter the complex number @expr{(2, 3)},
1886 your friend Joe typed @kbd{( 2 , @key{SPC} 3 )}. What happened?
1887 (Joe thought of a clever way to correct his mistake in only two
1888 keystrokes, but it didn't quite work. Try it to find out why.)
1889 @xref{RPN Answer 4, 4}. (@bullet{})
1890
1891 Vectors are entered the same way as complex numbers, but with square
1892 brackets in place of parentheses. We'll meet vectors again later in
1893 the tutorial.
1894
1895 Any Emacs command can be given a @dfn{numeric prefix argument} by
1896 typing a series of @key{META}-digits beforehand. If @key{META} is
1897 awkward for you, you can instead type @kbd{C-u} followed by the
1898 necessary digits. Numeric prefix arguments can be negative, as in
1899 @kbd{M-- M-3 M-5} or @w{@kbd{C-u - 3 5}}. Calc commands use numeric
1900 prefix arguments in a variety of ways. For example, a numeric prefix
1901 on the @kbd{+} operator adds any number of stack entries at once:
1902
1903 @smallexample
1904 @group
1905 1: 10 2: 10 3: 10 3: 10 1: 60
1906 . 1: 20 2: 20 2: 20 .
1907 . 1: 30 1: 30
1908 . .
1909
1910 10 @key{RET} 20 @key{RET} 30 @key{RET} C-u 3 +
1911 @end group
1912 @end smallexample
1913
1914 For stack manipulation commands like @key{RET}, a positive numeric
1915 prefix argument operates on the top @var{n} stack entries at once. A
1916 negative argument operates on the entry in level @var{n} only. An
1917 argument of zero operates on the entire stack. In this example, we copy
1918 the second-to-top element of the stack:
1919
1920 @smallexample
1921 @group
1922 1: 10 2: 10 3: 10 3: 10 4: 10
1923 . 1: 20 2: 20 2: 20 3: 20
1924 . 1: 30 1: 30 2: 30
1925 . . 1: 20
1926 .
1927
1928 10 @key{RET} 20 @key{RET} 30 @key{RET} C-u -2 @key{RET}
1929 @end group
1930 @end smallexample
1931
1932 @cindex Clearing the stack
1933 @cindex Emptying the stack
1934 Another common idiom is @kbd{M-0 @key{DEL}}, which clears the stack.
1935 (The @kbd{M-0} numeric prefix tells @key{DEL} to operate on the
1936 entire stack.)
1937
1938 @node Algebraic Tutorial, Undo Tutorial, RPN Tutorial, Basic Tutorial
1939 @subsection Algebraic-Style Calculations
1940
1941 @noindent
1942 If you are not used to RPN notation, you may prefer to operate the
1943 Calculator in Algebraic mode, which is closer to the way
1944 non-RPN calculators work. In Algebraic mode, you enter formulas
1945 in traditional @expr{2+3} notation.
1946
1947 You don't really need any special ``mode'' to enter algebraic formulas.
1948 You can enter a formula at any time by pressing the apostrophe (@kbd{'})
1949 key. Answer the prompt with the desired formula, then press @key{RET}.
1950 The formula is evaluated and the result is pushed onto the RPN stack.
1951 If you don't want to think in RPN at all, you can enter your whole
1952 computation as a formula, read the result from the stack, then press
1953 @key{DEL} to delete it from the stack.
1954
1955 Try pressing the apostrophe key, then @kbd{2+3+4}, then @key{RET}.
1956 The result should be the number 9.
1957
1958 Algebraic formulas use the operators @samp{+}, @samp{-}, @samp{*},
1959 @samp{/}, and @samp{^}. You can use parentheses to make the order
1960 of evaluation clear. In the absence of parentheses, @samp{^} is
1961 evaluated first, then @samp{*}, then @samp{/}, then finally
1962 @samp{+} and @samp{-}. For example, the expression
1963
1964 @example
1965 2 + 3*4*5 / 6*7^8 - 9
1966 @end example
1967
1968 @noindent
1969 is equivalent to
1970
1971 @example
1972 2 + ((3*4*5) / (6*(7^8)) - 9
1973 @end example
1974
1975 @noindent
1976 or, in large mathematical notation,
1977
1978 @ifinfo
1979 @example
1980 @group
1981 3 * 4 * 5
1982 2 + --------- - 9
1983 8
1984 6 * 7
1985 @end group
1986 @end example
1987 @end ifinfo
1988 @tex
1989 \turnoffactive
1990 \beforedisplay
1991 $$ 2 + { 3 \times 4 \times 5 \over 6 \times 7^8 } - 9 $$
1992 \afterdisplay
1993 @end tex
1994
1995 @noindent
1996 The result of this expression will be the number @mathit{-6.99999826533}.
1997
1998 Calc's order of evaluation is the same as for most computer languages,
1999 except that @samp{*} binds more strongly than @samp{/}, as the above
2000 example shows. As in normal mathematical notation, the @samp{*} symbol
2001 can often be omitted: @samp{2 a} is the same as @samp{2*a}.
2002
2003 Operators at the same level are evaluated from left to right, except
2004 that @samp{^} is evaluated from right to left. Thus, @samp{2-3-4} is
2005 equivalent to @samp{(2-3)-4} or @mathit{-5}, whereas @samp{2^3^4} is equivalent
2006 to @samp{2^(3^4)} (a very large integer; try it!).
2007
2008 If you tire of typing the apostrophe all the time, there is
2009 Algebraic mode, where Calc automatically senses
2010 when you are about to type an algebraic expression. To enter this
2011 mode, press the two letters @w{@kbd{m a}}. (An @samp{Alg} indicator
2012 should appear in the Calc window's mode line.)
2013
2014 Press @kbd{m a}, then @kbd{2+3+4} with no apostrophe, then @key{RET}.
2015
2016 In Algebraic mode, when you press any key that would normally begin
2017 entering a number (such as a digit, a decimal point, or the @kbd{_}
2018 key), or if you press @kbd{(} or @kbd{[}, Calc automatically begins
2019 an algebraic entry.
2020
2021 Functions which do not have operator symbols like @samp{+} and @samp{*}
2022 must be entered in formulas using function-call notation. For example,
2023 the function name corresponding to the square-root key @kbd{Q} is
2024 @code{sqrt}. To compute a square root in a formula, you would use
2025 the notation @samp{sqrt(@var{x})}.
2026
2027 Press the apostrophe, then type @kbd{sqrt(5*2) - 3}. The result should
2028 be @expr{0.16227766017}.
2029
2030 Note that if the formula begins with a function name, you need to use
2031 the apostrophe even if you are in Algebraic mode. If you type @kbd{arcsin}
2032 out of the blue, the @kbd{a r} will be taken as an Algebraic Rewrite
2033 command, and the @kbd{csin} will be taken as the name of the rewrite
2034 rule to use!
2035
2036 Some people prefer to enter complex numbers and vectors in algebraic
2037 form because they find RPN entry with incomplete objects to be too
2038 distracting, even though they otherwise use Calc as an RPN calculator.
2039
2040 Still in Algebraic mode, type:
2041
2042 @smallexample
2043 @group
2044 1: (2, 3) 2: (2, 3) 1: (8, -1) 2: (8, -1) 1: (9, -1)
2045 . 1: (1, -2) . 1: 1 .
2046 . .
2047
2048 (2,3) @key{RET} (1,-2) @key{RET} * 1 @key{RET} +
2049 @end group
2050 @end smallexample
2051
2052 Algebraic mode allows us to enter complex numbers without pressing
2053 an apostrophe first, but it also means we need to press @key{RET}
2054 after every entry, even for a simple number like @expr{1}.
2055
2056 (You can type @kbd{C-u m a} to enable a special Incomplete Algebraic
2057 mode in which the @kbd{(} and @kbd{[} keys use algebraic entry even
2058 though regular numeric keys still use RPN numeric entry. There is also
2059 Total Algebraic mode, started by typing @kbd{m t}, in which all
2060 normal keys begin algebraic entry. You must then use the @key{META} key
2061 to type Calc commands: @kbd{M-m t} to get back out of Total Algebraic
2062 mode, @kbd{M-q} to quit, etc.)
2063
2064 If you're still in Algebraic mode, press @kbd{m a} again to turn it off.
2065
2066 Actual non-RPN calculators use a mixture of algebraic and RPN styles.
2067 In general, operators of two numbers (like @kbd{+} and @kbd{*})
2068 use algebraic form, but operators of one number (like @kbd{n} and @kbd{Q})
2069 use RPN form. Also, a non-RPN calculator allows you to see the
2070 intermediate results of a calculation as you go along. You can
2071 accomplish this in Calc by performing your calculation as a series
2072 of algebraic entries, using the @kbd{$} sign to tie them together.
2073 In an algebraic formula, @kbd{$} represents the number on the top
2074 of the stack. Here, we perform the calculation
2075 @texline @math{\sqrt{2\times4+1}},
2076 @infoline @expr{sqrt(2*4+1)},
2077 which on a traditional calculator would be done by pressing
2078 @kbd{2 * 4 + 1 =} and then the square-root key.
2079
2080 @smallexample
2081 @group
2082 1: 8 1: 9 1: 3
2083 . . .
2084
2085 ' 2*4 @key{RET} $+1 @key{RET} Q
2086 @end group
2087 @end smallexample
2088
2089 @noindent
2090 Notice that we didn't need to press an apostrophe for the @kbd{$+1},
2091 because the dollar sign always begins an algebraic entry.
2092
2093 (@bullet{}) @strong{Exercise 1.} How could you get the same effect as
2094 pressing @kbd{Q} but using an algebraic entry instead? How about
2095 if the @kbd{Q} key on your keyboard were broken?
2096 @xref{Algebraic Answer 1, 1}. (@bullet{})
2097
2098 The notations @kbd{$$}, @kbd{$$$}, and so on stand for higher stack
2099 entries. For example, @kbd{' $$+$ @key{RET}} is just like typing @kbd{+}.
2100
2101 Algebraic formulas can include @dfn{variables}. To store in a
2102 variable, press @kbd{s s}, then type the variable name, then press
2103 @key{RET}. (There are actually two flavors of store command:
2104 @kbd{s s} stores a number in a variable but also leaves the number
2105 on the stack, while @w{@kbd{s t}} removes a number from the stack and
2106 stores it in the variable.) A variable name should consist of one
2107 or more letters or digits, beginning with a letter.
2108
2109 @smallexample
2110 @group
2111 1: 17 . 1: a + a^2 1: 306
2112 . . .
2113
2114 17 s t a @key{RET} ' a+a^2 @key{RET} =
2115 @end group
2116 @end smallexample
2117
2118 @noindent
2119 The @kbd{=} key @dfn{evaluates} a formula by replacing all its
2120 variables by the values that were stored in them.
2121
2122 For RPN calculations, you can recall a variable's value on the
2123 stack either by entering its name as a formula and pressing @kbd{=},
2124 or by using the @kbd{s r} command.
2125
2126 @smallexample
2127 @group
2128 1: 17 2: 17 3: 17 2: 17 1: 306
2129 . 1: 17 2: 17 1: 289 .
2130 . 1: 2 .
2131 .
2132
2133 s r a @key{RET} ' a @key{RET} = 2 ^ +
2134 @end group
2135 @end smallexample
2136
2137 If you press a single digit for a variable name (as in @kbd{s t 3}, you
2138 get one of ten @dfn{quick variables} @code{q0} through @code{q9}.
2139 They are ``quick'' simply because you don't have to type the letter
2140 @code{q} or the @key{RET} after their names. In fact, you can type
2141 simply @kbd{s 3} as a shorthand for @kbd{s s 3}, and likewise for
2142 @kbd{t 3} and @w{@kbd{r 3}}.
2143
2144 Any variables in an algebraic formula for which you have not stored
2145 values are left alone, even when you evaluate the formula.
2146
2147 @smallexample
2148 @group
2149 1: 2 a + 2 b 1: 34 + 2 b
2150 . .
2151
2152 ' 2a+2b @key{RET} =
2153 @end group
2154 @end smallexample
2155
2156 Calls to function names which are undefined in Calc are also left
2157 alone, as are calls for which the value is undefined.
2158
2159 @smallexample
2160 @group
2161 1: 2 + log10(0) + log10(x) + log10(5, 6) + foo(3)
2162 .
2163
2164 ' log10(100) + log10(0) + log10(x) + log10(5,6) + foo(3) @key{RET}
2165 @end group
2166 @end smallexample
2167
2168 @noindent
2169 In this example, the first call to @code{log10} works, but the other
2170 calls are not evaluated. In the second call, the logarithm is
2171 undefined for that value of the argument; in the third, the argument
2172 is symbolic, and in the fourth, there are too many arguments. In the
2173 fifth case, there is no function called @code{foo}. You will see a
2174 ``Wrong number of arguments'' message referring to @samp{log10(5,6)}.
2175 Press the @kbd{w} (``why'') key to see any other messages that may
2176 have arisen from the last calculation. In this case you will get
2177 ``logarithm of zero,'' then ``number expected: @code{x}''. Calc
2178 automatically displays the first message only if the message is
2179 sufficiently important; for example, Calc considers ``wrong number
2180 of arguments'' and ``logarithm of zero'' to be important enough to
2181 report automatically, while a message like ``number expected: @code{x}''
2182 will only show up if you explicitly press the @kbd{w} key.
2183
2184 (@bullet{}) @strong{Exercise 2.} Joe entered the formula @samp{2 x y},
2185 stored 5 in @code{x}, pressed @kbd{=}, and got the expected result,
2186 @samp{10 y}. He then tried the same for the formula @samp{2 x (1+y)},
2187 expecting @samp{10 (1+y)}, but it didn't work. Why not?
2188 @xref{Algebraic Answer 2, 2}. (@bullet{})
2189
2190 (@bullet{}) @strong{Exercise 3.} What result would you expect
2191 @kbd{1 @key{RET} 0 /} to give? What if you then type @kbd{0 *}?
2192 @xref{Algebraic Answer 3, 3}. (@bullet{})
2193
2194 One interesting way to work with variables is to use the
2195 @dfn{evaluates-to} (@samp{=>}) operator. It works like this:
2196 Enter a formula algebraically in the usual way, but follow
2197 the formula with an @samp{=>} symbol. (There is also an @kbd{s =}
2198 command which builds an @samp{=>} formula using the stack.) On
2199 the stack, you will see two copies of the formula with an @samp{=>}
2200 between them. The lefthand formula is exactly like you typed it;
2201 the righthand formula has been evaluated as if by typing @kbd{=}.
2202
2203 @smallexample
2204 @group
2205 2: 2 + 3 => 5 2: 2 + 3 => 5
2206 1: 2 a + 2 b => 34 + 2 b 1: 2 a + 2 b => 20 + 2 b
2207 . .
2208
2209 ' 2+3 => @key{RET} ' 2a+2b @key{RET} s = 10 s t a @key{RET}
2210 @end group
2211 @end smallexample
2212
2213 @noindent
2214 Notice that the instant we stored a new value in @code{a}, all
2215 @samp{=>} operators already on the stack that referred to @expr{a}
2216 were updated to use the new value. With @samp{=>}, you can push a
2217 set of formulas on the stack, then change the variables experimentally
2218 to see the effects on the formulas' values.
2219
2220 You can also ``unstore'' a variable when you are through with it:
2221
2222 @smallexample
2223 @group
2224 2: 2 + 5 => 5
2225 1: 2 a + 2 b => 2 a + 2 b
2226 .
2227
2228 s u a @key{RET}
2229 @end group
2230 @end smallexample
2231
2232 We will encounter formulas involving variables and functions again
2233 when we discuss the algebra and calculus features of the Calculator.
2234
2235 @node Undo Tutorial, Modes Tutorial, Algebraic Tutorial, Basic Tutorial
2236 @subsection Undo and Redo
2237
2238 @noindent
2239 If you make a mistake, you can usually correct it by pressing shift-@kbd{U},
2240 the ``undo'' command. First, clear the stack (@kbd{M-0 @key{DEL}}) and exit
2241 and restart Calc (@kbd{M-# M-# M-# M-#}) to make sure things start off
2242 with a clean slate. Now:
2243
2244 @smallexample
2245 @group
2246 1: 2 2: 2 1: 8 2: 2 1: 6
2247 . 1: 3 . 1: 3 .
2248 . .
2249
2250 2 @key{RET} 3 ^ U *
2251 @end group
2252 @end smallexample
2253
2254 You can undo any number of times. Calc keeps a complete record of
2255 all you have done since you last opened the Calc window. After the
2256 above example, you could type:
2257
2258 @smallexample
2259 @group
2260 1: 6 2: 2 1: 2 . .
2261 . 1: 3 .
2262 .
2263 (error)
2264 U U U U
2265 @end group
2266 @end smallexample
2267
2268 You can also type @kbd{D} to ``redo'' a command that you have undone
2269 mistakenly.
2270
2271 @smallexample
2272 @group
2273 . 1: 2 2: 2 1: 6 1: 6
2274 . 1: 3 . .
2275 .
2276 (error)
2277 D D D D
2278 @end group
2279 @end smallexample
2280
2281 @noindent
2282 It was not possible to redo past the @expr{6}, since that was placed there
2283 by something other than an undo command.
2284
2285 @cindex Time travel
2286 You can think of undo and redo as a sort of ``time machine.'' Press
2287 @kbd{U} to go backward in time, @kbd{D} to go forward. If you go
2288 backward and do something (like @kbd{*}) then, as any science fiction
2289 reader knows, you have changed your future and you cannot go forward
2290 again. Thus, the inability to redo past the @expr{6} even though there
2291 was an earlier undo command.
2292
2293 You can always recall an earlier result using the Trail. We've ignored
2294 the trail so far, but it has been faithfully recording everything we
2295 did since we loaded the Calculator. If the Trail is not displayed,
2296 press @kbd{t d} now to turn it on.
2297
2298 Let's try grabbing an earlier result. The @expr{8} we computed was
2299 undone by a @kbd{U} command, and was lost even to Redo when we pressed
2300 @kbd{*}, but it's still there in the trail. There should be a little
2301 @samp{>} arrow (the @dfn{trail pointer}) resting on the last trail
2302 entry. If there isn't, press @kbd{t ]} to reset the trail pointer.
2303 Now, press @w{@kbd{t p}} to move the arrow onto the line containing
2304 @expr{8}, and press @w{@kbd{t y}} to ``yank'' that number back onto the
2305 stack.
2306
2307 If you press @kbd{t ]} again, you will see that even our Yank command
2308 went into the trail.
2309
2310 Let's go further back in time. Earlier in the tutorial we computed
2311 a huge integer using the formula @samp{2^3^4}. We don't remember
2312 what it was, but the first digits were ``241''. Press @kbd{t r}
2313 (which stands for trail-search-reverse), then type @kbd{241}.
2314 The trail cursor will jump back to the next previous occurrence of
2315 the string ``241'' in the trail. This is just a regular Emacs
2316 incremental search; you can now press @kbd{C-s} or @kbd{C-r} to
2317 continue the search forwards or backwards as you like.
2318
2319 To finish the search, press @key{RET}. This halts the incremental
2320 search and leaves the trail pointer at the thing we found. Now we
2321 can type @kbd{t y} to yank that number onto the stack. If we hadn't
2322 remembered the ``241'', we could simply have searched for @kbd{2^3^4},
2323 then pressed @kbd{@key{RET} t n} to halt and then move to the next item.
2324
2325 You may have noticed that all the trail-related commands begin with
2326 the letter @kbd{t}. (The store-and-recall commands, on the other hand,
2327 all began with @kbd{s}.) Calc has so many commands that there aren't
2328 enough keys for all of them, so various commands are grouped into
2329 two-letter sequences where the first letter is called the @dfn{prefix}
2330 key. If you type a prefix key by accident, you can press @kbd{C-g}
2331 to cancel it. (In fact, you can press @kbd{C-g} to cancel almost
2332 anything in Emacs.) To get help on a prefix key, press that key
2333 followed by @kbd{?}. Some prefixes have several lines of help,
2334 so you need to press @kbd{?} repeatedly to see them all. This may
2335 not work under Lucid Emacs, but you can also type @kbd{h h} to
2336 see all the help at once.
2337
2338 Try pressing @kbd{t ?} now. You will see a line of the form,
2339
2340 @smallexample
2341 trail/time: Display; Fwd, Back; Next, Prev, Here, [, ]; Yank: [MORE] t-
2342 @end smallexample
2343
2344 @noindent
2345 The word ``trail'' indicates that the @kbd{t} prefix key contains
2346 trail-related commands. Each entry on the line shows one command,
2347 with a single capital letter showing which letter you press to get
2348 that command. We have used @kbd{t n}, @kbd{t p}, @kbd{t ]}, and
2349 @kbd{t y} so far. The @samp{[MORE]} means you can press @kbd{?}
2350 again to see more @kbd{t}-prefix commands. Notice that the commands
2351 are roughly divided (by semicolons) into related groups.
2352
2353 When you are in the help display for a prefix key, the prefix is
2354 still active. If you press another key, like @kbd{y} for example,
2355 it will be interpreted as a @kbd{t y} command. If all you wanted
2356 was to look at the help messages, press @kbd{C-g} afterwards to cancel
2357 the prefix.
2358
2359 One more way to correct an error is by editing the stack entries.
2360 The actual Stack buffer is marked read-only and must not be edited
2361 directly, but you can press @kbd{`} (the backquote or accent grave)
2362 to edit a stack entry.
2363
2364 Try entering @samp{3.141439} now. If this is supposed to represent
2365 @cpi{}, it's got several errors. Press @kbd{`} to edit this number.
2366 Now use the normal Emacs cursor motion and editing keys to change
2367 the second 4 to a 5, and to transpose the 3 and the 9. When you
2368 press @key{RET}, the number on the stack will be replaced by your
2369 new number. This works for formulas, vectors, and all other types
2370 of values you can put on the stack. The @kbd{`} key also works
2371 during entry of a number or algebraic formula.
2372
2373 @node Modes Tutorial, , Undo Tutorial, Basic Tutorial
2374 @subsection Mode-Setting Commands
2375
2376 @noindent
2377 Calc has many types of @dfn{modes} that affect the way it interprets
2378 your commands or the way it displays data. We have already seen one
2379 mode, namely Algebraic mode. There are many others, too; we'll
2380 try some of the most common ones here.
2381
2382 Perhaps the most fundamental mode in Calc is the current @dfn{precision}.
2383 Notice the @samp{12} on the Calc window's mode line:
2384
2385 @smallexample
2386 --%%-Calc: 12 Deg (Calculator)----All------
2387 @end smallexample
2388
2389 @noindent
2390 Most of the symbols there are Emacs things you don't need to worry
2391 about, but the @samp{12} and the @samp{Deg} are mode indicators.
2392 The @samp{12} means that calculations should always be carried to
2393 12 significant figures. That is why, when we type @kbd{1 @key{RET} 7 /},
2394 we get @expr{0.142857142857} with exactly 12 digits, not counting
2395 leading and trailing zeros.
2396
2397 You can set the precision to anything you like by pressing @kbd{p},
2398 then entering a suitable number. Try pressing @kbd{p 30 @key{RET}},
2399 then doing @kbd{1 @key{RET} 7 /} again:
2400
2401 @smallexample
2402 @group
2403 1: 0.142857142857
2404 2: 0.142857142857142857142857142857
2405 .
2406 @end group
2407 @end smallexample
2408
2409 Although the precision can be set arbitrarily high, Calc always
2410 has to have @emph{some} value for the current precision. After
2411 all, the true value @expr{1/7} is an infinitely repeating decimal;
2412 Calc has to stop somewhere.
2413
2414 Of course, calculations are slower the more digits you request.
2415 Press @w{@kbd{p 12}} now to set the precision back down to the default.
2416
2417 Calculations always use the current precision. For example, even
2418 though we have a 30-digit value for @expr{1/7} on the stack, if
2419 we use it in a calculation in 12-digit mode it will be rounded
2420 down to 12 digits before it is used. Try it; press @key{RET} to
2421 duplicate the number, then @w{@kbd{1 +}}. Notice that the @key{RET}
2422 key didn't round the number, because it doesn't do any calculation.
2423 But the instant we pressed @kbd{+}, the number was rounded down.
2424
2425 @smallexample
2426 @group
2427 1: 0.142857142857
2428 2: 0.142857142857142857142857142857
2429 3: 1.14285714286
2430 .
2431 @end group
2432 @end smallexample
2433
2434 @noindent
2435 In fact, since we added a digit on the left, we had to lose one
2436 digit on the right from even the 12-digit value of @expr{1/7}.
2437
2438 How did we get more than 12 digits when we computed @samp{2^3^4}? The
2439 answer is that Calc makes a distinction between @dfn{integers} and
2440 @dfn{floating-point} numbers, or @dfn{floats}. An integer is a number
2441 that does not contain a decimal point. There is no such thing as an
2442 ``infinitely repeating fraction integer,'' so Calc doesn't have to limit
2443 itself. If you asked for @samp{2^10000} (don't try this!), you would
2444 have to wait a long time but you would eventually get an exact answer.
2445 If you ask for @samp{2.^10000}, you will quickly get an answer which is
2446 correct only to 12 places. The decimal point tells Calc that it should
2447 use floating-point arithmetic to get the answer, not exact integer
2448 arithmetic.
2449
2450 You can use the @kbd{F} (@code{calc-floor}) command to convert a
2451 floating-point value to an integer, and @kbd{c f} (@code{calc-float})
2452 to convert an integer to floating-point form.
2453
2454 Let's try entering that last calculation:
2455
2456 @smallexample
2457 @group
2458 1: 2. 2: 2. 1: 1.99506311689e3010
2459 . 1: 10000 .
2460 .
2461
2462 2.0 @key{RET} 10000 @key{RET} ^
2463 @end group
2464 @end smallexample
2465
2466 @noindent
2467 @cindex Scientific notation, entry of
2468 Notice the letter @samp{e} in there. It represents ``times ten to the
2469 power of,'' and is used by Calc automatically whenever writing the
2470 number out fully would introduce more extra zeros than you probably
2471 want to see. You can enter numbers in this notation, too.
2472
2473 @smallexample
2474 @group
2475 1: 2. 2: 2. 1: 1.99506311678e3010
2476 . 1: 10000. .
2477 .
2478
2479 2.0 @key{RET} 1e4 @key{RET} ^
2480 @end group
2481 @end smallexample
2482
2483 @cindex Round-off errors
2484 @noindent
2485 Hey, the answer is different! Look closely at the middle columns
2486 of the two examples. In the first, the stack contained the
2487 exact integer @expr{10000}, but in the second it contained
2488 a floating-point value with a decimal point. When you raise a
2489 number to an integer power, Calc uses repeated squaring and
2490 multiplication to get the answer. When you use a floating-point
2491 power, Calc uses logarithms and exponentials. As you can see,
2492 a slight error crept in during one of these methods. Which
2493 one should we trust? Let's raise the precision a bit and find
2494 out:
2495
2496 @smallexample
2497 @group
2498 . 1: 2. 2: 2. 1: 1.995063116880828e3010
2499 . 1: 10000. .
2500 .
2501
2502 p 16 @key{RET} 2. @key{RET} 1e4 ^ p 12 @key{RET}
2503 @end group
2504 @end smallexample
2505
2506 @noindent
2507 @cindex Guard digits
2508 Presumably, it doesn't matter whether we do this higher-precision
2509 calculation using an integer or floating-point power, since we
2510 have added enough ``guard digits'' to trust the first 12 digits
2511 no matter what. And the verdict is@dots{} Integer powers were more
2512 accurate; in fact, the result was only off by one unit in the
2513 last place.
2514
2515 @cindex Guard digits
2516 Calc does many of its internal calculations to a slightly higher
2517 precision, but it doesn't always bump the precision up enough.
2518 In each case, Calc added about two digits of precision during
2519 its calculation and then rounded back down to 12 digits
2520 afterward. In one case, it was enough; in the other, it
2521 wasn't. If you really need @var{x} digits of precision, it
2522 never hurts to do the calculation with a few extra guard digits.
2523
2524 What if we want guard digits but don't want to look at them?
2525 We can set the @dfn{float format}. Calc supports four major
2526 formats for floating-point numbers, called @dfn{normal},
2527 @dfn{fixed-point}, @dfn{scientific notation}, and @dfn{engineering
2528 notation}. You get them by pressing @w{@kbd{d n}}, @kbd{d f},
2529 @kbd{d s}, and @kbd{d e}, respectively. In each case, you can
2530 supply a numeric prefix argument which says how many digits
2531 should be displayed. As an example, let's put a few numbers
2532 onto the stack and try some different display modes. First,
2533 use @kbd{M-0 @key{DEL}} to clear the stack, then enter the four
2534 numbers shown here:
2535
2536 @smallexample
2537 @group
2538 4: 12345 4: 12345 4: 12345 4: 12345 4: 12345
2539 3: 12345. 3: 12300. 3: 1.2345e4 3: 1.23e4 3: 12345.000
2540 2: 123.45 2: 123. 2: 1.2345e2 2: 1.23e2 2: 123.450
2541 1: 12.345 1: 12.3 1: 1.2345e1 1: 1.23e1 1: 12.345
2542 . . . . .
2543
2544 d n M-3 d n d s M-3 d s M-3 d f
2545 @end group
2546 @end smallexample
2547
2548 @noindent
2549 Notice that when we typed @kbd{M-3 d n}, the numbers were rounded down
2550 to three significant digits, but then when we typed @kbd{d s} all
2551 five significant figures reappeared. The float format does not
2552 affect how numbers are stored, it only affects how they are
2553 displayed. Only the current precision governs the actual rounding
2554 of numbers in the Calculator's memory.
2555
2556 Engineering notation, not shown here, is like scientific notation
2557 except the exponent (the power-of-ten part) is always adjusted to be
2558 a multiple of three (as in ``kilo,'' ``micro,'' etc.). As a result
2559 there will be one, two, or three digits before the decimal point.
2560
2561 Whenever you change a display-related mode, Calc redraws everything
2562 in the stack. This may be slow if there are many things on the stack,
2563 so Calc allows you to type shift-@kbd{H} before any mode command to
2564 prevent it from updating the stack. Anything Calc displays after the
2565 mode-changing command will appear in the new format.
2566
2567 @smallexample
2568 @group
2569 4: 12345 4: 12345 4: 12345 4: 12345 4: 12345
2570 3: 12345.000 3: 12345.000 3: 12345.000 3: 1.2345e4 3: 12345.
2571 2: 123.450 2: 123.450 2: 1.2345e1 2: 1.2345e1 2: 123.45
2572 1: 12.345 1: 1.2345e1 1: 1.2345e2 1: 1.2345e2 1: 12.345
2573 . . . . .
2574
2575 H d s @key{DEL} U @key{TAB} d @key{SPC} d n
2576 @end group
2577 @end smallexample
2578
2579 @noindent
2580 Here the @kbd{H d s} command changes to scientific notation but without
2581 updating the screen. Deleting the top stack entry and undoing it back
2582 causes it to show up in the new format; swapping the top two stack
2583 entries reformats both entries. The @kbd{d @key{SPC}} command refreshes the
2584 whole stack. The @kbd{d n} command changes back to the normal float
2585 format; since it doesn't have an @kbd{H} prefix, it also updates all
2586 the stack entries to be in @kbd{d n} format.
2587
2588 Notice that the integer @expr{12345} was not affected by any
2589 of the float formats. Integers are integers, and are always
2590 displayed exactly.
2591
2592 @cindex Large numbers, readability
2593 Large integers have their own problems. Let's look back at
2594 the result of @kbd{2^3^4}.
2595
2596 @example
2597 2417851639229258349412352
2598 @end example
2599
2600 @noindent
2601 Quick---how many digits does this have? Try typing @kbd{d g}:
2602
2603 @example
2604 2,417,851,639,229,258,349,412,352
2605 @end example
2606
2607 @noindent
2608 Now how many digits does this have? It's much easier to tell!
2609 We can actually group digits into clumps of any size. Some
2610 people prefer @kbd{M-5 d g}:
2611
2612 @example
2613 24178,51639,22925,83494,12352
2614 @end example
2615
2616 Let's see what happens to floating-point numbers when they are grouped.
2617 First, type @kbd{p 25 @key{RET}} to make sure we have enough precision
2618 to get ourselves into trouble. Now, type @kbd{1e13 /}:
2619
2620 @example
2621 24,17851,63922.9258349412352
2622 @end example
2623
2624 @noindent
2625 The integer part is grouped but the fractional part isn't. Now try
2626 @kbd{M-- M-5 d g} (that's meta-minus-sign, meta-five):
2627
2628 @example
2629 24,17851,63922.92583,49412,352
2630 @end example
2631
2632 If you find it hard to tell the decimal point from the commas, try
2633 changing the grouping character to a space with @kbd{d , @key{SPC}}:
2634
2635 @example
2636 24 17851 63922.92583 49412 352
2637 @end example
2638
2639 Type @kbd{d , ,} to restore the normal grouping character, then
2640 @kbd{d g} again to turn grouping off. Also, press @kbd{p 12} to
2641 restore the default precision.
2642
2643 Press @kbd{U} enough times to get the original big integer back.
2644 (Notice that @kbd{U} does not undo each mode-setting command; if
2645 you want to undo a mode-setting command, you have to do it yourself.)
2646 Now, type @kbd{d r 16 @key{RET}}:
2647
2648 @example
2649 16#200000000000000000000
2650 @end example
2651
2652 @noindent
2653 The number is now displayed in @dfn{hexadecimal}, or ``base-16'' form.
2654 Suddenly it looks pretty simple; this should be no surprise, since we
2655 got this number by computing a power of two, and 16 is a power of 2.
2656 In fact, we can use @w{@kbd{d r 2 @key{RET}}} to see it in actual binary
2657 form:
2658
2659 @example
2660 2#1000000000000000000000000000000000000000000000000000000 @dots{}
2661 @end example
2662
2663 @noindent
2664 We don't have enough space here to show all the zeros! They won't
2665 fit on a typical screen, either, so you will have to use horizontal
2666 scrolling to see them all. Press @kbd{<} and @kbd{>} to scroll the
2667 stack window left and right by half its width. Another way to view
2668 something large is to press @kbd{`} (back-quote) to edit the top of
2669 stack in a separate window. (Press @kbd{C-c C-c} when you are done.)
2670
2671 You can enter non-decimal numbers using the @kbd{#} symbol, too.
2672 Let's see what the hexadecimal number @samp{5FE} looks like in
2673 binary. Type @kbd{16#5FE} (the letters can be typed in upper or
2674 lower case; they will always appear in upper case). It will also
2675 help to turn grouping on with @kbd{d g}:
2676
2677 @example
2678 2#101,1111,1110
2679 @end example
2680
2681 Notice that @kbd{d g} groups by fours by default if the display radix
2682 is binary or hexadecimal, but by threes if it is decimal, octal, or any
2683 other radix.
2684
2685 Now let's see that number in decimal; type @kbd{d r 10}:
2686
2687 @example
2688 1,534
2689 @end example
2690
2691 Numbers are not @emph{stored} with any particular radix attached. They're
2692 just numbers; they can be entered in any radix, and are always displayed
2693 in whatever radix you've chosen with @kbd{d r}. The current radix applies
2694 to integers, fractions, and floats.
2695
2696 @cindex Roundoff errors, in non-decimal numbers
2697 (@bullet{}) @strong{Exercise 1.} Your friend Joe tried to enter one-third
2698 as @samp{3#0.1} in @kbd{d r 3} mode with a precision of 12. He got
2699 @samp{3#0.0222222...} (with 25 2's) in the display. When he multiplied
2700 that by three, he got @samp{3#0.222222...} instead of the expected
2701 @samp{3#1}. Next, Joe entered @samp{3#0.2} and, to his great relief,
2702 saw @samp{3#0.2} on the screen. But when he typed @kbd{2 /}, he got
2703 @samp{3#0.10000001} (some zeros omitted). What's going on here?
2704 @xref{Modes Answer 1, 1}. (@bullet{})
2705
2706 @cindex Scientific notation, in non-decimal numbers
2707 (@bullet{}) @strong{Exercise 2.} Scientific notation works in non-decimal
2708 modes in the natural way (the exponent is a power of the radix instead of
2709 a power of ten, although the exponent itself is always written in decimal).
2710 Thus @samp{8#1.23e3 = 8#1230.0}. Suppose we have the hexadecimal number
2711 @samp{f.e8f} times 16 to the 15th power: We write @samp{16#f.e8fe15}.
2712 What is wrong with this picture? What could we write instead that would
2713 work better? @xref{Modes Answer 2, 2}. (@bullet{})
2714
2715 The @kbd{m} prefix key has another set of modes, relating to the way
2716 Calc interprets your inputs and does computations. Whereas @kbd{d}-prefix
2717 modes generally affect the way things look, @kbd{m}-prefix modes affect
2718 the way they are actually computed.
2719
2720 The most popular @kbd{m}-prefix mode is the @dfn{angular mode}. Notice
2721 the @samp{Deg} indicator in the mode line. This means that if you use
2722 a command that interprets a number as an angle, it will assume the
2723 angle is measured in degrees. For example,
2724
2725 @smallexample
2726 @group
2727 1: 45 1: 0.707106781187 1: 0.500000000001 1: 0.5
2728 . . . .
2729
2730 45 S 2 ^ c 1
2731 @end group
2732 @end smallexample
2733
2734 @noindent
2735 The shift-@kbd{S} command computes the sine of an angle. The sine
2736 of 45 degrees is
2737 @texline @math{\sqrt{2}/2};
2738 @infoline @expr{sqrt(2)/2};
2739 squaring this yields @expr{2/4 = 0.5}. However, there has been a slight
2740 roundoff error because the representation of
2741 @texline @math{\sqrt{2}/2}
2742 @infoline @expr{sqrt(2)/2}
2743 wasn't exact. The @kbd{c 1} command is a handy way to clean up numbers
2744 in this case; it temporarily reduces the precision by one digit while it
2745 re-rounds the number on the top of the stack.
2746
2747 @cindex Roundoff errors, examples
2748 (@bullet{}) @strong{Exercise 3.} Your friend Joe computed the sine
2749 of 45 degrees as shown above, then, hoping to avoid an inexact
2750 result, he increased the precision to 16 digits before squaring.
2751 What happened? @xref{Modes Answer 3, 3}. (@bullet{})
2752
2753 To do this calculation in radians, we would type @kbd{m r} first.
2754 (The indicator changes to @samp{Rad}.) 45 degrees corresponds to
2755 @cpiover{4} radians. To get @cpi{}, press the @kbd{P} key. (Once
2756 again, this is a shifted capital @kbd{P}. Remember, unshifted
2757 @kbd{p} sets the precision.)
2758
2759 @smallexample
2760 @group
2761 1: 3.14159265359 1: 0.785398163398 1: 0.707106781187
2762 . . .
2763
2764 P 4 / m r S
2765 @end group
2766 @end smallexample
2767
2768 Likewise, inverse trigonometric functions generate results in
2769 either radians or degrees, depending on the current angular mode.
2770
2771 @smallexample
2772 @group
2773 1: 0.707106781187 1: 0.785398163398 1: 45.
2774 . . .
2775
2776 .5 Q m r I S m d U I S
2777 @end group
2778 @end smallexample
2779
2780 @noindent
2781 Here we compute the Inverse Sine of
2782 @texline @math{\sqrt{0.5}},
2783 @infoline @expr{sqrt(0.5)},
2784 first in radians, then in degrees.
2785
2786 Use @kbd{c d} and @kbd{c r} to convert a number from radians to degrees
2787 and vice-versa.
2788
2789 @smallexample
2790 @group
2791 1: 45 1: 0.785398163397 1: 45.
2792 . . .
2793
2794 45 c r c d
2795 @end group
2796 @end smallexample
2797
2798 Another interesting mode is @dfn{Fraction mode}. Normally,
2799 dividing two integers produces a floating-point result if the
2800 quotient can't be expressed as an exact integer. Fraction mode
2801 causes integer division to produce a fraction, i.e., a rational
2802 number, instead.
2803
2804 @smallexample
2805 @group
2806 2: 12 1: 1.33333333333 1: 4:3
2807 1: 9 . .
2808 .
2809
2810 12 @key{RET} 9 / m f U / m f
2811 @end group
2812 @end smallexample
2813
2814 @noindent
2815 In the first case, we get an approximate floating-point result.
2816 In the second case, we get an exact fractional result (four-thirds).
2817
2818 You can enter a fraction at any time using @kbd{:} notation.
2819 (Calc uses @kbd{:} instead of @kbd{/} as the fraction separator
2820 because @kbd{/} is already used to divide the top two stack
2821 elements.) Calculations involving fractions will always
2822 produce exact fractional results; Fraction mode only says
2823 what to do when dividing two integers.
2824
2825 @cindex Fractions vs. floats
2826 @cindex Floats vs. fractions
2827 (@bullet{}) @strong{Exercise 4.} If fractional arithmetic is exact,
2828 why would you ever use floating-point numbers instead?
2829 @xref{Modes Answer 4, 4}. (@bullet{})
2830
2831 Typing @kbd{m f} doesn't change any existing values in the stack.
2832 In the above example, we had to Undo the division and do it over
2833 again when we changed to Fraction mode. But if you use the
2834 evaluates-to operator you can get commands like @kbd{m f} to
2835 recompute for you.
2836
2837 @smallexample
2838 @group
2839 1: 12 / 9 => 1.33333333333 1: 12 / 9 => 1.333 1: 12 / 9 => 4:3
2840 . . .
2841
2842 ' 12/9 => @key{RET} p 4 @key{RET} m f
2843 @end group
2844 @end smallexample
2845
2846 @noindent
2847 In this example, the righthand side of the @samp{=>} operator
2848 on the stack is recomputed when we change the precision, then
2849 again when we change to Fraction mode. All @samp{=>} expressions
2850 on the stack are recomputed every time you change any mode that
2851 might affect their values.
2852
2853 @node Arithmetic Tutorial, Vector/Matrix Tutorial, Basic Tutorial, Tutorial
2854 @section Arithmetic Tutorial
2855
2856 @noindent
2857 In this section, we explore the arithmetic and scientific functions
2858 available in the Calculator.
2859
2860 The standard arithmetic commands are @kbd{+}, @kbd{-}, @kbd{*}, @kbd{/},
2861 and @kbd{^}. Each normally takes two numbers from the top of the stack
2862 and pushes back a result. The @kbd{n} and @kbd{&} keys perform
2863 change-sign and reciprocal operations, respectively.
2864
2865 @smallexample
2866 @group
2867 1: 5 1: 0.2 1: 5. 1: -5. 1: 5.
2868 . . . . .
2869
2870 5 & & n n
2871 @end group
2872 @end smallexample
2873
2874 @cindex Binary operators
2875 You can apply a ``binary operator'' like @kbd{+} across any number of
2876 stack entries by giving it a numeric prefix. You can also apply it
2877 pairwise to several stack elements along with the top one if you use
2878 a negative prefix.
2879
2880 @smallexample
2881 @group
2882 3: 2 1: 9 3: 2 4: 2 3: 12
2883 2: 3 . 2: 3 3: 3 2: 13
2884 1: 4 1: 4 2: 4 1: 14
2885 . . 1: 10 .
2886 .
2887
2888 2 @key{RET} 3 @key{RET} 4 M-3 + U 10 M-- M-3 +
2889 @end group
2890 @end smallexample
2891
2892 @cindex Unary operators
2893 You can apply a ``unary operator'' like @kbd{&} to the top @var{n}
2894 stack entries with a numeric prefix, too.
2895
2896 @smallexample
2897 @group
2898 3: 2 3: 0.5 3: 0.5
2899 2: 3 2: 0.333333333333 2: 3.
2900 1: 4 1: 0.25 1: 4.
2901 . . .
2902
2903 2 @key{RET} 3 @key{RET} 4 M-3 & M-2 &
2904 @end group
2905 @end smallexample
2906
2907 Notice that the results here are left in floating-point form.
2908 We can convert them back to integers by pressing @kbd{F}, the
2909 ``floor'' function. This function rounds down to the next lower
2910 integer. There is also @kbd{R}, which rounds to the nearest
2911 integer.
2912
2913 @smallexample
2914 @group
2915 7: 2. 7: 2 7: 2
2916 6: 2.4 6: 2 6: 2
2917 5: 2.5 5: 2 5: 3
2918 4: 2.6 4: 2 4: 3
2919 3: -2. 3: -2 3: -2
2920 2: -2.4 2: -3 2: -2
2921 1: -2.6 1: -3 1: -3
2922 . . .
2923
2924 M-7 F U M-7 R
2925 @end group
2926 @end smallexample
2927
2928 Since dividing-and-flooring (i.e., ``integer quotient'') is such a
2929 common operation, Calc provides a special command for that purpose, the
2930 backslash @kbd{\}. Another common arithmetic operator is @kbd{%}, which
2931 computes the remainder that would arise from a @kbd{\} operation, i.e.,
2932 the ``modulo'' of two numbers. For example,
2933
2934 @smallexample
2935 @group
2936 2: 1234 1: 12 2: 1234 1: 34
2937 1: 100 . 1: 100 .
2938 . .
2939
2940 1234 @key{RET} 100 \ U %
2941 @end group
2942 @end smallexample
2943
2944 These commands actually work for any real numbers, not just integers.
2945
2946 @smallexample
2947 @group
2948 2: 3.1415 1: 3 2: 3.1415 1: 0.1415
2949 1: 1 . 1: 1 .
2950 . .
2951
2952 3.1415 @key{RET} 1 \ U %
2953 @end group
2954 @end smallexample
2955
2956 (@bullet{}) @strong{Exercise 1.} The @kbd{\} command would appear to be a
2957 frill, since you could always do the same thing with @kbd{/ F}. Think
2958 of a situation where this is not true---@kbd{/ F} would be inadequate.
2959 Now think of a way you could get around the problem if Calc didn't
2960 provide a @kbd{\} command. @xref{Arithmetic Answer 1, 1}. (@bullet{})
2961
2962 We've already seen the @kbd{Q} (square root) and @kbd{S} (sine)
2963 commands. Other commands along those lines are @kbd{C} (cosine),
2964 @kbd{T} (tangent), @kbd{E} (@expr{e^x}) and @kbd{L} (natural
2965 logarithm). These can be modified by the @kbd{I} (inverse) and
2966 @kbd{H} (hyperbolic) prefix keys.
2967
2968 Let's compute the sine and cosine of an angle, and verify the
2969 identity
2970 @texline @math{\sin^2x + \cos^2x = 1}.
2971 @infoline @expr{sin(x)^2 + cos(x)^2 = 1}.
2972 We'll arbitrarily pick @mathit{-64} degrees as a good value for @expr{x}.
2973 With the angular mode set to degrees (type @w{@kbd{m d}}), do:
2974
2975 @smallexample
2976 @group
2977 2: -64 2: -64 2: -0.89879 2: -0.89879 1: 1.
2978 1: -64 1: -0.89879 1: -64 1: 0.43837 .
2979 . . . .
2980
2981 64 n @key{RET} @key{RET} S @key{TAB} C f h
2982 @end group
2983 @end smallexample
2984
2985 @noindent
2986 (For brevity, we're showing only five digits of the results here.
2987 You can of course do these calculations to any precision you like.)
2988
2989 Remember, @kbd{f h} is the @code{calc-hypot}, or square-root of sum
2990 of squares, command.
2991
2992 Another identity is
2993 @texline @math{\displaystyle\tan x = {\sin x \over \cos x}}.
2994 @infoline @expr{tan(x) = sin(x) / cos(x)}.
2995 @smallexample
2996 @group
2997
2998 2: -0.89879 1: -2.0503 1: -64.
2999 1: 0.43837 . .
3000 .
3001
3002 U / I T
3003 @end group
3004 @end smallexample
3005
3006 A physical interpretation of this calculation is that if you move
3007 @expr{0.89879} units downward and @expr{0.43837} units to the right,
3008 your direction of motion is @mathit{-64} degrees from horizontal. Suppose
3009 we move in the opposite direction, up and to the left:
3010
3011 @smallexample
3012 @group
3013 2: -0.89879 2: 0.89879 1: -2.0503 1: -64.
3014 1: 0.43837 1: -0.43837 . .
3015 . .
3016
3017 U U M-2 n / I T
3018 @end group
3019 @end smallexample
3020
3021 @noindent
3022 How can the angle be the same? The answer is that the @kbd{/} operation
3023 loses information about the signs of its inputs. Because the quotient
3024 is negative, we know exactly one of the inputs was negative, but we
3025 can't tell which one. There is an @kbd{f T} [@code{arctan2}] function which
3026 computes the inverse tangent of the quotient of a pair of numbers.
3027 Since you feed it the two original numbers, it has enough information
3028 to give you a full 360-degree answer.
3029
3030 @smallexample
3031 @group
3032 2: 0.89879 1: 116. 3: 116. 2: 116. 1: 180.
3033 1: -0.43837 . 2: -0.89879 1: -64. .
3034 . 1: 0.43837 .
3035 .
3036
3037 U U f T M-@key{RET} M-2 n f T -
3038 @end group
3039 @end smallexample
3040
3041 @noindent
3042 The resulting angles differ by 180 degrees; in other words, they
3043 point in opposite directions, just as we would expect.
3044
3045 The @key{META}-@key{RET} we used in the third step is the
3046 ``last-arguments'' command. It is sort of like Undo, except that it
3047 restores the arguments of the last command to the stack without removing
3048 the command's result. It is useful in situations like this one,
3049 where we need to do several operations on the same inputs. We could
3050 have accomplished the same thing by using @kbd{M-2 @key{RET}} to duplicate
3051 the top two stack elements right after the @kbd{U U}, then a pair of
3052 @kbd{M-@key{TAB}} commands to cycle the 116 up around the duplicates.
3053
3054 A similar identity is supposed to hold for hyperbolic sines and cosines,
3055 except that it is the @emph{difference}
3056 @texline @math{\cosh^2x - \sinh^2x}
3057 @infoline @expr{cosh(x)^2 - sinh(x)^2}
3058 that always equals one. Let's try to verify this identity.
3059
3060 @smallexample
3061 @group
3062 2: -64 2: -64 2: -64 2: 9.7192e54 2: 9.7192e54
3063 1: -64 1: -3.1175e27 1: 9.7192e54 1: -64 1: 9.7192e54
3064 . . . . .
3065
3066 64 n @key{RET} @key{RET} H C 2 ^ @key{TAB} H S 2 ^
3067 @end group
3068 @end smallexample
3069
3070 @noindent
3071 @cindex Roundoff errors, examples
3072 Something's obviously wrong, because when we subtract these numbers
3073 the answer will clearly be zero! But if you think about it, if these
3074 numbers @emph{did} differ by one, it would be in the 55th decimal
3075 place. The difference we seek has been lost entirely to roundoff
3076 error.
3077
3078 We could verify this hypothesis by doing the actual calculation with,
3079 say, 60 decimal places of precision. This will be slow, but not
3080 enormously so. Try it if you wish; sure enough, the answer is
3081 0.99999, reasonably close to 1.
3082
3083 Of course, a more reasonable way to verify the identity is to use
3084 a more reasonable value for @expr{x}!
3085
3086 @cindex Common logarithm
3087 Some Calculator commands use the Hyperbolic prefix for other purposes.
3088 The logarithm and exponential functions, for example, work to the base
3089 @expr{e} normally but use base-10 instead if you use the Hyperbolic
3090 prefix.
3091
3092 @smallexample
3093 @group
3094 1: 1000 1: 6.9077 1: 1000 1: 3
3095 . . . .
3096
3097 1000 L U H L
3098 @end group
3099 @end smallexample
3100
3101 @noindent
3102 First, we mistakenly compute a natural logarithm. Then we undo
3103 and compute a common logarithm instead.
3104
3105 The @kbd{B} key computes a general base-@var{b} logarithm for any
3106 value of @var{b}.
3107
3108 @smallexample
3109 @group
3110 2: 1000 1: 3 1: 1000. 2: 1000. 1: 6.9077
3111 1: 10 . . 1: 2.71828 .
3112 . .
3113
3114 1000 @key{RET} 10 B H E H P B
3115 @end group
3116 @end smallexample
3117
3118 @noindent
3119 Here we first use @kbd{B} to compute the base-10 logarithm, then use
3120 the ``hyperbolic'' exponential as a cheap hack to recover the number
3121 1000, then use @kbd{B} again to compute the natural logarithm. Note
3122 that @kbd{P} with the hyperbolic prefix pushes the constant @expr{e}
3123 onto the stack.
3124
3125 You may have noticed that both times we took the base-10 logarithm
3126 of 1000, we got an exact integer result. Calc always tries to give
3127 an exact rational result for calculations involving rational numbers
3128 where possible. But when we used @kbd{H E}, the result was a
3129 floating-point number for no apparent reason. In fact, if we had
3130 computed @kbd{10 @key{RET} 3 ^} we @emph{would} have gotten an
3131 exact integer 1000. But the @kbd{H E} command is rigged to generate
3132 a floating-point result all of the time so that @kbd{1000 H E} will
3133 not waste time computing a thousand-digit integer when all you
3134 probably wanted was @samp{1e1000}.
3135
3136 (@bullet{}) @strong{Exercise 2.} Find a pair of integer inputs to
3137 the @kbd{B} command for which Calc could find an exact rational
3138 result but doesn't. @xref{Arithmetic Answer 2, 2}. (@bullet{})
3139
3140 The Calculator also has a set of functions relating to combinatorics
3141 and statistics. You may be familiar with the @dfn{factorial} function,
3142 which computes the product of all the integers up to a given number.
3143
3144 @smallexample
3145 @group
3146 1: 100 1: 93326215443... 1: 100. 1: 9.3326e157
3147 . . . .
3148
3149 100 ! U c f !
3150 @end group
3151 @end smallexample
3152
3153 @noindent
3154 Recall, the @kbd{c f} command converts the integer or fraction at the
3155 top of the stack to floating-point format. If you take the factorial
3156 of a floating-point number, you get a floating-point result
3157 accurate to the current precision. But if you give @kbd{!} an
3158 exact integer, you get an exact integer result (158 digits long
3159 in this case).
3160
3161 If you take the factorial of a non-integer, Calc uses a generalized
3162 factorial function defined in terms of Euler's Gamma function
3163 @texline @math{\Gamma(n)}
3164 @infoline @expr{gamma(n)}
3165 (which is itself available as the @kbd{f g} command).
3166
3167 @smallexample
3168 @group
3169 3: 4. 3: 24. 1: 5.5 1: 52.342777847
3170 2: 4.5 2: 52.3427777847 . .
3171 1: 5. 1: 120.
3172 . .
3173
3174 M-3 ! M-0 @key{DEL} 5.5 f g
3175 @end group
3176 @end smallexample
3177
3178 @noindent
3179 Here we verify the identity
3180 @texline @math{n! = \Gamma(n+1)}.
3181 @infoline @expr{@var{n}!@: = gamma(@var{n}+1)}.
3182
3183 The binomial coefficient @var{n}-choose-@var{m}
3184 @texline or @math{\displaystyle {n \choose m}}
3185 is defined by
3186 @texline @math{\displaystyle {n! \over m! \, (n-m)!}}
3187 @infoline @expr{n!@: / m!@: (n-m)!}
3188 for all reals @expr{n} and @expr{m}. The intermediate results in this
3189 formula can become quite large even if the final result is small; the
3190 @kbd{k c} command computes a binomial coefficient in a way that avoids
3191 large intermediate values.
3192
3193 The @kbd{k} prefix key defines several common functions out of
3194 combinatorics and number theory. Here we compute the binomial
3195 coefficient 30-choose-20, then determine its prime factorization.
3196
3197 @smallexample
3198 @group
3199 2: 30 1: 30045015 1: [3, 3, 5, 7, 11, 13, 23, 29]
3200 1: 20 . .
3201 .
3202
3203 30 @key{RET} 20 k c k f
3204 @end group
3205 @end smallexample
3206
3207 @noindent
3208 You can verify these prime factors by using @kbd{v u} to ``unpack''
3209 this vector into 8 separate stack entries, then @kbd{M-8 *} to
3210 multiply them back together. The result is the original number,
3211 30045015.
3212
3213 @cindex Hash tables
3214 Suppose a program you are writing needs a hash table with at least
3215 10000 entries. It's best to use a prime number as the actual size
3216 of a hash table. Calc can compute the next prime number after 10000:
3217
3218 @smallexample
3219 @group
3220 1: 10000 1: 10007 1: 9973
3221 . . .
3222
3223 10000 k n I k n
3224 @end group
3225 @end smallexample
3226
3227 @noindent
3228 Just for kicks we've also computed the next prime @emph{less} than
3229 10000.
3230
3231 @c [fix-ref Financial Functions]
3232 @xref{Financial Functions}, for a description of the Calculator
3233 commands that deal with business and financial calculations (functions
3234 like @code{pv}, @code{rate}, and @code{sln}).
3235
3236 @c [fix-ref Binary Number Functions]
3237 @xref{Binary Functions}, to read about the commands for operating
3238 on binary numbers (like @code{and}, @code{xor}, and @code{lsh}).
3239
3240 @node Vector/Matrix Tutorial, Types Tutorial, Arithmetic Tutorial, Tutorial
3241 @section Vector/Matrix Tutorial
3242
3243 @noindent
3244 A @dfn{vector} is a list of numbers or other Calc data objects.
3245 Calc provides a large set of commands that operate on vectors. Some
3246 are familiar operations from vector analysis. Others simply treat
3247 a vector as a list of objects.
3248
3249 @menu
3250 * Vector Analysis Tutorial::
3251 * Matrix Tutorial::
3252 * List Tutorial::
3253 @end menu
3254
3255 @node Vector Analysis Tutorial, Matrix Tutorial, Vector/Matrix Tutorial, Vector/Matrix Tutorial
3256 @subsection Vector Analysis
3257
3258 @noindent
3259 If you add two vectors, the result is a vector of the sums of the
3260 elements, taken pairwise.
3261
3262 @smallexample
3263 @group
3264 1: [1, 2, 3] 2: [1, 2, 3] 1: [8, 8, 3]
3265 . 1: [7, 6, 0] .
3266 .
3267
3268 [1,2,3] s 1 [7 6 0] s 2 +
3269 @end group
3270 @end smallexample
3271
3272 @noindent
3273 Note that we can separate the vector elements with either commas or
3274 spaces. This is true whether we are using incomplete vectors or
3275 algebraic entry. The @kbd{s 1} and @kbd{s 2} commands save these
3276 vectors so we can easily reuse them later.
3277
3278 If you multiply two vectors, the result is the sum of the products
3279 of the elements taken pairwise. This is called the @dfn{dot product}
3280 of the vectors.
3281
3282 @smallexample
3283 @group
3284 2: [1, 2, 3] 1: 19
3285 1: [7, 6, 0] .
3286 .
3287
3288 r 1 r 2 *
3289 @end group
3290 @end smallexample
3291
3292 @cindex Dot product
3293 The dot product of two vectors is equal to the product of their
3294 lengths times the cosine of the angle between them. (Here the vector
3295 is interpreted as a line from the origin @expr{(0,0,0)} to the
3296 specified point in three-dimensional space.) The @kbd{A}
3297 (absolute value) command can be used to compute the length of a
3298 vector.
3299
3300 @smallexample
3301 @group
3302 3: 19 3: 19 1: 0.550782 1: 56.579
3303 2: [1, 2, 3] 2: 3.741657 . .
3304 1: [7, 6, 0] 1: 9.219544
3305 . .
3306
3307 M-@key{RET} M-2 A * / I C
3308 @end group
3309 @end smallexample
3310
3311 @noindent
3312 First we recall the arguments to the dot product command, then
3313 we compute the absolute values of the top two stack entries to
3314 obtain the lengths of the vectors, then we divide the dot product
3315 by the product of the lengths to get the cosine of the angle.
3316 The inverse cosine finds that the angle between the vectors
3317 is about 56 degrees.
3318
3319 @cindex Cross product
3320 @cindex Perpendicular vectors
3321 The @dfn{cross product} of two vectors is a vector whose length
3322 is the product of the lengths of the inputs times the sine of the
3323 angle between them, and whose direction is perpendicular to both
3324 input vectors. Unlike the dot product, the cross product is
3325 defined only for three-dimensional vectors. Let's double-check
3326 our computation of the angle using the cross product.
3327
3328 @smallexample
3329 @group
3330 2: [1, 2, 3] 3: [-18, 21, -8] 1: [-0.52, 0.61, -0.23] 1: 56.579
3331 1: [7, 6, 0] 2: [1, 2, 3] . .
3332 . 1: [7, 6, 0]
3333 .
3334
3335 r 1 r 2 V C s 3 M-@key{RET} M-2 A * / A I S
3336 @end group
3337 @end smallexample
3338
3339 @noindent
3340 First we recall the original vectors and compute their cross product,
3341 which we also store for later reference. Now we divide the vector
3342 by the product of the lengths of the original vectors. The length of
3343 this vector should be the sine of the angle; sure enough, it is!
3344
3345 @c [fix-ref General Mode Commands]
3346 Vector-related commands generally begin with the @kbd{v} prefix key.
3347 Some are uppercase letters and some are lowercase. To make it easier
3348 to type these commands, the shift-@kbd{V} prefix key acts the same as
3349 the @kbd{v} key. (@xref{General Mode Commands}, for a way to make all
3350 prefix keys have this property.)
3351
3352 If we take the dot product of two perpendicular vectors we expect
3353 to get zero, since the cosine of 90 degrees is zero. Let's check
3354 that the cross product is indeed perpendicular to both inputs:
3355
3356 @smallexample
3357 @group
3358 2: [1, 2, 3] 1: 0 2: [7, 6, 0] 1: 0
3359 1: [-18, 21, -8] . 1: [-18, 21, -8] .
3360 . .
3361
3362 r 1 r 3 * @key{DEL} r 2 r 3 *
3363 @end group
3364 @end smallexample
3365
3366 @cindex Normalizing a vector
3367 @cindex Unit vectors
3368 (@bullet{}) @strong{Exercise 1.} Given a vector on the top of the
3369 stack, what keystrokes would you use to @dfn{normalize} the
3370 vector, i.e., to reduce its length to one without changing its
3371 direction? @xref{Vector Answer 1, 1}. (@bullet{})
3372
3373 (@bullet{}) @strong{Exercise 2.} Suppose a certain particle can be
3374 at any of several positions along a ruler. You have a list of
3375 those positions in the form of a vector, and another list of the
3376 probabilities for the particle to be at the corresponding positions.
3377 Find the average position of the particle.
3378 @xref{Vector Answer 2, 2}. (@bullet{})
3379
3380 @node Matrix Tutorial, List Tutorial, Vector Analysis Tutorial, Vector/Matrix Tutorial
3381 @subsection Matrices
3382
3383 @noindent
3384 A @dfn{matrix} is just a vector of vectors, all the same length.
3385 This means you can enter a matrix using nested brackets. You can
3386 also use the semicolon character to enter a matrix. We'll show
3387 both methods here:
3388
3389 @smallexample
3390 @group
3391 1: [ [ 1, 2, 3 ] 1: [ [ 1, 2, 3 ]
3392 [ 4, 5, 6 ] ] [ 4, 5, 6 ] ]
3393 . .
3394
3395 [[1 2 3] [4 5 6]] ' [1 2 3; 4 5 6] @key{RET}
3396 @end group
3397 @end smallexample
3398
3399 @noindent
3400 We'll be using this matrix again, so type @kbd{s 4} to save it now.
3401
3402 Note that semicolons work with incomplete vectors, but they work
3403 better in algebraic entry. That's why we use the apostrophe in
3404 the second example.
3405
3406 When two matrices are multiplied, the lefthand matrix must have
3407 the same number of columns as the righthand matrix has rows.
3408 Row @expr{i}, column @expr{j} of the result is effectively the
3409 dot product of row @expr{i} of the left matrix by column @expr{j}
3410 of the right matrix.
3411
3412 If we try to duplicate this matrix and multiply it by itself,
3413 the dimensions are wrong and the multiplication cannot take place:
3414
3415 @smallexample
3416 @group
3417 1: [ [ 1, 2, 3 ] * [ [ 1, 2, 3 ]
3418 [ 4, 5, 6 ] ] [ 4, 5, 6 ] ]
3419 .
3420
3421 @key{RET} *
3422 @end group
3423 @end smallexample
3424
3425 @noindent
3426 Though rather hard to read, this is a formula which shows the product
3427 of two matrices. The @samp{*} function, having invalid arguments, has
3428 been left in symbolic form.
3429
3430 We can multiply the matrices if we @dfn{transpose} one of them first.
3431
3432 @smallexample
3433 @group
3434 2: [ [ 1, 2, 3 ] 1: [ [ 14, 32 ] 1: [ [ 17, 22, 27 ]
3435 [ 4, 5, 6 ] ] [ 32, 77 ] ] [ 22, 29, 36 ]
3436 1: [ [ 1, 4 ] . [ 27, 36, 45 ] ]
3437 [ 2, 5 ] .
3438 [ 3, 6 ] ]
3439 .
3440
3441 U v t * U @key{TAB} *
3442 @end group
3443 @end smallexample
3444
3445 Matrix multiplication is not commutative; indeed, switching the
3446 order of the operands can even change the dimensions of the result
3447 matrix, as happened here!
3448
3449 If you multiply a plain vector by a matrix, it is treated as a
3450 single row or column depending on which side of the matrix it is
3451 on. The result is a plain vector which should also be interpreted
3452 as a row or column as appropriate.
3453
3454 @smallexample
3455 @group
3456 2: [ [ 1, 2, 3 ] 1: [14, 32]
3457 [ 4, 5, 6 ] ] .
3458 1: [1, 2, 3]
3459 .
3460
3461 r 4 r 1 *
3462 @end group
3463 @end smallexample
3464
3465 Multiplying in the other order wouldn't work because the number of
3466 rows in the matrix is different from the number of elements in the
3467 vector.
3468
3469 (@bullet{}) @strong{Exercise 1.} Use @samp{*} to sum along the rows
3470 of the above
3471 @texline @math{2\times3}
3472 @infoline 2x3
3473 matrix to get @expr{[6, 15]}. Now use @samp{*} to sum along the columns
3474 to get @expr{[5, 7, 9]}.
3475 @xref{Matrix Answer 1, 1}. (@bullet{})
3476
3477 @cindex Identity matrix
3478 An @dfn{identity matrix} is a square matrix with ones along the
3479 diagonal and zeros elsewhere. It has the property that multiplication
3480 by an identity matrix, on the left or on the right, always produces
3481 the original matrix.
3482
3483 @smallexample
3484 @group
3485 1: [ [ 1, 2, 3 ] 2: [ [ 1, 2, 3 ] 1: [ [ 1, 2, 3 ]
3486 [ 4, 5, 6 ] ] [ 4, 5, 6 ] ] [ 4, 5, 6 ] ]
3487 . 1: [ [ 1, 0, 0 ] .
3488 [ 0, 1, 0 ]
3489 [ 0, 0, 1 ] ]
3490 .
3491
3492 r 4 v i 3 @key{RET} *
3493 @end group
3494 @end smallexample
3495
3496 If a matrix is square, it is often possible to find its @dfn{inverse},
3497 that is, a matrix which, when multiplied by the original matrix, yields
3498 an identity matrix. The @kbd{&} (reciprocal) key also computes the
3499 inverse of a matrix.
3500
3501 @smallexample
3502 @group
3503 1: [ [ 1, 2, 3 ] 1: [ [ -2.4, 1.2, -0.2 ]
3504 [ 4, 5, 6 ] [ 2.8, -1.4, 0.4 ]
3505 [ 7, 6, 0 ] ] [ -0.73333, 0.53333, -0.2 ] ]
3506 . .
3507
3508 r 4 r 2 | s 5 &
3509 @end group
3510 @end smallexample
3511
3512 @noindent
3513 The vertical bar @kbd{|} @dfn{concatenates} numbers, vectors, and
3514 matrices together. Here we have used it to add a new row onto
3515 our matrix to make it square.
3516
3517 We can multiply these two matrices in either order to get an identity.
3518
3519 @smallexample
3520 @group
3521 1: [ [ 1., 0., 0. ] 1: [ [ 1., 0., 0. ]
3522 [ 0., 1., 0. ] [ 0., 1., 0. ]
3523 [ 0., 0., 1. ] ] [ 0., 0., 1. ] ]
3524 . .
3525
3526 M-@key{RET} * U @key{TAB} *
3527 @end group
3528 @end smallexample
3529
3530 @cindex Systems of linear equations
3531 @cindex Linear equations, systems of
3532 Matrix inverses are related to systems of linear equations in algebra.
3533 Suppose we had the following set of equations:
3534
3535 @ifinfo
3536 @group
3537 @example
3538 a + 2b + 3c = 6
3539 4a + 5b + 6c = 2
3540 7a + 6b = 3
3541 @end example
3542 @end group
3543 @end ifinfo
3544 @tex
3545 \turnoffactive
3546 \beforedisplayh
3547 $$ \openup1\jot \tabskip=0pt plus1fil
3548 \halign to\displaywidth{\tabskip=0pt
3549 $\hfil#$&$\hfil{}#{}$&
3550 $\hfil#$&$\hfil{}#{}$&
3551 $\hfil#$&${}#\hfil$\tabskip=0pt plus1fil\cr
3552 a&+&2b&+&3c&=6 \cr
3553 4a&+&5b&+&6c&=2 \cr
3554 7a&+&6b& & &=3 \cr}
3555 $$
3556 \afterdisplayh
3557 @end tex
3558
3559 @noindent
3560 This can be cast into the matrix equation,
3561
3562 @ifinfo
3563 @group
3564 @example
3565 [ [ 1, 2, 3 ] [ [ a ] [ [ 6 ]
3566 [ 4, 5, 6 ] * [ b ] = [ 2 ]
3567 [ 7, 6, 0 ] ] [ c ] ] [ 3 ] ]
3568 @end example
3569 @end group
3570 @end ifinfo
3571 @tex
3572 \turnoffactive
3573 \beforedisplay
3574 $$ \pmatrix{ 1 & 2 & 3 \cr 4 & 5 & 6 \cr 7 & 6 & 0 }
3575 \times
3576 \pmatrix{ a \cr b \cr c } = \pmatrix{ 6 \cr 2 \cr 3 }
3577 $$
3578 \afterdisplay
3579 @end tex
3580
3581 We can solve this system of equations by multiplying both sides by the
3582 inverse of the matrix. Calc can do this all in one step:
3583
3584 @smallexample
3585 @group
3586 2: [6, 2, 3] 1: [-12.6, 15.2, -3.93333]
3587 1: [ [ 1, 2, 3 ] .
3588 [ 4, 5, 6 ]
3589 [ 7, 6, 0 ] ]
3590 .
3591
3592 [6,2,3] r 5 /
3593 @end group
3594 @end smallexample
3595
3596 @noindent
3597 The result is the @expr{[a, b, c]} vector that solves the equations.
3598 (Dividing by a square matrix is equivalent to multiplying by its
3599 inverse.)
3600
3601 Let's verify this solution:
3602
3603 @smallexample
3604 @group
3605 2: [ [ 1, 2, 3 ] 1: [6., 2., 3.]
3606 [ 4, 5, 6 ] .
3607 [ 7, 6, 0 ] ]
3608 1: [-12.6, 15.2, -3.93333]
3609 .
3610
3611 r 5 @key{TAB} *
3612 @end group
3613 @end smallexample
3614
3615 @noindent
3616 Note that we had to be careful about the order in which we multiplied
3617 the matrix and vector. If we multiplied in the other order, Calc would
3618 assume the vector was a row vector in order to make the dimensions
3619 come out right, and the answer would be incorrect. If you
3620 don't feel safe letting Calc take either interpretation of your
3621 vectors, use explicit
3622 @texline @math{N\times1}
3623 @infoline Nx1
3624 or
3625 @texline @math{1\times N}
3626 @infoline 1xN
3627 matrices instead. In this case, you would enter the original column
3628 vector as @samp{[[6], [2], [3]]} or @samp{[6; 2; 3]}.
3629
3630 (@bullet{}) @strong{Exercise 2.} Algebraic entry allows you to make
3631 vectors and matrices that include variables. Solve the following
3632 system of equations to get expressions for @expr{x} and @expr{y}
3633 in terms of @expr{a} and @expr{b}.
3634
3635 @ifinfo
3636 @group
3637 @example
3638 x + a y = 6
3639 x + b y = 10
3640 @end example
3641 @end group
3642 @end ifinfo
3643 @tex
3644 \turnoffactive
3645 \beforedisplay
3646 $$ \eqalign{ x &+ a y = 6 \cr
3647 x &+ b y = 10}
3648 $$
3649 \afterdisplay
3650 @end tex
3651
3652 @noindent
3653 @xref{Matrix Answer 2, 2}. (@bullet{})
3654
3655 @cindex Least-squares for over-determined systems
3656 @cindex Over-determined systems of equations
3657 (@bullet{}) @strong{Exercise 3.} A system of equations is ``over-determined''
3658 if it has more equations than variables. It is often the case that
3659 there are no values for the variables that will satisfy all the
3660 equations at once, but it is still useful to find a set of values
3661 which ``nearly'' satisfy all the equations. In terms of matrix equations,
3662 you can't solve @expr{A X = B} directly because the matrix @expr{A}
3663 is not square for an over-determined system. Matrix inversion works
3664 only for square matrices. One common trick is to multiply both sides
3665 on the left by the transpose of @expr{A}:
3666 @ifinfo
3667 @samp{trn(A)*A*X = trn(A)*B}.
3668 @end ifinfo
3669 @tex
3670 \turnoffactive
3671 $A^T A \, X = A^T B$, where $A^T$ is the transpose \samp{trn(A)}.
3672 @end tex
3673 Now
3674 @texline @math{A^T A}
3675 @infoline @expr{trn(A)*A}
3676 is a square matrix so a solution is possible. It turns out that the
3677 @expr{X} vector you compute in this way will be a ``least-squares''
3678 solution, which can be regarded as the ``closest'' solution to the set
3679 of equations. Use Calc to solve the following over-determined
3680 system:
3681
3682 @ifinfo
3683 @group
3684 @example
3685 a + 2b + 3c = 6
3686 4a + 5b + 6c = 2
3687 7a + 6b = 3
3688 2a + 4b + 6c = 11
3689 @end example
3690 @end group
3691 @end ifinfo
3692 @tex
3693 \turnoffactive
3694 \beforedisplayh
3695 $$ \openup1\jot \tabskip=0pt plus1fil
3696 \halign to\displaywidth{\tabskip=0pt
3697 $\hfil#$&$\hfil{}#{}$&
3698 $\hfil#$&$\hfil{}#{}$&
3699 $\hfil#$&${}#\hfil$\tabskip=0pt plus1fil\cr
3700 a&+&2b&+&3c&=6 \cr
3701 4a&+&5b&+&6c&=2 \cr
3702 7a&+&6b& & &=3 \cr
3703 2a&+&4b&+&6c&=11 \cr}
3704 $$
3705 \afterdisplayh
3706 @end tex
3707
3708 @noindent
3709 @xref{Matrix Answer 3, 3}. (@bullet{})
3710
3711 @node List Tutorial, , Matrix Tutorial, Vector/Matrix Tutorial
3712 @subsection Vectors as Lists
3713
3714 @noindent
3715 @cindex Lists
3716 Although Calc has a number of features for manipulating vectors and
3717 matrices as mathematical objects, you can also treat vectors as
3718 simple lists of values. For example, we saw that the @kbd{k f}
3719 command returns a vector which is a list of the prime factors of a
3720 number.
3721
3722 You can pack and unpack stack entries into vectors:
3723
3724 @smallexample
3725 @group
3726 3: 10 1: [10, 20, 30] 3: 10
3727 2: 20 . 2: 20
3728 1: 30 1: 30
3729 . .
3730
3731 M-3 v p v u
3732 @end group
3733 @end smallexample
3734
3735 You can also build vectors out of consecutive integers, or out
3736 of many copies of a given value:
3737
3738 @smallexample
3739 @group
3740 1: [1, 2, 3, 4] 2: [1, 2, 3, 4] 2: [1, 2, 3, 4]
3741 . 1: 17 1: [17, 17, 17, 17]
3742 . .
3743
3744 v x 4 @key{RET} 17 v b 4 @key{RET}
3745 @end group
3746 @end smallexample
3747
3748 You can apply an operator to every element of a vector using the
3749 @dfn{map} command.
3750
3751 @smallexample
3752 @group
3753 1: [17, 34, 51, 68] 1: [289, 1156, 2601, 4624] 1: [17, 34, 51, 68]
3754 . . .
3755
3756 V M * 2 V M ^ V M Q
3757 @end group
3758 @end smallexample
3759
3760 @noindent
3761 In the first step, we multiply the vector of integers by the vector
3762 of 17's elementwise. In the second step, we raise each element to
3763 the power two. (The general rule is that both operands must be
3764 vectors of the same length, or else one must be a vector and the
3765 other a plain number.) In the final step, we take the square root
3766 of each element.
3767
3768 (@bullet{}) @strong{Exercise 1.} Compute a vector of powers of two
3769 from
3770 @texline @math{2^{-4}}
3771 @infoline @expr{2^-4}
3772 to @expr{2^4}. @xref{List Answer 1, 1}. (@bullet{})
3773
3774 You can also @dfn{reduce} a binary operator across a vector.
3775 For example, reducing @samp{*} computes the product of all the
3776 elements in the vector:
3777
3778 @smallexample
3779 @group
3780 1: 123123 1: [3, 7, 11, 13, 41] 1: 123123
3781 . . .
3782
3783 123123 k f V R *
3784 @end group
3785 @end smallexample
3786
3787 @noindent
3788 In this example, we decompose 123123 into its prime factors, then
3789 multiply those factors together again to yield the original number.
3790
3791 We could compute a dot product ``by hand'' using mapping and
3792 reduction:
3793
3794 @smallexample
3795 @group
3796 2: [1, 2, 3] 1: [7, 12, 0] 1: 19
3797 1: [7, 6, 0] . .
3798 .
3799
3800 r 1 r 2 V M * V R +
3801 @end group
3802 @end smallexample
3803
3804 @noindent
3805 Recalling two vectors from the previous section, we compute the
3806 sum of pairwise products of the elements to get the same answer
3807 for the dot product as before.
3808
3809 A slight variant of vector reduction is the @dfn{accumulate} operation,
3810 @kbd{V U}. This produces a vector of the intermediate results from
3811 a corresponding reduction. Here we compute a table of factorials:
3812
3813 @smallexample
3814 @group
3815 1: [1, 2, 3, 4, 5, 6] 1: [1, 2, 6, 24, 120, 720]
3816 . .
3817
3818 v x 6 @key{RET} V U *
3819 @end group
3820 @end smallexample
3821
3822 Calc allows vectors to grow as large as you like, although it gets
3823 rather slow if vectors have more than about a hundred elements.
3824 Actually, most of the time is spent formatting these large vectors
3825 for display, not calculating on them. Try the following experiment
3826 (if your computer is very fast you may need to substitute a larger
3827 vector size).
3828
3829 @smallexample
3830 @group
3831 1: [1, 2, 3, 4, ... 1: [2, 3, 4, 5, ...
3832 . .
3833
3834 v x 500 @key{RET} 1 V M +
3835 @end group
3836 @end smallexample
3837
3838 Now press @kbd{v .} (the letter @kbd{v}, then a period) and try the
3839 experiment again. In @kbd{v .} mode, long vectors are displayed
3840 ``abbreviated'' like this:
3841
3842 @smallexample
3843 @group
3844 1: [1, 2, 3, ..., 500] 1: [2, 3, 4, ..., 501]
3845 . .
3846
3847 v x 500 @key{RET} 1 V M +
3848 @end group
3849 @end smallexample
3850
3851 @noindent
3852 (where now the @samp{...} is actually part of the Calc display).
3853 You will find both operations are now much faster. But notice that
3854 even in @w{@kbd{v .}} mode, the full vectors are still shown in the Trail.
3855 Type @w{@kbd{t .}} to cause the trail to abbreviate as well, and try the
3856 experiment one more time. Operations on long vectors are now quite
3857 fast! (But of course if you use @kbd{t .} you will lose the ability
3858 to get old vectors back using the @kbd{t y} command.)
3859
3860 An easy way to view a full vector when @kbd{v .} mode is active is
3861 to press @kbd{`} (back-quote) to edit the vector; editing always works
3862 with the full, unabbreviated value.
3863
3864 @cindex Least-squares for fitting a straight line
3865 @cindex Fitting data to a line
3866 @cindex Line, fitting data to
3867 @cindex Data, extracting from buffers
3868 @cindex Columns of data, extracting
3869 As a larger example, let's try to fit a straight line to some data,
3870 using the method of least squares. (Calc has a built-in command for
3871 least-squares curve fitting, but we'll do it by hand here just to
3872 practice working with vectors.) Suppose we have the following list
3873 of values in a file we have loaded into Emacs:
3874
3875 @smallexample
3876 x y
3877 --- ---
3878 1.34 0.234
3879 1.41 0.298
3880 1.49 0.402
3881 1.56 0.412
3882 1.64 0.466
3883 1.73 0.473
3884 1.82 0.601
3885 1.91 0.519
3886 2.01 0.603
3887 2.11 0.637
3888 2.22 0.645
3889 2.33 0.705
3890 2.45 0.917
3891 2.58 1.009
3892 2.71 0.971
3893 2.85 1.062
3894 3.00 1.148
3895 3.15 1.157
3896 3.32 1.354
3897 @end smallexample
3898
3899 @noindent
3900 If you are reading this tutorial in printed form, you will find it
3901 easiest to press @kbd{M-# i} to enter the on-line Info version of
3902 the manual and find this table there. (Press @kbd{g}, then type
3903 @kbd{List Tutorial}, to jump straight to this section.)
3904
3905 Position the cursor at the upper-left corner of this table, just
3906 to the left of the @expr{1.34}. Press @kbd{C-@@} to set the mark.
3907 (On your system this may be @kbd{C-2}, @kbd{C-@key{SPC}}, or @kbd{NUL}.)
3908 Now position the cursor to the lower-right, just after the @expr{1.354}.
3909 You have now defined this region as an Emacs ``rectangle.'' Still
3910 in the Info buffer, type @kbd{M-# r}. This command
3911 (@code{calc-grab-rectangle}) will pop you back into the Calculator, with
3912 the contents of the rectangle you specified in the form of a matrix.
3913
3914 @smallexample
3915 @group
3916 1: [ [ 1.34, 0.234 ]
3917 [ 1.41, 0.298 ]
3918 @dots{}
3919 @end group
3920 @end smallexample
3921
3922 @noindent
3923 (You may wish to use @kbd{v .} mode to abbreviate the display of this
3924 large matrix.)
3925
3926 We want to treat this as a pair of lists. The first step is to
3927 transpose this matrix into a pair of rows. Remember, a matrix is
3928 just a vector of vectors. So we can unpack the matrix into a pair
3929 of row vectors on the stack.
3930
3931 @smallexample
3932 @group
3933 1: [ [ 1.34, 1.41, 1.49, ... ] 2: [1.34, 1.41, 1.49, ... ]
3934 [ 0.234, 0.298, 0.402, ... ] ] 1: [0.234, 0.298, 0.402, ... ]
3935 . .
3936
3937 v t v u
3938 @end group
3939 @end smallexample
3940
3941 @noindent
3942 Let's store these in quick variables 1 and 2, respectively.
3943
3944 @smallexample
3945 @group
3946 1: [1.34, 1.41, 1.49, ... ] .
3947 .
3948
3949 t 2 t 1
3950 @end group
3951 @end smallexample
3952
3953 @noindent
3954 (Recall that @kbd{t 2} is a variant of @kbd{s 2} that removes the
3955 stored value from the stack.)
3956
3957 In a least squares fit, the slope @expr{m} is given by the formula
3958
3959 @ifinfo
3960 @example
3961 m = (N sum(x y) - sum(x) sum(y)) / (N sum(x^2) - sum(x)^2)
3962 @end example
3963 @end ifinfo
3964 @tex
3965 \turnoffactive
3966 \beforedisplay
3967 $$ m = {N \sum x y - \sum x \sum y \over
3968 N \sum x^2 - \left( \sum x \right)^2} $$
3969 \afterdisplay
3970 @end tex
3971
3972 @noindent
3973 where
3974 @texline @math{\sum x}
3975 @infoline @expr{sum(x)}
3976 represents the sum of all the values of @expr{x}. While there is an
3977 actual @code{sum} function in Calc, it's easier to sum a vector using a
3978 simple reduction. First, let's compute the four different sums that
3979 this formula uses.
3980
3981 @smallexample
3982 @group
3983 1: 41.63 1: 98.0003
3984 . .
3985
3986 r 1 V R + t 3 r 1 2 V M ^ V R + t 4
3987
3988 @end group
3989 @end smallexample
3990 @noindent
3991 @smallexample
3992 @group
3993 1: 13.613 1: 33.36554
3994 . .
3995
3996 r 2 V R + t 5 r 1 r 2 V M * V R + t 6
3997 @end group
3998 @end smallexample
3999
4000 @ifinfo
4001 @noindent
4002 These are @samp{sum(x)}, @samp{sum(x^2)}, @samp{sum(y)}, and @samp{sum(x y)},
4003 respectively. (We could have used @kbd{*} to compute @samp{sum(x^2)} and
4004 @samp{sum(x y)}.)
4005 @end ifinfo
4006 @tex
4007 \turnoffactive
4008 These are $\sum x$, $\sum x^2$, $\sum y$, and $\sum x y$,
4009 respectively. (We could have used \kbd{*} to compute $\sum x^2$ and
4010 $\sum x y$.)
4011 @end tex
4012
4013 Finally, we also need @expr{N}, the number of data points. This is just
4014 the length of either of our lists.
4015
4016 @smallexample
4017 @group
4018 1: 19
4019 .
4020
4021 r 1 v l t 7
4022 @end group
4023 @end smallexample
4024
4025 @noindent
4026 (That's @kbd{v} followed by a lower-case @kbd{l}.)
4027
4028 Now we grind through the formula:
4029
4030 @smallexample
4031 @group
4032 1: 633.94526 2: 633.94526 1: 67.23607
4033 . 1: 566.70919 .
4034 .
4035
4036 r 7 r 6 * r 3 r 5 * -
4037
4038 @end group
4039 @end smallexample
4040 @noindent
4041 @smallexample
4042 @group
4043 2: 67.23607 3: 67.23607 2: 67.23607 1: 0.52141679
4044 1: 1862.0057 2: 1862.0057 1: 128.9488 .
4045 . 1: 1733.0569 .
4046 .
4047
4048 r 7 r 4 * r 3 2 ^ - / t 8
4049 @end group
4050 @end smallexample
4051
4052 That gives us the slope @expr{m}. The y-intercept @expr{b} can now
4053 be found with the simple formula,
4054
4055 @ifinfo
4056 @example
4057 b = (sum(y) - m sum(x)) / N
4058 @end example
4059 @end ifinfo
4060 @tex
4061 \turnoffactive
4062 \beforedisplay
4063 $$ b = {\sum y - m \sum x \over N} $$
4064 \afterdisplay
4065 \vskip10pt
4066 @end tex
4067
4068 @smallexample
4069 @group
4070 1: 13.613 2: 13.613 1: -8.09358 1: -0.425978
4071 . 1: 21.70658 . .
4072 .
4073
4074 r 5 r 8 r 3 * - r 7 / t 9
4075 @end group
4076 @end smallexample
4077
4078 Let's ``plot'' this straight line approximation,
4079 @texline @math{y \approx m x + b},
4080 @infoline @expr{m x + b},
4081 and compare it with the original data.
4082
4083 @smallexample
4084 @group
4085 1: [0.699, 0.735, ... ] 1: [0.273, 0.309, ... ]
4086 . .
4087
4088 r 1 r 8 * r 9 + s 0
4089 @end group
4090 @end smallexample
4091
4092 @noindent
4093 Notice that multiplying a vector by a constant, and adding a constant
4094 to a vector, can be done without mapping commands since these are
4095 common operations from vector algebra. As far as Calc is concerned,
4096 we've just been doing geometry in 19-dimensional space!
4097
4098 We can subtract this vector from our original @expr{y} vector to get
4099 a feel for the error of our fit. Let's find the maximum error:
4100
4101 @smallexample
4102 @group
4103 1: [0.0387, 0.0112, ... ] 1: [0.0387, 0.0112, ... ] 1: 0.0897
4104 . . .
4105
4106 r 2 - V M A V R X
4107 @end group
4108 @end smallexample
4109
4110 @noindent
4111 First we compute a vector of differences, then we take the absolute
4112 values of these differences, then we reduce the @code{max} function
4113 across the vector. (The @code{max} function is on the two-key sequence
4114 @kbd{f x}; because it is so common to use @code{max} in a vector
4115 operation, the letters @kbd{X} and @kbd{N} are also accepted for
4116 @code{max} and @code{min} in this context. In general, you answer
4117 the @kbd{V M} or @kbd{V R} prompt with the actual key sequence that
4118 invokes the function you want. You could have typed @kbd{V R f x} or
4119 even @kbd{V R x max @key{RET}} if you had preferred.)
4120
4121 If your system has the GNUPLOT program, you can see graphs of your
4122 data and your straight line to see how well they match. (If you have
4123 GNUPLOT 3.0, the following instructions will work regardless of the
4124 kind of display you have. Some GNUPLOT 2.0, non-X-windows systems
4125 may require additional steps to view the graphs.)
4126
4127 Let's start by plotting the original data. Recall the ``@var{x}'' and ``@var{y}''
4128 vectors onto the stack and press @kbd{g f}. This ``fast'' graphing
4129 command does everything you need to do for simple, straightforward
4130 plotting of data.
4131
4132 @smallexample
4133 @group
4134 2: [1.34, 1.41, 1.49, ... ]
4135 1: [0.234, 0.298, 0.402, ... ]
4136 .
4137
4138 r 1 r 2 g f
4139 @end group
4140 @end smallexample
4141
4142 If all goes well, you will shortly get a new window containing a graph
4143 of the data. (If not, contact your GNUPLOT or Calc installer to find
4144 out what went wrong.) In the X window system, this will be a separate
4145 graphics window. For other kinds of displays, the default is to
4146 display the graph in Emacs itself using rough character graphics.
4147 Press @kbd{q} when you are done viewing the character graphics.
4148
4149 Next, let's add the line we got from our least-squares fit.
4150 @ifinfo
4151 (If you are reading this tutorial on-line while running Calc, typing
4152 @kbd{g a} may cause the tutorial to disappear from its window and be
4153 replaced by a buffer named @samp{*Gnuplot Commands*}. The tutorial
4154 will reappear when you terminate GNUPLOT by typing @kbd{g q}.)
4155 @end ifinfo
4156
4157 @smallexample
4158 @group
4159 2: [1.34, 1.41, 1.49, ... ]
4160 1: [0.273, 0.309, 0.351, ... ]
4161 .
4162
4163 @key{DEL} r 0 g a g p
4164 @end group
4165 @end smallexample
4166
4167 It's not very useful to get symbols to mark the data points on this
4168 second curve; you can type @kbd{g S g p} to remove them. Type @kbd{g q}
4169 when you are done to remove the X graphics window and terminate GNUPLOT.
4170
4171 (@bullet{}) @strong{Exercise 2.} An earlier exercise showed how to do
4172 least squares fitting to a general system of equations. Our 19 data
4173 points are really 19 equations of the form @expr{y_i = m x_i + b} for
4174 different pairs of @expr{(x_i,y_i)}. Use the matrix-transpose method
4175 to solve for @expr{m} and @expr{b}, duplicating the above result.
4176 @xref{List Answer 2, 2}. (@bullet{})
4177
4178 @cindex Geometric mean
4179 (@bullet{}) @strong{Exercise 3.} If the input data do not form a
4180 rectangle, you can use @w{@kbd{M-# g}} (@code{calc-grab-region})
4181 to grab the data the way Emacs normally works with regions---it reads
4182 left-to-right, top-to-bottom, treating line breaks the same as spaces.
4183 Use this command to find the geometric mean of the following numbers.
4184 (The geometric mean is the @var{n}th root of the product of @var{n} numbers.)
4185
4186 @example
4187 2.3 6 22 15.1 7
4188 15 14 7.5
4189 2.5
4190 @end example
4191
4192 @noindent
4193 The @kbd{M-# g} command accepts numbers separated by spaces or commas,
4194 with or without surrounding vector brackets.
4195 @xref{List Answer 3, 3}. (@bullet{})
4196
4197 @ifinfo
4198 As another example, a theorem about binomial coefficients tells
4199 us that the alternating sum of binomial coefficients
4200 @var{n}-choose-0 minus @var{n}-choose-1 plus @var{n}-choose-2, and so
4201 on up to @var{n}-choose-@var{n},
4202 always comes out to zero. Let's verify this
4203 for @expr{n=6}.
4204 @end ifinfo
4205 @tex
4206 As another example, a theorem about binomial coefficients tells
4207 us that the alternating sum of binomial coefficients
4208 ${n \choose 0} - {n \choose 1} + {n \choose 2} - \cdots \pm {n \choose n}$
4209 always comes out to zero. Let's verify this
4210 for \cite{n=6}.
4211 @end tex
4212
4213 @smallexample
4214 @group
4215 1: [1, 2, 3, 4, 5, 6, 7] 1: [0, 1, 2, 3, 4, 5, 6]
4216 . .
4217
4218 v x 7 @key{RET} 1 -
4219
4220 @end group
4221 @end smallexample
4222 @noindent
4223 @smallexample
4224 @group
4225 1: [1, -6, 15, -20, 15, -6, 1] 1: 0
4226 . .
4227
4228 V M ' (-1)^$ choose(6,$) @key{RET} V R +
4229 @end group
4230 @end smallexample
4231
4232 The @kbd{V M '} command prompts you to enter any algebraic expression
4233 to define the function to map over the vector. The symbol @samp{$}
4234 inside this expression represents the argument to the function.
4235 The Calculator applies this formula to each element of the vector,
4236 substituting each element's value for the @samp{$} sign(s) in turn.
4237
4238 To define a two-argument function, use @samp{$$} for the first
4239 argument and @samp{$} for the second: @kbd{V M ' $$-$ @key{RET}} is
4240 equivalent to @kbd{V M -}. This is analogous to regular algebraic
4241 entry, where @samp{$$} would refer to the next-to-top stack entry
4242 and @samp{$} would refer to the top stack entry, and @kbd{' $$-$ @key{RET}}
4243 would act exactly like @kbd{-}.
4244
4245 Notice that the @kbd{V M '} command has recorded two things in the
4246 trail: The result, as usual, and also a funny-looking thing marked
4247 @samp{oper} that represents the operator function you typed in.
4248 The function is enclosed in @samp{< >} brackets, and the argument is
4249 denoted by a @samp{#} sign. If there were several arguments, they
4250 would be shown as @samp{#1}, @samp{#2}, and so on. (For example,
4251 @kbd{V M ' $$-$} will put the function @samp{<#1 - #2>} on the
4252 trail.) This object is a ``nameless function''; you can use nameless
4253 @w{@samp{< >}} notation to answer the @kbd{V M '} prompt if you like.
4254 Nameless function notation has the interesting, occasionally useful
4255 property that a nameless function is not actually evaluated until
4256 it is used. For example, @kbd{V M ' $+random(2.0)} evaluates
4257 @samp{random(2.0)} once and adds that random number to all elements
4258 of the vector, but @kbd{V M ' <#+random(2.0)>} evaluates the
4259 @samp{random(2.0)} separately for each vector element.
4260
4261 Another group of operators that are often useful with @kbd{V M} are
4262 the relational operators: @kbd{a =}, for example, compares two numbers
4263 and gives the result 1 if they are equal, or 0 if not. Similarly,
4264 @w{@kbd{a <}} checks for one number being less than another.
4265
4266 Other useful vector operations include @kbd{v v}, to reverse a
4267 vector end-for-end; @kbd{V S}, to sort the elements of a vector
4268 into increasing order; and @kbd{v r} and @w{@kbd{v c}}, to extract
4269 one row or column of a matrix, or (in both cases) to extract one
4270 element of a plain vector. With a negative argument, @kbd{v r}
4271 and @kbd{v c} instead delete one row, column, or vector element.
4272
4273 @cindex Divisor functions
4274 (@bullet{}) @strong{Exercise 4.} The @expr{k}th @dfn{divisor function}
4275 @tex
4276 $\sigma_k(n)$
4277 @end tex
4278 is the sum of the @expr{k}th powers of all the divisors of an
4279 integer @expr{n}. Figure out a method for computing the divisor
4280 function for reasonably small values of @expr{n}. As a test,
4281 the 0th and 1st divisor functions of 30 are 8 and 72, respectively.
4282 @xref{List Answer 4, 4}. (@bullet{})
4283
4284 @cindex Square-free numbers
4285 @cindex Duplicate values in a list
4286 (@bullet{}) @strong{Exercise 5.} The @kbd{k f} command produces a
4287 list of prime factors for a number. Sometimes it is important to
4288 know that a number is @dfn{square-free}, i.e., that no prime occurs
4289 more than once in its list of prime factors. Find a sequence of
4290 keystrokes to tell if a number is square-free; your method should
4291 leave 1 on the stack if it is, or 0 if it isn't.
4292 @xref{List Answer 5, 5}. (@bullet{})
4293
4294 @cindex Triangular lists
4295 (@bullet{}) @strong{Exercise 6.} Build a list of lists that looks
4296 like the following diagram. (You may wish to use the @kbd{v /}
4297 command to enable multi-line display of vectors.)
4298
4299 @smallexample
4300 @group
4301 1: [ [1],
4302 [1, 2],
4303 [1, 2, 3],
4304 [1, 2, 3, 4],
4305 [1, 2, 3, 4, 5],
4306 [1, 2, 3, 4, 5, 6] ]
4307 @end group
4308 @end smallexample
4309
4310 @noindent
4311 @xref{List Answer 6, 6}. (@bullet{})
4312
4313 (@bullet{}) @strong{Exercise 7.} Build the following list of lists.
4314
4315 @smallexample
4316 @group
4317 1: [ [0],
4318 [1, 2],
4319 [3, 4, 5],
4320 [6, 7, 8, 9],
4321 [10, 11, 12, 13, 14],
4322 [15, 16, 17, 18, 19, 20] ]
4323 @end group
4324 @end smallexample
4325
4326 @noindent
4327 @xref{List Answer 7, 7}. (@bullet{})
4328
4329 @cindex Maximizing a function over a list of values
4330 @c [fix-ref Numerical Solutions]
4331 (@bullet{}) @strong{Exercise 8.} Compute a list of values of Bessel's
4332 @texline @math{J_1(x)}
4333 @infoline @expr{J1}
4334 function @samp{besJ(1,x)} for @expr{x} from 0 to 5 in steps of 0.25.
4335 Find the value of @expr{x} (from among the above set of values) for
4336 which @samp{besJ(1,x)} is a maximum. Use an ``automatic'' method,
4337 i.e., just reading along the list by hand to find the largest value
4338 is not allowed! (There is an @kbd{a X} command which does this kind
4339 of thing automatically; @pxref{Numerical Solutions}.)
4340 @xref{List Answer 8, 8}. (@bullet{})
4341
4342 @cindex Digits, vectors of
4343 (@bullet{}) @strong{Exercise 9.} You are given an integer in the range
4344 @texline @math{0 \le N < 10^m}
4345 @infoline @expr{0 <= N < 10^m}
4346 for @expr{m=12} (i.e., an integer of less than
4347 twelve digits). Convert this integer into a vector of @expr{m}
4348 digits, each in the range from 0 to 9. In vector-of-digits notation,
4349 add one to this integer to produce a vector of @expr{m+1} digits
4350 (since there could be a carry out of the most significant digit).
4351 Convert this vector back into a regular integer. A good integer
4352 to try is 25129925999. @xref{List Answer 9, 9}. (@bullet{})
4353
4354 (@bullet{}) @strong{Exercise 10.} Your friend Joe tried to use
4355 @kbd{V R a =} to test if all numbers in a list were equal. What
4356 happened? How would you do this test? @xref{List Answer 10, 10}. (@bullet{})
4357
4358 (@bullet{}) @strong{Exercise 11.} The area of a circle of radius one
4359 is @cpi{}. The area of the
4360 @texline @math{2\times2}
4361 @infoline 2x2
4362 square that encloses that circle is 4. So if we throw @var{n} darts at
4363 random points in the square, about @cpiover{4} of them will land inside
4364 the circle. This gives us an entertaining way to estimate the value of
4365 @cpi{}. The @w{@kbd{k r}}
4366 command picks a random number between zero and the value on the stack.
4367 We could get a random floating-point number between @mathit{-1} and 1 by typing
4368 @w{@kbd{2.0 k r 1 -}}. Build a vector of 100 random @expr{(x,y)} points in
4369 this square, then use vector mapping and reduction to count how many
4370 points lie inside the unit circle. Hint: Use the @kbd{v b} command.
4371 @xref{List Answer 11, 11}. (@bullet{})
4372
4373 @cindex Matchstick problem
4374 (@bullet{}) @strong{Exercise 12.} The @dfn{matchstick problem} provides
4375 another way to calculate @cpi{}. Say you have an infinite field
4376 of vertical lines with a spacing of one inch. Toss a one-inch matchstick
4377 onto the field. The probability that the matchstick will land crossing
4378 a line turns out to be
4379 @texline @math{2/\pi}.
4380 @infoline @expr{2/pi}.
4381 Toss 100 matchsticks to estimate @cpi{}. (If you want still more fun,
4382 the probability that the GCD (@w{@kbd{k g}}) of two large integers is
4383 one turns out to be
4384 @texline @math{6/\pi^2}.
4385 @infoline @expr{6/pi^2}.
4386 That provides yet another way to estimate @cpi{}.)
4387 @xref{List Answer 12, 12}. (@bullet{})
4388
4389 (@bullet{}) @strong{Exercise 13.} An algebraic entry of a string in
4390 double-quote marks, @samp{"hello"}, creates a vector of the numerical
4391 (ASCII) codes of the characters (here, @expr{[104, 101, 108, 108, 111]}).
4392 Sometimes it is convenient to compute a @dfn{hash code} of a string,
4393 which is just an integer that represents the value of that string.
4394 Two equal strings have the same hash code; two different strings
4395 @dfn{probably} have different hash codes. (For example, Calc has
4396 over 400 function names, but Emacs can quickly find the definition for
4397 any given name because it has sorted the functions into ``buckets'' by
4398 their hash codes. Sometimes a few names will hash into the same bucket,
4399 but it is easier to search among a few names than among all the names.)
4400 One popular hash function is computed as follows: First set @expr{h = 0}.
4401 Then, for each character from the string in turn, set @expr{h = 3h + c_i}
4402 where @expr{c_i} is the character's ASCII code. If we have 511 buckets,
4403 we then take the hash code modulo 511 to get the bucket number. Develop a
4404 simple command or commands for converting string vectors into hash codes.
4405 The hash code for @samp{"Testing, 1, 2, 3"} is 1960915098, which modulo
4406 511 is 121. @xref{List Answer 13, 13}. (@bullet{})
4407
4408 (@bullet{}) @strong{Exercise 14.} The @kbd{H V R} and @kbd{H V U}
4409 commands do nested function evaluations. @kbd{H V U} takes a starting
4410 value and a number of steps @var{n} from the stack; it then applies the
4411 function you give to the starting value 0, 1, 2, up to @var{n} times
4412 and returns a vector of the results. Use this command to create a
4413 ``random walk'' of 50 steps. Start with the two-dimensional point
4414 @expr{(0,0)}; then take one step a random distance between @mathit{-1} and 1
4415 in both @expr{x} and @expr{y}; then take another step, and so on. Use the
4416 @kbd{g f} command to display this random walk. Now modify your random
4417 walk to walk a unit distance, but in a random direction, at each step.
4418 (Hint: The @code{sincos} function returns a vector of the cosine and
4419 sine of an angle.) @xref{List Answer 14, 14}. (@bullet{})
4420
4421 @node Types Tutorial, Algebra Tutorial, Vector/Matrix Tutorial, Tutorial
4422 @section Types Tutorial
4423
4424 @noindent
4425 Calc understands a variety of data types as well as simple numbers.
4426 In this section, we'll experiment with each of these types in turn.
4427
4428 The numbers we've been using so far have mainly been either @dfn{integers}
4429 or @dfn{floats}. We saw that floats are usually a good approximation to
4430 the mathematical concept of real numbers, but they are only approximations
4431 and are susceptible to roundoff error. Calc also supports @dfn{fractions},
4432 which can exactly represent any rational number.
4433
4434 @smallexample
4435 @group
4436 1: 3628800 2: 3628800 1: 518400:7 1: 518414:7 1: 7:518414
4437 . 1: 49 . . .
4438 .
4439
4440 10 ! 49 @key{RET} : 2 + &
4441 @end group
4442 @end smallexample
4443
4444 @noindent
4445 The @kbd{:} command divides two integers to get a fraction; @kbd{/}
4446 would normally divide integers to get a floating-point result.
4447 Notice we had to type @key{RET} between the @kbd{49} and the @kbd{:}
4448 since the @kbd{:} would otherwise be interpreted as part of a
4449 fraction beginning with 49.
4450
4451 You can convert between floating-point and fractional format using
4452 @kbd{c f} and @kbd{c F}:
4453
4454 @smallexample
4455 @group
4456 1: 1.35027217629e-5 1: 7:518414
4457 . .
4458
4459 c f c F
4460 @end group
4461 @end smallexample
4462
4463 The @kbd{c F} command replaces a floating-point number with the
4464 ``simplest'' fraction whose floating-point representation is the
4465 same, to within the current precision.
4466
4467 @smallexample
4468 @group
4469 1: 3.14159265359 1: 1146408:364913 1: 3.1416 1: 355:113
4470 . . . .
4471
4472 P c F @key{DEL} p 5 @key{RET} P c F
4473 @end group
4474 @end smallexample
4475
4476 (@bullet{}) @strong{Exercise 1.} A calculation has produced the
4477 result 1.26508260337. You suspect it is the square root of the
4478 product of @cpi{} and some rational number. Is it? (Be sure
4479 to allow for roundoff error!) @xref{Types Answer 1, 1}. (@bullet{})
4480
4481 @dfn{Complex numbers} can be stored in both rectangular and polar form.
4482
4483 @smallexample
4484 @group
4485 1: -9 1: (0, 3) 1: (3; 90.) 1: (6; 90.) 1: (2.4495; 45.)
4486 . . . . .
4487
4488 9 n Q c p 2 * Q
4489 @end group
4490 @end smallexample
4491
4492 @noindent
4493 The square root of @mathit{-9} is by default rendered in rectangular form
4494 (@w{@expr{0 + 3i}}), but we can convert it to polar form (3 with a
4495 phase angle of 90 degrees). All the usual arithmetic and scientific
4496 operations are defined on both types of complex numbers.
4497
4498 Another generalized kind of number is @dfn{infinity}. Infinity
4499 isn't really a number, but it can sometimes be treated like one.
4500 Calc uses the symbol @code{inf} to represent positive infinity,
4501 i.e., a value greater than any real number. Naturally, you can
4502 also write @samp{-inf} for minus infinity, a value less than any
4503 real number. The word @code{inf} can only be input using
4504 algebraic entry.
4505
4506 @smallexample
4507 @group
4508 2: inf 2: -inf 2: -inf 2: -inf 1: nan
4509 1: -17 1: -inf 1: -inf 1: inf .
4510 . . . .
4511
4512 ' inf @key{RET} 17 n * @key{RET} 72 + A +
4513 @end group
4514 @end smallexample
4515
4516 @noindent
4517 Since infinity is infinitely large, multiplying it by any finite
4518 number (like @mathit{-17}) has no effect, except that since @mathit{-17}
4519 is negative, it changes a plus infinity to a minus infinity.
4520 (``A huge positive number, multiplied by @mathit{-17}, yields a huge
4521 negative number.'') Adding any finite number to infinity also
4522 leaves it unchanged. Taking an absolute value gives us plus
4523 infinity again. Finally, we add this plus infinity to the minus
4524 infinity we had earlier. If you work it out, you might expect
4525 the answer to be @mathit{-72} for this. But the 72 has been completely
4526 lost next to the infinities; by the time we compute @w{@samp{inf - inf}}
4527 the finite difference between them, if any, is undetectable.
4528 So we say the result is @dfn{indeterminate}, which Calc writes
4529 with the symbol @code{nan} (for Not A Number).
4530
4531 Dividing by zero is normally treated as an error, but you can get
4532 Calc to write an answer in terms of infinity by pressing @kbd{m i}
4533 to turn on Infinite mode.
4534
4535 @smallexample
4536 @group
4537 3: nan 2: nan 2: nan 2: nan 1: nan
4538 2: 1 1: 1 / 0 1: uinf 1: uinf .
4539 1: 0 . . .
4540 .
4541
4542 1 @key{RET} 0 / m i U / 17 n * +
4543 @end group
4544 @end smallexample
4545
4546 @noindent
4547 Dividing by zero normally is left unevaluated, but after @kbd{m i}
4548 it instead gives an infinite result. The answer is actually
4549 @code{uinf}, ``undirected infinity.'' If you look at a graph of
4550 @expr{1 / x} around @w{@expr{x = 0}}, you'll see that it goes toward
4551 plus infinity as you approach zero from above, but toward minus
4552 infinity as you approach from below. Since we said only @expr{1 / 0},
4553 Calc knows that the answer is infinite but not in which direction.
4554 That's what @code{uinf} means. Notice that multiplying @code{uinf}
4555 by a negative number still leaves plain @code{uinf}; there's no
4556 point in saying @samp{-uinf} because the sign of @code{uinf} is
4557 unknown anyway. Finally, we add @code{uinf} to our @code{nan},
4558 yielding @code{nan} again. It's easy to see that, because
4559 @code{nan} means ``totally unknown'' while @code{uinf} means
4560 ``unknown sign but known to be infinite,'' the more mysterious
4561 @code{nan} wins out when it is combined with @code{uinf}, or, for
4562 that matter, with anything else.
4563
4564 (@bullet{}) @strong{Exercise 2.} Predict what Calc will answer
4565 for each of these formulas: @samp{inf / inf}, @samp{exp(inf)},
4566 @samp{exp(-inf)}, @samp{sqrt(-inf)}, @samp{sqrt(uinf)},
4567 @samp{abs(uinf)}, @samp{ln(0)}.
4568 @xref{Types Answer 2, 2}. (@bullet{})
4569
4570 (@bullet{}) @strong{Exercise 3.} We saw that @samp{inf - inf = nan},
4571 which stands for an unknown value. Can @code{nan} stand for
4572 a complex number? Can it stand for infinity?
4573 @xref{Types Answer 3, 3}. (@bullet{})
4574
4575 @dfn{HMS forms} represent a value in terms of hours, minutes, and
4576 seconds.
4577
4578 @smallexample
4579 @group
4580 1: 2@@ 30' 0" 1: 3@@ 30' 0" 2: 3@@ 30' 0" 1: 2.
4581 . . 1: 1@@ 45' 0." .
4582 .
4583
4584 2@@ 30' @key{RET} 1 + @key{RET} 2 / /
4585 @end group
4586 @end smallexample
4587
4588 HMS forms can also be used to hold angles in degrees, minutes, and
4589 seconds.
4590
4591 @smallexample
4592 @group
4593 1: 0.5 1: 26.56505 1: 26@@ 33' 54.18" 1: 0.44721
4594 . . . .
4595
4596 0.5 I T c h S
4597 @end group
4598 @end smallexample
4599
4600 @noindent
4601 First we convert the inverse tangent of 0.5 to degrees-minutes-seconds
4602 form, then we take the sine of that angle. Note that the trigonometric
4603 functions will accept HMS forms directly as input.
4604
4605 @cindex Beatles
4606 (@bullet{}) @strong{Exercise 4.} The Beatles' @emph{Abbey Road} is
4607 47 minutes and 26 seconds long, and contains 17 songs. What is the
4608 average length of a song on @emph{Abbey Road}? If the Extended Disco
4609 Version of @emph{Abbey Road} added 20 seconds to the length of each
4610 song, how long would the album be? @xref{Types Answer 4, 4}. (@bullet{})
4611
4612 A @dfn{date form} represents a date, or a date and time. Dates must
4613 be entered using algebraic entry. Date forms are surrounded by
4614 @samp{< >} symbols; most standard formats for dates are recognized.
4615
4616 @smallexample
4617 @group
4618 2: <Sun Jan 13, 1991> 1: 2.25
4619 1: <6:00pm Thu Jan 10, 1991> .
4620 .
4621
4622 ' <13 Jan 1991>, <1/10/91, 6pm> @key{RET} -
4623 @end group
4624 @end smallexample
4625
4626 @noindent
4627 In this example, we enter two dates, then subtract to find the
4628 number of days between them. It is also possible to add an
4629 HMS form or a number (of days) to a date form to get another
4630 date form.
4631
4632 @smallexample
4633 @group
4634 1: <4:45:59pm Mon Jan 14, 1991> 1: <2:50:59am Thu Jan 17, 1991>
4635 . .
4636
4637 t N 2 + 10@@ 5' +
4638 @end group
4639 @end smallexample
4640
4641 @c [fix-ref Date Arithmetic]
4642 @noindent
4643 The @kbd{t N} (``now'') command pushes the current date and time on the
4644 stack; then we add two days, ten hours and five minutes to the date and
4645 time. Other date-and-time related commands include @kbd{t J}, which
4646 does Julian day conversions, @kbd{t W}, which finds the beginning of
4647 the week in which a date form lies, and @kbd{t I}, which increments a
4648 date by one or several months. @xref{Date Arithmetic}, for more.
4649
4650 (@bullet{}) @strong{Exercise 5.} How many days until the next
4651 Friday the 13th? @xref{Types Answer 5, 5}. (@bullet{})
4652
4653 (@bullet{}) @strong{Exercise 6.} How many leap years will there be
4654 between now and the year 10001 A.D.? @xref{Types Answer 6, 6}. (@bullet{})
4655
4656 @cindex Slope and angle of a line
4657 @cindex Angle and slope of a line
4658 An @dfn{error form} represents a mean value with an attached standard
4659 deviation, or error estimate. Suppose our measurements indicate that
4660 a certain telephone pole is about 30 meters away, with an estimated
4661 error of 1 meter, and 8 meters tall, with an estimated error of 0.2
4662 meters. What is the slope of a line from here to the top of the
4663 pole, and what is the equivalent angle in degrees?
4664
4665 @smallexample
4666 @group
4667 1: 8 +/- 0.2 2: 8 +/- 0.2 1: 0.266 +/- 0.011 1: 14.93 +/- 0.594
4668 . 1: 30 +/- 1 . .
4669 .
4670
4671 8 p .2 @key{RET} 30 p 1 / I T
4672 @end group
4673 @end smallexample
4674
4675 @noindent
4676 This means that the angle is about 15 degrees, and, assuming our
4677 original error estimates were valid standard deviations, there is about
4678 a 60% chance that the result is correct within 0.59 degrees.
4679
4680 @cindex Torus, volume of
4681 (@bullet{}) @strong{Exercise 7.} The volume of a torus (a donut shape) is
4682 @texline @math{2 \pi^2 R r^2}
4683 @infoline @w{@expr{2 pi^2 R r^2}}
4684 where @expr{R} is the radius of the circle that
4685 defines the center of the tube and @expr{r} is the radius of the tube
4686 itself. Suppose @expr{R} is 20 cm and @expr{r} is 4 cm, each known to
4687 within 5 percent. What is the volume and the relative uncertainty of
4688 the volume? @xref{Types Answer 7, 7}. (@bullet{})
4689
4690 An @dfn{interval form} represents a range of values. While an
4691 error form is best for making statistical estimates, intervals give
4692 you exact bounds on an answer. Suppose we additionally know that
4693 our telephone pole is definitely between 28 and 31 meters away,
4694 and that it is between 7.7 and 8.1 meters tall.
4695
4696 @smallexample
4697 @group
4698 1: [7.7 .. 8.1] 2: [7.7 .. 8.1] 1: [0.24 .. 0.28] 1: [13.9 .. 16.1]
4699 . 1: [28 .. 31] . .
4700 .
4701
4702 [ 7.7 .. 8.1 ] [ 28 .. 31 ] / I T
4703 @end group
4704 @end smallexample
4705
4706 @noindent
4707 If our bounds were correct, then the angle to the top of the pole
4708 is sure to lie in the range shown.
4709
4710 The square brackets around these intervals indicate that the endpoints
4711 themselves are allowable values. In other words, the distance to the
4712 telephone pole is between 28 and 31, @emph{inclusive}. You can also
4713 make an interval that is exclusive of its endpoints by writing
4714 parentheses instead of square brackets. You can even make an interval
4715 which is inclusive (``closed'') on one end and exclusive (``open'') on
4716 the other.
4717
4718 @smallexample
4719 @group
4720 1: [1 .. 10) 1: (0.1 .. 1] 2: (0.1 .. 1] 1: (0.2 .. 3)
4721 . . 1: [2 .. 3) .
4722 .
4723
4724 [ 1 .. 10 ) & [ 2 .. 3 ) *
4725 @end group
4726 @end smallexample
4727
4728 @noindent
4729 The Calculator automatically keeps track of which end values should
4730 be open and which should be closed. You can also make infinite or
4731 semi-infinite intervals by using @samp{-inf} or @samp{inf} for one
4732 or both endpoints.
4733
4734 (@bullet{}) @strong{Exercise 8.} What answer would you expect from
4735 @samp{@w{1 /} @w{(0 .. 10)}}? What about @samp{@w{1 /} @w{(-10 .. 0)}}? What
4736 about @samp{@w{1 /} @w{[0 .. 10]}} (where the interval actually includes
4737 zero)? What about @samp{@w{1 /} @w{(-10 .. 10)}}?
4738 @xref{Types Answer 8, 8}. (@bullet{})
4739
4740 (@bullet{}) @strong{Exercise 9.} Two easy ways of squaring a number
4741 are @kbd{@key{RET} *} and @w{@kbd{2 ^}}. Normally these produce the same
4742 answer. Would you expect this still to hold true for interval forms?
4743 If not, which of these will result in a larger interval?
4744 @xref{Types Answer 9, 9}. (@bullet{})
4745
4746 A @dfn{modulo form} is used for performing arithmetic modulo @var{m}.
4747 For example, arithmetic involving time is generally done modulo 12
4748 or 24 hours.
4749
4750 @smallexample
4751 @group
4752 1: 17 mod 24 1: 3 mod 24 1: 21 mod 24 1: 9 mod 24
4753 . . . .
4754
4755 17 M 24 @key{RET} 10 + n 5 /
4756 @end group
4757 @end smallexample
4758
4759 @noindent
4760 In this last step, Calc has divided by 5 modulo 24; i.e., it has found a
4761 new number which, when multiplied by 5 modulo 24, produces the original
4762 number, 21. If @var{m} is prime and the divisor is not a multiple of
4763 @var{m}, it is always possible to find such a number. For non-prime
4764 @var{m} like 24, it is only sometimes possible.
4765
4766 @smallexample
4767 @group
4768 1: 10 mod 24 1: 16 mod 24 1: 1000000... 1: 16
4769 . . . .
4770
4771 10 M 24 @key{RET} 100 ^ 10 @key{RET} 100 ^ 24 %
4772 @end group
4773 @end smallexample
4774
4775 @noindent
4776 These two calculations get the same answer, but the first one is
4777 much more efficient because it avoids the huge intermediate value
4778 that arises in the second one.
4779
4780 @cindex Fermat, primality test of
4781 (@bullet{}) @strong{Exercise 10.} A theorem of Pierre de Fermat
4782 says that
4783 @texline @w{@math{x^{n-1} \bmod n = 1}}
4784 @infoline @expr{x^(n-1) mod n = 1}
4785 if @expr{n} is a prime number and @expr{x} is an integer less than
4786 @expr{n}. If @expr{n} is @emph{not} a prime number, this will
4787 @emph{not} be true for most values of @expr{x}. Thus we can test
4788 informally if a number is prime by trying this formula for several
4789 values of @expr{x}. Use this test to tell whether the following numbers
4790 are prime: 811749613, 15485863. @xref{Types Answer 10, 10}. (@bullet{})
4791
4792 It is possible to use HMS forms as parts of error forms, intervals,
4793 modulo forms, or as the phase part of a polar complex number.
4794 For example, the @code{calc-time} command pushes the current time
4795 of day on the stack as an HMS/modulo form.
4796
4797 @smallexample
4798 @group
4799 1: 17@@ 34' 45" mod 24@@ 0' 0" 1: 6@@ 22' 15" mod 24@@ 0' 0"
4800 . .
4801
4802 x time @key{RET} n
4803 @end group
4804 @end smallexample
4805
4806 @noindent
4807 This calculation tells me it is six hours and 22 minutes until midnight.
4808
4809 (@bullet{}) @strong{Exercise 11.} A rule of thumb is that one year
4810 is about
4811 @texline @math{\pi \times 10^7}
4812 @infoline @w{@expr{pi * 10^7}}
4813 seconds. What time will it be that many seconds from right now?
4814 @xref{Types Answer 11, 11}. (@bullet{})
4815
4816 (@bullet{}) @strong{Exercise 12.} You are preparing to order packaging
4817 for the CD release of the Extended Disco Version of @emph{Abbey Road}.
4818 You are told that the songs will actually be anywhere from 20 to 60
4819 seconds longer than the originals. One CD can hold about 75 minutes
4820 of music. Should you order single or double packages?
4821 @xref{Types Answer 12, 12}. (@bullet{})
4822
4823 Another kind of data the Calculator can manipulate is numbers with
4824 @dfn{units}. This isn't strictly a new data type; it's simply an
4825 application of algebraic expressions, where we use variables with
4826 suggestive names like @samp{cm} and @samp{in} to represent units
4827 like centimeters and inches.
4828
4829 @smallexample
4830 @group
4831 1: 2 in 1: 5.08 cm 1: 0.027778 fath 1: 0.0508 m
4832 . . . .
4833
4834 ' 2in @key{RET} u c cm @key{RET} u c fath @key{RET} u b
4835 @end group
4836 @end smallexample
4837
4838 @noindent
4839 We enter the quantity ``2 inches'' (actually an algebraic expression
4840 which means two times the variable @samp{in}), then we convert it
4841 first to centimeters, then to fathoms, then finally to ``base'' units,
4842 which in this case means meters.
4843
4844 @smallexample
4845 @group
4846 1: 9 acre 1: 3 sqrt(acre) 1: 190.84 m 1: 190.84 m + 30 cm
4847 . . . .
4848
4849 ' 9 acre @key{RET} Q u s ' $+30 cm @key{RET}
4850
4851 @end group
4852 @end smallexample
4853 @noindent
4854 @smallexample
4855 @group
4856 1: 191.14 m 1: 36536.3046 m^2 1: 365363046 cm^2
4857 . . .
4858
4859 u s 2 ^ u c cgs
4860 @end group
4861 @end smallexample
4862
4863 @noindent
4864 Since units expressions are really just formulas, taking the square
4865 root of @samp{acre} is undefined. After all, @code{acre} might be an
4866 algebraic variable that you will someday assign a value. We use the
4867 ``units-simplify'' command to simplify the expression with variables
4868 being interpreted as unit names.
4869
4870 In the final step, we have converted not to a particular unit, but to a
4871 units system. The ``cgs'' system uses centimeters instead of meters
4872 as its standard unit of length.
4873
4874 There is a wide variety of units defined in the Calculator.
4875
4876 @smallexample
4877 @group
4878 1: 55 mph 1: 88.5139 kph 1: 88.5139 km / hr 1: 8.201407e-8 c
4879 . . . .
4880
4881 ' 55 mph @key{RET} u c kph @key{RET} u c km/hr @key{RET} u c c @key{RET}
4882 @end group
4883 @end smallexample
4884
4885 @noindent
4886 We express a speed first in miles per hour, then in kilometers per
4887 hour, then again using a slightly more explicit notation, then
4888 finally in terms of fractions of the speed of light.
4889
4890 Temperature conversions are a bit more tricky. There are two ways to
4891 interpret ``20 degrees Fahrenheit''---it could mean an actual
4892 temperature, or it could mean a change in temperature. For normal
4893 units there is no difference, but temperature units have an offset
4894 as well as a scale factor and so there must be two explicit commands
4895 for them.
4896
4897 @smallexample
4898 @group
4899 1: 20 degF 1: 11.1111 degC 1: -20:3 degC 1: -6.666 degC
4900 . . . .
4901
4902 ' 20 degF @key{RET} u c degC @key{RET} U u t degC @key{RET} c f
4903 @end group
4904 @end smallexample
4905
4906 @noindent
4907 First we convert a change of 20 degrees Fahrenheit into an equivalent
4908 change in degrees Celsius (or Centigrade). Then, we convert the
4909 absolute temperature 20 degrees Fahrenheit into Celsius. Since
4910 this comes out as an exact fraction, we then convert to floating-point
4911 for easier comparison with the other result.
4912
4913 For simple unit conversions, you can put a plain number on the stack.
4914 Then @kbd{u c} and @kbd{u t} will prompt for both old and new units.
4915 When you use this method, you're responsible for remembering which
4916 numbers are in which units:
4917
4918 @smallexample
4919 @group
4920 1: 55 1: 88.5139 1: 8.201407e-8
4921 . . .
4922
4923 55 u c mph @key{RET} kph @key{RET} u c km/hr @key{RET} c @key{RET}
4924 @end group
4925 @end smallexample
4926
4927 To see a complete list of built-in units, type @kbd{u v}. Press
4928 @w{@kbd{M-# c}} again to re-enter the Calculator when you're done looking
4929 at the units table.
4930
4931 (@bullet{}) @strong{Exercise 13.} How many seconds are there really
4932 in a year? @xref{Types Answer 13, 13}. (@bullet{})
4933
4934 @cindex Speed of light
4935 (@bullet{}) @strong{Exercise 14.} Supercomputer designs are limited by
4936 the speed of light (and of electricity, which is nearly as fast).
4937 Suppose a computer has a 4.1 ns (nanosecond) clock cycle, and its
4938 cabinet is one meter across. Is speed of light going to be a
4939 significant factor in its design? @xref{Types Answer 14, 14}. (@bullet{})
4940
4941 (@bullet{}) @strong{Exercise 15.} Sam the Slug normally travels about
4942 five yards in an hour. He has obtained a supply of Power Pills; each
4943 Power Pill he eats doubles his speed. How many Power Pills can he
4944 swallow and still travel legally on most US highways?
4945 @xref{Types Answer 15, 15}. (@bullet{})
4946
4947 @node Algebra Tutorial, Programming Tutorial, Types Tutorial, Tutorial
4948 @section Algebra and Calculus Tutorial
4949
4950 @noindent
4951 This section shows how to use Calc's algebra facilities to solve
4952 equations, do simple calculus problems, and manipulate algebraic
4953 formulas.
4954
4955 @menu
4956 * Basic Algebra Tutorial::
4957 * Rewrites Tutorial::
4958 @end menu
4959
4960 @node Basic Algebra Tutorial, Rewrites Tutorial, Algebra Tutorial, Algebra Tutorial
4961 @subsection Basic Algebra
4962
4963 @noindent
4964 If you enter a formula in Algebraic mode that refers to variables,
4965 the formula itself is pushed onto the stack. You can manipulate
4966 formulas as regular data objects.
4967
4968 @smallexample
4969 @group
4970 1: 2 x^2 - 6 1: 6 - 2 x^2 1: (6 - 2 x^2) (3 x^2 + y)
4971 . . .
4972
4973 ' 2x^2-6 @key{RET} n ' 3x^2+y @key{RET} *
4974 @end group
4975 @end smallexample
4976
4977 (@bullet{}) @strong{Exercise 1.} Do @kbd{' x @key{RET} Q 2 ^} and
4978 @kbd{' x @key{RET} 2 ^ Q} both wind up with the same result (@samp{x})?
4979 Why or why not? @xref{Algebra Answer 1, 1}. (@bullet{})
4980
4981 There are also commands for doing common algebraic operations on
4982 formulas. Continuing with the formula from the last example,
4983
4984 @smallexample
4985 @group
4986 1: 18 x^2 + 6 y - 6 x^4 - 2 x^2 y 1: (18 - 2 y) x^2 - 6 x^4 + 6 y
4987 . .
4988
4989 a x a c x @key{RET}
4990 @end group
4991 @end smallexample
4992
4993 @noindent
4994 First we ``expand'' using the distributive law, then we ``collect''
4995 terms involving like powers of @expr{x}.
4996
4997 Let's find the value of this expression when @expr{x} is 2 and @expr{y}
4998 is one-half.
4999
5000 @smallexample
5001 @group
5002 1: 17 x^2 - 6 x^4 + 3 1: -25
5003 . .
5004
5005 1:2 s l y @key{RET} 2 s l x @key{RET}
5006 @end group
5007 @end smallexample
5008
5009 @noindent
5010 The @kbd{s l} command means ``let''; it takes a number from the top of
5011 the stack and temporarily assigns it as the value of the variable
5012 you specify. It then evaluates (as if by the @kbd{=} key) the
5013 next expression on the stack. After this command, the variable goes
5014 back to its original value, if any.
5015
5016 (An earlier exercise in this tutorial involved storing a value in the
5017 variable @code{x}; if this value is still there, you will have to
5018 unstore it with @kbd{s u x @key{RET}} before the above example will work
5019 properly.)
5020
5021 @cindex Maximum of a function using Calculus
5022 Let's find the maximum value of our original expression when @expr{y}
5023 is one-half and @expr{x} ranges over all possible values. We can
5024 do this by taking the derivative with respect to @expr{x} and examining
5025 values of @expr{x} for which the derivative is zero. If the second
5026 derivative of the function at that value of @expr{x} is negative,
5027 the function has a local maximum there.
5028
5029 @smallexample
5030 @group
5031 1: 17 x^2 - 6 x^4 + 3 1: 34 x - 24 x^3
5032 . .
5033
5034 U @key{DEL} s 1 a d x @key{RET} s 2
5035 @end group
5036 @end smallexample
5037
5038 @noindent
5039 Well, the derivative is clearly zero when @expr{x} is zero. To find
5040 the other root(s), let's divide through by @expr{x} and then solve:
5041
5042 @smallexample
5043 @group
5044 1: (34 x - 24 x^3) / x 1: 34 x / x - 24 x^3 / x 1: 34 - 24 x^2
5045 . . .
5046
5047 ' x @key{RET} / a x a s
5048
5049 @end group
5050 @end smallexample
5051 @noindent
5052 @smallexample
5053 @group
5054 1: 34 - 24 x^2 = 0 1: x = 1.19023
5055 . .
5056
5057 0 a = s 3 a S x @key{RET}
5058 @end group
5059 @end smallexample
5060
5061 @noindent
5062 Notice the use of @kbd{a s} to ``simplify'' the formula. When the
5063 default algebraic simplifications don't do enough, you can use
5064 @kbd{a s} to tell Calc to spend more time on the job.
5065
5066 Now we compute the second derivative and plug in our values of @expr{x}:
5067
5068 @smallexample
5069 @group
5070 1: 1.19023 2: 1.19023 2: 1.19023
5071 . 1: 34 x - 24 x^3 1: 34 - 72 x^2
5072 . .
5073
5074 a . r 2 a d x @key{RET} s 4
5075 @end group
5076 @end smallexample
5077
5078 @noindent
5079 (The @kbd{a .} command extracts just the righthand side of an equation.
5080 Another method would have been to use @kbd{v u} to unpack the equation
5081 @w{@samp{x = 1.19}} to @samp{x} and @samp{1.19}, then use @kbd{M-- M-2 @key{DEL}}
5082 to delete the @samp{x}.)
5083
5084 @smallexample
5085 @group
5086 2: 34 - 72 x^2 1: -68. 2: 34 - 72 x^2 1: 34
5087 1: 1.19023 . 1: 0 .
5088 . .
5089
5090 @key{TAB} s l x @key{RET} U @key{DEL} 0 s l x @key{RET}
5091 @end group
5092 @end smallexample
5093
5094 @noindent
5095 The first of these second derivatives is negative, so we know the function
5096 has a maximum value at @expr{x = 1.19023}. (The function also has a
5097 local @emph{minimum} at @expr{x = 0}.)
5098
5099 When we solved for @expr{x}, we got only one value even though
5100 @expr{34 - 24 x^2 = 0} is a quadratic equation that ought to have
5101 two solutions. The reason is that @w{@kbd{a S}} normally returns a
5102 single ``principal'' solution. If it needs to come up with an
5103 arbitrary sign (as occurs in the quadratic formula) it picks @expr{+}.
5104 If it needs an arbitrary integer, it picks zero. We can get a full
5105 solution by pressing @kbd{H} (the Hyperbolic flag) before @kbd{a S}.
5106
5107 @smallexample
5108 @group
5109 1: 34 - 24 x^2 = 0 1: x = 1.19023 s1 1: x = -1.19023
5110 . . .
5111
5112 r 3 H a S x @key{RET} s 5 1 n s l s1 @key{RET}
5113 @end group
5114 @end smallexample
5115
5116 @noindent
5117 Calc has invented the variable @samp{s1} to represent an unknown sign;
5118 it is supposed to be either @mathit{+1} or @mathit{-1}. Here we have used
5119 the ``let'' command to evaluate the expression when the sign is negative.
5120 If we plugged this into our second derivative we would get the same,
5121 negative, answer, so @expr{x = -1.19023} is also a maximum.
5122
5123 To find the actual maximum value, we must plug our two values of @expr{x}
5124 into the original formula.
5125
5126 @smallexample
5127 @group
5128 2: 17 x^2 - 6 x^4 + 3 1: 24.08333 s1^2 - 12.04166 s1^4 + 3
5129 1: x = 1.19023 s1 .
5130 .
5131
5132 r 1 r 5 s l @key{RET}
5133 @end group
5134 @end smallexample
5135
5136 @noindent
5137 (Here we see another way to use @kbd{s l}; if its input is an equation
5138 with a variable on the lefthand side, then @kbd{s l} treats the equation
5139 like an assignment to that variable if you don't give a variable name.)
5140
5141 It's clear that this will have the same value for either sign of
5142 @code{s1}, but let's work it out anyway, just for the exercise:
5143
5144 @smallexample
5145 @group
5146 2: [-1, 1] 1: [15.04166, 15.04166]
5147 1: 24.08333 s1^2 ... .
5148 .
5149
5150 [ 1 n , 1 ] @key{TAB} V M $ @key{RET}
5151 @end group
5152 @end smallexample
5153
5154 @noindent
5155 Here we have used a vector mapping operation to evaluate the function
5156 at several values of @samp{s1} at once. @kbd{V M $} is like @kbd{V M '}
5157 except that it takes the formula from the top of the stack. The
5158 formula is interpreted as a function to apply across the vector at the
5159 next-to-top stack level. Since a formula on the stack can't contain
5160 @samp{$} signs, Calc assumes the variables in the formula stand for
5161 different arguments. It prompts you for an @dfn{argument list}, giving
5162 the list of all variables in the formula in alphabetical order as the
5163 default list. In this case the default is @samp{(s1)}, which is just
5164 what we want so we simply press @key{RET} at the prompt.
5165
5166 If there had been several different values, we could have used
5167 @w{@kbd{V R X}} to find the global maximum.
5168
5169 Calc has a built-in @kbd{a P} command that solves an equation using
5170 @w{@kbd{H a S}} and returns a vector of all the solutions. It simply
5171 automates the job we just did by hand. Applied to our original
5172 cubic polynomial, it would produce the vector of solutions
5173 @expr{[1.19023, -1.19023, 0]}. (There is also an @kbd{a X} command
5174 which finds a local maximum of a function. It uses a numerical search
5175 method rather than examining the derivatives, and thus requires you
5176 to provide some kind of initial guess to show it where to look.)
5177
5178 (@bullet{}) @strong{Exercise 2.} Given a vector of the roots of a
5179 polynomial (such as the output of an @kbd{a P} command), what
5180 sequence of commands would you use to reconstruct the original
5181 polynomial? (The answer will be unique to within a constant
5182 multiple; choose the solution where the leading coefficient is one.)
5183 @xref{Algebra Answer 2, 2}. (@bullet{})
5184
5185 The @kbd{m s} command enables Symbolic mode, in which formulas
5186 like @samp{sqrt(5)} that can't be evaluated exactly are left in
5187 symbolic form rather than giving a floating-point approximate answer.
5188 Fraction mode (@kbd{m f}) is also useful when doing algebra.
5189
5190 @smallexample
5191 @group
5192 2: 34 x - 24 x^3 2: 34 x - 24 x^3
5193 1: 34 x - 24 x^3 1: [sqrt(51) / 6, sqrt(51) / -6, 0]
5194 . .
5195
5196 r 2 @key{RET} m s m f a P x @key{RET}
5197 @end group
5198 @end smallexample
5199
5200 One more mode that makes reading formulas easier is Big mode.
5201
5202 @smallexample
5203 @group
5204 3
5205 2: 34 x - 24 x
5206
5207 ____ ____
5208 V 51 V 51
5209 1: [-----, -----, 0]
5210 6 -6
5211
5212 .
5213
5214 d B
5215 @end group
5216 @end smallexample
5217
5218 Here things like powers, square roots, and quotients and fractions
5219 are displayed in a two-dimensional pictorial form. Calc has other
5220 language modes as well, such as C mode, FORTRAN mode, and @TeX{} mode.
5221
5222 @smallexample
5223 @group
5224 2: 34*x - 24*pow(x, 3) 2: 34*x - 24*x**3
5225 1: @{sqrt(51) / 6, sqrt(51) / -6, 0@} 1: /sqrt(51) / 6, sqrt(51) / -6, 0/
5226 . .
5227
5228 d C d F
5229
5230 @end group
5231 @end smallexample
5232 @noindent
5233 @smallexample
5234 @group
5235 3: 34 x - 24 x^3
5236 2: [@{\sqrt@{51@} \over 6@}, @{\sqrt@{51@} \over -6@}, 0]
5237 1: @{2 \over 3@} \sqrt@{5@}
5238 .
5239
5240 d T ' 2 \sqrt@{5@} \over 3 @key{RET}
5241 @end group
5242 @end smallexample
5243
5244 @noindent
5245 As you can see, language modes affect both entry and display of
5246 formulas. They affect such things as the names used for built-in
5247 functions, the set of arithmetic operators and their precedences,
5248 and notations for vectors and matrices.
5249
5250 Notice that @samp{sqrt(51)} may cause problems with older
5251 implementations of C and FORTRAN, which would require something more
5252 like @samp{sqrt(51.0)}. It is always wise to check over the formulas
5253 produced by the various language modes to make sure they are fully
5254 correct.
5255
5256 Type @kbd{m s}, @kbd{m f}, and @kbd{d N} to reset these modes. (You
5257 may prefer to remain in Big mode, but all the examples in the tutorial
5258 are shown in normal mode.)
5259
5260 @cindex Area under a curve
5261 What is the area under the portion of this curve from @expr{x = 1} to @expr{2}?
5262 This is simply the integral of the function:
5263
5264 @smallexample
5265 @group
5266 1: 17 x^2 - 6 x^4 + 3 1: 5.6666 x^3 - 1.2 x^5 + 3 x
5267 . .
5268
5269 r 1 a i x
5270 @end group
5271 @end smallexample
5272
5273 @noindent
5274 We want to evaluate this at our two values for @expr{x} and subtract.
5275 One way to do it is again with vector mapping and reduction:
5276
5277 @smallexample
5278 @group
5279 2: [2, 1] 1: [12.93333, 7.46666] 1: 5.46666
5280 1: 5.6666 x^3 ... . .
5281
5282 [ 2 , 1 ] @key{TAB} V M $ @key{RET} V R -
5283 @end group
5284 @end smallexample
5285
5286 (@bullet{}) @strong{Exercise 3.} Find the integral from 1 to @expr{y}
5287 of
5288 @texline @math{x \sin \pi x}
5289 @infoline @w{@expr{x sin(pi x)}}
5290 (where the sine is calculated in radians). Find the values of the
5291 integral for integers @expr{y} from 1 to 5. @xref{Algebra Answer 3,
5292 3}. (@bullet{})
5293
5294 Calc's integrator can do many simple integrals symbolically, but many
5295 others are beyond its capabilities. Suppose we wish to find the area
5296 under the curve
5297 @texline @math{\sin x \ln x}
5298 @infoline @expr{sin(x) ln(x)}
5299 over the same range of @expr{x}. If you entered this formula and typed
5300 @kbd{a i x @key{RET}} (don't bother to try this), Calc would work for a
5301 long time but would be unable to find a solution. In fact, there is no
5302 closed-form solution to this integral. Now what do we do?
5303
5304 @cindex Integration, numerical
5305 @cindex Numerical integration
5306 One approach would be to do the integral numerically. It is not hard
5307 to do this by hand using vector mapping and reduction. It is rather
5308 slow, though, since the sine and logarithm functions take a long time.
5309 We can save some time by reducing the working precision.
5310
5311 @smallexample
5312 @group
5313 3: 10 1: [1, 1.1, 1.2, ... , 1.8, 1.9]
5314 2: 1 .
5315 1: 0.1
5316 .
5317
5318 10 @key{RET} 1 @key{RET} .1 @key{RET} C-u v x
5319 @end group
5320 @end smallexample
5321
5322 @noindent
5323 (Note that we have used the extended version of @kbd{v x}; we could
5324 also have used plain @kbd{v x} as follows: @kbd{v x 10 @key{RET} 9 + .1 *}.)
5325
5326 @smallexample
5327 @group
5328 2: [1, 1.1, ... ] 1: [0., 0.084941, 0.16993, ... ]
5329 1: sin(x) ln(x) .
5330 .
5331
5332 ' sin(x) ln(x) @key{RET} s 1 m r p 5 @key{RET} V M $ @key{RET}
5333
5334 @end group
5335 @end smallexample
5336 @noindent
5337 @smallexample
5338 @group
5339 1: 3.4195 0.34195
5340 . .
5341
5342 V R + 0.1 *
5343 @end group
5344 @end smallexample
5345
5346 @noindent
5347 (If you got wildly different results, did you remember to switch
5348 to Radians mode?)
5349
5350 Here we have divided the curve into ten segments of equal width;
5351 approximating these segments as rectangular boxes (i.e., assuming
5352 the curve is nearly flat at that resolution), we compute the areas
5353 of the boxes (height times width), then sum the areas. (It is
5354 faster to sum first, then multiply by the width, since the width
5355 is the same for every box.)
5356
5357 The true value of this integral turns out to be about 0.374, so
5358 we're not doing too well. Let's try another approach.
5359
5360 @smallexample
5361 @group
5362 1: sin(x) ln(x) 1: 0.84147 x - 0.84147 + 0.11957 (x - 1)^2 - ...
5363 . .
5364
5365 r 1 a t x=1 @key{RET} 4 @key{RET}
5366 @end group
5367 @end smallexample
5368
5369 @noindent
5370 Here we have computed the Taylor series expansion of the function
5371 about the point @expr{x=1}. We can now integrate this polynomial
5372 approximation, since polynomials are easy to integrate.
5373
5374 @smallexample
5375 @group
5376 1: 0.42074 x^2 + ... 1: [-0.0446, -0.42073] 1: 0.3761
5377 . . .
5378
5379 a i x @key{RET} [ 2 , 1 ] @key{TAB} V M $ @key{RET} V R -
5380 @end group
5381 @end smallexample
5382
5383 @noindent
5384 Better! By increasing the precision and/or asking for more terms
5385 in the Taylor series, we can get a result as accurate as we like.
5386 (Taylor series converge better away from singularities in the
5387 function such as the one at @code{ln(0)}, so it would also help to
5388 expand the series about the points @expr{x=2} or @expr{x=1.5} instead
5389 of @expr{x=1}.)
5390
5391 @cindex Simpson's rule
5392 @cindex Integration by Simpson's rule
5393 (@bullet{}) @strong{Exercise 4.} Our first method approximated the
5394 curve by stairsteps of width 0.1; the total area was then the sum
5395 of the areas of the rectangles under these stairsteps. Our second
5396 method approximated the function by a polynomial, which turned out
5397 to be a better approximation than stairsteps. A third method is
5398 @dfn{Simpson's rule}, which is like the stairstep method except
5399 that the steps are not required to be flat. Simpson's rule boils
5400 down to the formula,
5401
5402 @ifinfo
5403 @example
5404 (h/3) * (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + ...
5405 + 2 f(a+(n-2)*h) + 4 f(a+(n-1)*h) + f(a+n*h))
5406 @end example
5407 @end ifinfo
5408 @tex
5409 \turnoffactive
5410 \beforedisplay
5411 $$ \displaylines{
5412 \qquad {h \over 3} (f(a) + 4 f(a+h) + 2 f(a+2h) + 4 f(a+3h) + \cdots
5413 \hfill \cr \hfill {} + 2 f(a+(n-2)h) + 4 f(a+(n-1)h) + f(a+n h)) \qquad
5414 } $$
5415 \afterdisplay
5416 @end tex
5417
5418 @noindent
5419 where @expr{n} (which must be even) is the number of slices and @expr{h}
5420 is the width of each slice. These are 10 and 0.1 in our example.
5421 For reference, here is the corresponding formula for the stairstep
5422 method:
5423
5424 @ifinfo
5425 @example
5426 h * (f(a) + f(a+h) + f(a+2h) + f(a+3h) + ...
5427 + f(a+(n-2)*h) + f(a+(n-1)*h))
5428 @end example
5429 @end ifinfo
5430 @tex
5431 \turnoffactive
5432 \beforedisplay
5433 $$ h (f(a) + f(a+h) + f(a+2h) + f(a+3h) + \cdots
5434 + f(a+(n-2)h) + f(a+(n-1)h)) $$
5435 \afterdisplay
5436 @end tex
5437
5438 Compute the integral from 1 to 2 of
5439 @texline @math{\sin x \ln x}
5440 @infoline @expr{sin(x) ln(x)}
5441 using Simpson's rule with 10 slices.
5442 @xref{Algebra Answer 4, 4}. (@bullet{})
5443
5444 Calc has a built-in @kbd{a I} command for doing numerical integration.
5445 It uses @dfn{Romberg's method}, which is a more sophisticated cousin
5446 of Simpson's rule. In particular, it knows how to keep refining the
5447 result until the current precision is satisfied.
5448
5449 @c [fix-ref Selecting Sub-Formulas]
5450 Aside from the commands we've seen so far, Calc also provides a
5451 large set of commands for operating on parts of formulas. You
5452 indicate the desired sub-formula by placing the cursor on any part
5453 of the formula before giving a @dfn{selection} command. Selections won't
5454 be covered in the tutorial; @pxref{Selecting Subformulas}, for
5455 details and examples.
5456
5457 @c hard exercise: simplify (2^(n r) - 2^(r*(n - 1))) / (2^r - 1) 2^(n - 1)
5458 @c to 2^((n-1)*(r-1)).
5459
5460 @node Rewrites Tutorial, , Basic Algebra Tutorial, Algebra Tutorial
5461 @subsection Rewrite Rules
5462
5463 @noindent
5464 No matter how many built-in commands Calc provided for doing algebra,
5465 there would always be something you wanted to do that Calc didn't have
5466 in its repertoire. So Calc also provides a @dfn{rewrite rule} system
5467 that you can use to define your own algebraic manipulations.
5468
5469 Suppose we want to simplify this trigonometric formula:
5470
5471 @smallexample
5472 @group
5473 1: 1 / cos(x) - sin(x) tan(x)
5474 .
5475
5476 ' 1/cos(x) - sin(x) tan(x) @key{RET} s 1
5477 @end group
5478 @end smallexample
5479
5480 @noindent
5481 If we were simplifying this by hand, we'd probably replace the
5482 @samp{tan} with a @samp{sin/cos} first, then combine over a common
5483 denominator. There is no Calc command to do the former; the @kbd{a n}
5484 algebra command will do the latter but we'll do both with rewrite
5485 rules just for practice.
5486
5487 Rewrite rules are written with the @samp{:=} symbol.
5488
5489 @smallexample
5490 @group
5491 1: 1 / cos(x) - sin(x)^2 / cos(x)
5492 .
5493
5494 a r tan(a) := sin(a)/cos(a) @key{RET}
5495 @end group
5496 @end smallexample
5497
5498 @noindent
5499 (The ``assignment operator'' @samp{:=} has several uses in Calc. All
5500 by itself the formula @samp{tan(a) := sin(a)/cos(a)} doesn't do anything,
5501 but when it is given to the @kbd{a r} command, that command interprets
5502 it as a rewrite rule.)
5503
5504 The lefthand side, @samp{tan(a)}, is called the @dfn{pattern} of the
5505 rewrite rule. Calc searches the formula on the stack for parts that
5506 match the pattern. Variables in a rewrite pattern are called
5507 @dfn{meta-variables}, and when matching the pattern each meta-variable
5508 can match any sub-formula. Here, the meta-variable @samp{a} matched
5509 the actual variable @samp{x}.
5510
5511 When the pattern part of a rewrite rule matches a part of the formula,
5512 that part is replaced by the righthand side with all the meta-variables
5513 substituted with the things they matched. So the result is
5514 @samp{sin(x) / cos(x)}. Calc's normal algebraic simplifications then
5515 mix this in with the rest of the original formula.
5516
5517 To merge over a common denominator, we can use another simple rule:
5518
5519 @smallexample
5520 @group
5521 1: (1 - sin(x)^2) / cos(x)
5522 .
5523
5524 a r a/x + b/x := (a+b)/x @key{RET}
5525 @end group
5526 @end smallexample
5527
5528 This rule points out several interesting features of rewrite patterns.
5529 First, if a meta-variable appears several times in a pattern, it must
5530 match the same thing everywhere. This rule detects common denominators
5531 because the same meta-variable @samp{x} is used in both of the
5532 denominators.
5533
5534 Second, meta-variable names are independent from variables in the
5535 target formula. Notice that the meta-variable @samp{x} here matches
5536 the subformula @samp{cos(x)}; Calc never confuses the two meanings of
5537 @samp{x}.
5538
5539 And third, rewrite patterns know a little bit about the algebraic
5540 properties of formulas. The pattern called for a sum of two quotients;
5541 Calc was able to match a difference of two quotients by matching
5542 @samp{a = 1}, @samp{b = -sin(x)^2}, and @samp{x = cos(x)}.
5543
5544 @c [fix-ref Algebraic Properties of Rewrite Rules]
5545 We could just as easily have written @samp{a/x - b/x := (a-b)/x} for
5546 the rule. It would have worked just the same in all cases. (If we
5547 really wanted the rule to apply only to @samp{+} or only to @samp{-},
5548 we could have used the @code{plain} symbol. @xref{Algebraic Properties
5549 of Rewrite Rules}, for some examples of this.)
5550
5551 One more rewrite will complete the job. We want to use the identity
5552 @samp{sin(x)^2 + cos(x)^2 = 1}, but of course we must first rearrange
5553 the identity in a way that matches our formula. The obvious rule
5554 would be @samp{@w{1 - sin(x)^2} := cos(x)^2}, but a little thought shows
5555 that the rule @samp{sin(x)^2 := 1 - cos(x)^2} will also work. The
5556 latter rule has a more general pattern so it will work in many other
5557 situations, too.
5558
5559 @smallexample
5560 @group
5561 1: (1 + cos(x)^2 - 1) / cos(x) 1: cos(x)
5562 . .
5563
5564 a r sin(x)^2 := 1 - cos(x)^2 @key{RET} a s
5565 @end group
5566 @end smallexample
5567
5568 You may ask, what's the point of using the most general rule if you
5569 have to type it in every time anyway? The answer is that Calc allows
5570 you to store a rewrite rule in a variable, then give the variable
5571 name in the @kbd{a r} command. In fact, this is the preferred way to
5572 use rewrites. For one, if you need a rule once you'll most likely
5573 need it again later. Also, if the rule doesn't work quite right you
5574 can simply Undo, edit the variable, and run the rule again without
5575 having to retype it.
5576
5577 @smallexample
5578 @group
5579 ' tan(x) := sin(x)/cos(x) @key{RET} s t tsc @key{RET}
5580 ' a/x + b/x := (a+b)/x @key{RET} s t merge @key{RET}
5581 ' sin(x)^2 := 1 - cos(x)^2 @key{RET} s t sinsqr @key{RET}
5582
5583 1: 1 / cos(x) - sin(x) tan(x) 1: cos(x)
5584 . .
5585
5586 r 1 a r tsc @key{RET} a r merge @key{RET} a r sinsqr @key{RET} a s
5587 @end group
5588 @end smallexample
5589
5590 To edit a variable, type @kbd{s e} and the variable name, use regular
5591 Emacs editing commands as necessary, then type @kbd{C-c C-c} to store
5592 the edited value back into the variable.
5593 You can also use @w{@kbd{s e}} to create a new variable if you wish.
5594
5595 Notice that the first time you use each rule, Calc puts up a ``compiling''
5596 message briefly. The pattern matcher converts rules into a special
5597 optimized pattern-matching language rather than using them directly.
5598 This allows @kbd{a r} to apply even rather complicated rules very
5599 efficiently. If the rule is stored in a variable, Calc compiles it
5600 only once and stores the compiled form along with the variable. That's
5601 another good reason to store your rules in variables rather than
5602 entering them on the fly.
5603
5604 (@bullet{}) @strong{Exercise 1.} Type @kbd{m s} to get Symbolic
5605 mode, then enter the formula @samp{@w{(2 + sqrt(2))} / @w{(1 + sqrt(2))}}.
5606 Using a rewrite rule, simplify this formula by multiplying both
5607 sides by the conjugate @w{@samp{1 - sqrt(2)}}. The result will have
5608 to be expanded by the distributive law; do this with another
5609 rewrite. @xref{Rewrites Answer 1, 1}. (@bullet{})
5610
5611 The @kbd{a r} command can also accept a vector of rewrite rules, or
5612 a variable containing a vector of rules.
5613
5614 @smallexample
5615 @group
5616 1: [tsc, merge, sinsqr] 1: [tan(x) := sin(x) / cos(x), ... ]
5617 . .
5618
5619 ' [tsc,merge,sinsqr] @key{RET} =
5620
5621 @end group
5622 @end smallexample
5623 @noindent
5624 @smallexample
5625 @group
5626 1: 1 / cos(x) - sin(x) tan(x) 1: cos(x)
5627 . .
5628
5629 s t trig @key{RET} r 1 a r trig @key{RET} a s
5630 @end group
5631 @end smallexample
5632
5633 @c [fix-ref Nested Formulas with Rewrite Rules]
5634 Calc tries all the rules you give against all parts of the formula,
5635 repeating until no further change is possible. (The exact order in
5636 which things are tried is rather complex, but for simple rules like
5637 the ones we've used here the order doesn't really matter.
5638 @xref{Nested Formulas with Rewrite Rules}.)
5639
5640 Calc actually repeats only up to 100 times, just in case your rule set
5641 has gotten into an infinite loop. You can give a numeric prefix argument
5642 to @kbd{a r} to specify any limit. In particular, @kbd{M-1 a r} does
5643 only one rewrite at a time.
5644
5645 @smallexample
5646 @group
5647 1: 1 / cos(x) - sin(x)^2 / cos(x) 1: (1 - sin(x)^2) / cos(x)
5648 . .
5649
5650 r 1 M-1 a r trig @key{RET} M-1 a r trig @key{RET}
5651 @end group
5652 @end smallexample
5653
5654 You can type @kbd{M-0 a r} if you want no limit at all on the number
5655 of rewrites that occur.
5656
5657 Rewrite rules can also be @dfn{conditional}. Simply follow the rule
5658 with a @samp{::} symbol and the desired condition. For example,
5659
5660 @smallexample
5661 @group
5662 1: exp(2 pi i) + exp(3 pi i) + exp(4 pi i)
5663 .
5664
5665 ' exp(2 pi i) + exp(3 pi i) + exp(4 pi i) @key{RET}
5666
5667 @end group
5668 @end smallexample
5669 @noindent
5670 @smallexample
5671 @group
5672 1: 1 + exp(3 pi i) + 1
5673 .
5674
5675 a r exp(k pi i) := 1 :: k % 2 = 0 @key{RET}
5676 @end group
5677 @end smallexample
5678
5679 @noindent
5680 (Recall, @samp{k % 2} is the remainder from dividing @samp{k} by 2,
5681 which will be zero only when @samp{k} is an even integer.)
5682
5683 An interesting point is that the variables @samp{pi} and @samp{i}
5684 were matched literally rather than acting as meta-variables.
5685 This is because they are special-constant variables. The special
5686 constants @samp{e}, @samp{phi}, and so on also match literally.
5687 A common error with rewrite
5688 rules is to write, say, @samp{f(a,b,c,d,e) := g(a+b+c+d+e)}, expecting
5689 to match any @samp{f} with five arguments but in fact matching
5690 only when the fifth argument is literally @samp{e}!
5691
5692 @cindex Fibonacci numbers
5693 @ignore
5694 @starindex
5695 @end ignore
5696 @tindex fib
5697 Rewrite rules provide an interesting way to define your own functions.
5698 Suppose we want to define @samp{fib(n)} to produce the @var{n}th
5699 Fibonacci number. The first two Fibonacci numbers are each 1;
5700 later numbers are formed by summing the two preceding numbers in
5701 the sequence. This is easy to express in a set of three rules:
5702
5703 @smallexample
5704 @group
5705 ' [fib(1) := 1, fib(2) := 1, fib(n) := fib(n-1) + fib(n-2)] @key{RET} s t fib
5706
5707 1: fib(7) 1: 13
5708 . .
5709
5710 ' fib(7) @key{RET} a r fib @key{RET}
5711 @end group
5712 @end smallexample
5713
5714 One thing that is guaranteed about the order that rewrites are tried
5715 is that, for any given subformula, earlier rules in the rule set will
5716 be tried for that subformula before later ones. So even though the
5717 first and third rules both match @samp{fib(1)}, we know the first will
5718 be used preferentially.
5719
5720 This rule set has one dangerous bug: Suppose we apply it to the
5721 formula @samp{fib(x)}? (Don't actually try this.) The third rule
5722 will match @samp{fib(x)} and replace it with @w{@samp{fib(x-1) + fib(x-2)}}.
5723 Each of these will then be replaced to get @samp{fib(x-2) + 2 fib(x-3) +
5724 fib(x-4)}, and so on, expanding forever. What we really want is to apply
5725 the third rule only when @samp{n} is an integer greater than two. Type
5726 @w{@kbd{s e fib @key{RET}}}, then edit the third rule to:
5727
5728 @smallexample
5729 fib(n) := fib(n-1) + fib(n-2) :: integer(n) :: n > 2
5730 @end smallexample
5731
5732 @noindent
5733 Now:
5734
5735 @smallexample
5736 @group
5737 1: fib(6) + fib(x) + fib(0) 1: 8 + fib(x) + fib(0)
5738 . .
5739
5740 ' fib(6)+fib(x)+fib(0) @key{RET} a r fib @key{RET}
5741 @end group
5742 @end smallexample
5743
5744 @noindent
5745 We've created a new function, @code{fib}, and a new command,
5746 @w{@kbd{a r fib @key{RET}}}, which means ``evaluate all @code{fib} calls in
5747 this formula.'' To make things easier still, we can tell Calc to
5748 apply these rules automatically by storing them in the special
5749 variable @code{EvalRules}.
5750
5751 @smallexample
5752 @group
5753 1: [fib(1) := ...] . 1: [8, 13]
5754 . .
5755
5756 s r fib @key{RET} s t EvalRules @key{RET} ' [fib(6), fib(7)] @key{RET}
5757 @end group
5758 @end smallexample
5759
5760 It turns out that this rule set has the problem that it does far
5761 more work than it needs to when @samp{n} is large. Consider the
5762 first few steps of the computation of @samp{fib(6)}:
5763
5764 @smallexample
5765 @group
5766 fib(6) =
5767 fib(5) + fib(4) =
5768 fib(4) + fib(3) + fib(3) + fib(2) =
5769 fib(3) + fib(2) + fib(2) + fib(1) + fib(2) + fib(1) + 1 = ...
5770 @end group
5771 @end smallexample
5772
5773 @noindent
5774 Note that @samp{fib(3)} appears three times here. Unless Calc's
5775 algebraic simplifier notices the multiple @samp{fib(3)}s and combines
5776 them (and, as it happens, it doesn't), this rule set does lots of
5777 needless recomputation. To cure the problem, type @code{s e EvalRules}
5778 to edit the rules (or just @kbd{s E}, a shorthand command for editing
5779 @code{EvalRules}) and add another condition:
5780
5781 @smallexample
5782 fib(n) := fib(n-1) + fib(n-2) :: integer(n) :: n > 2 :: remember
5783 @end smallexample
5784
5785 @noindent
5786 If a @samp{:: remember} condition appears anywhere in a rule, then if
5787 that rule succeeds Calc will add another rule that describes that match
5788 to the front of the rule set. (Remembering works in any rule set, but
5789 for technical reasons it is most effective in @code{EvalRules}.) For
5790 example, if the rule rewrites @samp{fib(7)} to something that evaluates
5791 to 13, then the rule @samp{fib(7) := 13} will be added to the rule set.
5792
5793 Type @kbd{' fib(8) @key{RET}} to compute the eighth Fibonacci number, then
5794 type @kbd{s E} again to see what has happened to the rule set.
5795
5796 With the @code{remember} feature, our rule set can now compute
5797 @samp{fib(@var{n})} in just @var{n} steps. In the process it builds
5798 up a table of all Fibonacci numbers up to @var{n}. After we have
5799 computed the result for a particular @var{n}, we can get it back
5800 (and the results for all smaller @var{n}) later in just one step.
5801
5802 All Calc operations will run somewhat slower whenever @code{EvalRules}
5803 contains any rules. You should type @kbd{s u EvalRules @key{RET}} now to
5804 un-store the variable.
5805
5806 (@bullet{}) @strong{Exercise 2.} Sometimes it is possible to reformulate
5807 a problem to reduce the amount of recursion necessary to solve it.
5808 Create a rule that, in about @var{n} simple steps and without recourse
5809 to the @code{remember} option, replaces @samp{fib(@var{n}, 1, 1)} with
5810 @samp{fib(1, @var{x}, @var{y})} where @var{x} and @var{y} are the
5811 @var{n}th and @var{n+1}st Fibonacci numbers, respectively. This rule is
5812 rather clunky to use, so add a couple more rules to make the ``user
5813 interface'' the same as for our first version: enter @samp{fib(@var{n})},
5814 get back a plain number. @xref{Rewrites Answer 2, 2}. (@bullet{})
5815
5816 There are many more things that rewrites can do. For example, there
5817 are @samp{&&&} and @samp{|||} pattern operators that create ``and''
5818 and ``or'' combinations of rules. As one really simple example, we
5819 could combine our first two Fibonacci rules thusly:
5820
5821 @example
5822 [fib(1 ||| 2) := 1, fib(n) := ... ]
5823 @end example
5824
5825 @noindent
5826 That means ``@code{fib} of something matching either 1 or 2 rewrites
5827 to 1.''
5828
5829 You can also make meta-variables optional by enclosing them in @code{opt}.
5830 For example, the pattern @samp{a + b x} matches @samp{2 + 3 x} but not
5831 @samp{2 + x} or @samp{3 x} or @samp{x}. The pattern @samp{opt(a) + opt(b) x}
5832 matches all of these forms, filling in a default of zero for @samp{a}
5833 and one for @samp{b}.
5834
5835 (@bullet{}) @strong{Exercise 3.} Your friend Joe had @samp{2 + 3 x}
5836 on the stack and tried to use the rule
5837 @samp{opt(a) + opt(b) x := f(a, b, x)}. What happened?
5838 @xref{Rewrites Answer 3, 3}. (@bullet{})
5839
5840 (@bullet{}) @strong{Exercise 4.} Starting with a positive integer @expr{a},
5841 divide @expr{a} by two if it is even, otherwise compute @expr{3 a + 1}.
5842 Now repeat this step over and over. A famous unproved conjecture
5843 is that for any starting @expr{a}, the sequence always eventually
5844 reaches 1. Given the formula @samp{seq(@var{a}, 0)}, write a set of
5845 rules that convert this into @samp{seq(1, @var{n})} where @var{n}
5846 is the number of steps it took the sequence to reach the value 1.
5847 Now enhance the rules to accept @samp{seq(@var{a})} as a starting
5848 configuration, and to stop with just the number @var{n} by itself.
5849 Now make the result be a vector of values in the sequence, from @var{a}
5850 to 1. (The formula @samp{@var{x}|@var{y}} appends the vectors @var{x}
5851 and @var{y}.) For example, rewriting @samp{seq(6)} should yield the
5852 vector @expr{[6, 3, 10, 5, 16, 8, 4, 2, 1]}.
5853 @xref{Rewrites Answer 4, 4}. (@bullet{})
5854
5855 (@bullet{}) @strong{Exercise 5.} Define, using rewrite rules, a function
5856 @samp{nterms(@var{x})} that returns the number of terms in the sum
5857 @var{x}, or 1 if @var{x} is not a sum. (A @dfn{sum} for our purposes
5858 is one or more non-sum terms separated by @samp{+} or @samp{-} signs,
5859 so that @expr{2 - 3 (x + y) + x y} is a sum of three terms.)
5860 @xref{Rewrites Answer 5, 5}. (@bullet{})
5861
5862 (@bullet{}) @strong{Exercise 6.} A Taylor series for a function is an
5863 infinite series that exactly equals the value of that function at
5864 values of @expr{x} near zero.
5865
5866 @ifinfo
5867 @example
5868 cos(x) = 1 - x^2 / 2! + x^4 / 4! - x^6 / 6! + ...
5869 @end example
5870 @end ifinfo
5871 @tex
5872 \turnoffactive
5873 \beforedisplay
5874 $$ \cos x = 1 - {x^2 \over 2!} + {x^4 \over 4!} - {x^6 \over 6!} + \cdots $$
5875 \afterdisplay
5876 @end tex
5877
5878 The @kbd{a t} command produces a @dfn{truncated Taylor series} which
5879 is obtained by dropping all the terms higher than, say, @expr{x^2}.
5880 Calc represents the truncated Taylor series as a polynomial in @expr{x}.
5881 Mathematicians often write a truncated series using a ``big-O'' notation
5882 that records what was the lowest term that was truncated.
5883
5884 @ifinfo
5885 @example
5886 cos(x) = 1 - x^2 / 2! + O(x^3)
5887 @end example
5888 @end ifinfo
5889 @tex
5890 \turnoffactive
5891 \beforedisplay
5892 $$ \cos x = 1 - {x^2 \over 2!} + O(x^3) $$
5893 \afterdisplay
5894 @end tex
5895
5896 @noindent
5897 The meaning of @expr{O(x^3)} is ``a quantity which is negligibly small
5898 if @expr{x^3} is considered negligibly small as @expr{x} goes to zero.''
5899
5900 The exercise is to create rewrite rules that simplify sums and products of
5901 power series represented as @samp{@var{polynomial} + O(@var{var}^@var{n})}.
5902 For example, given @samp{1 - x^2 / 2 + O(x^3)} and @samp{x - x^3 / 6 + O(x^4)}
5903 on the stack, we want to be able to type @kbd{*} and get the result
5904 @samp{x - 2:3 x^3 + O(x^4)}. Don't worry if the terms of the sum are
5905 rearranged or if @kbd{a s} needs to be typed after rewriting. (This one
5906 is rather tricky; the solution at the end of this chapter uses 6 rewrite
5907 rules. Hint: The @samp{constant(x)} condition tests whether @samp{x} is
5908 a number.) @xref{Rewrites Answer 6, 6}. (@bullet{})
5909
5910 Just for kicks, try adding the rule @code{2+3 := 6} to @code{EvalRules}.
5911 What happens? (Be sure to remove this rule afterward, or you might get
5912 a nasty surprise when you use Calc to balance your checkbook!)
5913
5914 @xref{Rewrite Rules}, for the whole story on rewrite rules.
5915
5916 @node Programming Tutorial, Answers to Exercises, Algebra Tutorial, Tutorial
5917 @section Programming Tutorial
5918
5919 @noindent
5920 The Calculator is written entirely in Emacs Lisp, a highly extensible
5921 language. If you know Lisp, you can program the Calculator to do
5922 anything you like. Rewrite rules also work as a powerful programming
5923 system. But Lisp and rewrite rules take a while to master, and often
5924 all you want to do is define a new function or repeat a command a few
5925 times. Calc has features that allow you to do these things easily.
5926
5927 (Note that the programming commands relating to user-defined keys
5928 are not yet supported under Lucid Emacs 19.)
5929
5930 One very limited form of programming is defining your own functions.
5931 Calc's @kbd{Z F} command allows you to define a function name and
5932 key sequence to correspond to any formula. Programming commands use
5933 the shift-@kbd{Z} prefix; the user commands they create use the lower
5934 case @kbd{z} prefix.
5935
5936 @smallexample
5937 @group
5938 1: 1 + x + x^2 / 2 + x^3 / 6 1: 1 + x + x^2 / 2 + x^3 / 6
5939 . .
5940
5941 ' 1 + x + x^2/2! + x^3/3! @key{RET} Z F e myexp @key{RET} @key{RET} @key{RET} y
5942 @end group
5943 @end smallexample
5944
5945 This polynomial is a Taylor series approximation to @samp{exp(x)}.
5946 The @kbd{Z F} command asks a number of questions. The above answers
5947 say that the key sequence for our function should be @kbd{z e}; the
5948 @kbd{M-x} equivalent should be @code{calc-myexp}; the name of the
5949 function in algebraic formulas should also be @code{myexp}; the
5950 default argument list @samp{(x)} is acceptable; and finally @kbd{y}
5951 answers the question ``leave it in symbolic form for non-constant
5952 arguments?''
5953
5954 @smallexample
5955 @group
5956 1: 1.3495 2: 1.3495 3: 1.3495
5957 . 1: 1.34986 2: 1.34986
5958 . 1: myexp(a + 1)
5959 .
5960
5961 .3 z e .3 E ' a+1 @key{RET} z e
5962 @end group
5963 @end smallexample
5964
5965 @noindent
5966 First we call our new @code{exp} approximation with 0.3 as an
5967 argument, and compare it with the true @code{exp} function. Then
5968 we note that, as requested, if we try to give @kbd{z e} an
5969 argument that isn't a plain number, it leaves the @code{myexp}
5970 function call in symbolic form. If we had answered @kbd{n} to the
5971 final question, @samp{myexp(a + 1)} would have evaluated by plugging
5972 in @samp{a + 1} for @samp{x} in the defining formula.
5973
5974 @cindex Sine integral Si(x)
5975 @ignore
5976 @starindex
5977 @end ignore
5978 @tindex Si
5979 (@bullet{}) @strong{Exercise 1.} The ``sine integral'' function
5980 @texline @math{{\rm Si}(x)}
5981 @infoline @expr{Si(x)}
5982 is defined as the integral of @samp{sin(t)/t} for
5983 @expr{t = 0} to @expr{x} in radians. (It was invented because this
5984 integral has no solution in terms of basic functions; if you give it
5985 to Calc's @kbd{a i} command, it will ponder it for a long time and then
5986 give up.) We can use the numerical integration command, however,
5987 which in algebraic notation is written like @samp{ninteg(f(t), t, 0, x)}
5988 with any integrand @samp{f(t)}. Define a @kbd{z s} command and
5989 @code{Si} function that implement this. You will need to edit the
5990 default argument list a bit. As a test, @samp{Si(1)} should return
5991 0.946083. (Hint: @code{ninteg} will run a lot faster if you reduce
5992 the precision to, say, six digits beforehand.)
5993 @xref{Programming Answer 1, 1}. (@bullet{})
5994
5995 The simplest way to do real ``programming'' of Emacs is to define a
5996 @dfn{keyboard macro}. A keyboard macro is simply a sequence of
5997 keystrokes which Emacs has stored away and can play back on demand.
5998 For example, if you find yourself typing @kbd{H a S x @key{RET}} often,
5999 you may wish to program a keyboard macro to type this for you.
6000
6001 @smallexample
6002 @group
6003 1: y = sqrt(x) 1: x = y^2
6004 . .
6005
6006 ' y=sqrt(x) @key{RET} C-x ( H a S x @key{RET} C-x )
6007
6008 1: y = cos(x) 1: x = s1 arccos(y) + 2 pi n1
6009 . .
6010
6011 ' y=cos(x) @key{RET} X
6012 @end group
6013 @end smallexample
6014
6015 @noindent
6016 When you type @kbd{C-x (}, Emacs begins recording. But it is also
6017 still ready to execute your keystrokes, so you're really ``training''
6018 Emacs by walking it through the procedure once. When you type
6019 @w{@kbd{C-x )}}, the macro is recorded. You can now type @kbd{X} to
6020 re-execute the same keystrokes.
6021
6022 You can give a name to your macro by typing @kbd{Z K}.
6023
6024 @smallexample
6025 @group
6026 1: . 1: y = x^4 1: x = s2 sqrt(s1 sqrt(y))
6027 . .
6028
6029 Z K x @key{RET} ' y=x^4 @key{RET} z x
6030 @end group
6031 @end smallexample
6032
6033 @noindent
6034 Notice that we use shift-@kbd{Z} to define the command, and lower-case
6035 @kbd{z} to call it up.
6036
6037 Keyboard macros can call other macros.
6038
6039 @smallexample
6040 @group
6041 1: abs(x) 1: x = s1 y 1: 2 / x 1: x = 2 / y
6042 . . . .
6043
6044 ' abs(x) @key{RET} C-x ( ' y @key{RET} a = z x C-x ) ' 2/x @key{RET} X
6045 @end group
6046 @end smallexample
6047
6048 (@bullet{}) @strong{Exercise 2.} Define a keyboard macro to negate
6049 the item in level 3 of the stack, without disturbing the rest of
6050 the stack. @xref{Programming Answer 2, 2}. (@bullet{})
6051
6052 (@bullet{}) @strong{Exercise 3.} Define keyboard macros to compute
6053 the following functions:
6054
6055 @enumerate
6056 @item
6057 Compute
6058 @texline @math{\displaystyle{\sin x \over x}},
6059 @infoline @expr{sin(x) / x},
6060 where @expr{x} is the number on the top of the stack.
6061
6062 @item
6063 Compute the base-@expr{b} logarithm, just like the @kbd{B} key except
6064 the arguments are taken in the opposite order.
6065
6066 @item
6067 Produce a vector of integers from 1 to the integer on the top of
6068 the stack.
6069 @end enumerate
6070 @noindent
6071 @xref{Programming Answer 3, 3}. (@bullet{})
6072
6073 (@bullet{}) @strong{Exercise 4.} Define a keyboard macro to compute
6074 the average (mean) value of a list of numbers.
6075 @xref{Programming Answer 4, 4}. (@bullet{})
6076
6077 In many programs, some of the steps must execute several times.
6078 Calc has @dfn{looping} commands that allow this. Loops are useful
6079 inside keyboard macros, but actually work at any time.
6080
6081 @smallexample
6082 @group
6083 1: x^6 2: x^6 1: 360 x^2
6084 . 1: 4 .
6085 .
6086
6087 ' x^6 @key{RET} 4 Z < a d x @key{RET} Z >
6088 @end group
6089 @end smallexample
6090
6091 @noindent
6092 Here we have computed the fourth derivative of @expr{x^6} by
6093 enclosing a derivative command in a ``repeat loop'' structure.
6094 This structure pops a repeat count from the stack, then
6095 executes the body of the loop that many times.
6096
6097 If you make a mistake while entering the body of the loop,
6098 type @w{@kbd{Z C-g}} to cancel the loop command.
6099
6100 @cindex Fibonacci numbers
6101 Here's another example:
6102
6103 @smallexample
6104 @group
6105 3: 1 2: 10946
6106 2: 1 1: 17711
6107 1: 20 .
6108 .
6109
6110 1 @key{RET} @key{RET} 20 Z < @key{TAB} C-j + Z >
6111 @end group
6112 @end smallexample
6113
6114 @noindent
6115 The numbers in levels 2 and 1 should be the 21st and 22nd Fibonacci
6116 numbers, respectively. (To see what's going on, try a few repetitions
6117 of the loop body by hand; @kbd{C-j}, also on the Line-Feed or @key{LFD}
6118 key if you have one, makes a copy of the number in level 2.)
6119
6120 @cindex Golden ratio
6121 @cindex Phi, golden ratio
6122 A fascinating property of the Fibonacci numbers is that the @expr{n}th
6123 Fibonacci number can be found directly by computing
6124 @texline @math{\phi^n / \sqrt{5}}
6125 @infoline @expr{phi^n / sqrt(5)}
6126 and then rounding to the nearest integer, where
6127 @texline @math{\phi} (``phi''),
6128 @infoline @expr{phi},
6129 the ``golden ratio,'' is
6130 @texline @math{(1 + \sqrt{5}) / 2}.
6131 @infoline @expr{(1 + sqrt(5)) / 2}.
6132 (For convenience, this constant is available from the @code{phi}
6133 variable, or the @kbd{I H P} command.)
6134
6135 @smallexample
6136 @group
6137 1: 1.61803 1: 24476.0000409 1: 10945.9999817 1: 10946
6138 . . . .
6139
6140 I H P 21 ^ 5 Q / R
6141 @end group
6142 @end smallexample
6143
6144 @cindex Continued fractions
6145 (@bullet{}) @strong{Exercise 5.} The @dfn{continued fraction}
6146 representation of
6147 @texline @math{\phi}
6148 @infoline @expr{phi}
6149 is
6150 @texline @math{1 + 1/(1 + 1/(1 + 1/( \ldots )))}.
6151 @infoline @expr{1 + 1/(1 + 1/(1 + 1/( ...@: )))}.
6152 We can compute an approximate value by carrying this however far
6153 and then replacing the innermost
6154 @texline @math{1/( \ldots )}
6155 @infoline @expr{1/( ...@: )}
6156 by 1. Approximate
6157 @texline @math{\phi}
6158 @infoline @expr{phi}
6159 using a twenty-term continued fraction.
6160 @xref{Programming Answer 5, 5}. (@bullet{})
6161
6162 (@bullet{}) @strong{Exercise 6.} Linear recurrences like the one for
6163 Fibonacci numbers can be expressed in terms of matrices. Given a
6164 vector @w{@expr{[a, b]}} determine a matrix which, when multiplied by this
6165 vector, produces the vector @expr{[b, c]}, where @expr{a}, @expr{b} and
6166 @expr{c} are three successive Fibonacci numbers. Now write a program
6167 that, given an integer @expr{n}, computes the @expr{n}th Fibonacci number
6168 using matrix arithmetic. @xref{Programming Answer 6, 6}. (@bullet{})
6169
6170 @cindex Harmonic numbers
6171 A more sophisticated kind of loop is the @dfn{for} loop. Suppose
6172 we wish to compute the 20th ``harmonic'' number, which is equal to
6173 the sum of the reciprocals of the integers from 1 to 20.
6174
6175 @smallexample
6176 @group
6177 3: 0 1: 3.597739
6178 2: 1 .
6179 1: 20
6180 .
6181
6182 0 @key{RET} 1 @key{RET} 20 Z ( & + 1 Z )
6183 @end group
6184 @end smallexample
6185
6186 @noindent
6187 The ``for'' loop pops two numbers, the lower and upper limits, then
6188 repeats the body of the loop as an internal counter increases from
6189 the lower limit to the upper one. Just before executing the loop
6190 body, it pushes the current loop counter. When the loop body
6191 finishes, it pops the ``step,'' i.e., the amount by which to
6192 increment the loop counter. As you can see, our loop always
6193 uses a step of one.
6194
6195 This harmonic number function uses the stack to hold the running
6196 total as well as for the various loop housekeeping functions. If
6197 you find this disorienting, you can sum in a variable instead:
6198
6199 @smallexample
6200 @group
6201 1: 0 2: 1 . 1: 3.597739
6202 . 1: 20 .
6203 .
6204
6205 0 t 7 1 @key{RET} 20 Z ( & s + 7 1 Z ) r 7
6206 @end group
6207 @end smallexample
6208
6209 @noindent
6210 The @kbd{s +} command adds the top-of-stack into the value in a
6211 variable (and removes that value from the stack).
6212
6213 It's worth noting that many jobs that call for a ``for'' loop can
6214 also be done more easily by Calc's high-level operations. Two
6215 other ways to compute harmonic numbers are to use vector mapping
6216 and reduction (@kbd{v x 20}, then @w{@kbd{V M &}}, then @kbd{V R +}),
6217 or to use the summation command @kbd{a +}. Both of these are
6218 probably easier than using loops. However, there are some
6219 situations where loops really are the way to go:
6220
6221 (@bullet{}) @strong{Exercise 7.} Use a ``for'' loop to find the first
6222 harmonic number which is greater than 4.0.
6223 @xref{Programming Answer 7, 7}. (@bullet{})
6224
6225 Of course, if we're going to be using variables in our programs,
6226 we have to worry about the programs clobbering values that the
6227 caller was keeping in those same variables. This is easy to
6228 fix, though:
6229
6230 @smallexample
6231 @group
6232 . 1: 0.6667 1: 0.6667 3: 0.6667
6233 . . 2: 3.597739
6234 1: 0.6667
6235 .
6236
6237 Z ` p 4 @key{RET} 2 @key{RET} 3 / s 7 s s a @key{RET} Z ' r 7 s r a @key{RET}
6238 @end group
6239 @end smallexample
6240
6241 @noindent
6242 When we type @kbd{Z `} (that's a back-quote character), Calc saves
6243 its mode settings and the contents of the ten ``quick variables''
6244 for later reference. When we type @kbd{Z '} (that's an apostrophe
6245 now), Calc restores those saved values. Thus the @kbd{p 4} and
6246 @kbd{s 7} commands have no effect outside this sequence. Wrapping
6247 this around the body of a keyboard macro ensures that it doesn't
6248 interfere with what the user of the macro was doing. Notice that
6249 the contents of the stack, and the values of named variables,
6250 survive past the @kbd{Z '} command.
6251
6252 @cindex Bernoulli numbers, approximate
6253 The @dfn{Bernoulli numbers} are a sequence with the interesting
6254 property that all of the odd Bernoulli numbers are zero, and the
6255 even ones, while difficult to compute, can be roughly approximated
6256 by the formula
6257 @texline @math{\displaystyle{2 n! \over (2 \pi)^n}}.
6258 @infoline @expr{2 n!@: / (2 pi)^n}.
6259 Let's write a keyboard macro to compute (approximate) Bernoulli numbers.
6260 (Calc has a command, @kbd{k b}, to compute exact Bernoulli numbers, but
6261 this command is very slow for large @expr{n} since the higher Bernoulli
6262 numbers are very large fractions.)
6263
6264 @smallexample
6265 @group
6266 1: 10 1: 0.0756823
6267 . .
6268
6269 10 C-x ( @key{RET} 2 % Z [ @key{DEL} 0 Z : ' 2 $! / (2 pi)^$ @key{RET} = Z ] C-x )
6270 @end group
6271 @end smallexample
6272
6273 @noindent
6274 You can read @kbd{Z [} as ``then,'' @kbd{Z :} as ``else,'' and
6275 @kbd{Z ]} as ``end-if.'' There is no need for an explicit ``if''
6276 command. For the purposes of @w{@kbd{Z [}}, the condition is ``true''
6277 if the value it pops from the stack is a nonzero number, or ``false''
6278 if it pops zero or something that is not a number (like a formula).
6279 Here we take our integer argument modulo 2; this will be nonzero
6280 if we're asking for an odd Bernoulli number.
6281
6282 The actual tenth Bernoulli number is @expr{5/66}.
6283
6284 @smallexample
6285 @group
6286 3: 0.0756823 1: 0 1: 0.25305 1: 0 1: 1.16659
6287 2: 5:66 . . . .
6288 1: 0.0757575
6289 .
6290
6291 10 k b @key{RET} c f M-0 @key{DEL} 11 X @key{DEL} 12 X @key{DEL} 13 X @key{DEL} 14 X
6292 @end group
6293 @end smallexample
6294
6295 Just to exercise loops a bit more, let's compute a table of even
6296 Bernoulli numbers.
6297
6298 @smallexample
6299 @group
6300 3: [] 1: [0.10132, 0.03079, 0.02340, 0.033197, ...]
6301 2: 2 .
6302 1: 30
6303 .
6304
6305 [ ] 2 @key{RET} 30 Z ( X | 2 Z )
6306 @end group
6307 @end smallexample
6308
6309 @noindent
6310 The vertical-bar @kbd{|} is the vector-concatenation command. When
6311 we execute it, the list we are building will be in stack level 2
6312 (initially this is an empty list), and the next Bernoulli number
6313 will be in level 1. The effect is to append the Bernoulli number
6314 onto the end of the list. (To create a table of exact fractional
6315 Bernoulli numbers, just replace @kbd{X} with @kbd{k b} in the above
6316 sequence of keystrokes.)
6317
6318 With loops and conditionals, you can program essentially anything
6319 in Calc. One other command that makes looping easier is @kbd{Z /},
6320 which takes a condition from the stack and breaks out of the enclosing
6321 loop if the condition is true (non-zero). You can use this to make
6322 ``while'' and ``until'' style loops.
6323
6324 If you make a mistake when entering a keyboard macro, you can edit
6325 it using @kbd{Z E}. First, you must attach it to a key with @kbd{Z K}.
6326 One technique is to enter a throwaway dummy definition for the macro,
6327 then enter the real one in the edit command.
6328
6329 @smallexample
6330 @group
6331 1: 3 1: 3 Calc Macro Edit Mode.
6332 . . Original keys: 1 <return> 2 +
6333
6334 1 ;; calc digits
6335 RET ;; calc-enter
6336 2 ;; calc digits
6337 + ;; calc-plus
6338
6339 C-x ( 1 @key{RET} 2 + C-x ) Z K h @key{RET} Z E h
6340 @end group
6341 @end smallexample
6342
6343 @noindent
6344 A keyboard macro is stored as a pure keystroke sequence. The
6345 @file{edmacro} package (invoked by @kbd{Z E}) scans along the
6346 macro and tries to decode it back into human-readable steps.
6347 Descriptions of the keystrokes are given as comments, which begin with
6348 @samp{;;}, and which are ignored when the edited macro is saved.
6349 Spaces and line breaks are also ignored when the edited macro is saved.
6350 To enter a space into the macro, type @code{SPC}. All the special
6351 characters @code{RET}, @code{LFD}, @code{TAB}, @code{SPC}, @code{DEL},
6352 and @code{NUL} must be written in all uppercase, as must the prefixes
6353 @code{C-} and @code{M-}.
6354
6355 Let's edit in a new definition, for computing harmonic numbers.
6356 First, erase the four lines of the old definition. Then, type
6357 in the new definition (or use Emacs @kbd{M-w} and @kbd{C-y} commands
6358 to copy it from this page of the Info file; you can of course skip
6359 typing the comments, which begin with @samp{;;}).
6360
6361 @smallexample
6362 Z` ;; calc-kbd-push (Save local values)
6363 0 ;; calc digits (Push a zero onto the stack)
6364 st ;; calc-store-into (Store it in the following variable)
6365 1 ;; calc quick variable (Quick variable q1)
6366 1 ;; calc digits (Initial value for the loop)
6367 TAB ;; calc-roll-down (Swap initial and final)
6368 Z( ;; calc-kbd-for (Begin the "for" loop)
6369 & ;; calc-inv (Take the reciprocal)
6370 s+ ;; calc-store-plus (Add to the following variable)
6371 1 ;; calc quick variable (Quick variable q1)
6372 1 ;; calc digits (The loop step is 1)
6373 Z) ;; calc-kbd-end-for (End the "for" loop)
6374 sr ;; calc-recall (Recall the final accumulated value)
6375 1 ;; calc quick variable (Quick variable q1)
6376 Z' ;; calc-kbd-pop (Restore values)
6377 @end smallexample
6378
6379 @noindent
6380 Press @kbd{C-c C-c} to finish editing and return to the Calculator.
6381
6382 @smallexample
6383 @group
6384 1: 20 1: 3.597739
6385 . .
6386
6387 20 z h
6388 @end group
6389 @end smallexample
6390
6391 The @file{edmacro} package defines a handy @code{read-kbd-macro} command
6392 which reads the current region of the current buffer as a sequence of
6393 keystroke names, and defines that sequence on the @kbd{X}
6394 (and @kbd{C-x e}) key. Because this is so useful, Calc puts this
6395 command on the @kbd{M-# m} key. Try reading in this macro in the
6396 following form: Press @kbd{C-@@} (or @kbd{C-@key{SPC}}) at
6397 one end of the text below, then type @kbd{M-# m} at the other.
6398
6399 @example
6400 @group
6401 Z ` 0 t 1
6402 1 @key{TAB}
6403 Z ( & s + 1 1 Z )
6404 r 1
6405 Z '
6406 @end group
6407 @end example
6408
6409 (@bullet{}) @strong{Exercise 8.} A general algorithm for solving
6410 equations numerically is @dfn{Newton's Method}. Given the equation
6411 @expr{f(x) = 0} for any function @expr{f}, and an initial guess
6412 @expr{x_0} which is reasonably close to the desired solution, apply
6413 this formula over and over:
6414
6415 @ifinfo
6416 @example
6417 new_x = x - f(x)/f'(x)
6418 @end example
6419 @end ifinfo
6420 @tex
6421 \beforedisplay
6422 $$ x_{\rm new} = x - {f(x) \over f'(x)} $$
6423 \afterdisplay
6424 @end tex
6425
6426 @noindent
6427 where @expr{f'(x)} is the derivative of @expr{f}. The @expr{x}
6428 values will quickly converge to a solution, i.e., eventually
6429 @texline @math{x_{\rm new}}
6430 @infoline @expr{new_x}
6431 and @expr{x} will be equal to within the limits
6432 of the current precision. Write a program which takes a formula
6433 involving the variable @expr{x}, and an initial guess @expr{x_0},
6434 on the stack, and produces a value of @expr{x} for which the formula
6435 is zero. Use it to find a solution of
6436 @texline @math{\sin(\cos x) = 0.5}
6437 @infoline @expr{sin(cos(x)) = 0.5}
6438 near @expr{x = 4.5}. (Use angles measured in radians.) Note that
6439 the built-in @w{@kbd{a R}} (@code{calc-find-root}) command uses Newton's
6440 method when it is able. @xref{Programming Answer 8, 8}. (@bullet{})
6441
6442 @cindex Digamma function
6443 @cindex Gamma constant, Euler's
6444 @cindex Euler's gamma constant
6445 (@bullet{}) @strong{Exercise 9.} The @dfn{digamma} function
6446 @texline @math{\psi(z) (``psi'')}
6447 @infoline @expr{psi(z)}
6448 is defined as the derivative of
6449 @texline @math{\ln \Gamma(z)}.
6450 @infoline @expr{ln(gamma(z))}.
6451 For large values of @expr{z}, it can be approximated by the infinite sum
6452
6453 @ifinfo
6454 @example
6455 psi(z) ~= ln(z) - 1/2z - sum(bern(2 n) / 2 n z^(2 n), n, 1, inf)
6456 @end example
6457 @end ifinfo
6458 @tex
6459 \beforedisplay
6460 $$ \psi(z) \approx \ln z - {1\over2z} -
6461 \sum_{n=1}^\infty {\code{bern}(2 n) \over 2 n z^{2n}}
6462 $$
6463 \afterdisplay
6464 @end tex
6465
6466 @noindent
6467 where
6468 @texline @math{\sum}
6469 @infoline @expr{sum}
6470 represents the sum over @expr{n} from 1 to infinity
6471 (or to some limit high enough to give the desired accuracy), and
6472 the @code{bern} function produces (exact) Bernoulli numbers.
6473 While this sum is not guaranteed to converge, in practice it is safe.
6474 An interesting mathematical constant is Euler's gamma, which is equal
6475 to about 0.5772. One way to compute it is by the formula,
6476 @texline @math{\gamma = -\psi(1)}.
6477 @infoline @expr{gamma = -psi(1)}.
6478 Unfortunately, 1 isn't a large enough argument
6479 for the above formula to work (5 is a much safer value for @expr{z}).
6480 Fortunately, we can compute
6481 @texline @math{\psi(1)}
6482 @infoline @expr{psi(1)}
6483 from
6484 @texline @math{\psi(5)}
6485 @infoline @expr{psi(5)}
6486 using the recurrence
6487 @texline @math{\psi(z+1) = \psi(z) + {1 \over z}}.
6488 @infoline @expr{psi(z+1) = psi(z) + 1/z}.
6489 Your task: Develop a program to compute
6490 @texline @math{\psi(z)};
6491 @infoline @expr{psi(z)};
6492 it should ``pump up'' @expr{z}
6493 if necessary to be greater than 5, then use the above summation
6494 formula. Use looping commands to compute the sum. Use your function
6495 to compute
6496 @texline @math{\gamma}
6497 @infoline @expr{gamma}
6498 to twelve decimal places. (Calc has a built-in command
6499 for Euler's constant, @kbd{I P}, which you can use to check your answer.)
6500 @xref{Programming Answer 9, 9}. (@bullet{})
6501
6502 @cindex Polynomial, list of coefficients
6503 (@bullet{}) @strong{Exercise 10.} Given a polynomial in @expr{x} and
6504 a number @expr{m} on the stack, where the polynomial is of degree
6505 @expr{m} or less (i.e., does not have any terms higher than @expr{x^m}),
6506 write a program to convert the polynomial into a list-of-coefficients
6507 notation. For example, @expr{5 x^4 + (x + 1)^2} with @expr{m = 6}
6508 should produce the list @expr{[1, 2, 1, 0, 5, 0, 0]}. Also develop
6509 a way to convert from this form back to the standard algebraic form.
6510 @xref{Programming Answer 10, 10}. (@bullet{})
6511
6512 @cindex Recursion
6513 (@bullet{}) @strong{Exercise 11.} The @dfn{Stirling numbers of the
6514 first kind} are defined by the recurrences,
6515
6516 @ifinfo
6517 @example
6518 s(n,n) = 1 for n >= 0,
6519 s(n,0) = 0 for n > 0,
6520 s(n+1,m) = s(n,m-1) - n s(n,m) for n >= m >= 1.
6521 @end example
6522 @end ifinfo
6523 @tex
6524 \turnoffactive
6525 \beforedisplay
6526 $$ \eqalign{ s(n,n) &= 1 \qquad \hbox{for } n \ge 0, \cr
6527 s(n,0) &= 0 \qquad \hbox{for } n > 0, \cr
6528 s(n+1,m) &= s(n,m-1) - n \, s(n,m) \qquad
6529 \hbox{for } n \ge m \ge 1.}
6530 $$
6531 \afterdisplay
6532 \vskip5pt
6533 (These numbers are also sometimes written $\displaystyle{n \brack m}$.)
6534 @end tex
6535
6536 This can be implemented using a @dfn{recursive} program in Calc; the
6537 program must invoke itself in order to calculate the two righthand
6538 terms in the general formula. Since it always invokes itself with
6539 ``simpler'' arguments, it's easy to see that it must eventually finish
6540 the computation. Recursion is a little difficult with Emacs keyboard
6541 macros since the macro is executed before its definition is complete.
6542 So here's the recommended strategy: Create a ``dummy macro'' and assign
6543 it to a key with, e.g., @kbd{Z K s}. Now enter the true definition,
6544 using the @kbd{z s} command to call itself recursively, then assign it
6545 to the same key with @kbd{Z K s}. Now the @kbd{z s} command will run
6546 the complete recursive program. (Another way is to use @w{@kbd{Z E}}
6547 or @kbd{M-# m} (@code{read-kbd-macro}) to read the whole macro at once,
6548 thus avoiding the ``training'' phase.) The task: Write a program
6549 that computes Stirling numbers of the first kind, given @expr{n} and
6550 @expr{m} on the stack. Test it with @emph{small} inputs like
6551 @expr{s(4,2)}. (There is a built-in command for Stirling numbers,
6552 @kbd{k s}, which you can use to check your answers.)
6553 @xref{Programming Answer 11, 11}. (@bullet{})
6554
6555 The programming commands we've seen in this part of the tutorial
6556 are low-level, general-purpose operations. Often you will find
6557 that a higher-level function, such as vector mapping or rewrite
6558 rules, will do the job much more easily than a detailed, step-by-step
6559 program can:
6560
6561 (@bullet{}) @strong{Exercise 12.} Write another program for
6562 computing Stirling numbers of the first kind, this time using
6563 rewrite rules. Once again, @expr{n} and @expr{m} should be taken
6564 from the stack. @xref{Programming Answer 12, 12}. (@bullet{})
6565
6566 @example
6567
6568 @end example
6569 This ends the tutorial section of the Calc manual. Now you know enough
6570 about Calc to use it effectively for many kinds of calculations. But
6571 Calc has many features that were not even touched upon in this tutorial.
6572 @c [not-split]
6573 The rest of this manual tells the whole story.
6574 @c [when-split]
6575 @c Volume II of this manual, the @dfn{Calc Reference}, tells the whole story.
6576
6577 @page
6578 @node Answers to Exercises, , Programming Tutorial, Tutorial
6579 @section Answers to Exercises
6580
6581 @noindent
6582 This section includes answers to all the exercises in the Calc tutorial.
6583
6584 @menu
6585 * RPN Answer 1:: 1 @key{RET} 2 @key{RET} 3 @key{RET} 4 + * -
6586 * RPN Answer 2:: 2*4 + 7*9.5 + 5/4
6587 * RPN Answer 3:: Operating on levels 2 and 3
6588 * RPN Answer 4:: Joe's complex problems
6589 * Algebraic Answer 1:: Simulating Q command
6590 * Algebraic Answer 2:: Joe's algebraic woes
6591 * Algebraic Answer 3:: 1 / 0
6592 * Modes Answer 1:: 3#0.1 = 3#0.0222222?
6593 * Modes Answer 2:: 16#f.e8fe15
6594 * Modes Answer 3:: Joe's rounding bug
6595 * Modes Answer 4:: Why floating point?
6596 * Arithmetic Answer 1:: Why the \ command?
6597 * Arithmetic Answer 2:: Tripping up the B command
6598 * Vector Answer 1:: Normalizing a vector
6599 * Vector Answer 2:: Average position
6600 * Matrix Answer 1:: Row and column sums
6601 * Matrix Answer 2:: Symbolic system of equations
6602 * Matrix Answer 3:: Over-determined system
6603 * List Answer 1:: Powers of two
6604 * List Answer 2:: Least-squares fit with matrices
6605 * List Answer 3:: Geometric mean
6606 * List Answer 4:: Divisor function
6607 * List Answer 5:: Duplicate factors
6608 * List Answer 6:: Triangular list
6609 * List Answer 7:: Another triangular list
6610 * List Answer 8:: Maximum of Bessel function
6611 * List Answer 9:: Integers the hard way
6612 * List Answer 10:: All elements equal
6613 * List Answer 11:: Estimating pi with darts
6614 * List Answer 12:: Estimating pi with matchsticks
6615 * List Answer 13:: Hash codes
6616 * List Answer 14:: Random walk
6617 * Types Answer 1:: Square root of pi times rational
6618 * Types Answer 2:: Infinities
6619 * Types Answer 3:: What can "nan" be?
6620 * Types Answer 4:: Abbey Road
6621 * Types Answer 5:: Friday the 13th
6622 * Types Answer 6:: Leap years
6623 * Types Answer 7:: Erroneous donut
6624 * Types Answer 8:: Dividing intervals
6625 * Types Answer 9:: Squaring intervals
6626 * Types Answer 10:: Fermat's primality test
6627 * Types Answer 11:: pi * 10^7 seconds
6628 * Types Answer 12:: Abbey Road on CD
6629 * Types Answer 13:: Not quite pi * 10^7 seconds
6630 * Types Answer 14:: Supercomputers and c
6631 * Types Answer 15:: Sam the Slug
6632 * Algebra Answer 1:: Squares and square roots
6633 * Algebra Answer 2:: Building polynomial from roots
6634 * Algebra Answer 3:: Integral of x sin(pi x)
6635 * Algebra Answer 4:: Simpson's rule
6636 * Rewrites Answer 1:: Multiplying by conjugate
6637 * Rewrites Answer 2:: Alternative fib rule
6638 * Rewrites Answer 3:: Rewriting opt(a) + opt(b) x
6639 * Rewrites Answer 4:: Sequence of integers
6640 * Rewrites Answer 5:: Number of terms in sum
6641 * Rewrites Answer 6:: Truncated Taylor series
6642 * Programming Answer 1:: Fresnel's C(x)
6643 * Programming Answer 2:: Negate third stack element
6644 * Programming Answer 3:: Compute sin(x) / x, etc.
6645 * Programming Answer 4:: Average value of a list
6646 * Programming Answer 5:: Continued fraction phi
6647 * Programming Answer 6:: Matrix Fibonacci numbers
6648 * Programming Answer 7:: Harmonic number greater than 4
6649 * Programming Answer 8:: Newton's method
6650 * Programming Answer 9:: Digamma function
6651 * Programming Answer 10:: Unpacking a polynomial
6652 * Programming Answer 11:: Recursive Stirling numbers
6653 * Programming Answer 12:: Stirling numbers with rewrites
6654 @end menu
6655
6656 @c The following kludgery prevents the individual answers from
6657 @c being entered on the table of contents.
6658 @tex
6659 \global\let\oldwrite=\write
6660 \gdef\skipwrite#1#2{\let\write=\oldwrite}
6661 \global\let\oldchapternofonts=\chapternofonts
6662 \gdef\chapternofonts{\let\write=\skipwrite\oldchapternofonts}
6663 @end tex
6664
6665 @node RPN Answer 1, RPN Answer 2, Answers to Exercises, Answers to Exercises
6666 @subsection RPN Tutorial Exercise 1
6667
6668 @noindent
6669 @kbd{1 @key{RET} 2 @key{RET} 3 @key{RET} 4 + * -}
6670
6671 The result is
6672 @texline @math{1 - (2 \times (3 + 4)) = -13}.
6673 @infoline @expr{1 - (2 * (3 + 4)) = -13}.
6674
6675 @node RPN Answer 2, RPN Answer 3, RPN Answer 1, Answers to Exercises
6676 @subsection RPN Tutorial Exercise 2
6677
6678 @noindent
6679 @texline @math{2\times4 + 7\times9.5 + {5\over4} = 75.75}
6680 @infoline @expr{2*4 + 7*9.5 + 5/4 = 75.75}
6681
6682 After computing the intermediate term
6683 @texline @math{2\times4 = 8},
6684 @infoline @expr{2*4 = 8},
6685 you can leave that result on the stack while you compute the second
6686 term. With both of these results waiting on the stack you can then
6687 compute the final term, then press @kbd{+ +} to add everything up.
6688
6689 @smallexample
6690 @group
6691 2: 2 1: 8 3: 8 2: 8
6692 1: 4 . 2: 7 1: 66.5
6693 . 1: 9.5 .
6694 .
6695
6696 2 @key{RET} 4 * 7 @key{RET} 9.5 *
6697
6698 @end group
6699 @end smallexample
6700 @noindent
6701 @smallexample
6702 @group
6703 4: 8 3: 8 2: 8 1: 75.75
6704 3: 66.5 2: 66.5 1: 67.75 .
6705 2: 5 1: 1.25 .
6706 1: 4 .
6707 .
6708
6709 5 @key{RET} 4 / + +
6710 @end group
6711 @end smallexample
6712
6713 Alternatively, you could add the first two terms before going on
6714 with the third term.
6715
6716 @smallexample
6717 @group
6718 2: 8 1: 74.5 3: 74.5 2: 74.5 1: 75.75
6719 1: 66.5 . 2: 5 1: 1.25 .
6720 . 1: 4 .
6721 .
6722
6723 ... + 5 @key{RET} 4 / +
6724 @end group
6725 @end smallexample
6726
6727 On an old-style RPN calculator this second method would have the
6728 advantage of using only three stack levels. But since Calc's stack
6729 can grow arbitrarily large this isn't really an issue. Which method
6730 you choose is purely a matter of taste.
6731
6732 @node RPN Answer 3, RPN Answer 4, RPN Answer 2, Answers to Exercises
6733 @subsection RPN Tutorial Exercise 3
6734
6735 @noindent
6736 The @key{TAB} key provides a way to operate on the number in level 2.
6737
6738 @smallexample
6739 @group
6740 3: 10 3: 10 4: 10 3: 10 3: 10
6741 2: 20 2: 30 3: 30 2: 30 2: 21
6742 1: 30 1: 20 2: 20 1: 21 1: 30
6743 . . 1: 1 . .
6744 .
6745
6746 @key{TAB} 1 + @key{TAB}
6747 @end group
6748 @end smallexample
6749
6750 Similarly, @kbd{M-@key{TAB}} gives you access to the number in level 3.
6751
6752 @smallexample
6753 @group
6754 3: 10 3: 21 3: 21 3: 30 3: 11
6755 2: 21 2: 30 2: 30 2: 11 2: 21
6756 1: 30 1: 10 1: 11 1: 21 1: 30
6757 . . . . .
6758
6759 M-@key{TAB} 1 + M-@key{TAB} M-@key{TAB}
6760 @end group
6761 @end smallexample
6762
6763 @node RPN Answer 4, Algebraic Answer 1, RPN Answer 3, Answers to Exercises
6764 @subsection RPN Tutorial Exercise 4
6765
6766 @noindent
6767 Either @kbd{( 2 , 3 )} or @kbd{( 2 @key{SPC} 3 )} would have worked,
6768 but using both the comma and the space at once yields:
6769
6770 @smallexample
6771 @group
6772 1: ( ... 2: ( ... 1: (2, ... 2: (2, ... 2: (2, ...
6773 . 1: 2 . 1: (2, ... 1: (2, 3)
6774 . . .
6775
6776 ( 2 , @key{SPC} 3 )
6777 @end group
6778 @end smallexample
6779
6780 Joe probably tried to type @kbd{@key{TAB} @key{DEL}} to swap the
6781 extra incomplete object to the top of the stack and delete it.
6782 But a feature of Calc is that @key{DEL} on an incomplete object
6783 deletes just one component out of that object, so he had to press
6784 @key{DEL} twice to finish the job.
6785
6786 @smallexample
6787 @group
6788 2: (2, ... 2: (2, 3) 2: (2, 3) 1: (2, 3)
6789 1: (2, 3) 1: (2, ... 1: ( ... .
6790 . . .
6791
6792 @key{TAB} @key{DEL} @key{DEL}
6793 @end group
6794 @end smallexample
6795
6796 (As it turns out, deleting the second-to-top stack entry happens often
6797 enough that Calc provides a special key, @kbd{M-@key{DEL}}, to do just that.
6798 @kbd{M-@key{DEL}} is just like @kbd{@key{TAB} @key{DEL}}, except that it doesn't exhibit
6799 the ``feature'' that tripped poor Joe.)
6800
6801 @node Algebraic Answer 1, Algebraic Answer 2, RPN Answer 4, Answers to Exercises
6802 @subsection Algebraic Entry Tutorial Exercise 1
6803
6804 @noindent
6805 Type @kbd{' sqrt($) @key{RET}}.
6806
6807 If the @kbd{Q} key is broken, you could use @kbd{' $^0.5 @key{RET}}.
6808 Or, RPN style, @kbd{0.5 ^}.
6809
6810 (Actually, @samp{$^1:2}, using the fraction one-half as the power, is
6811 a closer equivalent, since @samp{9^0.5} yields @expr{3.0} whereas
6812 @samp{sqrt(9)} and @samp{9^1:2} yield the exact integer @expr{3}.)
6813
6814 @node Algebraic Answer 2, Algebraic Answer 3, Algebraic Answer 1, Answers to Exercises
6815 @subsection Algebraic Entry Tutorial Exercise 2
6816
6817 @noindent
6818 In the formula @samp{2 x (1+y)}, @samp{x} was interpreted as a function
6819 name with @samp{1+y} as its argument. Assigning a value to a variable
6820 has no relation to a function by the same name. Joe needed to use an
6821 explicit @samp{*} symbol here: @samp{2 x*(1+y)}.
6822
6823 @node Algebraic Answer 3, Modes Answer 1, Algebraic Answer 2, Answers to Exercises
6824 @subsection Algebraic Entry Tutorial Exercise 3
6825
6826 @noindent
6827 The result from @kbd{1 @key{RET} 0 /} will be the formula @expr{1 / 0}.
6828 The ``function'' @samp{/} cannot be evaluated when its second argument
6829 is zero, so it is left in symbolic form. When you now type @kbd{0 *},
6830 the result will be zero because Calc uses the general rule that ``zero
6831 times anything is zero.''
6832
6833 @c [fix-ref Infinities]
6834 The @kbd{m i} command enables an @dfn{Infinite mode} in which @expr{1 / 0}
6835 results in a special symbol that represents ``infinity.'' If you
6836 multiply infinity by zero, Calc uses another special new symbol to
6837 show that the answer is ``indeterminate.'' @xref{Infinities}, for
6838 further discussion of infinite and indeterminate values.
6839
6840 @node Modes Answer 1, Modes Answer 2, Algebraic Answer 3, Answers to Exercises
6841 @subsection Modes Tutorial Exercise 1
6842
6843 @noindent
6844 Calc always stores its numbers in decimal, so even though one-third has
6845 an exact base-3 representation (@samp{3#0.1}), it is still stored as
6846 0.3333333 (chopped off after 12 or however many decimal digits) inside
6847 the calculator's memory. When this inexact number is converted back
6848 to base 3 for display, it may still be slightly inexact. When we
6849 multiply this number by 3, we get 0.999999, also an inexact value.
6850
6851 When Calc displays a number in base 3, it has to decide how many digits
6852 to show. If the current precision is 12 (decimal) digits, that corresponds
6853 to @samp{12 / log10(3) = 25.15} base-3 digits. Because 25.15 is not an
6854 exact integer, Calc shows only 25 digits, with the result that stored
6855 numbers carry a little bit of extra information that may not show up on
6856 the screen. When Joe entered @samp{3#0.2}, the stored number 0.666666
6857 happened to round to a pleasing value when it lost that last 0.15 of a
6858 digit, but it was still inexact in Calc's memory. When he divided by 2,
6859 he still got the dreaded inexact value 0.333333. (Actually, he divided
6860 0.666667 by 2 to get 0.333334, which is why he got something a little
6861 higher than @code{3#0.1} instead of a little lower.)
6862
6863 If Joe didn't want to be bothered with all this, he could have typed
6864 @kbd{M-24 d n} to display with one less digit than the default. (If
6865 you give @kbd{d n} a negative argument, it uses default-minus-that,
6866 so @kbd{M-- d n} would be an easier way to get the same effect.) Those
6867 inexact results would still be lurking there, but they would now be
6868 rounded to nice, natural-looking values for display purposes. (Remember,
6869 @samp{0.022222} in base 3 is like @samp{0.099999} in base 10; rounding
6870 off one digit will round the number up to @samp{0.1}.) Depending on the
6871 nature of your work, this hiding of the inexactness may be a benefit or
6872 a danger. With the @kbd{d n} command, Calc gives you the choice.
6873
6874 Incidentally, another consequence of all this is that if you type
6875 @kbd{M-30 d n} to display more digits than are ``really there,''
6876 you'll see garbage digits at the end of the number. (In decimal
6877 display mode, with decimally-stored numbers, these garbage digits are
6878 always zero so they vanish and you don't notice them.) Because Calc
6879 rounds off that 0.15 digit, there is the danger that two numbers could
6880 be slightly different internally but still look the same. If you feel
6881 uneasy about this, set the @kbd{d n} precision to be a little higher
6882 than normal; you'll get ugly garbage digits, but you'll always be able
6883 to tell two distinct numbers apart.
6884
6885 An interesting side note is that most computers store their
6886 floating-point numbers in binary, and convert to decimal for display.
6887 Thus everyday programs have the same problem: Decimal 0.1 cannot be
6888 represented exactly in binary (try it: @kbd{0.1 d 2}), so @samp{0.1 * 10}
6889 comes out as an inexact approximation to 1 on some machines (though
6890 they generally arrange to hide it from you by rounding off one digit as
6891 we did above). Because Calc works in decimal instead of binary, you can
6892 be sure that numbers that look exact @emph{are} exact as long as you stay
6893 in decimal display mode.
6894
6895 It's not hard to show that any number that can be represented exactly
6896 in binary, octal, or hexadecimal is also exact in decimal, so the kinds
6897 of problems we saw in this exercise are likely to be severe only when
6898 you use a relatively unusual radix like 3.
6899
6900 @node Modes Answer 2, Modes Answer 3, Modes Answer 1, Answers to Exercises
6901 @subsection Modes Tutorial Exercise 2
6902
6903 If the radix is 15 or higher, we can't use the letter @samp{e} to mark
6904 the exponent because @samp{e} is interpreted as a digit. When Calc
6905 needs to display scientific notation in a high radix, it writes
6906 @samp{16#F.E8F*16.^15}. You can enter a number like this as an
6907 algebraic entry. Also, pressing @kbd{e} without any digits before it
6908 normally types @kbd{1e}, but in a high radix it types @kbd{16.^} and
6909 puts you in algebraic entry: @kbd{16#f.e8f @key{RET} e 15 @key{RET} *} is another
6910 way to enter this number.
6911
6912 The reason Calc puts a decimal point in the @samp{16.^} is to prevent
6913 huge integers from being generated if the exponent is large (consider
6914 @samp{16#1.23*16^1000}, where we compute @samp{16^1000} as a giant
6915 exact integer and then throw away most of the digits when we multiply
6916 it by the floating-point @samp{16#1.23}). While this wouldn't normally
6917 matter for display purposes, it could give you a nasty surprise if you
6918 copied that number into a file and later moved it back into Calc.
6919
6920 @node Modes Answer 3, Modes Answer 4, Modes Answer 2, Answers to Exercises
6921 @subsection Modes Tutorial Exercise 3
6922
6923 @noindent
6924 The answer he got was @expr{0.5000000000006399}.
6925
6926 The problem is not that the square operation is inexact, but that the
6927 sine of 45 that was already on the stack was accurate to only 12 places.
6928 Arbitrary-precision calculations still only give answers as good as
6929 their inputs.
6930
6931 The real problem is that there is no 12-digit number which, when
6932 squared, comes out to 0.5 exactly. The @kbd{f [} and @kbd{f ]}
6933 commands decrease or increase a number by one unit in the last
6934 place (according to the current precision). They are useful for
6935 determining facts like this.
6936
6937 @smallexample
6938 @group
6939 1: 0.707106781187 1: 0.500000000001
6940 . .
6941
6942 45 S 2 ^
6943
6944 @end group
6945 @end smallexample
6946 @noindent
6947 @smallexample
6948 @group
6949 1: 0.707106781187 1: 0.707106781186 1: 0.499999999999
6950 . . .
6951
6952 U @key{DEL} f [ 2 ^
6953 @end group
6954 @end smallexample
6955
6956 A high-precision calculation must be carried out in high precision
6957 all the way. The only number in the original problem which was known
6958 exactly was the quantity 45 degrees, so the precision must be raised
6959 before anything is done after the number 45 has been entered in order
6960 for the higher precision to be meaningful.
6961
6962 @node Modes Answer 4, Arithmetic Answer 1, Modes Answer 3, Answers to Exercises
6963 @subsection Modes Tutorial Exercise 4
6964
6965 @noindent
6966 Many calculations involve real-world quantities, like the width and
6967 height of a piece of wood or the volume of a jar. Such quantities
6968 can't be measured exactly anyway, and if the data that is input to
6969 a calculation is inexact, doing exact arithmetic on it is a waste
6970 of time.
6971
6972 Fractions become unwieldy after too many calculations have been
6973 done with them. For example, the sum of the reciprocals of the
6974 integers from 1 to 10 is 7381:2520. The sum from 1 to 30 is
6975 9304682830147:2329089562800. After a point it will take a long
6976 time to add even one more term to this sum, but a floating-point
6977 calculation of the sum will not have this problem.
6978
6979 Also, rational numbers cannot express the results of all calculations.
6980 There is no fractional form for the square root of two, so if you type
6981 @w{@kbd{2 Q}}, Calc has no choice but to give you a floating-point answer.
6982
6983 @node Arithmetic Answer 1, Arithmetic Answer 2, Modes Answer 4, Answers to Exercises
6984 @subsection Arithmetic Tutorial Exercise 1
6985
6986 @noindent
6987 Dividing two integers that are larger than the current precision may
6988 give a floating-point result that is inaccurate even when rounded
6989 down to an integer. Consider @expr{123456789 / 2} when the current
6990 precision is 6 digits. The true answer is @expr{61728394.5}, but
6991 with a precision of 6 this will be rounded to
6992 @texline @math{12345700.0/2.0 = 61728500.0}.
6993 @infoline @expr{12345700.@: / 2.@: = 61728500.}.
6994 The result, when converted to an integer, will be off by 106.
6995
6996 Here are two solutions: Raise the precision enough that the
6997 floating-point round-off error is strictly to the right of the
6998 decimal point. Or, convert to Fraction mode so that @expr{123456789 / 2}
6999 produces the exact fraction @expr{123456789:2}, which can be rounded
7000 down by the @kbd{F} command without ever switching to floating-point
7001 format.
7002
7003 @node Arithmetic Answer 2, Vector Answer 1, Arithmetic Answer 1, Answers to Exercises
7004 @subsection Arithmetic Tutorial Exercise 2
7005
7006 @noindent
7007 @kbd{27 @key{RET} 9 B} could give the exact result @expr{3:2}, but it
7008 does a floating-point calculation instead and produces @expr{1.5}.
7009
7010 Calc will find an exact result for a logarithm if the result is an integer
7011 or (when in Fraction mode) the reciprocal of an integer. But there is
7012 no efficient way to search the space of all possible rational numbers
7013 for an exact answer, so Calc doesn't try.
7014
7015 @node Vector Answer 1, Vector Answer 2, Arithmetic Answer 2, Answers to Exercises
7016 @subsection Vector Tutorial Exercise 1
7017
7018 @noindent
7019 Duplicate the vector, compute its length, then divide the vector
7020 by its length: @kbd{@key{RET} A /}.
7021
7022 @smallexample
7023 @group
7024 1: [1, 2, 3] 2: [1, 2, 3] 1: [0.27, 0.53, 0.80] 1: 1.
7025 . 1: 3.74165738677 . .
7026 .
7027
7028 r 1 @key{RET} A / A
7029 @end group
7030 @end smallexample
7031
7032 The final @kbd{A} command shows that the normalized vector does
7033 indeed have unit length.
7034
7035 @node Vector Answer 2, Matrix Answer 1, Vector Answer 1, Answers to Exercises
7036 @subsection Vector Tutorial Exercise 2
7037
7038 @noindent
7039 The average position is equal to the sum of the products of the
7040 positions times their corresponding probabilities. This is the
7041 definition of the dot product operation. So all you need to do
7042 is to put the two vectors on the stack and press @kbd{*}.
7043
7044 @node Matrix Answer 1, Matrix Answer 2, Vector Answer 2, Answers to Exercises
7045 @subsection Matrix Tutorial Exercise 1
7046
7047 @noindent
7048 The trick is to multiply by a vector of ones. Use @kbd{r 4 [1 1 1] *} to
7049 get the row sum. Similarly, use @kbd{[1 1] r 4 *} to get the column sum.
7050
7051 @node Matrix Answer 2, Matrix Answer 3, Matrix Answer 1, Answers to Exercises
7052 @subsection Matrix Tutorial Exercise 2
7053
7054 @ifinfo
7055 @example
7056 @group
7057 x + a y = 6
7058 x + b y = 10
7059 @end group
7060 @end example
7061 @end ifinfo
7062 @tex
7063 \turnoffactive
7064 \beforedisplay
7065 $$ \eqalign{ x &+ a y = 6 \cr
7066 x &+ b y = 10}
7067 $$
7068 \afterdisplay
7069 @end tex
7070
7071 Just enter the righthand side vector, then divide by the lefthand side
7072 matrix as usual.
7073
7074 @smallexample
7075 @group
7076 1: [6, 10] 2: [6, 10] 1: [6 - 4 a / (b - a), 4 / (b - a) ]
7077 . 1: [ [ 1, a ] .
7078 [ 1, b ] ]
7079 .
7080
7081 ' [6 10] @key{RET} ' [1 a; 1 b] @key{RET} /
7082 @end group
7083 @end smallexample
7084
7085 This can be made more readable using @kbd{d B} to enable Big display
7086 mode:
7087
7088 @smallexample
7089 @group
7090 4 a 4
7091 1: [6 - -----, -----]
7092 b - a b - a
7093 @end group
7094 @end smallexample
7095
7096 Type @kbd{d N} to return to Normal display mode afterwards.
7097
7098 @node Matrix Answer 3, List Answer 1, Matrix Answer 2, Answers to Exercises
7099 @subsection Matrix Tutorial Exercise 3
7100
7101 @noindent
7102 To solve
7103 @texline @math{A^T A \, X = A^T B},
7104 @infoline @expr{trn(A) * A * X = trn(A) * B},
7105 first we compute
7106 @texline @math{A' = A^T A}
7107 @infoline @expr{A2 = trn(A) * A}
7108 and
7109 @texline @math{B' = A^T B};
7110 @infoline @expr{B2 = trn(A) * B};
7111 now, we have a system
7112 @texline @math{A' X = B'}
7113 @infoline @expr{A2 * X = B2}
7114 which we can solve using Calc's @samp{/} command.
7115
7116 @ifinfo
7117 @example
7118 @group
7119 a + 2b + 3c = 6
7120 4a + 5b + 6c = 2
7121 7a + 6b = 3
7122 2a + 4b + 6c = 11
7123 @end group
7124 @end example
7125 @end ifinfo
7126 @tex
7127 \turnoffactive
7128 \beforedisplayh
7129 $$ \openup1\jot \tabskip=0pt plus1fil
7130 \halign to\displaywidth{\tabskip=0pt
7131 $\hfil#$&$\hfil{}#{}$&
7132 $\hfil#$&$\hfil{}#{}$&
7133 $\hfil#$&${}#\hfil$\tabskip=0pt plus1fil\cr
7134 a&+&2b&+&3c&=6 \cr
7135 4a&+&5b&+&6c&=2 \cr
7136 7a&+&6b& & &=3 \cr
7137 2a&+&4b&+&6c&=11 \cr}
7138 $$
7139 \afterdisplayh
7140 @end tex
7141
7142 The first step is to enter the coefficient matrix. We'll store it in
7143 quick variable number 7 for later reference. Next, we compute the
7144 @texline @math{B'}
7145 @infoline @expr{B2}
7146 vector.
7147
7148 @smallexample
7149 @group
7150 1: [ [ 1, 2, 3 ] 2: [ [ 1, 4, 7, 2 ] 1: [57, 84, 96]
7151 [ 4, 5, 6 ] [ 2, 5, 6, 4 ] .
7152 [ 7, 6, 0 ] [ 3, 6, 0, 6 ] ]
7153 [ 2, 4, 6 ] ] 1: [6, 2, 3, 11]
7154 . .
7155
7156 ' [1 2 3; 4 5 6; 7 6 0; 2 4 6] @key{RET} s 7 v t [6 2 3 11] *
7157 @end group
7158 @end smallexample
7159
7160 @noindent
7161 Now we compute the matrix
7162 @texline @math{A'}
7163 @infoline @expr{A2}
7164 and divide.
7165
7166 @smallexample
7167 @group
7168 2: [57, 84, 96] 1: [-11.64, 14.08, -3.64]
7169 1: [ [ 70, 72, 39 ] .
7170 [ 72, 81, 60 ]
7171 [ 39, 60, 81 ] ]
7172 .
7173
7174 r 7 v t r 7 * /
7175 @end group
7176 @end smallexample
7177
7178 @noindent
7179 (The actual computed answer will be slightly inexact due to
7180 round-off error.)
7181
7182 Notice that the answers are similar to those for the
7183 @texline @math{3\times3}
7184 @infoline 3x3
7185 system solved in the text. That's because the fourth equation that was
7186 added to the system is almost identical to the first one multiplied
7187 by two. (If it were identical, we would have gotten the exact same
7188 answer since the
7189 @texline @math{4\times3}
7190 @infoline 4x3
7191 system would be equivalent to the original
7192 @texline @math{3\times3}
7193 @infoline 3x3
7194 system.)
7195
7196 Since the first and fourth equations aren't quite equivalent, they
7197 can't both be satisfied at once. Let's plug our answers back into
7198 the original system of equations to see how well they match.
7199
7200 @smallexample
7201 @group
7202 2: [-11.64, 14.08, -3.64] 1: [5.6, 2., 3., 11.2]
7203 1: [ [ 1, 2, 3 ] .
7204 [ 4, 5, 6 ]
7205 [ 7, 6, 0 ]
7206 [ 2, 4, 6 ] ]
7207 .
7208
7209 r 7 @key{TAB} *
7210 @end group
7211 @end smallexample
7212
7213 @noindent
7214 This is reasonably close to our original @expr{B} vector,
7215 @expr{[6, 2, 3, 11]}.
7216
7217 @node List Answer 1, List Answer 2, Matrix Answer 3, Answers to Exercises
7218 @subsection List Tutorial Exercise 1
7219
7220 @noindent
7221 We can use @kbd{v x} to build a vector of integers. This needs to be
7222 adjusted to get the range of integers we desire. Mapping @samp{-}
7223 across the vector will accomplish this, although it turns out the
7224 plain @samp{-} key will work just as well.
7225
7226 @smallexample
7227 @group
7228 2: 2 2: 2
7229 1: [1, 2, 3, 4, 5, 6, 7, 8, 9] 1: [-4, -3, -2, -1, 0, 1, 2, 3, 4]
7230 . .
7231
7232 2 v x 9 @key{RET} 5 V M - or 5 -
7233 @end group
7234 @end smallexample
7235
7236 @noindent
7237 Now we use @kbd{V M ^} to map the exponentiation operator across the
7238 vector.
7239
7240 @smallexample
7241 @group
7242 1: [0.0625, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16]
7243 .
7244
7245 V M ^
7246 @end group
7247 @end smallexample
7248
7249 @node List Answer 2, List Answer 3, List Answer 1, Answers to Exercises
7250 @subsection List Tutorial Exercise 2
7251
7252 @noindent
7253 Given @expr{x} and @expr{y} vectors in quick variables 1 and 2 as before,
7254 the first job is to form the matrix that describes the problem.
7255
7256 @ifinfo
7257 @example
7258 m*x + b*1 = y
7259 @end example
7260 @end ifinfo
7261 @tex
7262 \turnoffactive
7263 \beforedisplay
7264 $$ m \times x + b \times 1 = y $$
7265 \afterdisplay
7266 @end tex
7267
7268 Thus we want a
7269 @texline @math{19\times2}
7270 @infoline 19x2
7271 matrix with our @expr{x} vector as one column and
7272 ones as the other column. So, first we build the column of ones, then
7273 we combine the two columns to form our @expr{A} matrix.
7274
7275 @smallexample
7276 @group
7277 2: [1.34, 1.41, 1.49, ... ] 1: [ [ 1.34, 1 ]
7278 1: [1, 1, 1, ...] [ 1.41, 1 ]
7279 . [ 1.49, 1 ]
7280 @dots{}
7281
7282 r 1 1 v b 19 @key{RET} M-2 v p v t s 3
7283 @end group
7284 @end smallexample
7285
7286 @noindent
7287 Now we compute
7288 @texline @math{A^T y}
7289 @infoline @expr{trn(A) * y}
7290 and
7291 @texline @math{A^T A}
7292 @infoline @expr{trn(A) * A}
7293 and divide.
7294
7295 @smallexample
7296 @group
7297 1: [33.36554, 13.613] 2: [33.36554, 13.613]
7298 . 1: [ [ 98.0003, 41.63 ]
7299 [ 41.63, 19 ] ]
7300 .
7301
7302 v t r 2 * r 3 v t r 3 *
7303 @end group
7304 @end smallexample
7305
7306 @noindent
7307 (Hey, those numbers look familiar!)
7308
7309 @smallexample
7310 @group
7311 1: [0.52141679, -0.425978]
7312 .
7313
7314 /
7315 @end group
7316 @end smallexample
7317
7318 Since we were solving equations of the form
7319 @texline @math{m \times x + b \times 1 = y},
7320 @infoline @expr{m*x + b*1 = y},
7321 these numbers should be @expr{m} and @expr{b}, respectively. Sure
7322 enough, they agree exactly with the result computed using @kbd{V M} and
7323 @kbd{V R}!
7324
7325 The moral of this story: @kbd{V M} and @kbd{V R} will probably solve
7326 your problem, but there is often an easier way using the higher-level
7327 arithmetic functions!
7328
7329 @c [fix-ref Curve Fitting]
7330 In fact, there is a built-in @kbd{a F} command that does least-squares
7331 fits. @xref{Curve Fitting}.
7332
7333 @node List Answer 3, List Answer 4, List Answer 2, Answers to Exercises
7334 @subsection List Tutorial Exercise 3
7335
7336 @noindent
7337 Move to one end of the list and press @kbd{C-@@} (or @kbd{C-@key{SPC}} or
7338 whatever) to set the mark, then move to the other end of the list
7339 and type @w{@kbd{M-# g}}.
7340
7341 @smallexample
7342 @group
7343 1: [2.3, 6, 22, 15.1, 7, 15, 14, 7.5, 2.5]
7344 .
7345 @end group
7346 @end smallexample
7347
7348 To make things interesting, let's assume we don't know at a glance
7349 how many numbers are in this list. Then we could type:
7350
7351 @smallexample
7352 @group
7353 2: [2.3, 6, 22, ... ] 2: [2.3, 6, 22, ... ]
7354 1: [2.3, 6, 22, ... ] 1: 126356422.5
7355 . .
7356
7357 @key{RET} V R *
7358
7359 @end group
7360 @end smallexample
7361 @noindent
7362 @smallexample
7363 @group
7364 2: 126356422.5 2: 126356422.5 1: 7.94652913734
7365 1: [2.3, 6, 22, ... ] 1: 9 .
7366 . .
7367
7368 @key{TAB} v l I ^
7369 @end group
7370 @end smallexample
7371
7372 @noindent
7373 (The @kbd{I ^} command computes the @var{n}th root of a number.
7374 You could also type @kbd{& ^} to take the reciprocal of 9 and
7375 then raise the number to that power.)
7376
7377 @node List Answer 4, List Answer 5, List Answer 3, Answers to Exercises
7378 @subsection List Tutorial Exercise 4
7379
7380 @noindent
7381 A number @expr{j} is a divisor of @expr{n} if
7382 @texline @math{n \mathbin{\hbox{\code{\%}}} j = 0}.
7383 @infoline @samp{n % j = 0}.
7384 The first step is to get a vector that identifies the divisors.
7385
7386 @smallexample
7387 @group
7388 2: 30 2: [0, 0, 0, 2, ...] 1: [1, 1, 1, 0, ...]
7389 1: [1, 2, 3, 4, ...] 1: 0 .
7390 . .
7391
7392 30 @key{RET} v x 30 @key{RET} s 1 V M % 0 V M a = s 2
7393 @end group
7394 @end smallexample
7395
7396 @noindent
7397 This vector has 1's marking divisors of 30 and 0's marking non-divisors.
7398
7399 The zeroth divisor function is just the total number of divisors.
7400 The first divisor function is the sum of the divisors.
7401
7402 @smallexample
7403 @group
7404 1: 8 3: 8 2: 8 2: 8
7405 2: [1, 2, 3, 4, ...] 1: [1, 2, 3, 0, ...] 1: 72
7406 1: [1, 1, 1, 0, ...] . .
7407 .
7408
7409 V R + r 1 r 2 V M * V R +
7410 @end group
7411 @end smallexample
7412
7413 @noindent
7414 Once again, the last two steps just compute a dot product for which
7415 a simple @kbd{*} would have worked equally well.
7416
7417 @node List Answer 5, List Answer 6, List Answer 4, Answers to Exercises
7418 @subsection List Tutorial Exercise 5
7419
7420 @noindent
7421 The obvious first step is to obtain the list of factors with @kbd{k f}.
7422 This list will always be in sorted order, so if there are duplicates
7423 they will be right next to each other. A suitable method is to compare
7424 the list with a copy of itself shifted over by one.
7425
7426 @smallexample
7427 @group
7428 1: [3, 7, 7, 7, 19] 2: [3, 7, 7, 7, 19] 2: [3, 7, 7, 7, 19, 0]
7429 . 1: [3, 7, 7, 7, 19, 0] 1: [0, 3, 7, 7, 7, 19]
7430 . .
7431
7432 19551 k f @key{RET} 0 | @key{TAB} 0 @key{TAB} |
7433
7434 @end group
7435 @end smallexample
7436 @noindent
7437 @smallexample
7438 @group
7439 1: [0, 0, 1, 1, 0, 0] 1: 2 1: 0
7440 . . .
7441
7442 V M a = V R + 0 a =
7443 @end group
7444 @end smallexample
7445
7446 @noindent
7447 Note that we have to arrange for both vectors to have the same length
7448 so that the mapping operation works; no prime factor will ever be
7449 zero, so adding zeros on the left and right is safe. From then on
7450 the job is pretty straightforward.
7451
7452 Incidentally, Calc provides the
7453 @texline @dfn{M@"obius} @math{\mu}
7454 @infoline @dfn{Moebius mu}
7455 function which is zero if and only if its argument is square-free. It
7456 would be a much more convenient way to do the above test in practice.
7457
7458 @node List Answer 6, List Answer 7, List Answer 5, Answers to Exercises
7459 @subsection List Tutorial Exercise 6
7460
7461 @noindent
7462 First use @kbd{v x 6 @key{RET}} to get a list of integers, then @kbd{V M v x}
7463 to get a list of lists of integers!
7464
7465 @node List Answer 7, List Answer 8, List Answer 6, Answers to Exercises
7466 @subsection List Tutorial Exercise 7
7467
7468 @noindent
7469 Here's one solution. First, compute the triangular list from the previous
7470 exercise and type @kbd{1 -} to subtract one from all the elements.
7471
7472 @smallexample
7473 @group
7474 1: [ [0],
7475 [0, 1],
7476 [0, 1, 2],
7477 @dots{}
7478
7479 1 -
7480 @end group
7481 @end smallexample
7482
7483 The numbers down the lefthand edge of the list we desire are called
7484 the ``triangular numbers'' (now you know why!). The @expr{n}th
7485 triangular number is the sum of the integers from 1 to @expr{n}, and
7486 can be computed directly by the formula
7487 @texline @math{n (n+1) \over 2}.
7488 @infoline @expr{n * (n+1) / 2}.
7489
7490 @smallexample
7491 @group
7492 2: [ [0], [0, 1], ... ] 2: [ [0], [0, 1], ... ]
7493 1: [0, 1, 2, 3, 4, 5] 1: [0, 1, 3, 6, 10, 15]
7494 . .
7495
7496 v x 6 @key{RET} 1 - V M ' $ ($+1)/2 @key{RET}
7497 @end group
7498 @end smallexample
7499
7500 @noindent
7501 Adding this list to the above list of lists produces the desired
7502 result:
7503
7504 @smallexample
7505 @group
7506 1: [ [0],
7507 [1, 2],
7508 [3, 4, 5],
7509 [6, 7, 8, 9],
7510 [10, 11, 12, 13, 14],
7511 [15, 16, 17, 18, 19, 20] ]
7512 .
7513
7514 V M +
7515 @end group
7516 @end smallexample
7517
7518 If we did not know the formula for triangular numbers, we could have
7519 computed them using a @kbd{V U +} command. We could also have
7520 gotten them the hard way by mapping a reduction across the original
7521 triangular list.
7522
7523 @smallexample
7524 @group
7525 2: [ [0], [0, 1], ... ] 2: [ [0], [0, 1], ... ]
7526 1: [ [0], [0, 1], ... ] 1: [0, 1, 3, 6, 10, 15]
7527 . .
7528
7529 @key{RET} V M V R +
7530 @end group
7531 @end smallexample
7532
7533 @noindent
7534 (This means ``map a @kbd{V R +} command across the vector,'' and
7535 since each element of the main vector is itself a small vector,
7536 @kbd{V R +} computes the sum of its elements.)
7537
7538 @node List Answer 8, List Answer 9, List Answer 7, Answers to Exercises
7539 @subsection List Tutorial Exercise 8
7540
7541 @noindent
7542 The first step is to build a list of values of @expr{x}.
7543
7544 @smallexample
7545 @group
7546 1: [1, 2, 3, ..., 21] 1: [0, 1, 2, ..., 20] 1: [0, 0.25, 0.5, ..., 5]
7547 . . .
7548
7549 v x 21 @key{RET} 1 - 4 / s 1
7550 @end group
7551 @end smallexample
7552
7553 Next, we compute the Bessel function values.
7554
7555 @smallexample
7556 @group
7557 1: [0., 0.124, 0.242, ..., -0.328]
7558 .
7559
7560 V M ' besJ(1,$) @key{RET}
7561 @end group
7562 @end smallexample
7563
7564 @noindent
7565 (Another way to do this would be @kbd{1 @key{TAB} V M f j}.)
7566
7567 A way to isolate the maximum value is to compute the maximum using
7568 @kbd{V R X}, then compare all the Bessel values with that maximum.
7569
7570 @smallexample
7571 @group
7572 2: [0., 0.124, 0.242, ... ] 1: [0, 0, 0, ... ] 2: [0, 0, 0, ... ]
7573 1: 0.5801562 . 1: 1
7574 . .
7575
7576 @key{RET} V R X V M a = @key{RET} V R + @key{DEL}
7577 @end group
7578 @end smallexample
7579
7580 @noindent
7581 It's a good idea to verify, as in the last step above, that only
7582 one value is equal to the maximum. (After all, a plot of
7583 @texline @math{\sin x}
7584 @infoline @expr{sin(x)}
7585 might have many points all equal to the maximum value, 1.)
7586
7587 The vector we have now has a single 1 in the position that indicates
7588 the maximum value of @expr{x}. Now it is a simple matter to convert
7589 this back into the corresponding value itself.
7590
7591 @smallexample
7592 @group
7593 2: [0, 0, 0, ... ] 1: [0, 0., 0., ... ] 1: 1.75
7594 1: [0, 0.25, 0.5, ... ] . .
7595 .
7596
7597 r 1 V M * V R +
7598 @end group
7599 @end smallexample
7600
7601 If @kbd{a =} had produced more than one @expr{1} value, this method
7602 would have given the sum of all maximum @expr{x} values; not very
7603 useful! In this case we could have used @kbd{v m} (@code{calc-mask-vector})
7604 instead. This command deletes all elements of a ``data'' vector that
7605 correspond to zeros in a ``mask'' vector, leaving us with, in this
7606 example, a vector of maximum @expr{x} values.
7607
7608 The built-in @kbd{a X} command maximizes a function using more
7609 efficient methods. Just for illustration, let's use @kbd{a X}
7610 to maximize @samp{besJ(1,x)} over this same interval.
7611
7612 @smallexample
7613 @group
7614 2: besJ(1, x) 1: [1.84115, 0.581865]
7615 1: [0 .. 5] .
7616 .
7617
7618 ' besJ(1,x), [0..5] @key{RET} a X x @key{RET}
7619 @end group
7620 @end smallexample
7621
7622 @noindent
7623 The output from @kbd{a X} is a vector containing the value of @expr{x}
7624 that maximizes the function, and the function's value at that maximum.
7625 As you can see, our simple search got quite close to the right answer.
7626
7627 @node List Answer 9, List Answer 10, List Answer 8, Answers to Exercises
7628 @subsection List Tutorial Exercise 9
7629
7630 @noindent
7631 Step one is to convert our integer into vector notation.
7632
7633 @smallexample
7634 @group
7635 1: 25129925999 3: 25129925999
7636 . 2: 10
7637 1: [11, 10, 9, ..., 1, 0]
7638 .
7639
7640 25129925999 @key{RET} 10 @key{RET} 12 @key{RET} v x 12 @key{RET} -
7641
7642 @end group
7643 @end smallexample
7644 @noindent
7645 @smallexample
7646 @group
7647 1: 25129925999 1: [0, 2, 25, 251, 2512, ... ]
7648 2: [100000000000, ... ] .
7649 .
7650
7651 V M ^ s 1 V M \
7652 @end group
7653 @end smallexample
7654
7655 @noindent
7656 (Recall, the @kbd{\} command computes an integer quotient.)
7657
7658 @smallexample
7659 @group
7660 1: [0, 2, 5, 1, 2, 9, 9, 2, 5, 9, 9, 9]
7661 .
7662
7663 10 V M % s 2
7664 @end group
7665 @end smallexample
7666
7667 Next we must increment this number. This involves adding one to
7668 the last digit, plus handling carries. There is a carry to the
7669 left out of a digit if that digit is a nine and all the digits to
7670 the right of it are nines.
7671
7672 @smallexample
7673 @group
7674 1: [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1] 1: [1, 1, 1, 0, 0, 1, ... ]
7675 . .
7676
7677 9 V M a = v v
7678
7679 @end group
7680 @end smallexample
7681 @noindent
7682 @smallexample
7683 @group
7684 1: [1, 1, 1, 0, 0, 0, ... ] 1: [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
7685 . .
7686
7687 V U * v v 1 |
7688 @end group
7689 @end smallexample
7690
7691 @noindent
7692 Accumulating @kbd{*} across a vector of ones and zeros will preserve
7693 only the initial run of ones. These are the carries into all digits
7694 except the rightmost digit. Concatenating a one on the right takes
7695 care of aligning the carries properly, and also adding one to the
7696 rightmost digit.
7697
7698 @smallexample
7699 @group
7700 2: [0, 0, 0, 0, ... ] 1: [0, 0, 2, 5, 1, 2, 9, 9, 2, 6, 0, 0, 0]
7701 1: [0, 0, 2, 5, ... ] .
7702 .
7703
7704 0 r 2 | V M + 10 V M %
7705 @end group
7706 @end smallexample
7707
7708 @noindent
7709 Here we have concatenated 0 to the @emph{left} of the original number;
7710 this takes care of shifting the carries by one with respect to the
7711 digits that generated them.
7712
7713 Finally, we must convert this list back into an integer.
7714
7715 @smallexample
7716 @group
7717 3: [0, 0, 2, 5, ... ] 2: [0, 0, 2, 5, ... ]
7718 2: 1000000000000 1: [1000000000000, 100000000000, ... ]
7719 1: [100000000000, ... ] .
7720 .
7721
7722 10 @key{RET} 12 ^ r 1 |
7723
7724 @end group
7725 @end smallexample
7726 @noindent
7727 @smallexample
7728 @group
7729 1: [0, 0, 20000000000, 5000000000, ... ] 1: 25129926000
7730 . .
7731
7732 V M * V R +
7733 @end group
7734 @end smallexample
7735
7736 @noindent
7737 Another way to do this final step would be to reduce the formula
7738 @w{@samp{10 $$ + $}} across the vector of digits.
7739
7740 @smallexample
7741 @group
7742 1: [0, 0, 2, 5, ... ] 1: 25129926000
7743 . .
7744
7745 V R ' 10 $$ + $ @key{RET}
7746 @end group
7747 @end smallexample
7748
7749 @node List Answer 10, List Answer 11, List Answer 9, Answers to Exercises
7750 @subsection List Tutorial Exercise 10
7751
7752 @noindent
7753 For the list @expr{[a, b, c, d]}, the result is @expr{((a = b) = c) = d},
7754 which will compare @expr{a} and @expr{b} to produce a 1 or 0, which is
7755 then compared with @expr{c} to produce another 1 or 0, which is then
7756 compared with @expr{d}. This is not at all what Joe wanted.
7757
7758 Here's a more correct method:
7759
7760 @smallexample
7761 @group
7762 1: [7, 7, 7, 8, 7] 2: [7, 7, 7, 8, 7]
7763 . 1: 7
7764 .
7765
7766 ' [7,7,7,8,7] @key{RET} @key{RET} v r 1 @key{RET}
7767
7768 @end group
7769 @end smallexample
7770 @noindent
7771 @smallexample
7772 @group
7773 1: [1, 1, 1, 0, 1] 1: 0
7774 . .
7775
7776 V M a = V R *
7777 @end group
7778 @end smallexample
7779
7780 @node List Answer 11, List Answer 12, List Answer 10, Answers to Exercises
7781 @subsection List Tutorial Exercise 11
7782
7783 @noindent
7784 The circle of unit radius consists of those points @expr{(x,y)} for which
7785 @expr{x^2 + y^2 < 1}. We start by generating a vector of @expr{x^2}
7786 and a vector of @expr{y^2}.
7787
7788 We can make this go a bit faster by using the @kbd{v .} and @kbd{t .}
7789 commands.
7790
7791 @smallexample
7792 @group
7793 2: [2., 2., ..., 2.] 2: [2., 2., ..., 2.]
7794 1: [2., 2., ..., 2.] 1: [1.16, 1.98, ..., 0.81]
7795 . .
7796
7797 v . t . 2. v b 100 @key{RET} @key{RET} V M k r
7798
7799 @end group
7800 @end smallexample
7801 @noindent
7802 @smallexample
7803 @group
7804 2: [2., 2., ..., 2.] 1: [0.026, 0.96, ..., 0.036]
7805 1: [0.026, 0.96, ..., 0.036] 2: [0.53, 0.81, ..., 0.094]
7806 . .
7807
7808 1 - 2 V M ^ @key{TAB} V M k r 1 - 2 V M ^
7809 @end group
7810 @end smallexample
7811
7812 Now we sum the @expr{x^2} and @expr{y^2} values, compare with 1 to
7813 get a vector of 1/0 truth values, then sum the truth values.
7814
7815 @smallexample
7816 @group
7817 1: [0.56, 1.78, ..., 0.13] 1: [1, 0, ..., 1] 1: 84
7818 . . .
7819
7820 + 1 V M a < V R +
7821 @end group
7822 @end smallexample
7823
7824 @noindent
7825 The ratio @expr{84/100} should approximate the ratio @cpiover{4}.
7826
7827 @smallexample
7828 @group
7829 1: 0.84 1: 3.36 2: 3.36 1: 1.0695
7830 . . 1: 3.14159 .
7831
7832 100 / 4 * P /
7833 @end group
7834 @end smallexample
7835
7836 @noindent
7837 Our estimate, 3.36, is off by about 7%. We could get a better estimate
7838 by taking more points (say, 1000), but it's clear that this method is
7839 not very efficient!
7840
7841 (Naturally, since this example uses random numbers your own answer
7842 will be slightly different from the one shown here!)
7843
7844 If you typed @kbd{v .} and @kbd{t .} before, type them again to
7845 return to full-sized display of vectors.
7846
7847 @node List Answer 12, List Answer 13, List Answer 11, Answers to Exercises
7848 @subsection List Tutorial Exercise 12
7849
7850 @noindent
7851 This problem can be made a lot easier by taking advantage of some
7852 symmetries. First of all, after some thought it's clear that the
7853 @expr{y} axis can be ignored altogether. Just pick a random @expr{x}
7854 component for one end of the match, pick a random direction
7855 @texline @math{\theta},
7856 @infoline @expr{theta},
7857 and see if @expr{x} and
7858 @texline @math{x + \cos \theta}
7859 @infoline @expr{x + cos(theta)}
7860 (which is the @expr{x} coordinate of the other endpoint) cross a line.
7861 The lines are at integer coordinates, so this happens when the two
7862 numbers surround an integer.
7863
7864 Since the two endpoints are equivalent, we may as well choose the leftmost
7865 of the two endpoints as @expr{x}. Then @expr{theta} is an angle pointing
7866 to the right, in the range -90 to 90 degrees. (We could use radians, but
7867 it would feel like cheating to refer to @cpiover{2} radians while trying
7868 to estimate @cpi{}!)
7869
7870 In fact, since the field of lines is infinite we can choose the
7871 coordinates 0 and 1 for the lines on either side of the leftmost
7872 endpoint. The rightmost endpoint will be between 0 and 1 if the
7873 match does not cross a line, or between 1 and 2 if it does. So:
7874 Pick random @expr{x} and
7875 @texline @math{\theta},
7876 @infoline @expr{theta},
7877 compute
7878 @texline @math{x + \cos \theta},
7879 @infoline @expr{x + cos(theta)},
7880 and count how many of the results are greater than one. Simple!
7881
7882 We can make this go a bit faster by using the @kbd{v .} and @kbd{t .}
7883 commands.
7884
7885 @smallexample
7886 @group
7887 1: [0.52, 0.71, ..., 0.72] 2: [0.52, 0.71, ..., 0.72]
7888 . 1: [78.4, 64.5, ..., -42.9]
7889 .
7890
7891 v . t . 1. v b 100 @key{RET} V M k r 180. v b 100 @key{RET} V M k r 90 -
7892 @end group
7893 @end smallexample
7894
7895 @noindent
7896 (The next step may be slow, depending on the speed of your computer.)
7897
7898 @smallexample
7899 @group
7900 2: [0.52, 0.71, ..., 0.72] 1: [0.72, 1.14, ..., 1.45]
7901 1: [0.20, 0.43, ..., 0.73] .
7902 .
7903
7904 m d V M C +
7905
7906 @end group
7907 @end smallexample
7908 @noindent
7909 @smallexample
7910 @group
7911 1: [0, 1, ..., 1] 1: 0.64 1: 3.125
7912 . . .
7913
7914 1 V M a > V R + 100 / 2 @key{TAB} /
7915 @end group
7916 @end smallexample
7917
7918 Let's try the third method, too. We'll use random integers up to
7919 one million. The @kbd{k r} command with an integer argument picks
7920 a random integer.
7921
7922 @smallexample
7923 @group
7924 2: [1000000, 1000000, ..., 1000000] 2: [78489, 527587, ..., 814975]
7925 1: [1000000, 1000000, ..., 1000000] 1: [324014, 358783, ..., 955450]
7926 . .
7927
7928 1000000 v b 100 @key{RET} @key{RET} V M k r @key{TAB} V M k r
7929
7930 @end group
7931 @end smallexample
7932 @noindent
7933 @smallexample
7934 @group
7935 1: [1, 1, ..., 25] 1: [1, 1, ..., 0] 1: 0.56
7936 . . .
7937
7938 V M k g 1 V M a = V R + 100 /
7939
7940 @end group
7941 @end smallexample
7942 @noindent
7943 @smallexample
7944 @group
7945 1: 10.714 1: 3.273
7946 . .
7947
7948 6 @key{TAB} / Q
7949 @end group
7950 @end smallexample
7951
7952 For a proof of this property of the GCD function, see section 4.5.2,
7953 exercise 10, of Knuth's @emph{Art of Computer Programming}, volume II.
7954
7955 If you typed @kbd{v .} and @kbd{t .} before, type them again to
7956 return to full-sized display of vectors.
7957
7958 @node List Answer 13, List Answer 14, List Answer 12, Answers to Exercises
7959 @subsection List Tutorial Exercise 13
7960
7961 @noindent
7962 First, we put the string on the stack as a vector of ASCII codes.
7963
7964 @smallexample
7965 @group
7966 1: [84, 101, 115, ..., 51]
7967 .
7968
7969 "Testing, 1, 2, 3 @key{RET}
7970 @end group
7971 @end smallexample
7972
7973 @noindent
7974 Note that the @kbd{"} key, like @kbd{$}, initiates algebraic entry so
7975 there was no need to type an apostrophe. Also, Calc didn't mind that
7976 we omitted the closing @kbd{"}. (The same goes for all closing delimiters
7977 like @kbd{)} and @kbd{]} at the end of a formula.
7978
7979 We'll show two different approaches here. In the first, we note that
7980 if the input vector is @expr{[a, b, c, d]}, then the hash code is
7981 @expr{3 (3 (3a + b) + c) + d = 27a + 9b + 3c + d}. In other words,
7982 it's a sum of descending powers of three times the ASCII codes.
7983
7984 @smallexample
7985 @group
7986 2: [84, 101, 115, ..., 51] 2: [84, 101, 115, ..., 51]
7987 1: 16 1: [15, 14, 13, ..., 0]
7988 . .
7989
7990 @key{RET} v l v x 16 @key{RET} -
7991
7992 @end group
7993 @end smallexample
7994 @noindent
7995 @smallexample
7996 @group
7997 2: [84, 101, 115, ..., 51] 1: 1960915098 1: 121
7998 1: [14348907, ..., 1] . .
7999 .
8000
8001 3 @key{TAB} V M ^ * 511 %
8002 @end group
8003 @end smallexample
8004
8005 @noindent
8006 Once again, @kbd{*} elegantly summarizes most of the computation.
8007 But there's an even more elegant approach: Reduce the formula
8008 @kbd{3 $$ + $} across the vector. Recall that this represents a
8009 function of two arguments that computes its first argument times three
8010 plus its second argument.
8011
8012 @smallexample
8013 @group
8014 1: [84, 101, 115, ..., 51] 1: 1960915098
8015 . .
8016
8017 "Testing, 1, 2, 3 @key{RET} V R ' 3$$+$ @key{RET}
8018 @end group
8019 @end smallexample
8020
8021 @noindent
8022 If you did the decimal arithmetic exercise, this will be familiar.
8023 Basically, we're turning a base-3 vector of digits into an integer,
8024 except that our ``digits'' are much larger than real digits.
8025
8026 Instead of typing @kbd{511 %} again to reduce the result, we can be
8027 cleverer still and notice that rather than computing a huge integer
8028 and taking the modulo at the end, we can take the modulo at each step
8029 without affecting the result. While this means there are more
8030 arithmetic operations, the numbers we operate on remain small so
8031 the operations are faster.
8032
8033 @smallexample
8034 @group
8035 1: [84, 101, 115, ..., 51] 1: 121
8036 . .
8037
8038 "Testing, 1, 2, 3 @key{RET} V R ' (3$$+$)%511 @key{RET}
8039 @end group
8040 @end smallexample
8041
8042 Why does this work? Think about a two-step computation:
8043 @w{@expr{3 (3a + b) + c}}. Taking a result modulo 511 basically means
8044 subtracting off enough 511's to put the result in the desired range.
8045 So the result when we take the modulo after every step is,
8046
8047 @ifinfo
8048 @example
8049 3 (3 a + b - 511 m) + c - 511 n
8050 @end example
8051 @end ifinfo
8052 @tex
8053 \turnoffactive
8054 \beforedisplay
8055 $$ 3 (3 a + b - 511 m) + c - 511 n $$
8056 \afterdisplay
8057 @end tex
8058
8059 @noindent
8060 for some suitable integers @expr{m} and @expr{n}. Expanding out by
8061 the distributive law yields
8062
8063 @ifinfo
8064 @example
8065 9 a + 3 b + c - 511*3 m - 511 n
8066 @end example
8067 @end ifinfo
8068 @tex
8069 \turnoffactive
8070 \beforedisplay
8071 $$ 9 a + 3 b + c - 511\times3 m - 511 n $$
8072 \afterdisplay
8073 @end tex
8074
8075 @noindent
8076 The @expr{m} term in the latter formula is redundant because any
8077 contribution it makes could just as easily be made by the @expr{n}
8078 term. So we can take it out to get an equivalent formula with
8079 @expr{n' = 3m + n},
8080
8081 @ifinfo
8082 @example
8083 9 a + 3 b + c - 511 n'
8084 @end example
8085 @end ifinfo
8086 @tex
8087 \turnoffactive
8088 \beforedisplay
8089 $$ 9 a + 3 b + c - 511 n' $$
8090 \afterdisplay
8091 @end tex
8092
8093 @noindent
8094 which is just the formula for taking the modulo only at the end of
8095 the calculation. Therefore the two methods are essentially the same.
8096
8097 Later in the tutorial we will encounter @dfn{modulo forms}, which
8098 basically automate the idea of reducing every intermediate result
8099 modulo some value @var{m}.
8100
8101 @node List Answer 14, Types Answer 1, List Answer 13, Answers to Exercises
8102 @subsection List Tutorial Exercise 14
8103
8104 We want to use @kbd{H V U} to nest a function which adds a random
8105 step to an @expr{(x,y)} coordinate. The function is a bit long, but
8106 otherwise the problem is quite straightforward.
8107
8108 @smallexample
8109 @group
8110 2: [0, 0] 1: [ [ 0, 0 ]
8111 1: 50 [ 0.4288, -0.1695 ]
8112 . [ -0.4787, -0.9027 ]
8113 ...
8114
8115 [0,0] 50 H V U ' <# + [random(2.0)-1, random(2.0)-1]> @key{RET}
8116 @end group
8117 @end smallexample
8118
8119 Just as the text recommended, we used @samp{< >} nameless function
8120 notation to keep the two @code{random} calls from being evaluated
8121 before nesting even begins.
8122
8123 We now have a vector of @expr{[x, y]} sub-vectors, which by Calc's
8124 rules acts like a matrix. We can transpose this matrix and unpack
8125 to get a pair of vectors, @expr{x} and @expr{y}, suitable for graphing.
8126
8127 @smallexample
8128 @group
8129 2: [ 0, 0.4288, -0.4787, ... ]
8130 1: [ 0, -0.1696, -0.9027, ... ]
8131 .
8132
8133 v t v u g f
8134 @end group
8135 @end smallexample
8136
8137 Incidentally, because the @expr{x} and @expr{y} are completely
8138 independent in this case, we could have done two separate commands
8139 to create our @expr{x} and @expr{y} vectors of numbers directly.
8140
8141 To make a random walk of unit steps, we note that @code{sincos} of
8142 a random direction exactly gives us an @expr{[x, y]} step of unit
8143 length; in fact, the new nesting function is even briefer, though
8144 we might want to lower the precision a bit for it.
8145
8146 @smallexample
8147 @group
8148 2: [0, 0] 1: [ [ 0, 0 ]
8149 1: 50 [ 0.1318, 0.9912 ]
8150 . [ -0.5965, 0.3061 ]
8151 ...
8152
8153 [0,0] 50 m d p 6 @key{RET} H V U ' <# + sincos(random(360.0))> @key{RET}
8154 @end group
8155 @end smallexample
8156
8157 Another @kbd{v t v u g f} sequence will graph this new random walk.
8158
8159 An interesting twist on these random walk functions would be to use
8160 complex numbers instead of 2-vectors to represent points on the plane.
8161 In the first example, we'd use something like @samp{random + random*(0,1)},
8162 and in the second we could use polar complex numbers with random phase
8163 angles. (This exercise was first suggested in this form by Randal
8164 Schwartz.)
8165
8166 @node Types Answer 1, Types Answer 2, List Answer 14, Answers to Exercises
8167 @subsection Types Tutorial Exercise 1
8168
8169 @noindent
8170 If the number is the square root of @cpi{} times a rational number,
8171 then its square, divided by @cpi{}, should be a rational number.
8172
8173 @smallexample
8174 @group
8175 1: 1.26508260337 1: 0.509433962268 1: 2486645810:4881193627
8176 . . .
8177
8178 2 ^ P / c F
8179 @end group
8180 @end smallexample
8181
8182 @noindent
8183 Technically speaking this is a rational number, but not one that is
8184 likely to have arisen in the original problem. More likely, it just
8185 happens to be the fraction which most closely represents some
8186 irrational number to within 12 digits.
8187
8188 But perhaps our result was not quite exact. Let's reduce the
8189 precision slightly and try again:
8190
8191 @smallexample
8192 @group
8193 1: 0.509433962268 1: 27:53
8194 . .
8195
8196 U p 10 @key{RET} c F
8197 @end group
8198 @end smallexample
8199
8200 @noindent
8201 Aha! It's unlikely that an irrational number would equal a fraction
8202 this simple to within ten digits, so our original number was probably
8203 @texline @math{\sqrt{27 \pi / 53}}.
8204 @infoline @expr{sqrt(27 pi / 53)}.
8205
8206 Notice that we didn't need to re-round the number when we reduced the
8207 precision. Remember, arithmetic operations always round their inputs
8208 to the current precision before they begin.
8209
8210 @node Types Answer 2, Types Answer 3, Types Answer 1, Answers to Exercises
8211 @subsection Types Tutorial Exercise 2
8212
8213 @noindent
8214 @samp{inf / inf = nan}. Perhaps @samp{1} is the ``obvious'' answer.
8215 But if @w{@samp{17 inf = inf}}, then @samp{17 inf / inf = inf / inf = 17}, too.
8216
8217 @samp{exp(inf) = inf}. It's tempting to say that the exponential
8218 of infinity must be ``bigger'' than ``regular'' infinity, but as
8219 far as Calc is concerned all infinities are as just as big.
8220 In other words, as @expr{x} goes to infinity, @expr{e^x} also goes
8221 to infinity, but the fact the @expr{e^x} grows much faster than
8222 @expr{x} is not relevant here.
8223
8224 @samp{exp(-inf) = 0}. Here we have a finite answer even though
8225 the input is infinite.
8226
8227 @samp{sqrt(-inf) = (0, 1) inf}. Remember that @expr{(0, 1)}
8228 represents the imaginary number @expr{i}. Here's a derivation:
8229 @samp{sqrt(-inf) = @w{sqrt((-1) * inf)} = sqrt(-1) * sqrt(inf)}.
8230 The first part is, by definition, @expr{i}; the second is @code{inf}
8231 because, once again, all infinities are the same size.
8232
8233 @samp{sqrt(uinf) = uinf}. In fact, we do know something about the
8234 direction because @code{sqrt} is defined to return a value in the
8235 right half of the complex plane. But Calc has no notation for this,
8236 so it settles for the conservative answer @code{uinf}.
8237
8238 @samp{abs(uinf) = inf}. No matter which direction @expr{x} points,
8239 @samp{abs(x)} always points along the positive real axis.
8240
8241 @samp{ln(0) = -inf}. Here we have an infinite answer to a finite
8242 input. As in the @expr{1 / 0} case, Calc will only use infinities
8243 here if you have turned on Infinite mode. Otherwise, it will
8244 treat @samp{ln(0)} as an error.
8245
8246 @node Types Answer 3, Types Answer 4, Types Answer 2, Answers to Exercises
8247 @subsection Types Tutorial Exercise 3
8248
8249 @noindent
8250 We can make @samp{inf - inf} be any real number we like, say,
8251 @expr{a}, just by claiming that we added @expr{a} to the first
8252 infinity but not to the second. This is just as true for complex
8253 values of @expr{a}, so @code{nan} can stand for a complex number.
8254 (And, similarly, @code{uinf} can stand for an infinity that points
8255 in any direction in the complex plane, such as @samp{(0, 1) inf}).
8256
8257 In fact, we can multiply the first @code{inf} by two. Surely
8258 @w{@samp{2 inf - inf = inf}}, but also @samp{2 inf - inf = inf - inf = nan}.
8259 So @code{nan} can even stand for infinity. Obviously it's just
8260 as easy to make it stand for minus infinity as for plus infinity.
8261
8262 The moral of this story is that ``infinity'' is a slippery fish
8263 indeed, and Calc tries to handle it by having a very simple model
8264 for infinities (only the direction counts, not the ``size''); but
8265 Calc is careful to write @code{nan} any time this simple model is
8266 unable to tell what the true answer is.
8267
8268 @node Types Answer 4, Types Answer 5, Types Answer 3, Answers to Exercises
8269 @subsection Types Tutorial Exercise 4
8270
8271 @smallexample
8272 @group
8273 2: 0@@ 47' 26" 1: 0@@ 2' 47.411765"
8274 1: 17 .
8275 .
8276
8277 0@@ 47' 26" @key{RET} 17 /
8278 @end group
8279 @end smallexample
8280
8281 @noindent
8282 The average song length is two minutes and 47.4 seconds.
8283
8284 @smallexample
8285 @group
8286 2: 0@@ 2' 47.411765" 1: 0@@ 3' 7.411765" 1: 0@@ 53' 6.000005"
8287 1: 0@@ 0' 20" . .
8288 .
8289
8290 20" + 17 *
8291 @end group
8292 @end smallexample
8293
8294 @noindent
8295 The album would be 53 minutes and 6 seconds long.
8296
8297 @node Types Answer 5, Types Answer 6, Types Answer 4, Answers to Exercises
8298 @subsection Types Tutorial Exercise 5
8299
8300 @noindent
8301 Let's suppose it's January 14, 1991. The easiest thing to do is
8302 to keep trying 13ths of months until Calc reports a Friday.
8303 We can do this by manually entering dates, or by using @kbd{t I}:
8304
8305 @smallexample
8306 @group
8307 1: <Wed Feb 13, 1991> 1: <Wed Mar 13, 1991> 1: <Sat Apr 13, 1991>
8308 . . .
8309
8310 ' <2/13> @key{RET} @key{DEL} ' <3/13> @key{RET} t I
8311 @end group
8312 @end smallexample
8313
8314 @noindent
8315 (Calc assumes the current year if you don't say otherwise.)
8316
8317 This is getting tedious---we can keep advancing the date by typing
8318 @kbd{t I} over and over again, but let's automate the job by using
8319 vector mapping. The @kbd{t I} command actually takes a second
8320 ``how-many-months'' argument, which defaults to one. This
8321 argument is exactly what we want to map over:
8322
8323 @smallexample
8324 @group
8325 2: <Sat Apr 13, 1991> 1: [<Mon May 13, 1991>, <Thu Jun 13, 1991>,
8326 1: [1, 2, 3, 4, 5, 6] <Sat Jul 13, 1991>, <Tue Aug 13, 1991>,
8327 . <Fri Sep 13, 1991>, <Sun Oct 13, 1991>]
8328 .
8329
8330 v x 6 @key{RET} V M t I
8331 @end group
8332 @end smallexample
8333
8334 @noindent
8335 Et voil@`a, September 13, 1991 is a Friday.
8336
8337 @smallexample
8338 @group
8339 1: 242
8340 .
8341
8342 ' <sep 13> - <jan 14> @key{RET}
8343 @end group
8344 @end smallexample
8345
8346 @noindent
8347 And the answer to our original question: 242 days to go.
8348
8349 @node Types Answer 6, Types Answer 7, Types Answer 5, Answers to Exercises
8350 @subsection Types Tutorial Exercise 6
8351
8352 @noindent
8353 The full rule for leap years is that they occur in every year divisible
8354 by four, except that they don't occur in years divisible by 100, except
8355 that they @emph{do} in years divisible by 400. We could work out the
8356 answer by carefully counting the years divisible by four and the
8357 exceptions, but there is a much simpler way that works even if we
8358 don't know the leap year rule.
8359
8360 Let's assume the present year is 1991. Years have 365 days, except
8361 that leap years (whenever they occur) have 366 days. So let's count
8362 the number of days between now and then, and compare that to the
8363 number of years times 365. The number of extra days we find must be
8364 equal to the number of leap years there were.
8365
8366 @smallexample
8367 @group
8368 1: <Mon Jan 1, 10001> 2: <Mon Jan 1, 10001> 1: 2925593
8369 . 1: <Tue Jan 1, 1991> .
8370 .
8371
8372 ' <jan 1 10001> @key{RET} ' <jan 1 1991> @key{RET} -
8373
8374 @end group
8375 @end smallexample
8376 @noindent
8377 @smallexample
8378 @group
8379 3: 2925593 2: 2925593 2: 2925593 1: 1943
8380 2: 10001 1: 8010 1: 2923650 .
8381 1: 1991 . .
8382 .
8383
8384 10001 @key{RET} 1991 - 365 * -
8385 @end group
8386 @end smallexample
8387
8388 @c [fix-ref Date Forms]
8389 @noindent
8390 There will be 1943 leap years before the year 10001. (Assuming,
8391 of course, that the algorithm for computing leap years remains
8392 unchanged for that long. @xref{Date Forms}, for some interesting
8393 background information in that regard.)
8394
8395 @node Types Answer 7, Types Answer 8, Types Answer 6, Answers to Exercises
8396 @subsection Types Tutorial Exercise 7
8397
8398 @noindent
8399 The relative errors must be converted to absolute errors so that
8400 @samp{+/-} notation may be used.
8401
8402 @smallexample
8403 @group
8404 1: 1. 2: 1.
8405 . 1: 0.2
8406 .
8407
8408 20 @key{RET} .05 * 4 @key{RET} .05 *
8409 @end group
8410 @end smallexample
8411
8412 Now we simply chug through the formula.
8413
8414 @smallexample
8415 @group
8416 1: 19.7392088022 1: 394.78 +/- 19.739 1: 6316.5 +/- 706.21
8417 . . .
8418
8419 2 P 2 ^ * 20 p 1 * 4 p .2 @key{RET} 2 ^ *
8420 @end group
8421 @end smallexample
8422
8423 It turns out the @kbd{v u} command will unpack an error form as
8424 well as a vector. This saves us some retyping of numbers.
8425
8426 @smallexample
8427 @group
8428 3: 6316.5 +/- 706.21 2: 6316.5 +/- 706.21
8429 2: 6316.5 1: 0.1118
8430 1: 706.21 .
8431 .
8432
8433 @key{RET} v u @key{TAB} /
8434 @end group
8435 @end smallexample
8436
8437 @noindent
8438 Thus the volume is 6316 cubic centimeters, within about 11 percent.
8439
8440 @node Types Answer 8, Types Answer 9, Types Answer 7, Answers to Exercises
8441 @subsection Types Tutorial Exercise 8
8442
8443 @noindent
8444 The first answer is pretty simple: @samp{1 / (0 .. 10) = (0.1 .. inf)}.
8445 Since a number in the interval @samp{(0 .. 10)} can get arbitrarily
8446 close to zero, its reciprocal can get arbitrarily large, so the answer
8447 is an interval that effectively means, ``any number greater than 0.1''
8448 but with no upper bound.
8449
8450 The second answer, similarly, is @samp{1 / (-10 .. 0) = (-inf .. -0.1)}.
8451
8452 Calc normally treats division by zero as an error, so that the formula
8453 @w{@samp{1 / 0}} is left unsimplified. Our third problem,
8454 @w{@samp{1 / [0 .. 10]}}, also (potentially) divides by zero because zero
8455 is now a member of the interval. So Calc leaves this one unevaluated, too.
8456
8457 If you turn on Infinite mode by pressing @kbd{m i}, you will
8458 instead get the answer @samp{[0.1 .. inf]}, which includes infinity
8459 as a possible value.
8460
8461 The fourth calculation, @samp{1 / (-10 .. 10)}, has the same problem.
8462 Zero is buried inside the interval, but it's still a possible value.
8463 It's not hard to see that the actual result of @samp{1 / (-10 .. 10)}
8464 will be either greater than @mathit{0.1}, or less than @mathit{-0.1}. Thus
8465 the interval goes from minus infinity to plus infinity, with a ``hole''
8466 in it from @mathit{-0.1} to @mathit{0.1}. Calc doesn't have any way to
8467 represent this, so it just reports @samp{[-inf .. inf]} as the answer.
8468 It may be disappointing to hear ``the answer lies somewhere between
8469 minus infinity and plus infinity, inclusive,'' but that's the best
8470 that interval arithmetic can do in this case.
8471
8472 @node Types Answer 9, Types Answer 10, Types Answer 8, Answers to Exercises
8473 @subsection Types Tutorial Exercise 9
8474
8475 @smallexample
8476 @group
8477 1: [-3 .. 3] 2: [-3 .. 3] 2: [0 .. 9]
8478 . 1: [0 .. 9] 1: [-9 .. 9]
8479 . .
8480
8481 [ 3 n .. 3 ] @key{RET} 2 ^ @key{TAB} @key{RET} *
8482 @end group
8483 @end smallexample
8484
8485 @noindent
8486 In the first case the result says, ``if a number is between @mathit{-3} and
8487 3, its square is between 0 and 9.'' The second case says, ``the product
8488 of two numbers each between @mathit{-3} and 3 is between @mathit{-9} and 9.''
8489
8490 An interval form is not a number; it is a symbol that can stand for
8491 many different numbers. Two identical-looking interval forms can stand
8492 for different numbers.
8493
8494 The same issue arises when you try to square an error form.
8495
8496 @node Types Answer 10, Types Answer 11, Types Answer 9, Answers to Exercises
8497 @subsection Types Tutorial Exercise 10
8498
8499 @noindent
8500 Testing the first number, we might arbitrarily choose 17 for @expr{x}.
8501
8502 @smallexample
8503 @group
8504 1: 17 mod 811749613 2: 17 mod 811749613 1: 533694123 mod 811749613
8505 . 811749612 .
8506 .
8507
8508 17 M 811749613 @key{RET} 811749612 ^
8509 @end group
8510 @end smallexample
8511
8512 @noindent
8513 Since 533694123 is (considerably) different from 1, the number 811749613
8514 must not be prime.
8515
8516 It's awkward to type the number in twice as we did above. There are
8517 various ways to avoid this, and algebraic entry is one. In fact, using
8518 a vector mapping operation we can perform several tests at once. Let's
8519 use this method to test the second number.
8520
8521 @smallexample
8522 @group
8523 2: [17, 42, 100000] 1: [1 mod 15485863, 1 mod ... ]
8524 1: 15485863 .
8525 .
8526
8527 [17 42 100000] 15485863 @key{RET} V M ' ($$ mod $)^($-1) @key{RET}
8528 @end group
8529 @end smallexample
8530
8531 @noindent
8532 The result is three ones (modulo @expr{n}), so it's very probable that
8533 15485863 is prime. (In fact, this number is the millionth prime.)
8534
8535 Note that the functions @samp{($$^($-1)) mod $} or @samp{$$^($-1) % $}
8536 would have been hopelessly inefficient, since they would have calculated
8537 the power using full integer arithmetic.
8538
8539 Calc has a @kbd{k p} command that does primality testing. For small
8540 numbers it does an exact test; for large numbers it uses a variant
8541 of the Fermat test we used here. You can use @kbd{k p} repeatedly
8542 to prove that a large integer is prime with any desired probability.
8543
8544 @node Types Answer 11, Types Answer 12, Types Answer 10, Answers to Exercises
8545 @subsection Types Tutorial Exercise 11
8546
8547 @noindent
8548 There are several ways to insert a calculated number into an HMS form.
8549 One way to convert a number of seconds to an HMS form is simply to
8550 multiply the number by an HMS form representing one second:
8551
8552 @smallexample
8553 @group
8554 1: 31415926.5359 2: 31415926.5359 1: 8726@@ 38' 46.5359"
8555 . 1: 0@@ 0' 1" .
8556 .
8557
8558 P 1e7 * 0@@ 0' 1" *
8559
8560 @end group
8561 @end smallexample
8562 @noindent
8563 @smallexample
8564 @group
8565 2: 8726@@ 38' 46.5359" 1: 6@@ 6' 2.5359" mod 24@@ 0' 0"
8566 1: 15@@ 27' 16" mod 24@@ 0' 0" .
8567 .
8568
8569 x time @key{RET} +
8570 @end group
8571 @end smallexample
8572
8573 @noindent
8574 It will be just after six in the morning.
8575
8576 The algebraic @code{hms} function can also be used to build an
8577 HMS form:
8578
8579 @smallexample
8580 @group
8581 1: hms(0, 0, 10000000. pi) 1: 8726@@ 38' 46.5359"
8582 . .
8583
8584 ' hms(0, 0, 1e7 pi) @key{RET} =
8585 @end group
8586 @end smallexample
8587
8588 @noindent
8589 The @kbd{=} key is necessary to evaluate the symbol @samp{pi} to
8590 the actual number 3.14159...
8591
8592 @node Types Answer 12, Types Answer 13, Types Answer 11, Answers to Exercises
8593 @subsection Types Tutorial Exercise 12
8594
8595 @noindent
8596 As we recall, there are 17 songs of about 2 minutes and 47 seconds
8597 each.
8598
8599 @smallexample
8600 @group
8601 2: 0@@ 2' 47" 1: [0@@ 3' 7" .. 0@@ 3' 47"]
8602 1: [0@@ 0' 20" .. 0@@ 1' 0"] .
8603 .
8604
8605 [ 0@@ 20" .. 0@@ 1' ] +
8606
8607 @end group
8608 @end smallexample
8609 @noindent
8610 @smallexample
8611 @group
8612 1: [0@@ 52' 59." .. 1@@ 4' 19."]
8613 .
8614
8615 17 *
8616 @end group
8617 @end smallexample
8618
8619 @noindent
8620 No matter how long it is, the album will fit nicely on one CD.
8621
8622 @node Types Answer 13, Types Answer 14, Types Answer 12, Answers to Exercises
8623 @subsection Types Tutorial Exercise 13
8624
8625 @noindent
8626 Type @kbd{' 1 yr @key{RET} u c s @key{RET}}. The answer is 31557600 seconds.
8627
8628 @node Types Answer 14, Types Answer 15, Types Answer 13, Answers to Exercises
8629 @subsection Types Tutorial Exercise 14
8630
8631 @noindent
8632 How long will it take for a signal to get from one end of the computer
8633 to the other?
8634
8635 @smallexample
8636 @group
8637 1: m / c 1: 3.3356 ns
8638 . .
8639
8640 ' 1 m / c @key{RET} u c ns @key{RET}
8641 @end group
8642 @end smallexample
8643
8644 @noindent
8645 (Recall, @samp{c} is a ``unit'' corresponding to the speed of light.)
8646
8647 @smallexample
8648 @group
8649 1: 3.3356 ns 1: 0.81356 ns / ns 1: 0.81356
8650 2: 4.1 ns . .
8651 .
8652
8653 ' 4.1 ns @key{RET} / u s
8654 @end group
8655 @end smallexample
8656
8657 @noindent
8658 Thus a signal could take up to 81 percent of a clock cycle just to
8659 go from one place to another inside the computer, assuming the signal
8660 could actually attain the full speed of light. Pretty tight!
8661
8662 @node Types Answer 15, Algebra Answer 1, Types Answer 14, Answers to Exercises
8663 @subsection Types Tutorial Exercise 15
8664
8665 @noindent
8666 The speed limit is 55 miles per hour on most highways. We want to
8667 find the ratio of Sam's speed to the US speed limit.
8668
8669 @smallexample
8670 @group
8671 1: 55 mph 2: 55 mph 3: 11 hr mph / yd
8672 . 1: 5 yd / hr .
8673 .
8674
8675 ' 55 mph @key{RET} ' 5 yd/hr @key{RET} /
8676 @end group
8677 @end smallexample
8678
8679 The @kbd{u s} command cancels out these units to get a plain
8680 number. Now we take the logarithm base two to find the final
8681 answer, assuming that each successive pill doubles his speed.
8682
8683 @smallexample
8684 @group
8685 1: 19360. 2: 19360. 1: 14.24
8686 . 1: 2 .
8687 .
8688
8689 u s 2 B
8690 @end group
8691 @end smallexample
8692
8693 @noindent
8694 Thus Sam can take up to 14 pills without a worry.
8695
8696 @node Algebra Answer 1, Algebra Answer 2, Types Answer 15, Answers to Exercises
8697 @subsection Algebra Tutorial Exercise 1
8698
8699 @noindent
8700 @c [fix-ref Declarations]
8701 The result @samp{sqrt(x)^2} is simplified back to @expr{x} by the
8702 Calculator, but @samp{sqrt(x^2)} is not. (Consider what happens
8703 if @w{@expr{x = -4}}.) If @expr{x} is real, this formula could be
8704 simplified to @samp{abs(x)}, but for general complex arguments even
8705 that is not safe. (@xref{Declarations}, for a way to tell Calc
8706 that @expr{x} is known to be real.)
8707
8708 @node Algebra Answer 2, Algebra Answer 3, Algebra Answer 1, Answers to Exercises
8709 @subsection Algebra Tutorial Exercise 2
8710
8711 @noindent
8712 Suppose our roots are @expr{[a, b, c]}. We want a polynomial which
8713 is zero when @expr{x} is any of these values. The trivial polynomial
8714 @expr{x-a} is zero when @expr{x=a}, so the product @expr{(x-a)(x-b)(x-c)}
8715 will do the job. We can use @kbd{a c x} to write this in a more
8716 familiar form.
8717
8718 @smallexample
8719 @group
8720 1: 34 x - 24 x^3 1: [1.19023, -1.19023, 0]
8721 . .
8722
8723 r 2 a P x @key{RET}
8724
8725 @end group
8726 @end smallexample
8727 @noindent
8728 @smallexample
8729 @group
8730 1: [x - 1.19023, x + 1.19023, x] 1: (x - 1.19023) (x + 1.19023) x
8731 . .
8732
8733 V M ' x-$ @key{RET} V R *
8734
8735 @end group
8736 @end smallexample
8737 @noindent
8738 @smallexample
8739 @group
8740 1: x^3 - 1.41666 x 1: 34 x - 24 x^3
8741 . .
8742
8743 a c x @key{RET} 24 n * a x
8744 @end group
8745 @end smallexample
8746
8747 @noindent
8748 Sure enough, our answer (multiplied by a suitable constant) is the
8749 same as the original polynomial.
8750
8751 @node Algebra Answer 3, Algebra Answer 4, Algebra Answer 2, Answers to Exercises
8752 @subsection Algebra Tutorial Exercise 3
8753
8754 @smallexample
8755 @group
8756 1: x sin(pi x) 1: (sin(pi x) - pi x cos(pi x)) / pi^2
8757 . .
8758
8759 ' x sin(pi x) @key{RET} m r a i x @key{RET}
8760
8761 @end group
8762 @end smallexample
8763 @noindent
8764 @smallexample
8765 @group
8766 1: [y, 1]
8767 2: (sin(pi x) - pi x cos(pi x)) / pi^2
8768 .
8769
8770 ' [y,1] @key{RET} @key{TAB}
8771
8772 @end group
8773 @end smallexample
8774 @noindent
8775 @smallexample
8776 @group
8777 1: [(sin(pi y) - pi y cos(pi y)) / pi^2, (sin(pi) - pi cos(pi)) / pi^2]
8778 .
8779
8780 V M $ @key{RET}
8781
8782 @end group
8783 @end smallexample
8784 @noindent
8785 @smallexample
8786 @group
8787 1: (sin(pi y) - pi y cos(pi y)) / pi^2 + (pi cos(pi) - sin(pi)) / pi^2
8788 .
8789
8790 V R -
8791
8792 @end group
8793 @end smallexample
8794 @noindent
8795 @smallexample
8796 @group
8797 1: (sin(3.14159 y) - 3.14159 y cos(3.14159 y)) / 9.8696 - 0.3183
8798 .
8799
8800 =
8801
8802 @end group
8803 @end smallexample
8804 @noindent
8805 @smallexample
8806 @group
8807 1: [0., -0.95493, 0.63662, -1.5915, 1.2732]
8808 .
8809
8810 v x 5 @key{RET} @key{TAB} V M $ @key{RET}
8811 @end group
8812 @end smallexample
8813
8814 @node Algebra Answer 4, Rewrites Answer 1, Algebra Answer 3, Answers to Exercises
8815 @subsection Algebra Tutorial Exercise 4
8816
8817 @noindent
8818 The hard part is that @kbd{V R +} is no longer sufficient to add up all
8819 the contributions from the slices, since the slices have varying
8820 coefficients. So first we must come up with a vector of these
8821 coefficients. Here's one way:
8822
8823 @smallexample
8824 @group
8825 2: -1 2: 3 1: [4, 2, ..., 4]
8826 1: [1, 2, ..., 9] 1: [-1, 1, ..., -1] .
8827 . .
8828
8829 1 n v x 9 @key{RET} V M ^ 3 @key{TAB} -
8830
8831 @end group
8832 @end smallexample
8833 @noindent
8834 @smallexample
8835 @group
8836 1: [4, 2, ..., 4, 1] 1: [1, 4, 2, ..., 4, 1]
8837 . .
8838
8839 1 | 1 @key{TAB} |
8840 @end group
8841 @end smallexample
8842
8843 @noindent
8844 Now we compute the function values. Note that for this method we need
8845 eleven values, including both endpoints of the desired interval.
8846
8847 @smallexample
8848 @group
8849 2: [1, 4, 2, ..., 4, 1]
8850 1: [1, 1.1, 1.2, ... , 1.8, 1.9, 2.]
8851 .
8852
8853 11 @key{RET} 1 @key{RET} .1 @key{RET} C-u v x
8854
8855 @end group
8856 @end smallexample
8857 @noindent
8858 @smallexample
8859 @group
8860 2: [1, 4, 2, ..., 4, 1]
8861 1: [0., 0.084941, 0.16993, ... ]
8862 .
8863
8864 ' sin(x) ln(x) @key{RET} m r p 5 @key{RET} V M $ @key{RET}
8865 @end group
8866 @end smallexample
8867
8868 @noindent
8869 Once again this calls for @kbd{V M * V R +}; a simple @kbd{*} does the
8870 same thing.
8871
8872 @smallexample
8873 @group
8874 1: 11.22 1: 1.122 1: 0.374
8875 . . .
8876
8877 * .1 * 3 /
8878 @end group
8879 @end smallexample
8880
8881 @noindent
8882 Wow! That's even better than the result from the Taylor series method.
8883
8884 @node Rewrites Answer 1, Rewrites Answer 2, Algebra Answer 4, Answers to Exercises
8885 @subsection Rewrites Tutorial Exercise 1
8886
8887 @noindent
8888 We'll use Big mode to make the formulas more readable.
8889
8890 @smallexample
8891 @group
8892 ___
8893 2 + V 2
8894 1: (2 + sqrt(2)) / (1 + sqrt(2)) 1: --------
8895 . ___
8896 1 + V 2
8897
8898 .
8899
8900 ' (2+sqrt(2)) / (1+sqrt(2)) @key{RET} d B
8901 @end group
8902 @end smallexample
8903
8904 @noindent
8905 Multiplying by the conjugate helps because @expr{(a+b) (a-b) = a^2 - b^2}.
8906
8907 @smallexample
8908 @group
8909 ___ ___
8910 1: (2 + V 2 ) (V 2 - 1)
8911 .
8912
8913 a r a/(b+c) := a*(b-c) / (b^2-c^2) @key{RET}
8914
8915 @end group
8916 @end smallexample
8917 @noindent
8918 @smallexample
8919 @group
8920 ___ ___
8921 1: 2 + V 2 - 2 1: V 2
8922 . .
8923
8924 a r a*(b+c) := a*b + a*c a s
8925 @end group
8926 @end smallexample
8927
8928 @noindent
8929 (We could have used @kbd{a x} instead of a rewrite rule for the
8930 second step.)
8931
8932 The multiply-by-conjugate rule turns out to be useful in many
8933 different circumstances, such as when the denominator involves
8934 sines and cosines or the imaginary constant @code{i}.
8935
8936 @node Rewrites Answer 2, Rewrites Answer 3, Rewrites Answer 1, Answers to Exercises
8937 @subsection Rewrites Tutorial Exercise 2
8938
8939 @noindent
8940 Here is the rule set:
8941
8942 @smallexample
8943 @group
8944 [ fib(n) := fib(n, 1, 1) :: integer(n) :: n >= 1,
8945 fib(1, x, y) := x,
8946 fib(n, x, y) := fib(n-1, y, x+y) ]
8947 @end group
8948 @end smallexample
8949
8950 @noindent
8951 The first rule turns a one-argument @code{fib} that people like to write
8952 into a three-argument @code{fib} that makes computation easier. The
8953 second rule converts back from three-argument form once the computation
8954 is done. The third rule does the computation itself. It basically
8955 says that if @expr{x} and @expr{y} are two consecutive Fibonacci numbers,
8956 then @expr{y} and @expr{x+y} are the next (overlapping) pair of Fibonacci
8957 numbers.
8958
8959 Notice that because the number @expr{n} was ``validated'' by the
8960 conditions on the first rule, there is no need to put conditions on
8961 the other rules because the rule set would never get that far unless
8962 the input were valid. That further speeds computation, since no
8963 extra conditions need to be checked at every step.
8964
8965 Actually, a user with a nasty sense of humor could enter a bad
8966 three-argument @code{fib} call directly, say, @samp{fib(0, 1, 1)},
8967 which would get the rules into an infinite loop. One thing that would
8968 help keep this from happening by accident would be to use something like
8969 @samp{ZzFib} instead of @code{fib} as the name of the three-argument
8970 function.
8971
8972 @node Rewrites Answer 3, Rewrites Answer 4, Rewrites Answer 2, Answers to Exercises
8973 @subsection Rewrites Tutorial Exercise 3
8974
8975 @noindent
8976 He got an infinite loop. First, Calc did as expected and rewrote
8977 @w{@samp{2 + 3 x}} to @samp{f(2, 3, x)}. Then it looked for ways to
8978 apply the rule again, and found that @samp{f(2, 3, x)} looks like
8979 @samp{a + b x} with @w{@samp{a = 0}} and @samp{b = 1}, so it rewrote to
8980 @samp{f(0, 1, f(2, 3, x))}. It then wrapped another @samp{f(0, 1, ...)}
8981 around that, and so on, ad infinitum. Joe should have used @kbd{M-1 a r}
8982 to make sure the rule applied only once.
8983
8984 (Actually, even the first step didn't work as he expected. What Calc
8985 really gives for @kbd{M-1 a r} in this situation is @samp{f(3 x, 1, 2)},
8986 treating 2 as the ``variable,'' and @samp{3 x} as a constant being added
8987 to it. While this may seem odd, it's just as valid a solution as the
8988 ``obvious'' one. One way to fix this would be to add the condition
8989 @samp{:: variable(x)} to the rule, to make sure the thing that matches
8990 @samp{x} is indeed a variable, or to change @samp{x} to @samp{quote(x)}
8991 on the lefthand side, so that the rule matches the actual variable
8992 @samp{x} rather than letting @samp{x} stand for something else.)
8993
8994 @node Rewrites Answer 4, Rewrites Answer 5, Rewrites Answer 3, Answers to Exercises
8995 @subsection Rewrites Tutorial Exercise 4
8996
8997 @noindent
8998 @ignore
8999 @starindex
9000 @end ignore
9001 @tindex seq
9002 Here is a suitable set of rules to solve the first part of the problem:
9003
9004 @smallexample
9005 @group
9006 [ seq(n, c) := seq(n/2, c+1) :: n%2 = 0,
9007 seq(n, c) := seq(3n+1, c+1) :: n%2 = 1 :: n > 1 ]
9008 @end group
9009 @end smallexample
9010
9011 Given the initial formula @samp{seq(6, 0)}, application of these
9012 rules produces the following sequence of formulas:
9013
9014 @example
9015 seq( 3, 1)
9016 seq(10, 2)
9017 seq( 5, 3)
9018 seq(16, 4)
9019 seq( 8, 5)
9020 seq( 4, 6)
9021 seq( 2, 7)
9022 seq( 1, 8)
9023 @end example
9024
9025 @noindent
9026 whereupon neither of the rules match, and rewriting stops.
9027
9028 We can pretty this up a bit with a couple more rules:
9029
9030 @smallexample
9031 @group
9032 [ seq(n) := seq(n, 0),
9033 seq(1, c) := c,
9034 ... ]
9035 @end group
9036 @end smallexample
9037
9038 @noindent
9039 Now, given @samp{seq(6)} as the starting configuration, we get 8
9040 as the result.
9041
9042 The change to return a vector is quite simple:
9043
9044 @smallexample
9045 @group
9046 [ seq(n) := seq(n, []) :: integer(n) :: n > 0,
9047 seq(1, v) := v | 1,
9048 seq(n, v) := seq(n/2, v | n) :: n%2 = 0,
9049 seq(n, v) := seq(3n+1, v | n) :: n%2 = 1 ]
9050 @end group
9051 @end smallexample
9052
9053 @noindent
9054 Given @samp{seq(6)}, the result is @samp{[6, 3, 10, 5, 16, 8, 4, 2, 1]}.
9055
9056 Notice that the @expr{n > 1} guard is no longer necessary on the last
9057 rule since the @expr{n = 1} case is now detected by another rule.
9058 But a guard has been added to the initial rule to make sure the
9059 initial value is suitable before the computation begins.
9060
9061 While still a good idea, this guard is not as vitally important as it
9062 was for the @code{fib} function, since calling, say, @samp{seq(x, [])}
9063 will not get into an infinite loop. Calc will not be able to prove
9064 the symbol @samp{x} is either even or odd, so none of the rules will
9065 apply and the rewrites will stop right away.
9066
9067 @node Rewrites Answer 5, Rewrites Answer 6, Rewrites Answer 4, Answers to Exercises
9068 @subsection Rewrites Tutorial Exercise 5
9069
9070 @noindent
9071 @ignore
9072 @starindex
9073 @end ignore
9074 @tindex nterms
9075 If @expr{x} is the sum @expr{a + b}, then `@t{nterms(}@var{x}@t{)}' must
9076 be `@t{nterms(}@var{a}@t{)}' plus `@t{nterms(}@var{b}@t{)}'. If @expr{x}
9077 is not a sum, then `@t{nterms(}@var{x}@t{)}' = 1.
9078
9079 @smallexample
9080 @group
9081 [ nterms(a + b) := nterms(a) + nterms(b),
9082 nterms(x) := 1 ]
9083 @end group
9084 @end smallexample
9085
9086 @noindent
9087 Here we have taken advantage of the fact that earlier rules always
9088 match before later rules; @samp{nterms(x)} will only be tried if we
9089 already know that @samp{x} is not a sum.
9090
9091 @node Rewrites Answer 6, Programming Answer 1, Rewrites Answer 5, Answers to Exercises
9092 @subsection Rewrites Tutorial Exercise 6
9093
9094 @noindent
9095 Here is a rule set that will do the job:
9096
9097 @smallexample
9098 @group
9099 [ a*(b + c) := a*b + a*c,
9100 opt(a) O(x^n) + opt(b) O(x^m) := O(x^n) :: n <= m
9101 :: constant(a) :: constant(b),
9102 opt(a) O(x^n) + opt(b) x^m := O(x^n) :: n <= m
9103 :: constant(a) :: constant(b),
9104 a O(x^n) := O(x^n) :: constant(a),
9105 x^opt(m) O(x^n) := O(x^(n+m)),
9106 O(x^n) O(x^m) := O(x^(n+m)) ]
9107 @end group
9108 @end smallexample
9109
9110 If we really want the @kbd{+} and @kbd{*} keys to operate naturally
9111 on power series, we should put these rules in @code{EvalRules}. For
9112 testing purposes, it is better to put them in a different variable,
9113 say, @code{O}, first.
9114
9115 The first rule just expands products of sums so that the rest of the
9116 rules can assume they have an expanded-out polynomial to work with.
9117 Note that this rule does not mention @samp{O} at all, so it will
9118 apply to any product-of-sum it encounters---this rule may surprise
9119 you if you put it into @code{EvalRules}!
9120
9121 In the second rule, the sum of two O's is changed to the smaller O.
9122 The optional constant coefficients are there mostly so that
9123 @samp{O(x^2) - O(x^3)} and @samp{O(x^3) - O(x^2)} are handled
9124 as well as @samp{O(x^2) + O(x^3)}.
9125
9126 The third rule absorbs higher powers of @samp{x} into O's.
9127
9128 The fourth rule says that a constant times a negligible quantity
9129 is still negligible. (This rule will also match @samp{O(x^3) / 4},
9130 with @samp{a = 1/4}.)
9131
9132 The fifth rule rewrites, for example, @samp{x^2 O(x^3)} to @samp{O(x^5)}.
9133 (It is easy to see that if one of these forms is negligible, the other
9134 is, too.) Notice the @samp{x^opt(m)} to pick up terms like
9135 @w{@samp{x O(x^3)}}. Optional powers will match @samp{x} as @samp{x^1}
9136 but not 1 as @samp{x^0}. This turns out to be exactly what we want here.
9137
9138 The sixth rule is the corresponding rule for products of two O's.
9139
9140 Another way to solve this problem would be to create a new ``data type''
9141 that represents truncated power series. We might represent these as
9142 function calls @samp{series(@var{coefs}, @var{x})} where @var{coefs} is
9143 a vector of coefficients for @expr{x^0}, @expr{x^1}, @expr{x^2}, and so
9144 on. Rules would exist for sums and products of such @code{series}
9145 objects, and as an optional convenience could also know how to combine a
9146 @code{series} object with a normal polynomial. (With this, and with a
9147 rule that rewrites @samp{O(x^n)} to the equivalent @code{series} form,
9148 you could still enter power series in exactly the same notation as
9149 before.) Operations on such objects would probably be more efficient,
9150 although the objects would be a bit harder to read.
9151
9152 @c [fix-ref Compositions]
9153 Some other symbolic math programs provide a power series data type
9154 similar to this. Mathematica, for example, has an object that looks
9155 like @samp{PowerSeries[@var{x}, @var{x0}, @var{coefs}, @var{nmin},
9156 @var{nmax}, @var{den}]}, where @var{x0} is the point about which the
9157 power series is taken (we've been assuming this was always zero),
9158 and @var{nmin}, @var{nmax}, and @var{den} allow pseudo-power-series
9159 with fractional or negative powers. Also, the @code{PowerSeries}
9160 objects have a special display format that makes them look like
9161 @samp{2 x^2 + O(x^4)} when they are printed out. (@xref{Compositions},
9162 for a way to do this in Calc, although for something as involved as
9163 this it would probably be better to write the formatting routine
9164 in Lisp.)
9165
9166 @node Programming Answer 1, Programming Answer 2, Rewrites Answer 6, Answers to Exercises
9167 @subsection Programming Tutorial Exercise 1
9168
9169 @noindent
9170 Just enter the formula @samp{ninteg(sin(t)/t, t, 0, x)}, type
9171 @kbd{Z F}, and answer the questions. Since this formula contains two
9172 variables, the default argument list will be @samp{(t x)}. We want to
9173 change this to @samp{(x)} since @expr{t} is really a dummy variable
9174 to be used within @code{ninteg}.
9175
9176 The exact keystrokes are @kbd{Z F s Si @key{RET} @key{RET} C-b C-b @key{DEL} @key{DEL} @key{RET} y}.
9177 (The @kbd{C-b C-b @key{DEL} @key{DEL}} are what fix the argument list.)
9178
9179 @node Programming Answer 2, Programming Answer 3, Programming Answer 1, Answers to Exercises
9180 @subsection Programming Tutorial Exercise 2
9181
9182 @noindent
9183 One way is to move the number to the top of the stack, operate on
9184 it, then move it back: @kbd{C-x ( M-@key{TAB} n M-@key{TAB} M-@key{TAB} C-x )}.
9185
9186 Another way is to negate the top three stack entries, then negate
9187 again the top two stack entries: @kbd{C-x ( M-3 n M-2 n C-x )}.
9188
9189 Finally, it turns out that a negative prefix argument causes a
9190 command like @kbd{n} to operate on the specified stack entry only,
9191 which is just what we want: @kbd{C-x ( M-- 3 n C-x )}.
9192
9193 Just for kicks, let's also do it algebraically:
9194 @w{@kbd{C-x ( ' -$$$, $$, $ @key{RET} C-x )}}.
9195
9196 @node Programming Answer 3, Programming Answer 4, Programming Answer 2, Answers to Exercises
9197 @subsection Programming Tutorial Exercise 3
9198
9199 @noindent
9200 Each of these functions can be computed using the stack, or using
9201 algebraic entry, whichever way you prefer:
9202
9203 @noindent
9204 Computing
9205 @texline @math{\displaystyle{\sin x \over x}}:
9206 @infoline @expr{sin(x) / x}:
9207
9208 Using the stack: @kbd{C-x ( @key{RET} S @key{TAB} / C-x )}.
9209
9210 Using algebraic entry: @kbd{C-x ( ' sin($)/$ @key{RET} C-x )}.
9211
9212 @noindent
9213 Computing the logarithm:
9214
9215 Using the stack: @kbd{C-x ( @key{TAB} B C-x )}
9216
9217 Using algebraic entry: @kbd{C-x ( ' log($,$$) @key{RET} C-x )}.
9218
9219 @noindent
9220 Computing the vector of integers:
9221
9222 Using the stack: @kbd{C-x ( 1 @key{RET} 1 C-u v x C-x )}. (Recall that
9223 @kbd{C-u v x} takes the vector size, starting value, and increment
9224 from the stack.)
9225
9226 Alternatively: @kbd{C-x ( ~ v x C-x )}. (The @kbd{~} key pops a
9227 number from the stack and uses it as the prefix argument for the
9228 next command.)
9229
9230 Using algebraic entry: @kbd{C-x ( ' index($) @key{RET} C-x )}.
9231
9232 @node Programming Answer 4, Programming Answer 5, Programming Answer 3, Answers to Exercises
9233 @subsection Programming Tutorial Exercise 4
9234
9235 @noindent
9236 Here's one way: @kbd{C-x ( @key{RET} V R + @key{TAB} v l / C-x )}.
9237
9238 @node Programming Answer 5, Programming Answer 6, Programming Answer 4, Answers to Exercises
9239 @subsection Programming Tutorial Exercise 5
9240
9241 @smallexample
9242 @group
9243 2: 1 1: 1.61803398502 2: 1.61803398502
9244 1: 20 . 1: 1.61803398875
9245 . .
9246
9247 1 @key{RET} 20 Z < & 1 + Z > I H P
9248 @end group
9249 @end smallexample
9250
9251 @noindent
9252 This answer is quite accurate.
9253
9254 @node Programming Answer 6, Programming Answer 7, Programming Answer 5, Answers to Exercises
9255 @subsection Programming Tutorial Exercise 6
9256
9257 @noindent
9258 Here is the matrix:
9259
9260 @example
9261 [ [ 0, 1 ] * [a, b] = [b, a + b]
9262 [ 1, 1 ] ]
9263 @end example
9264
9265 @noindent
9266 Thus @samp{[0, 1; 1, 1]^n * [1, 1]} computes Fibonacci numbers @expr{n+1}
9267 and @expr{n+2}. Here's one program that does the job:
9268
9269 @example
9270 C-x ( ' [0, 1; 1, 1] ^ ($-1) * [1, 1] @key{RET} v u @key{DEL} C-x )
9271 @end example
9272
9273 @noindent
9274 This program is quite efficient because Calc knows how to raise a
9275 matrix (or other value) to the power @expr{n} in only
9276 @texline @math{\log_2 n}
9277 @infoline @expr{log(n,2)}
9278 steps. For example, this program can compute the 1000th Fibonacci
9279 number (a 209-digit integer!) in about 10 steps; even though the
9280 @kbd{Z < ... Z >} solution had much simpler steps, it would have
9281 required so many steps that it would not have been practical.
9282
9283 @node Programming Answer 7, Programming Answer 8, Programming Answer 6, Answers to Exercises
9284 @subsection Programming Tutorial Exercise 7
9285
9286 @noindent
9287 The trick here is to compute the harmonic numbers differently, so that
9288 the loop counter itself accumulates the sum of reciprocals. We use
9289 a separate variable to hold the integer counter.
9290
9291 @smallexample
9292 @group
9293 1: 1 2: 1 1: .
9294 . 1: 4
9295 .
9296
9297 1 t 1 1 @key{RET} 4 Z ( t 2 r 1 1 + s 1 & Z )
9298 @end group
9299 @end smallexample
9300
9301 @noindent
9302 The body of the loop goes as follows: First save the harmonic sum
9303 so far in variable 2. Then delete it from the stack; the for loop
9304 itself will take care of remembering it for us. Next, recall the
9305 count from variable 1, add one to it, and feed its reciprocal to
9306 the for loop to use as the step value. The for loop will increase
9307 the ``loop counter'' by that amount and keep going until the
9308 loop counter exceeds 4.
9309
9310 @smallexample
9311 @group
9312 2: 31 3: 31
9313 1: 3.99498713092 2: 3.99498713092
9314 . 1: 4.02724519544
9315 .
9316
9317 r 1 r 2 @key{RET} 31 & +
9318 @end group
9319 @end smallexample
9320
9321 Thus we find that the 30th harmonic number is 3.99, and the 31st
9322 harmonic number is 4.02.
9323
9324 @node Programming Answer 8, Programming Answer 9, Programming Answer 7, Answers to Exercises
9325 @subsection Programming Tutorial Exercise 8
9326
9327 @noindent
9328 The first step is to compute the derivative @expr{f'(x)} and thus
9329 the formula
9330 @texline @math{\displaystyle{x - {f(x) \over f'(x)}}}.
9331 @infoline @expr{x - f(x)/f'(x)}.
9332
9333 (Because this definition is long, it will be repeated in concise form
9334 below. You can use @w{@kbd{M-# m}} to load it from there. While you are
9335 entering a @kbd{Z ` Z '} body in a macro, Calc simply collects
9336 keystrokes without executing them. In the following diagrams we'll
9337 pretend Calc actually executed the keystrokes as you typed them,
9338 just for purposes of illustration.)
9339
9340 @smallexample
9341 @group
9342 2: sin(cos(x)) - 0.5 3: 4.5
9343 1: 4.5 2: sin(cos(x)) - 0.5
9344 . 1: -(sin(x) cos(cos(x)))
9345 .
9346
9347 ' sin(cos(x))-0.5 @key{RET} 4.5 m r C-x ( Z ` @key{TAB} @key{RET} a d x @key{RET}
9348
9349 @end group
9350 @end smallexample
9351 @noindent
9352 @smallexample
9353 @group
9354 2: 4.5
9355 1: x + (sin(cos(x)) - 0.5) / sin(x) cos(cos(x))
9356 .
9357
9358 / ' x @key{RET} @key{TAB} - t 1
9359 @end group
9360 @end smallexample
9361
9362 Now, we enter the loop. We'll use a repeat loop with a 20-repetition
9363 limit just in case the method fails to converge for some reason.
9364 (Normally, the @w{@kbd{Z /}} command will stop the loop before all 20
9365 repetitions are done.)
9366
9367 @smallexample
9368 @group
9369 1: 4.5 3: 4.5 2: 4.5
9370 . 2: x + (sin(cos(x)) ... 1: 5.24196456928
9371 1: 4.5 .
9372 .
9373
9374 20 Z < @key{RET} r 1 @key{TAB} s l x @key{RET}
9375 @end group
9376 @end smallexample
9377
9378 This is the new guess for @expr{x}. Now we compare it with the
9379 old one to see if we've converged.
9380
9381 @smallexample
9382 @group
9383 3: 5.24196 2: 5.24196 1: 5.24196 1: 5.26345856348
9384 2: 5.24196 1: 0 . .
9385 1: 4.5 .
9386 .
9387
9388 @key{RET} M-@key{TAB} a = Z / Z > Z ' C-x )
9389 @end group
9390 @end smallexample
9391
9392 The loop converges in just a few steps to this value. To check
9393 the result, we can simply substitute it back into the equation.
9394
9395 @smallexample
9396 @group
9397 2: 5.26345856348
9398 1: 0.499999999997
9399 .
9400
9401 @key{RET} ' sin(cos($)) @key{RET}
9402 @end group
9403 @end smallexample
9404
9405 Let's test the new definition again:
9406
9407 @smallexample
9408 @group
9409 2: x^2 - 9 1: 3.
9410 1: 1 .
9411 .
9412
9413 ' x^2-9 @key{RET} 1 X
9414 @end group
9415 @end smallexample
9416
9417 Once again, here's the full Newton's Method definition:
9418
9419 @example
9420 @group
9421 C-x ( Z ` @key{TAB} @key{RET} a d x @key{RET} / ' x @key{RET} @key{TAB} - t 1
9422 20 Z < @key{RET} r 1 @key{TAB} s l x @key{RET}
9423 @key{RET} M-@key{TAB} a = Z /
9424 Z >
9425 Z '
9426 C-x )
9427 @end group
9428 @end example
9429
9430 @c [fix-ref Nesting and Fixed Points]
9431 It turns out that Calc has a built-in command for applying a formula
9432 repeatedly until it converges to a number. @xref{Nesting and Fixed Points},
9433 to see how to use it.
9434
9435 @c [fix-ref Root Finding]
9436 Also, of course, @kbd{a R} is a built-in command that uses Newton's
9437 method (among others) to look for numerical solutions to any equation.
9438 @xref{Root Finding}.
9439
9440 @node Programming Answer 9, Programming Answer 10, Programming Answer 8, Answers to Exercises
9441 @subsection Programming Tutorial Exercise 9
9442
9443 @noindent
9444 The first step is to adjust @expr{z} to be greater than 5. A simple
9445 ``for'' loop will do the job here. If @expr{z} is less than 5, we
9446 reduce the problem using
9447 @texline @math{\psi(z) = \psi(z+1) - 1/z}.
9448 @infoline @expr{psi(z) = psi(z+1) - 1/z}. We go
9449 on to compute
9450 @texline @math{\psi(z+1)},
9451 @infoline @expr{psi(z+1)},
9452 and remember to add back a factor of @expr{-1/z} when we're done. This
9453 step is repeated until @expr{z > 5}.
9454
9455 (Because this definition is long, it will be repeated in concise form
9456 below. You can use @w{@kbd{M-# m}} to load it from there. While you are
9457 entering a @kbd{Z ` Z '} body in a macro, Calc simply collects
9458 keystrokes without executing them. In the following diagrams we'll
9459 pretend Calc actually executed the keystrokes as you typed them,
9460 just for purposes of illustration.)
9461
9462 @smallexample
9463 @group
9464 1: 1. 1: 1.
9465 . .
9466
9467 1.0 @key{RET} C-x ( Z ` s 1 0 t 2
9468 @end group
9469 @end smallexample
9470
9471 Here, variable 1 holds @expr{z} and variable 2 holds the adjustment
9472 factor. If @expr{z < 5}, we use a loop to increase it.
9473
9474 (By the way, we started with @samp{1.0} instead of the integer 1 because
9475 otherwise the calculation below will try to do exact fractional arithmetic,
9476 and will never converge because fractions compare equal only if they
9477 are exactly equal, not just equal to within the current precision.)
9478
9479 @smallexample
9480 @group
9481 3: 1. 2: 1. 1: 6.
9482 2: 1. 1: 1 .
9483 1: 5 .
9484 .
9485
9486 @key{RET} 5 a < Z [ 5 Z ( & s + 2 1 s + 1 1 Z ) r 1 Z ]
9487 @end group
9488 @end smallexample
9489
9490 Now we compute the initial part of the sum:
9491 @texline @math{\ln z - {1 \over 2z}}
9492 @infoline @expr{ln(z) - 1/2z}
9493 minus the adjustment factor.
9494
9495 @smallexample
9496 @group
9497 2: 1.79175946923 2: 1.7084261359 1: -0.57490719743
9498 1: 0.0833333333333 1: 2.28333333333 .
9499 . .
9500
9501 L r 1 2 * & - r 2 -
9502 @end group
9503 @end smallexample
9504
9505 Now we evaluate the series. We'll use another ``for'' loop counting
9506 up the value of @expr{2 n}. (Calc does have a summation command,
9507 @kbd{a +}, but we'll use loops just to get more practice with them.)
9508
9509 @smallexample
9510 @group
9511 3: -0.5749 3: -0.5749 4: -0.5749 2: -0.5749
9512 2: 2 2: 1:6 3: 1:6 1: 2.3148e-3
9513 1: 40 1: 2 2: 2 .
9514 . . 1: 36.
9515 .
9516
9517 2 @key{RET} 40 Z ( @key{RET} k b @key{TAB} @key{RET} r 1 @key{TAB} ^ * /
9518
9519 @end group
9520 @end smallexample
9521 @noindent
9522 @smallexample
9523 @group
9524 3: -0.5749 3: -0.5772 2: -0.5772 1: -0.577215664892
9525 2: -0.5749 2: -0.5772 1: 0 .
9526 1: 2.3148e-3 1: -0.5749 .
9527 . .
9528
9529 @key{TAB} @key{RET} M-@key{TAB} - @key{RET} M-@key{TAB} a = Z / 2 Z ) Z ' C-x )
9530 @end group
9531 @end smallexample
9532
9533 This is the value of
9534 @texline @math{-\gamma},
9535 @infoline @expr{- gamma},
9536 with a slight bit of roundoff error. To get a full 12 digits, let's use
9537 a higher precision:
9538
9539 @smallexample
9540 @group
9541 2: -0.577215664892 2: -0.577215664892
9542 1: 1. 1: -0.577215664901532
9543
9544 1. @key{RET} p 16 @key{RET} X
9545 @end group
9546 @end smallexample
9547
9548 Here's the complete sequence of keystrokes:
9549
9550 @example
9551 @group
9552 C-x ( Z ` s 1 0 t 2
9553 @key{RET} 5 a < Z [ 5 Z ( & s + 2 1 s + 1 1 Z ) r 1 Z ]
9554 L r 1 2 * & - r 2 -
9555 2 @key{RET} 40 Z ( @key{RET} k b @key{TAB} @key{RET} r 1 @key{TAB} ^ * /
9556 @key{TAB} @key{RET} M-@key{TAB} - @key{RET} M-@key{TAB} a = Z /
9557 2 Z )
9558 Z '
9559 C-x )
9560 @end group
9561 @end example
9562
9563 @node Programming Answer 10, Programming Answer 11, Programming Answer 9, Answers to Exercises
9564 @subsection Programming Tutorial Exercise 10
9565
9566 @noindent
9567 Taking the derivative of a term of the form @expr{x^n} will produce
9568 a term like
9569 @texline @math{n x^{n-1}}.
9570 @infoline @expr{n x^(n-1)}.
9571 Taking the derivative of a constant
9572 produces zero. From this it is easy to see that the @expr{n}th
9573 derivative of a polynomial, evaluated at @expr{x = 0}, will equal the
9574 coefficient on the @expr{x^n} term times @expr{n!}.
9575
9576 (Because this definition is long, it will be repeated in concise form
9577 below. You can use @w{@kbd{M-# m}} to load it from there. While you are
9578 entering a @kbd{Z ` Z '} body in a macro, Calc simply collects
9579 keystrokes without executing them. In the following diagrams we'll
9580 pretend Calc actually executed the keystrokes as you typed them,
9581 just for purposes of illustration.)
9582
9583 @smallexample
9584 @group
9585 2: 5 x^4 + (x + 1)^2 3: 5 x^4 + (x + 1)^2
9586 1: 6 2: 0
9587 . 1: 6
9588 .
9589
9590 ' 5 x^4 + (x+1)^2 @key{RET} 6 C-x ( Z ` [ ] t 1 0 @key{TAB}
9591 @end group
9592 @end smallexample
9593
9594 @noindent
9595 Variable 1 will accumulate the vector of coefficients.
9596
9597 @smallexample
9598 @group
9599 2: 0 3: 0 2: 5 x^4 + ...
9600 1: 5 x^4 + ... 2: 5 x^4 + ... 1: 1
9601 . 1: 1 .
9602 .
9603
9604 Z ( @key{TAB} @key{RET} 0 s l x @key{RET} M-@key{TAB} ! / s | 1
9605 @end group
9606 @end smallexample
9607
9608 @noindent
9609 Note that @kbd{s | 1} appends the top-of-stack value to the vector
9610 in a variable; it is completely analogous to @kbd{s + 1}. We could
9611 have written instead, @kbd{r 1 @key{TAB} | t 1}.
9612
9613 @smallexample
9614 @group
9615 1: 20 x^3 + 2 x + 2 1: 0 1: [1, 2, 1, 0, 5, 0, 0]
9616 . . .
9617
9618 a d x @key{RET} 1 Z ) @key{DEL} r 1 Z ' C-x )
9619 @end group
9620 @end smallexample
9621
9622 To convert back, a simple method is just to map the coefficients
9623 against a table of powers of @expr{x}.
9624
9625 @smallexample
9626 @group
9627 2: [1, 2, 1, 0, 5, 0, 0] 2: [1, 2, 1, 0, 5, 0, 0]
9628 1: 6 1: [0, 1, 2, 3, 4, 5, 6]
9629 . .
9630
9631 6 @key{RET} 1 + 0 @key{RET} 1 C-u v x
9632
9633 @end group
9634 @end smallexample
9635 @noindent
9636 @smallexample
9637 @group
9638 2: [1, 2, 1, 0, 5, 0, 0] 2: 1 + 2 x + x^2 + 5 x^4
9639 1: [1, x, x^2, x^3, ... ] .
9640 .
9641
9642 ' x @key{RET} @key{TAB} V M ^ *
9643 @end group
9644 @end smallexample
9645
9646 Once again, here are the whole polynomial to/from vector programs:
9647
9648 @example
9649 @group
9650 C-x ( Z ` [ ] t 1 0 @key{TAB}
9651 Z ( @key{TAB} @key{RET} 0 s l x @key{RET} M-@key{TAB} ! / s | 1
9652 a d x @key{RET}
9653 1 Z ) r 1
9654 Z '
9655 C-x )
9656
9657 C-x ( 1 + 0 @key{RET} 1 C-u v x ' x @key{RET} @key{TAB} V M ^ * C-x )
9658 @end group
9659 @end example
9660
9661 @node Programming Answer 11, Programming Answer 12, Programming Answer 10, Answers to Exercises
9662 @subsection Programming Tutorial Exercise 11
9663
9664 @noindent
9665 First we define a dummy program to go on the @kbd{z s} key. The true
9666 @w{@kbd{z s}} key is supposed to take two numbers from the stack and
9667 return one number, so @key{DEL} as a dummy definition will make
9668 sure the stack comes out right.
9669
9670 @smallexample
9671 @group
9672 2: 4 1: 4 2: 4
9673 1: 2 . 1: 2
9674 . .
9675
9676 4 @key{RET} 2 C-x ( @key{DEL} C-x ) Z K s @key{RET} 2
9677 @end group
9678 @end smallexample
9679
9680 The last step replaces the 2 that was eaten during the creation
9681 of the dummy @kbd{z s} command. Now we move on to the real
9682 definition. The recurrence needs to be rewritten slightly,
9683 to the form @expr{s(n,m) = s(n-1,m-1) - (n-1) s(n-1,m)}.
9684
9685 (Because this definition is long, it will be repeated in concise form
9686 below. You can use @kbd{M-# m} to load it from there.)
9687
9688 @smallexample
9689 @group
9690 2: 4 4: 4 3: 4 2: 4
9691 1: 2 3: 2 2: 2 1: 2
9692 . 2: 4 1: 0 .
9693 1: 2 .
9694 .
9695
9696 C-x ( M-2 @key{RET} a = Z [ @key{DEL} @key{DEL} 1 Z :
9697
9698 @end group
9699 @end smallexample
9700 @noindent
9701 @smallexample
9702 @group
9703 4: 4 2: 4 2: 3 4: 3 4: 3 3: 3
9704 3: 2 1: 2 1: 2 3: 2 3: 2 2: 2
9705 2: 2 . . 2: 3 2: 3 1: 3
9706 1: 0 1: 2 1: 1 .
9707 . . .
9708
9709 @key{RET} 0 a = Z [ @key{DEL} @key{DEL} 0 Z : @key{TAB} 1 - @key{TAB} M-2 @key{RET} 1 - z s
9710 @end group
9711 @end smallexample
9712
9713 @noindent
9714 (Note that the value 3 that our dummy @kbd{z s} produces is not correct;
9715 it is merely a placeholder that will do just as well for now.)
9716
9717 @smallexample
9718 @group
9719 3: 3 4: 3 3: 3 2: 3 1: -6
9720 2: 3 3: 3 2: 3 1: 9 .
9721 1: 2 2: 3 1: 3 .
9722 . 1: 2 .
9723 .
9724
9725 M-@key{TAB} M-@key{TAB} @key{TAB} @key{RET} M-@key{TAB} z s * -
9726
9727 @end group
9728 @end smallexample
9729 @noindent
9730 @smallexample
9731 @group
9732 1: -6 2: 4 1: 11 2: 11
9733 . 1: 2 . 1: 11
9734 . .
9735
9736 Z ] Z ] C-x ) Z K s @key{RET} @key{DEL} 4 @key{RET} 2 z s M-@key{RET} k s
9737 @end group
9738 @end smallexample
9739
9740 Even though the result that we got during the definition was highly
9741 bogus, once the definition is complete the @kbd{z s} command gets
9742 the right answers.
9743
9744 Here's the full program once again:
9745
9746 @example
9747 @group
9748 C-x ( M-2 @key{RET} a =
9749 Z [ @key{DEL} @key{DEL} 1
9750 Z : @key{RET} 0 a =
9751 Z [ @key{DEL} @key{DEL} 0
9752 Z : @key{TAB} 1 - @key{TAB} M-2 @key{RET} 1 - z s
9753 M-@key{TAB} M-@key{TAB} @key{TAB} @key{RET} M-@key{TAB} z s * -
9754 Z ]
9755 Z ]
9756 C-x )
9757 @end group
9758 @end example
9759
9760 You can read this definition using @kbd{M-# m} (@code{read-kbd-macro})
9761 followed by @kbd{Z K s}, without having to make a dummy definition
9762 first, because @code{read-kbd-macro} doesn't need to execute the
9763 definition as it reads it in. For this reason, @code{M-# m} is often
9764 the easiest way to create recursive programs in Calc.
9765
9766 @node Programming Answer 12, , Programming Answer 11, Answers to Exercises
9767 @subsection Programming Tutorial Exercise 12
9768
9769 @noindent
9770 This turns out to be a much easier way to solve the problem. Let's
9771 denote Stirling numbers as calls of the function @samp{s}.
9772
9773 First, we store the rewrite rules corresponding to the definition of
9774 Stirling numbers in a convenient variable:
9775
9776 @smallexample
9777 s e StirlingRules @key{RET}
9778 [ s(n,n) := 1 :: n >= 0,
9779 s(n,0) := 0 :: n > 0,
9780 s(n,m) := s(n-1,m-1) - (n-1) s(n-1,m) :: n >= m :: m >= 1 ]
9781 C-c C-c
9782 @end smallexample
9783
9784 Now, it's just a matter of applying the rules:
9785
9786 @smallexample
9787 @group
9788 2: 4 1: s(4, 2) 1: 11
9789 1: 2 . .
9790 .
9791
9792 4 @key{RET} 2 C-x ( ' s($$,$) @key{RET} a r StirlingRules @key{RET} C-x )
9793 @end group
9794 @end smallexample
9795
9796 As in the case of the @code{fib} rules, it would be useful to put these
9797 rules in @code{EvalRules} and to add a @samp{:: remember} condition to
9798 the last rule.
9799
9800 @c This ends the table-of-contents kludge from above:
9801 @tex
9802 \global\let\chapternofonts=\oldchapternofonts
9803 @end tex
9804
9805 @c [reference]
9806
9807 @node Introduction, Data Types, Tutorial, Top
9808 @chapter Introduction
9809
9810 @noindent
9811 This chapter is the beginning of the Calc reference manual.
9812 It covers basic concepts such as the stack, algebraic and
9813 numeric entry, undo, numeric prefix arguments, etc.
9814
9815 @c [when-split]
9816 @c (Chapter 2, the Tutorial, has been printed in a separate volume.)
9817
9818 @menu
9819 * Basic Commands::
9820 * Help Commands::
9821 * Stack Basics::
9822 * Numeric Entry::
9823 * Algebraic Entry::
9824 * Quick Calculator::
9825 * Keypad Mode::
9826 * Prefix Arguments::
9827 * Undo::
9828 * Error Messages::
9829 * Multiple Calculators::
9830 * Troubleshooting Commands::
9831 @end menu
9832
9833 @node Basic Commands, Help Commands, Introduction, Introduction
9834 @section Basic Commands
9835
9836 @noindent
9837 @pindex calc
9838 @pindex calc-mode
9839 @cindex Starting the Calculator
9840 @cindex Running the Calculator
9841 To start the Calculator in its standard interface, type @kbd{M-x calc}.
9842 By default this creates a pair of small windows, @samp{*Calculator*}
9843 and @samp{*Calc Trail*}. The former displays the contents of the
9844 Calculator stack and is manipulated exclusively through Calc commands.
9845 It is possible (though not usually necessary) to create several Calc
9846 mode buffers each of which has an independent stack, undo list, and
9847 mode settings. There is exactly one Calc Trail buffer; it records a
9848 list of the results of all calculations that have been done. The
9849 Calc Trail buffer uses a variant of Calc mode, so Calculator commands
9850 still work when the trail buffer's window is selected. It is possible
9851 to turn the trail window off, but the @samp{*Calc Trail*} buffer itself
9852 still exists and is updated silently. @xref{Trail Commands}.
9853
9854 @kindex M-# c
9855 @kindex M-# M-#
9856 @ignore
9857 @mindex @null
9858 @end ignore
9859 @kindex M-# #
9860 In most installations, the @kbd{M-# c} key sequence is a more
9861 convenient way to start the Calculator. Also, @kbd{M-# M-#} and
9862 @kbd{M-# #} are synonyms for @kbd{M-# c} unless you last used Calc
9863 in its Keypad mode.
9864
9865 @kindex x
9866 @kindex M-x
9867 @pindex calc-execute-extended-command
9868 Most Calc commands use one or two keystrokes. Lower- and upper-case
9869 letters are distinct. Commands may also be entered in full @kbd{M-x} form;
9870 for some commands this is the only form. As a convenience, the @kbd{x}
9871 key (@code{calc-execute-extended-command})
9872 is like @kbd{M-x} except that it enters the initial string @samp{calc-}
9873 for you. For example, the following key sequences are equivalent:
9874 @kbd{S}, @kbd{M-x calc-sin @key{RET}}, @kbd{x sin @key{RET}}.
9875
9876 @cindex Extensions module
9877 @cindex @file{calc-ext} module
9878 The Calculator exists in many parts. When you type @kbd{M-# c}, the
9879 Emacs ``auto-load'' mechanism will bring in only the first part, which
9880 contains the basic arithmetic functions. The other parts will be
9881 auto-loaded the first time you use the more advanced commands like trig
9882 functions or matrix operations. This is done to improve the response time
9883 of the Calculator in the common case when all you need to do is a
9884 little arithmetic. If for some reason the Calculator fails to load an
9885 extension module automatically, you can force it to load all the
9886 extensions by using the @kbd{M-# L} (@code{calc-load-everything})
9887 command. @xref{Mode Settings}.
9888
9889 If you type @kbd{M-x calc} or @kbd{M-# c} with any numeric prefix argument,
9890 the Calculator is loaded if necessary, but it is not actually started.
9891 If the argument is positive, the @file{calc-ext} extensions are also
9892 loaded if necessary. User-written Lisp code that wishes to make use
9893 of Calc's arithmetic routines can use @samp{(calc 0)} or @samp{(calc 1)}
9894 to auto-load the Calculator.
9895
9896 @kindex M-# b
9897 @pindex full-calc
9898 If you type @kbd{M-# b}, then next time you use @kbd{M-# c} you
9899 will get a Calculator that uses the full height of the Emacs screen.
9900 When full-screen mode is on, @kbd{M-# c} runs the @code{full-calc}
9901 command instead of @code{calc}. From the Unix shell you can type
9902 @samp{emacs -f full-calc} to start a new Emacs specifically for use
9903 as a calculator. When Calc is started from the Emacs command line
9904 like this, Calc's normal ``quit'' commands actually quit Emacs itself.
9905
9906 @kindex M-# o
9907 @pindex calc-other-window
9908 The @kbd{M-# o} command is like @kbd{M-# c} except that the Calc
9909 window is not actually selected. If you are already in the Calc
9910 window, @kbd{M-# o} switches you out of it. (The regular Emacs
9911 @kbd{C-x o} command would also work for this, but it has a
9912 tendency to drop you into the Calc Trail window instead, which
9913 @kbd{M-# o} takes care not to do.)
9914
9915 @ignore
9916 @mindex M-# q
9917 @end ignore
9918 For one quick calculation, you can type @kbd{M-# q} (@code{quick-calc})
9919 which prompts you for a formula (like @samp{2+3/4}). The result is
9920 displayed at the bottom of the Emacs screen without ever creating
9921 any special Calculator windows. @xref{Quick Calculator}.
9922
9923 @ignore
9924 @mindex M-# k
9925 @end ignore
9926 Finally, if you are using the X window system you may want to try
9927 @kbd{M-# k} (@code{calc-keypad}) which runs Calc with a
9928 ``calculator keypad'' picture as well as a stack display. Click on
9929 the keys with the mouse to operate the calculator. @xref{Keypad Mode}.
9930
9931 @kindex q
9932 @pindex calc-quit
9933 @cindex Quitting the Calculator
9934 @cindex Exiting the Calculator
9935 The @kbd{q} key (@code{calc-quit}) exits Calc mode and closes the
9936 Calculator's window(s). It does not delete the Calculator buffers.
9937 If you type @kbd{M-x calc} again, the Calculator will reappear with the
9938 contents of the stack intact. Typing @kbd{M-# c} or @kbd{M-# M-#}
9939 again from inside the Calculator buffer is equivalent to executing
9940 @code{calc-quit}; you can think of @kbd{M-# M-#} as toggling the
9941 Calculator on and off.
9942
9943 @kindex M-# x
9944 The @kbd{M-# x} command also turns the Calculator off, no matter which
9945 user interface (standard, Keypad, or Embedded) is currently active.
9946 It also cancels @code{calc-edit} mode if used from there.
9947
9948 @kindex d @key{SPC}
9949 @pindex calc-refresh
9950 @cindex Refreshing a garbled display
9951 @cindex Garbled displays, refreshing
9952 The @kbd{d @key{SPC}} key sequence (@code{calc-refresh}) redraws the contents
9953 of the Calculator buffer from memory. Use this if the contents of the
9954 buffer have been damaged somehow.
9955
9956 @ignore
9957 @mindex o
9958 @end ignore
9959 The @kbd{o} key (@code{calc-realign}) moves the cursor back to its
9960 ``home'' position at the bottom of the Calculator buffer.
9961
9962 @kindex <
9963 @kindex >
9964 @pindex calc-scroll-left
9965 @pindex calc-scroll-right
9966 @cindex Horizontal scrolling
9967 @cindex Scrolling
9968 @cindex Wide text, scrolling
9969 The @kbd{<} and @kbd{>} keys are bound to @code{calc-scroll-left} and
9970 @code{calc-scroll-right}. These are just like the normal horizontal
9971 scrolling commands except that they scroll one half-screen at a time by
9972 default. (Calc formats its output to fit within the bounds of the
9973 window whenever it can.)
9974
9975 @kindex @{
9976 @kindex @}
9977 @pindex calc-scroll-down
9978 @pindex calc-scroll-up
9979 @cindex Vertical scrolling
9980 The @kbd{@{} and @kbd{@}} keys are bound to @code{calc-scroll-down}
9981 and @code{calc-scroll-up}. They scroll up or down by one-half the
9982 height of the Calc window.
9983
9984 @kindex M-# 0
9985 @pindex calc-reset
9986 The @kbd{M-# 0} command (@code{calc-reset}; that's @kbd{M-#} followed
9987 by a zero) resets the Calculator to its default state. This clears
9988 the stack, resets all the modes, clears the caches (@pxref{Caches}),
9989 and so on. (It does @emph{not} erase the values of any variables.)
9990 With a numeric prefix argument, @kbd{M-# 0} preserves the contents
9991 of the stack but resets everything else.
9992
9993 @pindex calc-version
9994 The @kbd{M-x calc-version} command displays the current version number
9995 of Calc and the name of the person who installed it on your system.
9996 (This information is also present in the @samp{*Calc Trail*} buffer,
9997 and in the output of the @kbd{h h} command.)
9998
9999 @node Help Commands, Stack Basics, Basic Commands, Introduction
10000 @section Help Commands
10001
10002 @noindent
10003 @cindex Help commands
10004 @kindex ?
10005 @pindex calc-help
10006 The @kbd{?} key (@code{calc-help}) displays a series of brief help messages.
10007 Some keys (such as @kbd{b} and @kbd{d}) are prefix keys, like Emacs'
10008 @key{ESC} and @kbd{C-x} prefixes. You can type
10009 @kbd{?} after a prefix to see a list of commands beginning with that
10010 prefix. (If the message includes @samp{[MORE]}, press @kbd{?} again
10011 to see additional commands for that prefix.)
10012
10013 @kindex h h
10014 @pindex calc-full-help
10015 The @kbd{h h} (@code{calc-full-help}) command displays all the @kbd{?}
10016 responses at once. When printed, this makes a nice, compact (three pages)
10017 summary of Calc keystrokes.
10018
10019 In general, the @kbd{h} key prefix introduces various commands that
10020 provide help within Calc. Many of the @kbd{h} key functions are
10021 Calc-specific analogues to the @kbd{C-h} functions for Emacs help.
10022
10023 @kindex h i
10024 @kindex M-# i
10025 @kindex i
10026 @pindex calc-info
10027 The @kbd{h i} (@code{calc-info}) command runs the Emacs Info system
10028 to read this manual on-line. This is basically the same as typing
10029 @kbd{C-h i} (the regular way to run the Info system), then, if Info
10030 is not already in the Calc manual, selecting the beginning of the
10031 manual. The @kbd{M-# i} command is another way to read the Calc
10032 manual; it is different from @kbd{h i} in that it works any time,
10033 not just inside Calc. The plain @kbd{i} key is also equivalent to
10034 @kbd{h i}, though this key is obsolete and may be replaced with a
10035 different command in a future version of Calc.
10036
10037 @kindex h t
10038 @kindex M-# t
10039 @pindex calc-tutorial
10040 The @kbd{h t} (@code{calc-tutorial}) command runs the Info system on
10041 the Tutorial section of the Calc manual. It is like @kbd{h i},
10042 except that it selects the starting node of the tutorial rather
10043 than the beginning of the whole manual. (It actually selects the
10044 node ``Interactive Tutorial'' which tells a few things about
10045 using the Info system before going on to the actual tutorial.)
10046 The @kbd{M-# t} key is equivalent to @kbd{h t} (but it works at
10047 all times).
10048
10049 @kindex h s
10050 @kindex M-# s
10051 @pindex calc-info-summary
10052 The @kbd{h s} (@code{calc-info-summary}) command runs the Info system
10053 on the Summary node of the Calc manual. @xref{Summary}. The @kbd{M-# s}
10054 key is equivalent to @kbd{h s}.
10055
10056 @kindex h k
10057 @pindex calc-describe-key
10058 The @kbd{h k} (@code{calc-describe-key}) command looks up a key
10059 sequence in the Calc manual. For example, @kbd{h k H a S} looks
10060 up the documentation on the @kbd{H a S} (@code{calc-solve-for})
10061 command. This works by looking up the textual description of
10062 the key(s) in the Key Index of the manual, then jumping to the
10063 node indicated by the index.
10064
10065 Most Calc commands do not have traditional Emacs documentation
10066 strings, since the @kbd{h k} command is both more convenient and
10067 more instructive. This means the regular Emacs @kbd{C-h k}
10068 (@code{describe-key}) command will not be useful for Calc keystrokes.
10069
10070 @kindex h c
10071 @pindex calc-describe-key-briefly
10072 The @kbd{h c} (@code{calc-describe-key-briefly}) command reads a
10073 key sequence and displays a brief one-line description of it at
10074 the bottom of the screen. It looks for the key sequence in the
10075 Summary node of the Calc manual; if it doesn't find the sequence
10076 there, it acts just like its regular Emacs counterpart @kbd{C-h c}
10077 (@code{describe-key-briefly}). For example, @kbd{h c H a S}
10078 gives the description:
10079
10080 @smallexample
10081 H a S runs calc-solve-for: a `H a S' v => fsolve(a,v) (?=notes)
10082 @end smallexample
10083
10084 @noindent
10085 which means the command @kbd{H a S} or @kbd{H M-x calc-solve-for}
10086 takes a value @expr{a} from the stack, prompts for a value @expr{v},
10087 then applies the algebraic function @code{fsolve} to these values.
10088 The @samp{?=notes} message means you can now type @kbd{?} to see
10089 additional notes from the summary that apply to this command.
10090
10091 @kindex h f
10092 @pindex calc-describe-function
10093 The @kbd{h f} (@code{calc-describe-function}) command looks up an
10094 algebraic function or a command name in the Calc manual. Enter an
10095 algebraic function name to look up that function in the Function
10096 Index or enter a command name beginning with @samp{calc-} to look it
10097 up in the Command Index. This command will also look up operator
10098 symbols that can appear in algebraic formulas, like @samp{%} and
10099 @samp{=>}.
10100
10101 @kindex h v
10102 @pindex calc-describe-variable
10103 The @kbd{h v} (@code{calc-describe-variable}) command looks up a
10104 variable in the Calc manual. Enter a variable name like @code{pi} or
10105 @code{PlotRejects}.
10106
10107 @kindex h b
10108 @pindex describe-bindings
10109 The @kbd{h b} (@code{calc-describe-bindings}) command is just like
10110 @kbd{C-h b}, except that only local (Calc-related) key bindings are
10111 listed.
10112
10113 @kindex h n
10114 The @kbd{h n} or @kbd{h C-n} (@code{calc-view-news}) command displays
10115 the ``news'' or change history of Calc. This is kept in the file
10116 @file{README}, which Calc looks for in the same directory as the Calc
10117 source files.
10118
10119 @kindex h C-c
10120 @kindex h C-d
10121 @kindex h C-w
10122 The @kbd{h C-c}, @kbd{h C-d}, and @kbd{h C-w} keys display copying,
10123 distribution, and warranty information about Calc. These work by
10124 pulling up the appropriate parts of the ``Copying'' or ``Reporting
10125 Bugs'' sections of the manual.
10126
10127 @node Stack Basics, Numeric Entry, Help Commands, Introduction
10128 @section Stack Basics
10129
10130 @noindent
10131 @cindex Stack basics
10132 @c [fix-tut RPN Calculations and the Stack]
10133 Calc uses RPN notation. If you are not familiar with RPN, @pxref{RPN
10134 Tutorial}.
10135
10136 To add the numbers 1 and 2 in Calc you would type the keys:
10137 @kbd{1 @key{RET} 2 +}.
10138 (@key{RET} corresponds to the @key{ENTER} key on most calculators.)
10139 The first three keystrokes ``push'' the numbers 1 and 2 onto the stack. The
10140 @kbd{+} key always ``pops'' the top two numbers from the stack, adds them,
10141 and pushes the result (3) back onto the stack. This number is ready for
10142 further calculations: @kbd{5 -} pushes 5 onto the stack, then pops the
10143 3 and 5, subtracts them, and pushes the result (@mathit{-2}).
10144
10145 Note that the ``top'' of the stack actually appears at the @emph{bottom}
10146 of the buffer. A line containing a single @samp{.} character signifies
10147 the end of the buffer; Calculator commands operate on the number(s)
10148 directly above this line. The @kbd{d t} (@code{calc-truncate-stack})
10149 command allows you to move the @samp{.} marker up and down in the stack;
10150 @pxref{Truncating the Stack}.
10151
10152 @kindex d l
10153 @pindex calc-line-numbering
10154 Stack elements are numbered consecutively, with number 1 being the top of
10155 the stack. These line numbers are ordinarily displayed on the lefthand side
10156 of the window. The @kbd{d l} (@code{calc-line-numbering}) command controls
10157 whether these numbers appear. (Line numbers may be turned off since they
10158 slow the Calculator down a bit and also clutter the display.)
10159
10160 @kindex o
10161 @pindex calc-realign
10162 The unshifted letter @kbd{o} (@code{calc-realign}) command repositions
10163 the cursor to its top-of-stack ``home'' position. It also undoes any
10164 horizontal scrolling in the window. If you give it a numeric prefix
10165 argument, it instead moves the cursor to the specified stack element.
10166
10167 The @key{RET} (or equivalent @key{SPC}) key is only required to separate
10168 two consecutive numbers.
10169 (After all, if you typed @kbd{1 2} by themselves the Calculator
10170 would enter the number 12.) If you press @key{RET} or @key{SPC} @emph{not}
10171 right after typing a number, the key duplicates the number on the top of
10172 the stack. @kbd{@key{RET} *} is thus a handy way to square a number.
10173
10174 The @key{DEL} key pops and throws away the top number on the stack.
10175 The @key{TAB} key swaps the top two objects on the stack.
10176 @xref{Stack and Trail}, for descriptions of these and other stack-related
10177 commands.
10178
10179 @node Numeric Entry, Algebraic Entry, Stack Basics, Introduction
10180 @section Numeric Entry
10181
10182 @noindent
10183 @kindex 0-9
10184 @kindex .
10185 @kindex e
10186 @cindex Numeric entry
10187 @cindex Entering numbers
10188 Pressing a digit or other numeric key begins numeric entry using the
10189 minibuffer. The number is pushed on the stack when you press the @key{RET}
10190 or @key{SPC} keys. If you press any other non-numeric key, the number is
10191 pushed onto the stack and the appropriate operation is performed. If
10192 you press a numeric key which is not valid, the key is ignored.
10193
10194 @cindex Minus signs
10195 @cindex Negative numbers, entering
10196 @kindex _
10197 There are three different concepts corresponding to the word ``minus,''
10198 typified by @expr{a-b} (subtraction), @expr{-x}
10199 (change-sign), and @expr{-5} (negative number). Calc uses three
10200 different keys for these operations, respectively:
10201 @kbd{-}, @kbd{n}, and @kbd{_} (the underscore). The @kbd{-} key subtracts
10202 the two numbers on the top of the stack. The @kbd{n} key changes the sign
10203 of the number on the top of the stack or the number currently being entered.
10204 The @kbd{_} key begins entry of a negative number or changes the sign of
10205 the number currently being entered. The following sequences all enter the
10206 number @mathit{-5} onto the stack: @kbd{0 @key{RET} 5 -}, @kbd{5 n @key{RET}},
10207 @kbd{5 @key{RET} n}, @kbd{_ 5 @key{RET}}, @kbd{5 _ @key{RET}}.
10208
10209 Some other keys are active during numeric entry, such as @kbd{#} for
10210 non-decimal numbers, @kbd{:} for fractions, and @kbd{@@} for HMS forms.
10211 These notations are described later in this manual with the corresponding
10212 data types. @xref{Data Types}.
10213
10214 During numeric entry, the only editing key available is @key{DEL}.
10215
10216 @node Algebraic Entry, Quick Calculator, Numeric Entry, Introduction
10217 @section Algebraic Entry
10218
10219 @noindent
10220 @kindex '
10221 @pindex calc-algebraic-entry
10222 @cindex Algebraic notation
10223 @cindex Formulas, entering
10224 Calculations can also be entered in algebraic form. This is accomplished
10225 by typing the apostrophe key, @kbd{'}, followed by the expression in
10226 standard format: @kbd{@key{'} 2+3*4 @key{RET}} computes
10227 @texline @math{2+(3\times4) = 14}
10228 @infoline @expr{2+(3*4) = 14}
10229 and pushes that on the stack. If you wish you can
10230 ignore the RPN aspect of Calc altogether and simply enter algebraic
10231 expressions in this way. You may want to use @key{DEL} every so often to
10232 clear previous results off the stack.
10233
10234 You can press the apostrophe key during normal numeric entry to switch
10235 the half-entered number into Algebraic entry mode. One reason to do this
10236 would be to use the full Emacs cursor motion and editing keys, which are
10237 available during algebraic entry but not during numeric entry.
10238
10239 In the same vein, during either numeric or algebraic entry you can
10240 press @kbd{`} (backquote) to switch to @code{calc-edit} mode, where
10241 you complete your half-finished entry in a separate buffer.
10242 @xref{Editing Stack Entries}.
10243
10244 @kindex m a
10245 @pindex calc-algebraic-mode
10246 @cindex Algebraic Mode
10247 If you prefer algebraic entry, you can use the command @kbd{m a}
10248 (@code{calc-algebraic-mode}) to set Algebraic mode. In this mode,
10249 digits and other keys that would normally start numeric entry instead
10250 start full algebraic entry; as long as your formula begins with a digit
10251 you can omit the apostrophe. Open parentheses and square brackets also
10252 begin algebraic entry. You can still do RPN calculations in this mode,
10253 but you will have to press @key{RET} to terminate every number:
10254 @kbd{2 @key{RET} 3 @key{RET} * 4 @key{RET} +} would accomplish the same
10255 thing as @kbd{2*3+4 @key{RET}}.
10256
10257 @cindex Incomplete Algebraic Mode
10258 If you give a numeric prefix argument like @kbd{C-u} to the @kbd{m a}
10259 command, it enables Incomplete Algebraic mode; this is like regular
10260 Algebraic mode except that it applies to the @kbd{(} and @kbd{[} keys
10261 only. Numeric keys still begin a numeric entry in this mode.
10262
10263 @kindex m t
10264 @pindex calc-total-algebraic-mode
10265 @cindex Total Algebraic Mode
10266 The @kbd{m t} (@code{calc-total-algebraic-mode}) gives you an even
10267 stronger algebraic-entry mode, in which @emph{all} regular letter and
10268 punctuation keys begin algebraic entry. Use this if you prefer typing
10269 @w{@kbd{sqrt( )}} instead of @kbd{Q}, @w{@kbd{factor( )}} instead of
10270 @kbd{a f}, and so on. To type regular Calc commands when you are in
10271 Total Algebraic mode, hold down the @key{META} key. Thus @kbd{M-q}
10272 is the command to quit Calc, @kbd{M-p} sets the precision, and
10273 @kbd{M-m t} (or @kbd{M-m M-t}, if you prefer) turns Total Algebraic
10274 mode back off again. Meta keys also terminate algebraic entry, so
10275 that @kbd{2+3 M-S} is equivalent to @kbd{2+3 @key{RET} M-S}. The symbol
10276 @samp{Alg*} will appear in the mode line whenever you are in this mode.
10277
10278 Pressing @kbd{'} (the apostrophe) a second time re-enters the previous
10279 algebraic formula. You can then use the normal Emacs editing keys to
10280 modify this formula to your liking before pressing @key{RET}.
10281
10282 @kindex $
10283 @cindex Formulas, referring to stack
10284 Within a formula entered from the keyboard, the symbol @kbd{$}
10285 represents the number on the top of the stack. If an entered formula
10286 contains any @kbd{$} characters, the Calculator replaces the top of
10287 stack with that formula rather than simply pushing the formula onto the
10288 stack. Thus, @kbd{' 1+2 @key{RET}} pushes 3 on the stack, and @kbd{$*2
10289 @key{RET}} replaces it with 6. Note that the @kbd{$} key always
10290 initiates algebraic entry; the @kbd{'} is unnecessary if @kbd{$} is the
10291 first character in the new formula.
10292
10293 Higher stack elements can be accessed from an entered formula with the
10294 symbols @kbd{$$}, @kbd{$$$}, and so on. The number of stack elements
10295 removed (to be replaced by the entered values) equals the number of dollar
10296 signs in the longest such symbol in the formula. For example, @samp{$$+$$$}
10297 adds the second and third stack elements, replacing the top three elements
10298 with the answer. (All information about the top stack element is thus lost
10299 since no single @samp{$} appears in this formula.)
10300
10301 A slightly different way to refer to stack elements is with a dollar
10302 sign followed by a number: @samp{$1}, @samp{$2}, and so on are much
10303 like @samp{$}, @samp{$$}, etc., except that stack entries referred
10304 to numerically are not replaced by the algebraic entry. That is, while
10305 @samp{$+1} replaces 5 on the stack with 6, @samp{$1+1} leaves the 5
10306 on the stack and pushes an additional 6.
10307
10308 If a sequence of formulas are entered separated by commas, each formula
10309 is pushed onto the stack in turn. For example, @samp{1,2,3} pushes
10310 those three numbers onto the stack (leaving the 3 at the top), and
10311 @samp{$+1,$-1} replaces a 5 on the stack with 4 followed by 6. Also,
10312 @samp{$,$$} exchanges the top two elements of the stack, just like the
10313 @key{TAB} key.
10314
10315 You can finish an algebraic entry with @kbd{M-=} or @kbd{M-@key{RET}} instead
10316 of @key{RET}. This uses @kbd{=} to evaluate the variables in each
10317 formula that goes onto the stack. (Thus @kbd{' pi @key{RET}} pushes
10318 the variable @samp{pi}, but @kbd{' pi M-@key{RET}} pushes 3.1415.)
10319
10320 If you finish your algebraic entry by pressing @key{LFD} (or @kbd{C-j})
10321 instead of @key{RET}, Calc disables the default simplifications
10322 (as if by @kbd{m O}; @pxref{Simplification Modes}) while the entry
10323 is being pushed on the stack. Thus @kbd{' 1+2 @key{RET}} pushes 3
10324 on the stack, but @kbd{' 1+2 @key{LFD}} pushes the formula @expr{1+2};
10325 you might then press @kbd{=} when it is time to evaluate this formula.
10326
10327 @node Quick Calculator, Prefix Arguments, Algebraic Entry, Introduction
10328 @section ``Quick Calculator'' Mode
10329
10330 @noindent
10331 @kindex M-# q
10332 @pindex quick-calc
10333 @cindex Quick Calculator
10334 There is another way to invoke the Calculator if all you need to do
10335 is make one or two quick calculations. Type @kbd{M-# q} (or
10336 @kbd{M-x quick-calc}), then type any formula as an algebraic entry.
10337 The Calculator will compute the result and display it in the echo
10338 area, without ever actually putting up a Calc window.
10339
10340 You can use the @kbd{$} character in a Quick Calculator formula to
10341 refer to the previous Quick Calculator result. Older results are
10342 not retained; the Quick Calculator has no effect on the full
10343 Calculator's stack or trail. If you compute a result and then
10344 forget what it was, just run @code{M-# q} again and enter
10345 @samp{$} as the formula.
10346
10347 If this is the first time you have used the Calculator in this Emacs
10348 session, the @kbd{M-# q} command will create the @code{*Calculator*}
10349 buffer and perform all the usual initializations; it simply will
10350 refrain from putting that buffer up in a new window. The Quick
10351 Calculator refers to the @code{*Calculator*} buffer for all mode
10352 settings. Thus, for example, to set the precision that the Quick
10353 Calculator uses, simply run the full Calculator momentarily and use
10354 the regular @kbd{p} command.
10355
10356 If you use @code{M-# q} from inside the Calculator buffer, the
10357 effect is the same as pressing the apostrophe key (algebraic entry).
10358
10359 The result of a Quick calculation is placed in the Emacs ``kill ring''
10360 as well as being displayed. A subsequent @kbd{C-y} command will
10361 yank the result into the editing buffer. You can also use this
10362 to yank the result into the next @kbd{M-# q} input line as a more
10363 explicit alternative to @kbd{$} notation, or to yank the result
10364 into the Calculator stack after typing @kbd{M-# c}.
10365
10366 If you finish your formula by typing @key{LFD} (or @kbd{C-j}) instead
10367 of @key{RET}, the result is inserted immediately into the current
10368 buffer rather than going into the kill ring.
10369
10370 Quick Calculator results are actually evaluated as if by the @kbd{=}
10371 key (which replaces variable names by their stored values, if any).
10372 If the formula you enter is an assignment to a variable using the
10373 @samp{:=} operator, say, @samp{foo := 2 + 3} or @samp{foo := foo + 1},
10374 then the result of the evaluation is stored in that Calc variable.
10375 @xref{Store and Recall}.
10376
10377 If the result is an integer and the current display radix is decimal,
10378 the number will also be displayed in hex and octal formats. If the
10379 integer is in the range from 1 to 126, it will also be displayed as
10380 an ASCII character.
10381
10382 For example, the quoted character @samp{"x"} produces the vector
10383 result @samp{[120]} (because 120 is the ASCII code of the lower-case
10384 `x'; @pxref{Strings}). Since this is a vector, not an integer, it
10385 is displayed only according to the current mode settings. But
10386 running Quick Calc again and entering @samp{120} will produce the
10387 result @samp{120 (16#78, 8#170, x)} which shows the number in its
10388 decimal, hexadecimal, octal, and ASCII forms.
10389
10390 Please note that the Quick Calculator is not any faster at loading
10391 or computing the answer than the full Calculator; the name ``quick''
10392 merely refers to the fact that it's much less hassle to use for
10393 small calculations.
10394
10395 @node Prefix Arguments, Undo, Quick Calculator, Introduction
10396 @section Numeric Prefix Arguments
10397
10398 @noindent
10399 Many Calculator commands use numeric prefix arguments. Some, such as
10400 @kbd{d s} (@code{calc-sci-notation}), set a parameter to the value of
10401 the prefix argument or use a default if you don't use a prefix.
10402 Others (like @kbd{d f} (@code{calc-fix-notation})) require an argument
10403 and prompt for a number if you don't give one as a prefix.
10404
10405 As a rule, stack-manipulation commands accept a numeric prefix argument
10406 which is interpreted as an index into the stack. A positive argument
10407 operates on the top @var{n} stack entries; a negative argument operates
10408 on the @var{n}th stack entry in isolation; and a zero argument operates
10409 on the entire stack.
10410
10411 Most commands that perform computations (such as the arithmetic and
10412 scientific functions) accept a numeric prefix argument that allows the
10413 operation to be applied across many stack elements. For unary operations
10414 (that is, functions of one argument like absolute value or complex
10415 conjugate), a positive prefix argument applies that function to the top
10416 @var{n} stack entries simultaneously, and a negative argument applies it
10417 to the @var{n}th stack entry only. For binary operations (functions of
10418 two arguments like addition, GCD, and vector concatenation), a positive
10419 prefix argument ``reduces'' the function across the top @var{n}
10420 stack elements (for example, @kbd{C-u 5 +} sums the top 5 stack entries;
10421 @pxref{Reducing and Mapping}), and a negative argument maps the next-to-top
10422 @var{n} stack elements with the top stack element as a second argument
10423 (for example, @kbd{7 c-u -5 +} adds 7 to the top 5 stack elements).
10424 This feature is not available for operations which use the numeric prefix
10425 argument for some other purpose.
10426
10427 Numeric prefixes are specified the same way as always in Emacs: Press
10428 a sequence of @key{META}-digits, or press @key{ESC} followed by digits,
10429 or press @kbd{C-u} followed by digits. Some commands treat plain
10430 @kbd{C-u} (without any actual digits) specially.
10431
10432 @kindex ~
10433 @pindex calc-num-prefix
10434 You can type @kbd{~} (@code{calc-num-prefix}) to pop an integer from the
10435 top of the stack and enter it as the numeric prefix for the next command.
10436 For example, @kbd{C-u 16 p} sets the precision to 16 digits; an alternate
10437 (silly) way to do this would be @kbd{2 @key{RET} 4 ^ ~ p}, i.e., compute 2
10438 to the fourth power and set the precision to that value.
10439
10440 Conversely, if you have typed a numeric prefix argument the @kbd{~} key
10441 pushes it onto the stack in the form of an integer.
10442
10443 @node Undo, Error Messages, Prefix Arguments, Introduction
10444 @section Undoing Mistakes
10445
10446 @noindent
10447 @kindex U
10448 @kindex C-_
10449 @pindex calc-undo
10450 @cindex Mistakes, undoing
10451 @cindex Undoing mistakes
10452 @cindex Errors, undoing
10453 The shift-@kbd{U} key (@code{calc-undo}) undoes the most recent operation.
10454 If that operation added or dropped objects from the stack, those objects
10455 are removed or restored. If it was a ``store'' operation, you are
10456 queried whether or not to restore the variable to its original value.
10457 The @kbd{U} key may be pressed any number of times to undo successively
10458 farther back in time; with a numeric prefix argument it undoes a
10459 specified number of operations. The undo history is cleared only by the
10460 @kbd{q} (@code{calc-quit}) command. (Recall that @kbd{M-# c} is
10461 synonymous with @code{calc-quit} while inside the Calculator; this
10462 also clears the undo history.)
10463
10464 Currently the mode-setting commands (like @code{calc-precision}) are not
10465 undoable. You can undo past a point where you changed a mode, but you
10466 will need to reset the mode yourself.
10467
10468 @kindex D
10469 @pindex calc-redo
10470 @cindex Redoing after an Undo
10471 The shift-@kbd{D} key (@code{calc-redo}) redoes an operation that was
10472 mistakenly undone. Pressing @kbd{U} with a negative prefix argument is
10473 equivalent to executing @code{calc-redo}. You can redo any number of
10474 times, up to the number of recent consecutive undo commands. Redo
10475 information is cleared whenever you give any command that adds new undo
10476 information, i.e., if you undo, then enter a number on the stack or make
10477 any other change, then it will be too late to redo.
10478
10479 @kindex M-@key{RET}
10480 @pindex calc-last-args
10481 @cindex Last-arguments feature
10482 @cindex Arguments, restoring
10483 The @kbd{M-@key{RET}} key (@code{calc-last-args}) is like undo in that
10484 it restores the arguments of the most recent command onto the stack;
10485 however, it does not remove the result of that command. Given a numeric
10486 prefix argument, this command applies to the @expr{n}th most recent
10487 command which removed items from the stack; it pushes those items back
10488 onto the stack.
10489
10490 The @kbd{K} (@code{calc-keep-args}) command provides a related function
10491 to @kbd{M-@key{RET}}. @xref{Stack and Trail}.
10492
10493 It is also possible to recall previous results or inputs using the trail.
10494 @xref{Trail Commands}.
10495
10496 The standard Emacs @kbd{C-_} undo key is recognized as a synonym for @kbd{U}.
10497
10498 @node Error Messages, Multiple Calculators, Undo, Introduction
10499 @section Error Messages
10500
10501 @noindent
10502 @kindex w
10503 @pindex calc-why
10504 @cindex Errors, messages
10505 @cindex Why did an error occur?
10506 Many situations that would produce an error message in other calculators
10507 simply create unsimplified formulas in the Emacs Calculator. For example,
10508 @kbd{1 @key{RET} 0 /} pushes the formula @expr{1 / 0}; @w{@kbd{0 L}} pushes
10509 the formula @samp{ln(0)}. Floating-point overflow and underflow are also
10510 reasons for this to happen.
10511
10512 When a function call must be left in symbolic form, Calc usually
10513 produces a message explaining why. Messages that are probably
10514 surprising or indicative of user errors are displayed automatically.
10515 Other messages are simply kept in Calc's memory and are displayed only
10516 if you type @kbd{w} (@code{calc-why}). You can also press @kbd{w} if
10517 the same computation results in several messages. (The first message
10518 will end with @samp{[w=more]} in this case.)
10519
10520 @kindex d w
10521 @pindex calc-auto-why
10522 The @kbd{d w} (@code{calc-auto-why}) command controls when error messages
10523 are displayed automatically. (Calc effectively presses @kbd{w} for you
10524 after your computation finishes.) By default, this occurs only for
10525 ``important'' messages. The other possible modes are to report
10526 @emph{all} messages automatically, or to report none automatically (so
10527 that you must always press @kbd{w} yourself to see the messages).
10528
10529 @node Multiple Calculators, Troubleshooting Commands, Error Messages, Introduction
10530 @section Multiple Calculators
10531
10532 @noindent
10533 @pindex another-calc
10534 It is possible to have any number of Calc mode buffers at once.
10535 Usually this is done by executing @kbd{M-x another-calc}, which
10536 is similar to @kbd{M-# c} except that if a @samp{*Calculator*}
10537 buffer already exists, a new, independent one with a name of the
10538 form @samp{*Calculator*<@var{n}>} is created. You can also use the
10539 command @code{calc-mode} to put any buffer into Calculator mode, but
10540 this would ordinarily never be done.
10541
10542 The @kbd{q} (@code{calc-quit}) command does not destroy a Calculator buffer;
10543 it only closes its window. Use @kbd{M-x kill-buffer} to destroy a
10544 Calculator buffer.
10545
10546 Each Calculator buffer keeps its own stack, undo list, and mode settings
10547 such as precision, angular mode, and display formats. In Emacs terms,
10548 variables such as @code{calc-stack} are buffer-local variables. The
10549 global default values of these variables are used only when a new
10550 Calculator buffer is created. The @code{calc-quit} command saves
10551 the stack and mode settings of the buffer being quit as the new defaults.
10552
10553 There is only one trail buffer, @samp{*Calc Trail*}, used by all
10554 Calculator buffers.
10555
10556 @node Troubleshooting Commands, , Multiple Calculators, Introduction
10557 @section Troubleshooting Commands
10558
10559 @noindent
10560 This section describes commands you can use in case a computation
10561 incorrectly fails or gives the wrong answer.
10562
10563 @xref{Reporting Bugs}, if you find a problem that appears to be due
10564 to a bug or deficiency in Calc.
10565
10566 @menu
10567 * Autoloading Problems::
10568 * Recursion Depth::
10569 * Caches::
10570 * Debugging Calc::
10571 @end menu
10572
10573 @node Autoloading Problems, Recursion Depth, Troubleshooting Commands, Troubleshooting Commands
10574 @subsection Autoloading Problems
10575
10576 @noindent
10577 The Calc program is split into many component files; components are
10578 loaded automatically as you use various commands that require them.
10579 Occasionally Calc may lose track of when a certain component is
10580 necessary; typically this means you will type a command and it won't
10581 work because some function you've never heard of was undefined.
10582
10583 @kindex M-# L
10584 @pindex calc-load-everything
10585 If this happens, the easiest workaround is to type @kbd{M-# L}
10586 (@code{calc-load-everything}) to force all the parts of Calc to be
10587 loaded right away. This will cause Emacs to take up a lot more
10588 memory than it would otherwise, but it's guaranteed to fix the problem.
10589
10590 If you seem to run into this problem no matter what you do, or if
10591 even the @kbd{M-# L} command crashes, Calc may have been improperly
10592 installed. @xref{Installation}, for details of the installation
10593 process.
10594
10595 @node Recursion Depth, Caches, Autoloading Problems, Troubleshooting Commands
10596 @subsection Recursion Depth
10597
10598 @noindent
10599 @kindex M
10600 @kindex I M
10601 @pindex calc-more-recursion-depth
10602 @pindex calc-less-recursion-depth
10603 @cindex Recursion depth
10604 @cindex ``Computation got stuck'' message
10605 @cindex @code{max-lisp-eval-depth}
10606 @cindex @code{max-specpdl-size}
10607 Calc uses recursion in many of its calculations. Emacs Lisp keeps a
10608 variable @code{max-lisp-eval-depth} which limits the amount of recursion
10609 possible in an attempt to recover from program bugs. If a calculation
10610 ever halts incorrectly with the message ``Computation got stuck or
10611 ran too long,'' use the @kbd{M} command (@code{calc-more-recursion-depth})
10612 to increase this limit. (Of course, this will not help if the
10613 calculation really did get stuck due to some problem inside Calc.)
10614
10615 The limit is always increased (multiplied) by a factor of two. There
10616 is also an @kbd{I M} (@code{calc-less-recursion-depth}) command which
10617 decreases this limit by a factor of two, down to a minimum value of 200.
10618 The default value is 1000.
10619
10620 These commands also double or halve @code{max-specpdl-size}, another
10621 internal Lisp recursion limit. The minimum value for this limit is 600.
10622
10623 @node Caches, Debugging Calc, Recursion Depth, Troubleshooting Commands
10624 @subsection Caches
10625
10626 @noindent
10627 @cindex Caches
10628 @cindex Flushing caches
10629 Calc saves certain values after they have been computed once. For
10630 example, the @kbd{P} (@code{calc-pi}) command initially ``knows'' the
10631 constant @cpi{} to about 20 decimal places; if the current precision
10632 is greater than this, it will recompute @cpi{} using a series
10633 approximation. This value will not need to be recomputed ever again
10634 unless you raise the precision still further. Many operations such as
10635 logarithms and sines make use of similarly cached values such as
10636 @cpiover{4} and
10637 @texline @math{\ln 2}.
10638 @infoline @expr{ln(2)}.
10639 The visible effect of caching is that
10640 high-precision computations may seem to do extra work the first time.
10641 Other things cached include powers of two (for the binary arithmetic
10642 functions), matrix inverses and determinants, symbolic integrals, and
10643 data points computed by the graphing commands.
10644
10645 @pindex calc-flush-caches
10646 If you suspect a Calculator cache has become corrupt, you can use the
10647 @code{calc-flush-caches} command to reset all caches to the empty state.
10648 (This should only be necessary in the event of bugs in the Calculator.)
10649 The @kbd{M-# 0} (with the zero key) command also resets caches along
10650 with all other aspects of the Calculator's state.
10651
10652 @node Debugging Calc, , Caches, Troubleshooting Commands
10653 @subsection Debugging Calc
10654
10655 @noindent
10656 A few commands exist to help in the debugging of Calc commands.
10657 @xref{Programming}, to see the various ways that you can write
10658 your own Calc commands.
10659
10660 @kindex Z T
10661 @pindex calc-timing
10662 The @kbd{Z T} (@code{calc-timing}) command turns on and off a mode
10663 in which the timing of slow commands is reported in the Trail.
10664 Any Calc command that takes two seconds or longer writes a line
10665 to the Trail showing how many seconds it took. This value is
10666 accurate only to within one second.
10667
10668 All steps of executing a command are included; in particular, time
10669 taken to format the result for display in the stack and trail is
10670 counted. Some prompts also count time taken waiting for them to
10671 be answered, while others do not; this depends on the exact
10672 implementation of the command. For best results, if you are timing
10673 a sequence that includes prompts or multiple commands, define a
10674 keyboard macro to run the whole sequence at once. Calc's @kbd{X}
10675 command (@pxref{Keyboard Macros}) will then report the time taken
10676 to execute the whole macro.
10677
10678 Another advantage of the @kbd{X} command is that while it is
10679 executing, the stack and trail are not updated from step to step.
10680 So if you expect the output of your test sequence to leave a result
10681 that may take a long time to format and you don't wish to count
10682 this formatting time, end your sequence with a @key{DEL} keystroke
10683 to clear the result from the stack. When you run the sequence with
10684 @kbd{X}, Calc will never bother to format the large result.
10685
10686 Another thing @kbd{Z T} does is to increase the Emacs variable
10687 @code{gc-cons-threshold} to a much higher value (two million; the
10688 usual default in Calc is 250,000) for the duration of each command.
10689 This generally prevents garbage collection during the timing of
10690 the command, though it may cause your Emacs process to grow
10691 abnormally large. (Garbage collection time is a major unpredictable
10692 factor in the timing of Emacs operations.)
10693
10694 Another command that is useful when debugging your own Lisp
10695 extensions to Calc is @kbd{M-x calc-pass-errors}, which disables
10696 the error handler that changes the ``@code{max-lisp-eval-depth}
10697 exceeded'' message to the much more friendly ``Computation got
10698 stuck or ran too long.'' This handler interferes with the Emacs
10699 Lisp debugger's @code{debug-on-error} mode. Errors are reported
10700 in the handler itself rather than at the true location of the
10701 error. After you have executed @code{calc-pass-errors}, Lisp
10702 errors will be reported correctly but the user-friendly message
10703 will be lost.
10704
10705 @node Data Types, Stack and Trail, Introduction, Top
10706 @chapter Data Types
10707
10708 @noindent
10709 This chapter discusses the various types of objects that can be placed
10710 on the Calculator stack, how they are displayed, and how they are
10711 entered. (@xref{Data Type Formats}, for information on how these data
10712 types are represented as underlying Lisp objects.)
10713
10714 Integers, fractions, and floats are various ways of describing real
10715 numbers. HMS forms also for many purposes act as real numbers. These
10716 types can be combined to form complex numbers, modulo forms, error forms,
10717 or interval forms. (But these last four types cannot be combined
10718 arbitrarily:@: error forms may not contain modulo forms, for example.)
10719 Finally, all these types of numbers may be combined into vectors,
10720 matrices, or algebraic formulas.
10721
10722 @menu
10723 * Integers:: The most basic data type.
10724 * Fractions:: This and above are called @dfn{rationals}.
10725 * Floats:: This and above are called @dfn{reals}.
10726 * Complex Numbers:: This and above are called @dfn{numbers}.
10727 * Infinities::
10728 * Vectors and Matrices::
10729 * Strings::
10730 * HMS Forms::
10731 * Date Forms::
10732 * Modulo Forms::
10733 * Error Forms::
10734 * Interval Forms::
10735 * Incomplete Objects::
10736 * Variables::
10737 * Formulas::
10738 @end menu
10739
10740 @node Integers, Fractions, Data Types, Data Types
10741 @section Integers
10742
10743 @noindent
10744 @cindex Integers
10745 The Calculator stores integers to arbitrary precision. Addition,
10746 subtraction, and multiplication of integers always yields an exact
10747 integer result. (If the result of a division or exponentiation of
10748 integers is not an integer, it is expressed in fractional or
10749 floating-point form according to the current Fraction mode.
10750 @xref{Fraction Mode}.)
10751
10752 A decimal integer is represented as an optional sign followed by a
10753 sequence of digits. Grouping (@pxref{Grouping Digits}) can be used to
10754 insert a comma at every third digit for display purposes, but you
10755 must not type commas during the entry of numbers.
10756
10757 @kindex #
10758 A non-decimal integer is represented as an optional sign, a radix
10759 between 2 and 36, a @samp{#} symbol, and one or more digits. For radix 11
10760 and above, the letters A through Z (upper- or lower-case) count as
10761 digits and do not terminate numeric entry mode. @xref{Radix Modes}, for how
10762 to set the default radix for display of integers. Numbers of any radix
10763 may be entered at any time. If you press @kbd{#} at the beginning of a
10764 number, the current display radix is used.
10765
10766 @node Fractions, Floats, Integers, Data Types
10767 @section Fractions
10768
10769 @noindent
10770 @cindex Fractions
10771 A @dfn{fraction} is a ratio of two integers. Fractions are traditionally
10772 written ``2/3'' but Calc uses the notation @samp{2:3}. (The @kbd{/} key
10773 performs RPN division; the following two sequences push the number
10774 @samp{2:3} on the stack: @kbd{2 :@: 3 @key{RET}}, or @kbd{2 @key{RET} 3 /}
10775 assuming Fraction mode has been enabled.)
10776 When the Calculator produces a fractional result it always reduces it to
10777 simplest form, which may in fact be an integer.
10778
10779 Fractions may also be entered in a three-part form, where @samp{2:3:4}
10780 represents two-and-three-quarters. @xref{Fraction Formats}, for fraction
10781 display formats.
10782
10783 Non-decimal fractions are entered and displayed as
10784 @samp{@var{radix}#@var{num}:@var{denom}} (or in the analogous three-part
10785 form). The numerator and denominator always use the same radix.
10786
10787 @node Floats, Complex Numbers, Fractions, Data Types
10788 @section Floats
10789
10790 @noindent
10791 @cindex Floating-point numbers
10792 A floating-point number or @dfn{float} is a number stored in scientific
10793 notation. The number of significant digits in the fractional part is
10794 governed by the current floating precision (@pxref{Precision}). The
10795 range of acceptable values is from
10796 @texline @math{10^{-3999999}}
10797 @infoline @expr{10^-3999999}
10798 (inclusive) to
10799 @texline @math{10^{4000000}}
10800 @infoline @expr{10^4000000}
10801 (exclusive), plus the corresponding negative values and zero.
10802
10803 Calculations that would exceed the allowable range of values (such
10804 as @samp{exp(exp(20))}) are left in symbolic form by Calc. The
10805 messages ``floating-point overflow'' or ``floating-point underflow''
10806 indicate that during the calculation a number would have been produced
10807 that was too large or too close to zero, respectively, to be represented
10808 by Calc. This does not necessarily mean the final result would have
10809 overflowed, just that an overflow occurred while computing the result.
10810 (In fact, it could report an underflow even though the final result
10811 would have overflowed!)
10812
10813 If a rational number and a float are mixed in a calculation, the result
10814 will in general be expressed as a float. Commands that require an integer
10815 value (such as @kbd{k g} [@code{gcd}]) will also accept integer-valued
10816 floats, i.e., floating-point numbers with nothing after the decimal point.
10817
10818 Floats are identified by the presence of a decimal point and/or an
10819 exponent. In general a float consists of an optional sign, digits
10820 including an optional decimal point, and an optional exponent consisting
10821 of an @samp{e}, an optional sign, and up to seven exponent digits.
10822 For example, @samp{23.5e-2} is 23.5 times ten to the minus-second power,
10823 or 0.235.
10824
10825 Floating-point numbers are normally displayed in decimal notation with
10826 all significant figures shown. Exceedingly large or small numbers are
10827 displayed in scientific notation. Various other display options are
10828 available. @xref{Float Formats}.
10829
10830 @cindex Accuracy of calculations
10831 Floating-point numbers are stored in decimal, not binary. The result
10832 of each operation is rounded to the nearest value representable in the
10833 number of significant digits specified by the current precision,
10834 rounding away from zero in the case of a tie. Thus (in the default
10835 display mode) what you see is exactly what you get. Some operations such
10836 as square roots and transcendental functions are performed with several
10837 digits of extra precision and then rounded down, in an effort to make the
10838 final result accurate to the full requested precision. However,
10839 accuracy is not rigorously guaranteed. If you suspect the validity of a
10840 result, try doing the same calculation in a higher precision. The
10841 Calculator's arithmetic is not intended to be IEEE-conformant in any
10842 way.
10843
10844 While floats are always @emph{stored} in decimal, they can be entered
10845 and displayed in any radix just like integers and fractions. The
10846 notation @samp{@var{radix}#@var{ddd}.@var{ddd}} is a floating-point
10847 number whose digits are in the specified radix. Note that the @samp{.}
10848 is more aptly referred to as a ``radix point'' than as a decimal
10849 point in this case. The number @samp{8#123.4567} is defined as
10850 @samp{8#1234567 * 8^-4}. If the radix is 14 or less, you can use
10851 @samp{e} notation to write a non-decimal number in scientific notation.
10852 The exponent is written in decimal, and is considered to be a power
10853 of the radix: @samp{8#1234567e-4}. If the radix is 15 or above, the
10854 letter @samp{e} is a digit, so scientific notation must be written
10855 out, e.g., @samp{16#123.4567*16^2}. The first two exercises of the
10856 Modes Tutorial explore some of the properties of non-decimal floats.
10857
10858 @node Complex Numbers, Infinities, Floats, Data Types
10859 @section Complex Numbers
10860
10861 @noindent
10862 @cindex Complex numbers
10863 There are two supported formats for complex numbers: rectangular and
10864 polar. The default format is rectangular, displayed in the form
10865 @samp{(@var{real},@var{imag})} where @var{real} is the real part and
10866 @var{imag} is the imaginary part, each of which may be any real number.
10867 Rectangular complex numbers can also be displayed in @samp{@var{a}+@var{b}i}
10868 notation; @pxref{Complex Formats}.
10869
10870 Polar complex numbers are displayed in the form
10871 @texline `@t{(}@var{r}@t{;}@math{\theta}@t{)}'
10872 @infoline `@t{(}@var{r}@t{;}@var{theta}@t{)}'
10873 where @var{r} is the nonnegative magnitude and
10874 @texline @math{\theta}
10875 @infoline @var{theta}
10876 is the argument or phase angle. The range of
10877 @texline @math{\theta}
10878 @infoline @var{theta}
10879 depends on the current angular mode (@pxref{Angular Modes}); it is
10880 generally between @mathit{-180} and @mathit{+180} degrees or the equivalent range
10881 in radians.
10882
10883 Complex numbers are entered in stages using incomplete objects.
10884 @xref{Incomplete Objects}.
10885
10886 Operations on rectangular complex numbers yield rectangular complex
10887 results, and similarly for polar complex numbers. Where the two types
10888 are mixed, or where new complex numbers arise (as for the square root of
10889 a negative real), the current @dfn{Polar mode} is used to determine the
10890 type. @xref{Polar Mode}.
10891
10892 A complex result in which the imaginary part is zero (or the phase angle
10893 is 0 or 180 degrees or @cpi{} radians) is automatically converted to a real
10894 number.
10895
10896 @node Infinities, Vectors and Matrices, Complex Numbers, Data Types
10897 @section Infinities
10898
10899 @noindent
10900 @cindex Infinity
10901 @cindex @code{inf} variable
10902 @cindex @code{uinf} variable
10903 @cindex @code{nan} variable
10904 @vindex inf
10905 @vindex uinf
10906 @vindex nan
10907 The word @code{inf} represents the mathematical concept of @dfn{infinity}.
10908 Calc actually has three slightly different infinity-like values:
10909 @code{inf}, @code{uinf}, and @code{nan}. These are just regular
10910 variable names (@pxref{Variables}); you should avoid using these
10911 names for your own variables because Calc gives them special
10912 treatment. Infinities, like all variable names, are normally
10913 entered using algebraic entry.
10914
10915 Mathematically speaking, it is not rigorously correct to treat
10916 ``infinity'' as if it were a number, but mathematicians often do
10917 so informally. When they say that @samp{1 / inf = 0}, what they
10918 really mean is that @expr{1 / x}, as @expr{x} becomes larger and
10919 larger, becomes arbitrarily close to zero. So you can imagine
10920 that if @expr{x} got ``all the way to infinity,'' then @expr{1 / x}
10921 would go all the way to zero. Similarly, when they say that
10922 @samp{exp(inf) = inf}, they mean that
10923 @texline @math{e^x}
10924 @infoline @expr{exp(x)}
10925 grows without bound as @expr{x} grows. The symbol @samp{-inf} likewise
10926 stands for an infinitely negative real value; for example, we say that
10927 @samp{exp(-inf) = 0}. You can have an infinity pointing in any
10928 direction on the complex plane: @samp{sqrt(-inf) = i inf}.
10929
10930 The same concept of limits can be used to define @expr{1 / 0}. We
10931 really want the value that @expr{1 / x} approaches as @expr{x}
10932 approaches zero. But if all we have is @expr{1 / 0}, we can't
10933 tell which direction @expr{x} was coming from. If @expr{x} was
10934 positive and decreasing toward zero, then we should say that
10935 @samp{1 / 0 = inf}. But if @expr{x} was negative and increasing
10936 toward zero, the answer is @samp{1 / 0 = -inf}. In fact, @expr{x}
10937 could be an imaginary number, giving the answer @samp{i inf} or
10938 @samp{-i inf}. Calc uses the special symbol @samp{uinf} to mean
10939 @dfn{undirected infinity}, i.e., a value which is infinitely
10940 large but with an unknown sign (or direction on the complex plane).
10941
10942 Calc actually has three modes that say how infinities are handled.
10943 Normally, infinities never arise from calculations that didn't
10944 already have them. Thus, @expr{1 / 0} is treated simply as an
10945 error and left unevaluated. The @kbd{m i} (@code{calc-infinite-mode})
10946 command (@pxref{Infinite Mode}) enables a mode in which
10947 @expr{1 / 0} evaluates to @code{uinf} instead. There is also
10948 an alternative type of infinite mode which says to treat zeros
10949 as if they were positive, so that @samp{1 / 0 = inf}. While this
10950 is less mathematically correct, it may be the answer you want in
10951 some cases.
10952
10953 Since all infinities are ``as large'' as all others, Calc simplifies,
10954 e.g., @samp{5 inf} to @samp{inf}. Another example is
10955 @samp{5 - inf = -inf}, where the @samp{-inf} is so large that
10956 adding a finite number like five to it does not affect it.
10957 Note that @samp{a - inf} also results in @samp{-inf}; Calc assumes
10958 that variables like @code{a} always stand for finite quantities.
10959 Just to show that infinities really are all the same size,
10960 note that @samp{sqrt(inf) = inf^2 = exp(inf) = inf} in Calc's
10961 notation.
10962
10963 It's not so easy to define certain formulas like @samp{0 * inf} and
10964 @samp{inf / inf}. Depending on where these zeros and infinities
10965 came from, the answer could be literally anything. The latter
10966 formula could be the limit of @expr{x / x} (giving a result of one),
10967 or @expr{2 x / x} (giving two), or @expr{x^2 / x} (giving @code{inf}),
10968 or @expr{x / x^2} (giving zero). Calc uses the symbol @code{nan}
10969 to represent such an @dfn{indeterminate} value. (The name ``nan''
10970 comes from analogy with the ``NAN'' concept of IEEE standard
10971 arithmetic; it stands for ``Not A Number.'' This is somewhat of a
10972 misnomer, since @code{nan} @emph{does} stand for some number or
10973 infinity, it's just that @emph{which} number it stands for
10974 cannot be determined.) In Calc's notation, @samp{0 * inf = nan}
10975 and @samp{inf / inf = nan}. A few other common indeterminate
10976 expressions are @samp{inf - inf} and @samp{inf ^ 0}. Also,
10977 @samp{0 / 0 = nan} if you have turned on Infinite mode
10978 (as described above).
10979
10980 Infinities are especially useful as parts of @dfn{intervals}.
10981 @xref{Interval Forms}.
10982
10983 @node Vectors and Matrices, Strings, Infinities, Data Types
10984 @section Vectors and Matrices
10985
10986 @noindent
10987 @cindex Vectors
10988 @cindex Plain vectors
10989 @cindex Matrices
10990 The @dfn{vector} data type is flexible and general. A vector is simply a
10991 list of zero or more data objects. When these objects are numbers, the
10992 whole is a vector in the mathematical sense. When these objects are
10993 themselves vectors of equal (nonzero) length, the whole is a @dfn{matrix}.
10994 A vector which is not a matrix is referred to here as a @dfn{plain vector}.
10995
10996 A vector is displayed as a list of values separated by commas and enclosed
10997 in square brackets: @samp{[1, 2, 3]}. Thus the following is a 2 row by
10998 3 column matrix: @samp{[[1, 2, 3], [4, 5, 6]]}. Vectors, like complex
10999 numbers, are entered as incomplete objects. @xref{Incomplete Objects}.
11000 During algebraic entry, vectors are entered all at once in the usual
11001 brackets-and-commas form. Matrices may be entered algebraically as nested
11002 vectors, or using the shortcut notation @w{@samp{[1, 2, 3; 4, 5, 6]}},
11003 with rows separated by semicolons. The commas may usually be omitted
11004 when entering vectors: @samp{[1 2 3]}. Curly braces may be used in
11005 place of brackets: @samp{@{1, 2, 3@}}, but the commas are required in
11006 this case.
11007
11008 Traditional vector and matrix arithmetic is also supported;
11009 @pxref{Basic Arithmetic} and @pxref{Matrix Functions}.
11010 Many other operations are applied to vectors element-wise. For example,
11011 the complex conjugate of a vector is a vector of the complex conjugates
11012 of its elements.
11013
11014 @ignore
11015 @starindex
11016 @end ignore
11017 @tindex vec
11018 Algebraic functions for building vectors include @samp{vec(a, b, c)}
11019 to build @samp{[a, b, c]}, @samp{cvec(a, n, m)} to build an
11020 @texline @math{n\times m}
11021 @infoline @var{n}x@var{m}
11022 matrix of @samp{a}s, and @samp{index(n)} to build a vector of integers
11023 from 1 to @samp{n}.
11024
11025 @node Strings, HMS Forms, Vectors and Matrices, Data Types
11026 @section Strings
11027
11028 @noindent
11029 @kindex "
11030 @cindex Strings
11031 @cindex Character strings
11032 Character strings are not a special data type in the Calculator.
11033 Rather, a string is represented simply as a vector all of whose
11034 elements are integers in the range 0 to 255 (ASCII codes). You can
11035 enter a string at any time by pressing the @kbd{"} key. Quotation
11036 marks and backslashes are written @samp{\"} and @samp{\\}, respectively,
11037 inside strings. Other notations introduced by backslashes are:
11038
11039 @example
11040 @group
11041 \a 7 \^@@ 0
11042 \b 8 \^a-z 1-26
11043 \e 27 \^[ 27
11044 \f 12 \^\\ 28
11045 \n 10 \^] 29
11046 \r 13 \^^ 30
11047 \t 9 \^_ 31
11048 \^? 127
11049 @end group
11050 @end example
11051
11052 @noindent
11053 Finally, a backslash followed by three octal digits produces any
11054 character from its ASCII code.
11055
11056 @kindex d "
11057 @pindex calc-display-strings
11058 Strings are normally displayed in vector-of-integers form. The
11059 @w{@kbd{d "}} (@code{calc-display-strings}) command toggles a mode in
11060 which any vectors of small integers are displayed as quoted strings
11061 instead.
11062
11063 The backslash notations shown above are also used for displaying
11064 strings. Characters 128 and above are not translated by Calc; unless
11065 you have an Emacs modified for 8-bit fonts, these will show up in
11066 backslash-octal-digits notation. For characters below 32, and
11067 for character 127, Calc uses the backslash-letter combination if
11068 there is one, or otherwise uses a @samp{\^} sequence.
11069
11070 The only Calc feature that uses strings is @dfn{compositions};
11071 @pxref{Compositions}. Strings also provide a convenient
11072 way to do conversions between ASCII characters and integers.
11073
11074 @ignore
11075 @starindex
11076 @end ignore
11077 @tindex string
11078 There is a @code{string} function which provides a different display
11079 format for strings. Basically, @samp{string(@var{s})}, where @var{s}
11080 is a vector of integers in the proper range, is displayed as the
11081 corresponding string of characters with no surrounding quotation
11082 marks or other modifications. Thus @samp{string("ABC")} (or
11083 @samp{string([65 66 67])}) will look like @samp{ABC} on the stack.
11084 This happens regardless of whether @w{@kbd{d "}} has been used. The
11085 only way to turn it off is to use @kbd{d U} (unformatted language
11086 mode) which will display @samp{string("ABC")} instead.
11087
11088 Control characters are displayed somewhat differently by @code{string}.
11089 Characters below 32, and character 127, are shown using @samp{^} notation
11090 (same as shown above, but without the backslash). The quote and
11091 backslash characters are left alone, as are characters 128 and above.
11092
11093 @ignore
11094 @starindex
11095 @end ignore
11096 @tindex bstring
11097 The @code{bstring} function is just like @code{string} except that
11098 the resulting string is breakable across multiple lines if it doesn't
11099 fit all on one line. Potential break points occur at every space
11100 character in the string.
11101
11102 @node HMS Forms, Date Forms, Strings, Data Types
11103 @section HMS Forms
11104
11105 @noindent
11106 @cindex Hours-minutes-seconds forms
11107 @cindex Degrees-minutes-seconds forms
11108 @dfn{HMS} stands for Hours-Minutes-Seconds; when used as an angular
11109 argument, the interpretation is Degrees-Minutes-Seconds. All functions
11110 that operate on angles accept HMS forms. These are interpreted as
11111 degrees regardless of the current angular mode. It is also possible to
11112 use HMS as the angular mode so that calculated angles are expressed in
11113 degrees, minutes, and seconds.
11114
11115 @kindex @@
11116 @ignore
11117 @mindex @null
11118 @end ignore
11119 @kindex ' (HMS forms)
11120 @ignore
11121 @mindex @null
11122 @end ignore
11123 @kindex " (HMS forms)
11124 @ignore
11125 @mindex @null
11126 @end ignore
11127 @kindex h (HMS forms)
11128 @ignore
11129 @mindex @null
11130 @end ignore
11131 @kindex o (HMS forms)
11132 @ignore
11133 @mindex @null
11134 @end ignore
11135 @kindex m (HMS forms)
11136 @ignore
11137 @mindex @null
11138 @end ignore
11139 @kindex s (HMS forms)
11140 The default format for HMS values is
11141 @samp{@var{hours}@@ @var{mins}' @var{secs}"}. During entry, the letters
11142 @samp{h} (for ``hours'') or
11143 @samp{o} (approximating the ``degrees'' symbol) are accepted as well as
11144 @samp{@@}, @samp{m} is accepted in place of @samp{'}, and @samp{s} is
11145 accepted in place of @samp{"}.
11146 The @var{hours} value is an integer (or integer-valued float).
11147 The @var{mins} value is an integer or integer-valued float between 0 and 59.
11148 The @var{secs} value is a real number between 0 (inclusive) and 60
11149 (exclusive). A positive HMS form is interpreted as @var{hours} +
11150 @var{mins}/60 + @var{secs}/3600. A negative HMS form is interpreted
11151 as @mathit{- @var{hours}} @mathit{-} @var{mins}/60 @mathit{-} @var{secs}/3600.
11152 Display format for HMS forms is quite flexible. @xref{HMS Formats}.
11153
11154 HMS forms can be added and subtracted. When they are added to numbers,
11155 the numbers are interpreted according to the current angular mode. HMS
11156 forms can also be multiplied and divided by real numbers. Dividing
11157 two HMS forms produces a real-valued ratio of the two angles.
11158
11159 @pindex calc-time
11160 @cindex Time of day
11161 Just for kicks, @kbd{M-x calc-time} pushes the current time of day on
11162 the stack as an HMS form.
11163
11164 @node Date Forms, Modulo Forms, HMS Forms, Data Types
11165 @section Date Forms
11166
11167 @noindent
11168 @cindex Date forms
11169 A @dfn{date form} represents a date and possibly an associated time.
11170 Simple date arithmetic is supported: Adding a number to a date
11171 produces a new date shifted by that many days; adding an HMS form to
11172 a date shifts it by that many hours. Subtracting two date forms
11173 computes the number of days between them (represented as a simple
11174 number). Many other operations, such as multiplying two date forms,
11175 are nonsensical and are not allowed by Calc.
11176
11177 Date forms are entered and displayed enclosed in @samp{< >} brackets.
11178 The default format is, e.g., @samp{<Wed Jan 9, 1991>} for dates,
11179 or @samp{<3:32:20pm Wed Jan 9, 1991>} for dates with times.
11180 Input is flexible; date forms can be entered in any of the usual
11181 notations for dates and times. @xref{Date Formats}.
11182
11183 Date forms are stored internally as numbers, specifically the number
11184 of days since midnight on the morning of January 1 of the year 1 AD.
11185 If the internal number is an integer, the form represents a date only;
11186 if the internal number is a fraction or float, the form represents
11187 a date and time. For example, @samp{<6:00am Wed Jan 9, 1991>}
11188 is represented by the number 726842.25. The standard precision of
11189 12 decimal digits is enough to ensure that a (reasonable) date and
11190 time can be stored without roundoff error.
11191
11192 If the current precision is greater than 12, date forms will keep
11193 additional digits in the seconds position. For example, if the
11194 precision is 15, the seconds will keep three digits after the
11195 decimal point. Decreasing the precision below 12 may cause the
11196 time part of a date form to become inaccurate. This can also happen
11197 if astronomically high years are used, though this will not be an
11198 issue in everyday (or even everymillennium) use. Note that date
11199 forms without times are stored as exact integers, so roundoff is
11200 never an issue for them.
11201
11202 You can use the @kbd{v p} (@code{calc-pack}) and @kbd{v u}
11203 (@code{calc-unpack}) commands to get at the numerical representation
11204 of a date form. @xref{Packing and Unpacking}.
11205
11206 Date forms can go arbitrarily far into the future or past. Negative
11207 year numbers represent years BC. Calc uses a combination of the
11208 Gregorian and Julian calendars, following the history of Great
11209 Britain and the British colonies. This is the same calendar that
11210 is used by the @code{cal} program in most Unix implementations.
11211
11212 @cindex Julian calendar
11213 @cindex Gregorian calendar
11214 Some historical background: The Julian calendar was created by
11215 Julius Caesar in the year 46 BC as an attempt to fix the gradual
11216 drift caused by the lack of leap years in the calendar used
11217 until that time. The Julian calendar introduced an extra day in
11218 all years divisible by four. After some initial confusion, the
11219 calendar was adopted around the year we call 8 AD. Some centuries
11220 later it became apparent that the Julian year of 365.25 days was
11221 itself not quite right. In 1582 Pope Gregory XIII introduced the
11222 Gregorian calendar, which added the new rule that years divisible
11223 by 100, but not by 400, were not to be considered leap years
11224 despite being divisible by four. Many countries delayed adoption
11225 of the Gregorian calendar because of religious differences;
11226 in Britain it was put off until the year 1752, by which time
11227 the Julian calendar had fallen eleven days behind the true
11228 seasons. So the switch to the Gregorian calendar in early
11229 September 1752 introduced a discontinuity: The day after
11230 Sep 2, 1752 is Sep 14, 1752. Calc follows this convention.
11231 To take another example, Russia waited until 1918 before
11232 adopting the new calendar, and thus needed to remove thirteen
11233 days (between Feb 1, 1918 and Feb 14, 1918). This means that
11234 Calc's reckoning will be inconsistent with Russian history between
11235 1752 and 1918, and similarly for various other countries.
11236
11237 Today's timekeepers introduce an occasional ``leap second'' as
11238 well, but Calc does not take these minor effects into account.
11239 (If it did, it would have to report a non-integer number of days
11240 between, say, @samp{<12:00am Mon Jan 1, 1900>} and
11241 @samp{<12:00am Sat Jan 1, 2000>}.)
11242
11243 Calc uses the Julian calendar for all dates before the year 1752,
11244 including dates BC when the Julian calendar technically had not
11245 yet been invented. Thus the claim that day number @mathit{-10000} is
11246 called ``August 16, 28 BC'' should be taken with a grain of salt.
11247
11248 Please note that there is no ``year 0''; the day before
11249 @samp{<Sat Jan 1, +1>} is @samp{<Fri Dec 31, -1>}. These are
11250 days 0 and @mathit{-1} respectively in Calc's internal numbering scheme.
11251
11252 @cindex Julian day counting
11253 Another day counting system in common use is, confusingly, also
11254 called ``Julian.'' It was invented in 1583 by Joseph Justus
11255 Scaliger, who named it in honor of his father Julius Caesar
11256 Scaliger. For obscure reasons he chose to start his day
11257 numbering on Jan 1, 4713 BC at noon, which in Calc's scheme
11258 is @mathit{-1721423.5} (recall that Calc starts at midnight instead
11259 of noon). Thus to convert a Calc date code obtained by
11260 unpacking a date form into a Julian day number, simply add
11261 1721423.5. The Julian code for @samp{6:00am Jan 9, 1991}
11262 is 2448265.75. The built-in @kbd{t J} command performs
11263 this conversion for you.
11264
11265 @cindex Unix time format
11266 The Unix operating system measures time as an integer number of
11267 seconds since midnight, Jan 1, 1970. To convert a Calc date
11268 value into a Unix time stamp, first subtract 719164 (the code
11269 for @samp{<Jan 1, 1970>}), then multiply by 86400 (the number of
11270 seconds in a day) and press @kbd{R} to round to the nearest
11271 integer. If you have a date form, you can simply subtract the
11272 day @samp{<Jan 1, 1970>} instead of unpacking and subtracting
11273 719164. Likewise, divide by 86400 and add @samp{<Jan 1, 1970>}
11274 to convert from Unix time to a Calc date form. (Note that
11275 Unix normally maintains the time in the GMT time zone; you may
11276 need to subtract five hours to get New York time, or eight hours
11277 for California time. The same is usually true of Julian day
11278 counts.) The built-in @kbd{t U} command performs these
11279 conversions.
11280
11281 @node Modulo Forms, Error Forms, Date Forms, Data Types
11282 @section Modulo Forms
11283
11284 @noindent
11285 @cindex Modulo forms
11286 A @dfn{modulo form} is a real number which is taken modulo (i.e., within
11287 an integer multiple of) some value @var{M}. Arithmetic modulo @var{M}
11288 often arises in number theory. Modulo forms are written
11289 `@var{a} @t{mod} @var{M}',
11290 where @var{a} and @var{M} are real numbers or HMS forms, and
11291 @texline @math{0 \le a < M}.
11292 @infoline @expr{0 <= a < @var{M}}.
11293 In many applications @expr{a} and @expr{M} will be
11294 integers but this is not required.
11295
11296 Modulo forms are not to be confused with the modulo operator @samp{%}.
11297 The expression @samp{27 % 10} means to compute 27 modulo 10 to produce
11298 the result 7. Further computations treat this 7 as just a regular integer.
11299 The expression @samp{27 mod 10} produces the result @samp{7 mod 10};
11300 further computations with this value are again reduced modulo 10 so that
11301 the result always lies in the desired range.
11302
11303 When two modulo forms with identical @expr{M}'s are added or multiplied,
11304 the Calculator simply adds or multiplies the values, then reduces modulo
11305 @expr{M}. If one argument is a modulo form and the other a plain number,
11306 the plain number is treated like a compatible modulo form. It is also
11307 possible to raise modulo forms to powers; the result is the value raised
11308 to the power, then reduced modulo @expr{M}. (When all values involved
11309 are integers, this calculation is done much more efficiently than
11310 actually computing the power and then reducing.)
11311
11312 @cindex Modulo division
11313 Two modulo forms `@var{a} @t{mod} @var{M}' and `@var{b} @t{mod} @var{M}'
11314 can be divided if @expr{a}, @expr{b}, and @expr{M} are all
11315 integers. The result is the modulo form which, when multiplied by
11316 `@var{b} @t{mod} @var{M}', produces `@var{a} @t{mod} @var{M}'. If
11317 there is no solution to this equation (which can happen only when
11318 @expr{M} is non-prime), or if any of the arguments are non-integers, the
11319 division is left in symbolic form. Other operations, such as square
11320 roots, are not yet supported for modulo forms. (Note that, although
11321 @w{`@t{(}@var{a} @t{mod} @var{M}@t{)^.5}'} will compute a ``modulo square root''
11322 in the sense of reducing
11323 @texline @math{\sqrt a}
11324 @infoline @expr{sqrt(a)}
11325 modulo @expr{M}, this is not a useful definition from the
11326 number-theoretical point of view.)
11327
11328 @ignore
11329 @mindex M
11330 @end ignore
11331 @kindex M (modulo forms)
11332 @ignore
11333 @mindex mod
11334 @end ignore
11335 @tindex mod (operator)
11336 To create a modulo form during numeric entry, press the shift-@kbd{M}
11337 key to enter the word @samp{mod}. As a special convenience, pressing
11338 shift-@kbd{M} a second time automatically enters the value of @expr{M}
11339 that was most recently used before. During algebraic entry, either
11340 type @samp{mod} by hand or press @kbd{M-m} (that's @kbd{@key{META}-m}).
11341 Once again, pressing this a second time enters the current modulo.
11342
11343 You can also use @kbd{v p} and @kbd{%} to modify modulo forms.
11344 @xref{Building Vectors}. @xref{Basic Arithmetic}.
11345
11346 It is possible to mix HMS forms and modulo forms. For example, an
11347 HMS form modulo 24 could be used to manipulate clock times; an HMS
11348 form modulo 360 would be suitable for angles. Making the modulo @expr{M}
11349 also be an HMS form eliminates troubles that would arise if the angular
11350 mode were inadvertently set to Radians, in which case
11351 @w{@samp{2@@ 0' 0" mod 24}} would be interpreted as two degrees modulo
11352 24 radians!
11353
11354 Modulo forms cannot have variables or formulas for components. If you
11355 enter the formula @samp{(x + 2) mod 5}, Calc propagates the modulus
11356 to each of the coefficients: @samp{(1 mod 5) x + (2 mod 5)}.
11357
11358 @ignore
11359 @starindex
11360 @end ignore
11361 @tindex makemod
11362 The algebraic function @samp{makemod(a, m)} builds the modulo form
11363 @w{@samp{a mod m}}.
11364
11365 @node Error Forms, Interval Forms, Modulo Forms, Data Types
11366 @section Error Forms
11367
11368 @noindent
11369 @cindex Error forms
11370 @cindex Standard deviations
11371 An @dfn{error form} is a number with an associated standard
11372 deviation, as in @samp{2.3 +/- 0.12}. The notation
11373 @texline `@var{x} @t{+/-} @math{\sigma}'
11374 @infoline `@var{x} @t{+/-} sigma'
11375 stands for an uncertain value which follows
11376 a normal or Gaussian distribution of mean @expr{x} and standard
11377 deviation or ``error''
11378 @texline @math{\sigma}.
11379 @infoline @expr{sigma}.
11380 Both the mean and the error can be either numbers or
11381 formulas. Generally these are real numbers but the mean may also be
11382 complex. If the error is negative or complex, it is changed to its
11383 absolute value. An error form with zero error is converted to a
11384 regular number by the Calculator.
11385
11386 All arithmetic and transcendental functions accept error forms as input.
11387 Operations on the mean-value part work just like operations on regular
11388 numbers. The error part for any function @expr{f(x)} (such as
11389 @texline @math{\sin x}
11390 @infoline @expr{sin(x)})
11391 is defined by the error of @expr{x} times the derivative of @expr{f}
11392 evaluated at the mean value of @expr{x}. For a two-argument function
11393 @expr{f(x,y)} (such as addition) the error is the square root of the sum
11394 of the squares of the errors due to @expr{x} and @expr{y}.
11395 @tex
11396 $$ \eqalign{
11397 f(x \hbox{\code{ +/- }} \sigma)
11398 &= f(x) \hbox{\code{ +/- }} \sigma \left| {df(x) \over dx} \right| \cr
11399 f(x \hbox{\code{ +/- }} \sigma_x, y \hbox{\code{ +/- }} \sigma_y)
11400 &= f(x,y) \hbox{\code{ +/- }}
11401 \sqrt{\left(\sigma_x \left| {\partial f(x,y) \over \partial x}
11402 \right| \right)^2
11403 +\left(\sigma_y \left| {\partial f(x,y) \over \partial y}
11404 \right| \right)^2 } \cr
11405 } $$
11406 @end tex
11407 Note that this
11408 definition assumes the errors in @expr{x} and @expr{y} are uncorrelated.
11409 A side effect of this definition is that @samp{(2 +/- 1) * (2 +/- 1)}
11410 is not the same as @samp{(2 +/- 1)^2}; the former represents the product
11411 of two independent values which happen to have the same probability
11412 distributions, and the latter is the product of one random value with itself.
11413 The former will produce an answer with less error, since on the average
11414 the two independent errors can be expected to cancel out.
11415
11416 Consult a good text on error analysis for a discussion of the proper use
11417 of standard deviations. Actual errors often are neither Gaussian-distributed
11418 nor uncorrelated, and the above formulas are valid only when errors
11419 are small. As an example, the error arising from
11420 @texline `@t{sin(}@var{x} @t{+/-} @math{\sigma}@t{)}'
11421 @infoline `@t{sin(}@var{x} @t{+/-} @var{sigma}@t{)}'
11422 is
11423 @texline `@math{\sigma} @t{abs(cos(}@var{x}@t{))}'.
11424 @infoline `@var{sigma} @t{abs(cos(}@var{x}@t{))}'.
11425 When @expr{x} is close to zero,
11426 @texline @math{\cos x}
11427 @infoline @expr{cos(x)}
11428 is close to one so the error in the sine is close to
11429 @texline @math{\sigma};
11430 @infoline @expr{sigma};
11431 this makes sense, since
11432 @texline @math{\sin x}
11433 @infoline @expr{sin(x)}
11434 is approximately @expr{x} near zero, so a given error in @expr{x} will
11435 produce about the same error in the sine. Likewise, near 90 degrees
11436 @texline @math{\cos x}
11437 @infoline @expr{cos(x)}
11438 is nearly zero and so the computed error is
11439 small: The sine curve is nearly flat in that region, so an error in @expr{x}
11440 has relatively little effect on the value of
11441 @texline @math{\sin x}.
11442 @infoline @expr{sin(x)}.
11443 However, consider @samp{sin(90 +/- 1000)}. The cosine of 90 is zero, so
11444 Calc will report zero error! We get an obviously wrong result because
11445 we have violated the small-error approximation underlying the error
11446 analysis. If the error in @expr{x} had been small, the error in
11447 @texline @math{\sin x}
11448 @infoline @expr{sin(x)}
11449 would indeed have been negligible.
11450
11451 @ignore
11452 @mindex p
11453 @end ignore
11454 @kindex p (error forms)
11455 @tindex +/-
11456 To enter an error form during regular numeric entry, use the @kbd{p}
11457 (``plus-or-minus'') key to type the @samp{+/-} symbol. (If you try actually
11458 typing @samp{+/-} the @kbd{+} key will be interpreted as the Calculator's
11459 @kbd{+} command!) Within an algebraic formula, you can press @kbd{M-p} to
11460 type the @samp{+/-} symbol, or type it out by hand.
11461
11462 Error forms and complex numbers can be mixed; the formulas shown above
11463 are used for complex numbers, too; note that if the error part evaluates
11464 to a complex number its absolute value (or the square root of the sum of
11465 the squares of the absolute values of the two error contributions) is
11466 used. Mathematically, this corresponds to a radially symmetric Gaussian
11467 distribution of numbers on the complex plane. However, note that Calc
11468 considers an error form with real components to represent a real number,
11469 not a complex distribution around a real mean.
11470
11471 Error forms may also be composed of HMS forms. For best results, both
11472 the mean and the error should be HMS forms if either one is.
11473
11474 @ignore
11475 @starindex
11476 @end ignore
11477 @tindex sdev
11478 The algebraic function @samp{sdev(a, b)} builds the error form @samp{a +/- b}.
11479
11480 @node Interval Forms, Incomplete Objects, Error Forms, Data Types
11481 @section Interval Forms
11482
11483 @noindent
11484 @cindex Interval forms
11485 An @dfn{interval} is a subset of consecutive real numbers. For example,
11486 the interval @samp{[2 ..@: 4]} represents all the numbers from 2 to 4,
11487 inclusive. If you multiply it by the interval @samp{[0.5 ..@: 2]} you
11488 obtain @samp{[1 ..@: 8]}. This calculation represents the fact that if
11489 you multiply some number in the range @samp{[2 ..@: 4]} by some other
11490 number in the range @samp{[0.5 ..@: 2]}, your result will lie in the range
11491 from 1 to 8. Interval arithmetic is used to get a worst-case estimate
11492 of the possible range of values a computation will produce, given the
11493 set of possible values of the input.
11494
11495 @ifinfo
11496 Calc supports several varieties of intervals, including @dfn{closed}
11497 intervals of the type shown above, @dfn{open} intervals such as
11498 @samp{(2 ..@: 4)}, which represents the range of numbers from 2 to 4
11499 @emph{exclusive}, and @dfn{semi-open} intervals in which one end
11500 uses a round parenthesis and the other a square bracket. In mathematical
11501 terms,
11502 @samp{[2 ..@: 4]} means @expr{2 <= x <= 4}, whereas
11503 @samp{[2 ..@: 4)} represents @expr{2 <= x < 4},
11504 @samp{(2 ..@: 4]} represents @expr{2 < x <= 4}, and
11505 @samp{(2 ..@: 4)} represents @expr{2 < x < 4}.
11506 @end ifinfo
11507 @tex
11508 Calc supports several varieties of intervals, including \dfn{closed}
11509 intervals of the type shown above, \dfn{open} intervals such as
11510 \samp{(2 ..\: 4)}, which represents the range of numbers from 2 to 4
11511 \emph{exclusive}, and \dfn{semi-open} intervals in which one end
11512 uses a round parenthesis and the other a square bracket. In mathematical
11513 terms,
11514 $$ \eqalign{
11515 [2 \hbox{\cite{..}} 4] &\quad\hbox{means}\quad 2 \le x \le 4 \cr
11516 [2 \hbox{\cite{..}} 4) &\quad\hbox{means}\quad 2 \le x < 4 \cr
11517 (2 \hbox{\cite{..}} 4] &\quad\hbox{means}\quad 2 < x \le 4 \cr
11518 (2 \hbox{\cite{..}} 4) &\quad\hbox{means}\quad 2 < x < 4 \cr
11519 } $$
11520 @end tex
11521
11522 The lower and upper limits of an interval must be either real numbers
11523 (or HMS or date forms), or symbolic expressions which are assumed to be
11524 real-valued, or @samp{-inf} and @samp{inf}. In general the lower limit
11525 must be less than the upper limit. A closed interval containing only
11526 one value, @samp{[3 ..@: 3]}, is converted to a plain number (3)
11527 automatically. An interval containing no values at all (such as
11528 @samp{[3 ..@: 2]} or @samp{[2 ..@: 2)}) can be represented but is not
11529 guaranteed to behave well when used in arithmetic. Note that the
11530 interval @samp{[3 .. inf)} represents all real numbers greater than
11531 or equal to 3, and @samp{(-inf .. inf)} represents all real numbers.
11532 In fact, @samp{[-inf .. inf]} represents all real numbers including
11533 the real infinities.
11534
11535 Intervals are entered in the notation shown here, either as algebraic
11536 formulas, or using incomplete forms. (@xref{Incomplete Objects}.)
11537 In algebraic formulas, multiple periods in a row are collected from
11538 left to right, so that @samp{1...1e2} is interpreted as @samp{1.0 ..@: 1e2}
11539 rather than @samp{1 ..@: 0.1e2}. Add spaces or zeros if you want to
11540 get the other interpretation. If you omit the lower or upper limit,
11541 a default of @samp{-inf} or @samp{inf} (respectively) is furnished.
11542
11543 Infinite mode also affects operations on intervals
11544 (@pxref{Infinities}). Calc will always introduce an open infinity,
11545 as in @samp{1 / (0 .. 2] = [0.5 .. inf)}. But closed infinities,
11546 @w{@samp{1 / [0 .. 2] = [0.5 .. inf]}}, arise only in Infinite mode;
11547 otherwise they are left unevaluated. Note that the ``direction'' of
11548 a zero is not an issue in this case since the zero is always assumed
11549 to be continuous with the rest of the interval. For intervals that
11550 contain zero inside them Calc is forced to give the result,
11551 @samp{1 / (-2 .. 2) = [-inf .. inf]}.
11552
11553 While it may seem that intervals and error forms are similar, they are
11554 based on entirely different concepts of inexact quantities. An error
11555 form
11556 @texline `@var{x} @t{+/-} @math{\sigma}'
11557 @infoline `@var{x} @t{+/-} @var{sigma}'
11558 means a variable is random, and its value could
11559 be anything but is ``probably'' within one
11560 @texline @math{\sigma}
11561 @infoline @var{sigma}
11562 of the mean value @expr{x}. An interval
11563 `@t{[}@var{a} @t{..@:} @var{b}@t{]}' means a
11564 variable's value is unknown, but guaranteed to lie in the specified
11565 range. Error forms are statistical or ``average case'' approximations;
11566 interval arithmetic tends to produce ``worst case'' bounds on an
11567 answer.
11568
11569 Intervals may not contain complex numbers, but they may contain
11570 HMS forms or date forms.
11571
11572 @xref{Set Operations}, for commands that interpret interval forms
11573 as subsets of the set of real numbers.
11574
11575 @ignore
11576 @starindex
11577 @end ignore
11578 @tindex intv
11579 The algebraic function @samp{intv(n, a, b)} builds an interval form
11580 from @samp{a} to @samp{b}; @samp{n} is an integer code which must
11581 be 0 for @samp{(..)}, 1 for @samp{(..]}, 2 for @samp{[..)}, or
11582 3 for @samp{[..]}.
11583
11584 Please note that in fully rigorous interval arithmetic, care would be
11585 taken to make sure that the computation of the lower bound rounds toward
11586 minus infinity, while upper bound computations round toward plus
11587 infinity. Calc's arithmetic always uses a round-to-nearest mode,
11588 which means that roundoff errors could creep into an interval
11589 calculation to produce intervals slightly smaller than they ought to
11590 be. For example, entering @samp{[1..2]} and pressing @kbd{Q 2 ^}
11591 should yield the interval @samp{[1..2]} again, but in fact it yields the
11592 (slightly too small) interval @samp{[1..1.9999999]} due to roundoff
11593 error.
11594
11595 @node Incomplete Objects, Variables, Interval Forms, Data Types
11596 @section Incomplete Objects
11597
11598 @noindent
11599 @ignore
11600 @mindex [ ]
11601 @end ignore
11602 @kindex [
11603 @ignore
11604 @mindex ( )
11605 @end ignore
11606 @kindex (
11607 @kindex ,
11608 @ignore
11609 @mindex @null
11610 @end ignore
11611 @kindex ]
11612 @ignore
11613 @mindex @null
11614 @end ignore
11615 @kindex )
11616 @cindex Incomplete vectors
11617 @cindex Incomplete complex numbers
11618 @cindex Incomplete interval forms
11619 When @kbd{(} or @kbd{[} is typed to begin entering a complex number or
11620 vector, respectively, the effect is to push an @dfn{incomplete} complex
11621 number or vector onto the stack. The @kbd{,} key adds the value(s) at
11622 the top of the stack onto the current incomplete object. The @kbd{)}
11623 and @kbd{]} keys ``close'' the incomplete object after adding any values
11624 on the top of the stack in front of the incomplete object.
11625
11626 As a result, the sequence of keystrokes @kbd{[ 2 , 3 @key{RET} 2 * , 9 ]}
11627 pushes the vector @samp{[2, 6, 9]} onto the stack. Likewise, @kbd{( 1 , 2 Q )}
11628 pushes the complex number @samp{(1, 1.414)} (approximately).
11629
11630 If several values lie on the stack in front of the incomplete object,
11631 all are collected and appended to the object. Thus the @kbd{,} key
11632 is redundant: @kbd{[ 2 @key{RET} 3 @key{RET} 2 * 9 ]}. Some people
11633 prefer the equivalent @key{SPC} key to @key{RET}.
11634
11635 As a special case, typing @kbd{,} immediately after @kbd{(}, @kbd{[}, or
11636 @kbd{,} adds a zero or duplicates the preceding value in the list being
11637 formed. Typing @key{DEL} during incomplete entry removes the last item
11638 from the list.
11639
11640 @kindex ;
11641 The @kbd{;} key is used in the same way as @kbd{,} to create polar complex
11642 numbers: @kbd{( 1 ; 2 )}. When entering a vector, @kbd{;} is useful for
11643 creating a matrix. In particular, @kbd{[ [ 1 , 2 ; 3 , 4 ; 5 , 6 ] ]} is
11644 equivalent to @kbd{[ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] ]}.
11645
11646 @kindex ..
11647 @pindex calc-dots
11648 Incomplete entry is also used to enter intervals. For example,
11649 @kbd{[ 2 ..@: 4 )} enters a semi-open interval. Note that when you type
11650 the first period, it will be interpreted as a decimal point, but when
11651 you type a second period immediately afterward, it is re-interpreted as
11652 part of the interval symbol. Typing @kbd{..} corresponds to executing
11653 the @code{calc-dots} command.
11654
11655 If you find incomplete entry distracting, you may wish to enter vectors
11656 and complex numbers as algebraic formulas by pressing the apostrophe key.
11657
11658 @node Variables, Formulas, Incomplete Objects, Data Types
11659 @section Variables
11660
11661 @noindent
11662 @cindex Variables, in formulas
11663 A @dfn{variable} is somewhere between a storage register on a conventional
11664 calculator, and a variable in a programming language. (In fact, a Calc
11665 variable is really just an Emacs Lisp variable that contains a Calc number
11666 or formula.) A variable's name is normally composed of letters and digits.
11667 Calc also allows apostrophes and @code{#} signs in variable names.
11668 (The Calc variable @code{foo} corresponds to the Emacs Lisp variable
11669 @code{var-foo}, but unless you access the variable from within Emacs
11670 Lisp, you don't need to worry about it. Variable names in algebraic
11671 formulas implicitly have @samp{var-} prefixed to their names. The
11672 @samp{#} character in variable names used in algebraic formulas
11673 corresponds to a dash @samp{-} in the Lisp variable name. If the name
11674 contains any dashes, the prefix @samp{var-} is @emph{not} automatically
11675 added. Thus the two formulas @samp{foo + 1} and @samp{var#foo + 1} both
11676 refer to the same variable.)
11677
11678 In a command that takes a variable name, you can either type the full
11679 name of a variable, or type a single digit to use one of the special
11680 convenience variables @code{q0} through @code{q9}. For example,
11681 @kbd{3 s s 2} stores the number 3 in variable @code{q2}, and
11682 @w{@kbd{3 s s foo @key{RET}}} stores that number in variable
11683 @code{foo}.
11684
11685 To push a variable itself (as opposed to the variable's value) on the
11686 stack, enter its name as an algebraic expression using the apostrophe
11687 (@key{'}) key.
11688
11689 @kindex =
11690 @pindex calc-evaluate
11691 @cindex Evaluation of variables in a formula
11692 @cindex Variables, evaluation
11693 @cindex Formulas, evaluation
11694 The @kbd{=} (@code{calc-evaluate}) key ``evaluates'' a formula by
11695 replacing all variables in the formula which have been given values by a
11696 @code{calc-store} or @code{calc-let} command by their stored values.
11697 Other variables are left alone. Thus a variable that has not been
11698 stored acts like an abstract variable in algebra; a variable that has
11699 been stored acts more like a register in a traditional calculator.
11700 With a positive numeric prefix argument, @kbd{=} evaluates the top
11701 @var{n} stack entries; with a negative argument, @kbd{=} evaluates
11702 the @var{n}th stack entry.
11703
11704 @cindex @code{e} variable
11705 @cindex @code{pi} variable
11706 @cindex @code{i} variable
11707 @cindex @code{phi} variable
11708 @cindex @code{gamma} variable
11709 @vindex e
11710 @vindex pi
11711 @vindex i
11712 @vindex phi
11713 @vindex gamma
11714 A few variables are called @dfn{special constants}. Their names are
11715 @samp{e}, @samp{pi}, @samp{i}, @samp{phi}, and @samp{gamma}.
11716 (@xref{Scientific Functions}.) When they are evaluated with @kbd{=},
11717 their values are calculated if necessary according to the current precision
11718 or complex polar mode. If you wish to use these symbols for other purposes,
11719 simply undefine or redefine them using @code{calc-store}.
11720
11721 The variables @samp{inf}, @samp{uinf}, and @samp{nan} stand for
11722 infinite or indeterminate values. It's best not to use them as
11723 regular variables, since Calc uses special algebraic rules when
11724 it manipulates them. Calc displays a warning message if you store
11725 a value into any of these special variables.
11726
11727 @xref{Store and Recall}, for a discussion of commands dealing with variables.
11728
11729 @node Formulas, , Variables, Data Types
11730 @section Formulas
11731
11732 @noindent
11733 @cindex Formulas
11734 @cindex Expressions
11735 @cindex Operators in formulas
11736 @cindex Precedence of operators
11737 When you press the apostrophe key you may enter any expression or formula
11738 in algebraic form. (Calc uses the terms ``expression'' and ``formula''
11739 interchangeably.) An expression is built up of numbers, variable names,
11740 and function calls, combined with various arithmetic operators.
11741 Parentheses may
11742 be used to indicate grouping. Spaces are ignored within formulas, except
11743 that spaces are not permitted within variable names or numbers.
11744 Arithmetic operators, in order from highest to lowest precedence, and
11745 with their equivalent function names, are:
11746
11747 @samp{_} [@code{subscr}] (subscripts);
11748
11749 postfix @samp{%} [@code{percent}] (as in @samp{25% = 0.25});
11750
11751 prefix @samp{+} and @samp{-} [@code{neg}] (as in @samp{-x})
11752 and prefix @samp{!} [@code{lnot}] (logical ``not,'' as in @samp{!x});
11753
11754 @samp{+/-} [@code{sdev}] (the standard deviation symbol) and
11755 @samp{mod} [@code{makemod}] (the symbol for modulo forms);
11756
11757 postfix @samp{!} [@code{fact}] (factorial, as in @samp{n!})
11758 and postfix @samp{!!} [@code{dfact}] (double factorial);
11759
11760 @samp{^} [@code{pow}] (raised-to-the-power-of);
11761
11762 @samp{*} [@code{mul}];
11763
11764 @samp{/} [@code{div}], @samp{%} [@code{mod}] (modulo), and
11765 @samp{\} [@code{idiv}] (integer division);
11766
11767 infix @samp{+} [@code{add}] and @samp{-} [@code{sub}] (as in @samp{x-y});
11768
11769 @samp{|} [@code{vconcat}] (vector concatenation);
11770
11771 relations @samp{=} [@code{eq}], @samp{!=} [@code{neq}], @samp{<} [@code{lt}],
11772 @samp{>} [@code{gt}], @samp{<=} [@code{leq}], and @samp{>=} [@code{geq}];
11773
11774 @samp{&&} [@code{land}] (logical ``and'');
11775
11776 @samp{||} [@code{lor}] (logical ``or'');
11777
11778 the C-style ``if'' operator @samp{a?b:c} [@code{if}];
11779
11780 @samp{!!!} [@code{pnot}] (rewrite pattern ``not'');
11781
11782 @samp{&&&} [@code{pand}] (rewrite pattern ``and'');
11783
11784 @samp{|||} [@code{por}] (rewrite pattern ``or'');
11785
11786 @samp{:=} [@code{assign}] (for assignments and rewrite rules);
11787
11788 @samp{::} [@code{condition}] (rewrite pattern condition);
11789
11790 @samp{=>} [@code{evalto}].
11791
11792 Note that, unlike in usual computer notation, multiplication binds more
11793 strongly than division: @samp{a*b/c*d} is equivalent to
11794 @texline @math{a b \over c d}.
11795 @infoline @expr{(a*b)/(c*d)}.
11796
11797 @cindex Multiplication, implicit
11798 @cindex Implicit multiplication
11799 The multiplication sign @samp{*} may be omitted in many cases. In particular,
11800 if the righthand side is a number, variable name, or parenthesized
11801 expression, the @samp{*} may be omitted. Implicit multiplication has the
11802 same precedence as the explicit @samp{*} operator. The one exception to
11803 the rule is that a variable name followed by a parenthesized expression,
11804 as in @samp{f(x)},
11805 is interpreted as a function call, not an implicit @samp{*}. In many
11806 cases you must use a space if you omit the @samp{*}: @samp{2a} is the
11807 same as @samp{2*a}, and @samp{a b} is the same as @samp{a*b}, but @samp{ab}
11808 is a variable called @code{ab}, @emph{not} the product of @samp{a} and
11809 @samp{b}! Also note that @samp{f (x)} is still a function call.
11810
11811 @cindex Implicit comma in vectors
11812 The rules are slightly different for vectors written with square brackets.
11813 In vectors, the space character is interpreted (like the comma) as a
11814 separator of elements of the vector. Thus @w{@samp{[ 2a b+c d ]}} is
11815 equivalent to @samp{[2*a, b+c, d]}, whereas @samp{2a b+c d} is equivalent
11816 to @samp{2*a*b + c*d}.
11817 Note that spaces around the brackets, and around explicit commas, are
11818 ignored. To force spaces to be interpreted as multiplication you can
11819 enclose a formula in parentheses as in @samp{[(a b) 2(c d)]}, which is
11820 interpreted as @samp{[a*b, 2*c*d]}. An implicit comma is also inserted
11821 between @samp{][}, as in the matrix @samp{[[1 2][3 4]]}.
11822
11823 Vectors that contain commas (not embedded within nested parentheses or
11824 brackets) do not treat spaces specially: @samp{[a b, 2 c d]} is a vector
11825 of two elements. Also, if it would be an error to treat spaces as
11826 separators, but not otherwise, then Calc will ignore spaces:
11827 @w{@samp{[a - b]}} is a vector of one element, but @w{@samp{[a -b]}} is
11828 a vector of two elements. Finally, vectors entered with curly braces
11829 instead of square brackets do not give spaces any special treatment.
11830 When Calc displays a vector that does not contain any commas, it will
11831 insert parentheses if necessary to make the meaning clear:
11832 @w{@samp{[(a b)]}}.
11833
11834 The expression @samp{5%-2} is ambiguous; is this five-percent minus two,
11835 or five modulo minus-two? Calc always interprets the leftmost symbol as
11836 an infix operator preferentially (modulo, in this case), so you would
11837 need to write @samp{(5%)-2} to get the former interpretation.
11838
11839 @cindex Function call notation
11840 A function call is, e.g., @samp{sin(1+x)}. (The Calc algebraic function
11841 @code{foo} corresponds to the Emacs Lisp function @code{calcFunc-foo},
11842 but unless you access the function from within Emacs Lisp, you don't
11843 need to worry about it.) Most mathematical Calculator commands like
11844 @code{calc-sin} have function equivalents like @code{sin}.
11845 If no Lisp function is defined for a function called by a formula, the
11846 call is left as it is during algebraic manipulation: @samp{f(x+y)} is
11847 left alone. Beware that many innocent-looking short names like @code{in}
11848 and @code{re} have predefined meanings which could surprise you; however,
11849 single letters or single letters followed by digits are always safe to
11850 use for your own function names. @xref{Function Index}.
11851
11852 In the documentation for particular commands, the notation @kbd{H S}
11853 (@code{calc-sinh}) [@code{sinh}] means that the key sequence @kbd{H S}, the
11854 command @kbd{M-x calc-sinh}, and the algebraic function @code{sinh(x)} all
11855 represent the same operation.
11856
11857 Commands that interpret (``parse'') text as algebraic formulas include
11858 algebraic entry (@kbd{'}), editing commands like @kbd{`} which parse
11859 the contents of the editing buffer when you finish, the @kbd{M-# g}
11860 and @w{@kbd{M-# r}} commands, the @kbd{C-y} command, the X window system
11861 ``paste'' mouse operation, and Embedded mode. All of these operations
11862 use the same rules for parsing formulas; in particular, language modes
11863 (@pxref{Language Modes}) affect them all in the same way.
11864
11865 When you read a large amount of text into the Calculator (say a vector
11866 which represents a big set of rewrite rules; @pxref{Rewrite Rules}),
11867 you may wish to include comments in the text. Calc's formula parser
11868 ignores the symbol @samp{%%} and anything following it on a line:
11869
11870 @example
11871 [ a + b, %% the sum of "a" and "b"
11872 c + d,
11873 %% last line is coming up:
11874 e + f ]
11875 @end example
11876
11877 @noindent
11878 This is parsed exactly the same as @samp{[ a + b, c + d, e + f ]}.
11879
11880 @xref{Syntax Tables}, for a way to create your own operators and other
11881 input notations. @xref{Compositions}, for a way to create new display
11882 formats.
11883
11884 @xref{Algebra}, for commands for manipulating formulas symbolically.
11885
11886 @node Stack and Trail, Mode Settings, Data Types, Top
11887 @chapter Stack and Trail Commands
11888
11889 @noindent
11890 This chapter describes the Calc commands for manipulating objects on the
11891 stack and in the trail buffer. (These commands operate on objects of any
11892 type, such as numbers, vectors, formulas, and incomplete objects.)
11893
11894 @menu
11895 * Stack Manipulation::
11896 * Editing Stack Entries::
11897 * Trail Commands::
11898 * Keep Arguments::
11899 @end menu
11900
11901 @node Stack Manipulation, Editing Stack Entries, Stack and Trail, Stack and Trail
11902 @section Stack Manipulation Commands
11903
11904 @noindent
11905 @kindex @key{RET}
11906 @kindex @key{SPC}
11907 @pindex calc-enter
11908 @cindex Duplicating stack entries
11909 To duplicate the top object on the stack, press @key{RET} or @key{SPC}
11910 (two equivalent keys for the @code{calc-enter} command).
11911 Given a positive numeric prefix argument, these commands duplicate
11912 several elements at the top of the stack.
11913 Given a negative argument,
11914 these commands duplicate the specified element of the stack.
11915 Given an argument of zero, they duplicate the entire stack.
11916 For example, with @samp{10 20 30} on the stack,
11917 @key{RET} creates @samp{10 20 30 30},
11918 @kbd{C-u 2 @key{RET}} creates @samp{10 20 30 20 30},
11919 @kbd{C-u - 2 @key{RET}} creates @samp{10 20 30 20}, and
11920 @kbd{C-u 0 @key{RET}} creates @samp{10 20 30 10 20 30}.
11921
11922 @kindex @key{LFD}
11923 @pindex calc-over
11924 The @key{LFD} (@code{calc-over}) command (on a key marked Line-Feed if you
11925 have it, else on @kbd{C-j}) is like @code{calc-enter}
11926 except that the sign of the numeric prefix argument is interpreted
11927 oppositely. Also, with no prefix argument the default argument is 2.
11928 Thus with @samp{10 20 30} on the stack, @key{LFD} and @kbd{C-u 2 @key{LFD}}
11929 are both equivalent to @kbd{C-u - 2 @key{RET}}, producing
11930 @samp{10 20 30 20}.
11931
11932 @kindex @key{DEL}
11933 @kindex C-d
11934 @pindex calc-pop
11935 @cindex Removing stack entries
11936 @cindex Deleting stack entries
11937 To remove the top element from the stack, press @key{DEL} (@code{calc-pop}).
11938 The @kbd{C-d} key is a synonym for @key{DEL}.
11939 (If the top element is an incomplete object with at least one element, the
11940 last element is removed from it.) Given a positive numeric prefix argument,
11941 several elements are removed. Given a negative argument, the specified
11942 element of the stack is deleted. Given an argument of zero, the entire
11943 stack is emptied.
11944 For example, with @samp{10 20 30} on the stack,
11945 @key{DEL} leaves @samp{10 20},
11946 @kbd{C-u 2 @key{DEL}} leaves @samp{10},
11947 @kbd{C-u - 2 @key{DEL}} leaves @samp{10 30}, and
11948 @kbd{C-u 0 @key{DEL}} leaves an empty stack.
11949
11950 @kindex M-@key{DEL}
11951 @pindex calc-pop-above
11952 The @kbd{M-@key{DEL}} (@code{calc-pop-above}) command is to @key{DEL} what
11953 @key{LFD} is to @key{RET}: It interprets the sign of the numeric
11954 prefix argument in the opposite way, and the default argument is 2.
11955 Thus @kbd{M-@key{DEL}} by itself removes the second-from-top stack element,
11956 leaving the first, third, fourth, and so on; @kbd{M-3 M-@key{DEL}} deletes
11957 the third stack element.
11958
11959 @kindex @key{TAB}
11960 @pindex calc-roll-down
11961 To exchange the top two elements of the stack, press @key{TAB}
11962 (@code{calc-roll-down}). Given a positive numeric prefix argument, the
11963 specified number of elements at the top of the stack are rotated downward.
11964 Given a negative argument, the entire stack is rotated downward the specified
11965 number of times. Given an argument of zero, the entire stack is reversed
11966 top-for-bottom.
11967 For example, with @samp{10 20 30 40 50} on the stack,
11968 @key{TAB} creates @samp{10 20 30 50 40},
11969 @kbd{C-u 3 @key{TAB}} creates @samp{10 20 50 30 40},
11970 @kbd{C-u - 2 @key{TAB}} creates @samp{40 50 10 20 30}, and
11971 @kbd{C-u 0 @key{TAB}} creates @samp{50 40 30 20 10}.
11972
11973 @kindex M-@key{TAB}
11974 @pindex calc-roll-up
11975 The command @kbd{M-@key{TAB}} (@code{calc-roll-up}) is analogous to @key{TAB}
11976 except that it rotates upward instead of downward. Also, the default
11977 with no prefix argument is to rotate the top 3 elements.
11978 For example, with @samp{10 20 30 40 50} on the stack,
11979 @kbd{M-@key{TAB}} creates @samp{10 20 40 50 30},
11980 @kbd{C-u 4 M-@key{TAB}} creates @samp{10 30 40 50 20},
11981 @kbd{C-u - 2 M-@key{TAB}} creates @samp{30 40 50 10 20}, and
11982 @kbd{C-u 0 M-@key{TAB}} creates @samp{50 40 30 20 10}.
11983
11984 A good way to view the operation of @key{TAB} and @kbd{M-@key{TAB}} is in
11985 terms of moving a particular element to a new position in the stack.
11986 With a positive argument @var{n}, @key{TAB} moves the top stack
11987 element down to level @var{n}, making room for it by pulling all the
11988 intervening stack elements toward the top. @kbd{M-@key{TAB}} moves the
11989 element at level @var{n} up to the top. (Compare with @key{LFD},
11990 which copies instead of moving the element in level @var{n}.)
11991
11992 With a negative argument @mathit{-@var{n}}, @key{TAB} rotates the stack
11993 to move the object in level @var{n} to the deepest place in the
11994 stack, and the object in level @mathit{@var{n}+1} to the top. @kbd{M-@key{TAB}}
11995 rotates the deepest stack element to be in level @mathit{n}, also
11996 putting the top stack element in level @mathit{@var{n}+1}.
11997
11998 @xref{Selecting Subformulas}, for a way to apply these commands to
11999 any portion of a vector or formula on the stack.
12000
12001 @node Editing Stack Entries, Trail Commands, Stack Manipulation, Stack and Trail
12002 @section Editing Stack Entries
12003
12004 @noindent
12005 @kindex `
12006 @pindex calc-edit
12007 @pindex calc-edit-finish
12008 @cindex Editing the stack with Emacs
12009 The backquote, @kbd{`} (@code{calc-edit}) command creates a temporary
12010 buffer (@samp{*Calc Edit*}) for editing the top-of-stack value using
12011 regular Emacs commands. With a numeric prefix argument, it edits the
12012 specified number of stack entries at once. (An argument of zero edits
12013 the entire stack; a negative argument edits one specific stack entry.)
12014
12015 When you are done editing, press @kbd{C-c C-c} to finish and return
12016 to Calc. The @key{RET} and @key{LFD} keys also work to finish most
12017 sorts of editing, though in some cases Calc leaves @key{RET} with its
12018 usual meaning (``insert a newline'') if it's a situation where you
12019 might want to insert new lines into the editing buffer.
12020
12021 When you finish editing, the Calculator parses the lines of text in
12022 the @samp{*Calc Edit*} buffer as numbers or formulas, replaces the
12023 original stack elements in the original buffer with these new values,
12024 then kills the @samp{*Calc Edit*} buffer. The original Calculator buffer
12025 continues to exist during editing, but for best results you should be
12026 careful not to change it until you have finished the edit. You can
12027 also cancel the edit by killing the buffer with @kbd{C-x k}.
12028
12029 The formula is normally reevaluated as it is put onto the stack.
12030 For example, editing @samp{a + 2} to @samp{3 + 2} and pressing
12031 @kbd{C-c C-c} will push 5 on the stack. If you use @key{LFD} to
12032 finish, Calc will put the result on the stack without evaluating it.
12033
12034 If you give a prefix argument to @kbd{C-c C-c},
12035 Calc will not kill the @samp{*Calc Edit*} buffer. You can switch
12036 back to that buffer and continue editing if you wish. However, you
12037 should understand that if you initiated the edit with @kbd{`}, the
12038 @kbd{C-c C-c} operation will be programmed to replace the top of the
12039 stack with the new edited value, and it will do this even if you have
12040 rearranged the stack in the meanwhile. This is not so much of a problem
12041 with other editing commands, though, such as @kbd{s e}
12042 (@code{calc-edit-variable}; @pxref{Operations on Variables}).
12043
12044 If the @code{calc-edit} command involves more than one stack entry,
12045 each line of the @samp{*Calc Edit*} buffer is interpreted as a
12046 separate formula. Otherwise, the entire buffer is interpreted as
12047 one formula, with line breaks ignored. (You can use @kbd{C-o} or
12048 @kbd{C-q C-j} to insert a newline in the buffer without pressing @key{RET}.)
12049
12050 The @kbd{`} key also works during numeric or algebraic entry. The
12051 text entered so far is moved to the @code{*Calc Edit*} buffer for
12052 more extensive editing than is convenient in the minibuffer.
12053
12054 @node Trail Commands, Keep Arguments, Editing Stack Entries, Stack and Trail
12055 @section Trail Commands
12056
12057 @noindent
12058 @cindex Trail buffer
12059 The commands for manipulating the Calc Trail buffer are two-key sequences
12060 beginning with the @kbd{t} prefix.
12061
12062 @kindex t d
12063 @pindex calc-trail-display
12064 The @kbd{t d} (@code{calc-trail-display}) command turns display of the
12065 trail on and off. Normally the trail display is toggled on if it was off,
12066 off if it was on. With a numeric prefix of zero, this command always
12067 turns the trail off; with a prefix of one, it always turns the trail on.
12068 The other trail-manipulation commands described here automatically turn
12069 the trail on. Note that when the trail is off values are still recorded
12070 there; they are simply not displayed. To set Emacs to turn the trail
12071 off by default, type @kbd{t d} and then save the mode settings with
12072 @kbd{m m} (@code{calc-save-modes}).
12073
12074 @kindex t i
12075 @pindex calc-trail-in
12076 @kindex t o
12077 @pindex calc-trail-out
12078 The @kbd{t i} (@code{calc-trail-in}) and @kbd{t o}
12079 (@code{calc-trail-out}) commands switch the cursor into and out of the
12080 Calc Trail window. In practice they are rarely used, since the commands
12081 shown below are a more convenient way to move around in the
12082 trail, and they work ``by remote control'' when the cursor is still
12083 in the Calculator window.
12084
12085 @cindex Trail pointer
12086 There is a @dfn{trail pointer} which selects some entry of the trail at
12087 any given time. The trail pointer looks like a @samp{>} symbol right
12088 before the selected number. The following commands operate on the
12089 trail pointer in various ways.
12090
12091 @kindex t y
12092 @pindex calc-trail-yank
12093 @cindex Retrieving previous results
12094 The @kbd{t y} (@code{calc-trail-yank}) command reads the selected value in
12095 the trail and pushes it onto the Calculator stack. It allows you to
12096 re-use any previously computed value without retyping. With a numeric
12097 prefix argument @var{n}, it yanks the value @var{n} lines above the current
12098 trail pointer.
12099
12100 @kindex t <
12101 @pindex calc-trail-scroll-left
12102 @kindex t >
12103 @pindex calc-trail-scroll-right
12104 The @kbd{t <} (@code{calc-trail-scroll-left}) and @kbd{t >}
12105 (@code{calc-trail-scroll-right}) commands horizontally scroll the trail
12106 window left or right by one half of its width.
12107
12108 @kindex t n
12109 @pindex calc-trail-next
12110 @kindex t p
12111 @pindex calc-trail-previous
12112 @kindex t f
12113 @pindex calc-trail-forward
12114 @kindex t b
12115 @pindex calc-trail-backward
12116 The @kbd{t n} (@code{calc-trail-next}) and @kbd{t p}
12117 (@code{calc-trail-previous)} commands move the trail pointer down or up
12118 one line. The @kbd{t f} (@code{calc-trail-forward}) and @kbd{t b}
12119 (@code{calc-trail-backward}) commands move the trail pointer down or up
12120 one screenful at a time. All of these commands accept numeric prefix
12121 arguments to move several lines or screenfuls at a time.
12122
12123 @kindex t [
12124 @pindex calc-trail-first
12125 @kindex t ]
12126 @pindex calc-trail-last
12127 @kindex t h
12128 @pindex calc-trail-here
12129 The @kbd{t [} (@code{calc-trail-first}) and @kbd{t ]}
12130 (@code{calc-trail-last}) commands move the trail pointer to the first or
12131 last line of the trail. The @kbd{t h} (@code{calc-trail-here}) command
12132 moves the trail pointer to the cursor position; unlike the other trail
12133 commands, @kbd{t h} works only when Calc Trail is the selected window.
12134
12135 @kindex t s
12136 @pindex calc-trail-isearch-forward
12137 @kindex t r
12138 @pindex calc-trail-isearch-backward
12139 @ifinfo
12140 The @kbd{t s} (@code{calc-trail-isearch-forward}) and @kbd{t r}
12141 (@code{calc-trail-isearch-backward}) commands perform an incremental
12142 search forward or backward through the trail. You can press @key{RET}
12143 to terminate the search; the trail pointer moves to the current line.
12144 If you cancel the search with @kbd{C-g}, the trail pointer stays where
12145 it was when the search began.
12146 @end ifinfo
12147 @tex
12148 The @kbd{t s} (@code{calc-trail-isearch-forward}) and @kbd{t r}
12149 (@code{calc-trail-isearch-backward}) com\-mands perform an incremental
12150 search forward or backward through the trail. You can press @key{RET}
12151 to terminate the search; the trail pointer moves to the current line.
12152 If you cancel the search with @kbd{C-g}, the trail pointer stays where
12153 it was when the search began.
12154 @end tex
12155
12156 @kindex t m
12157 @pindex calc-trail-marker
12158 The @kbd{t m} (@code{calc-trail-marker}) command allows you to enter a
12159 line of text of your own choosing into the trail. The text is inserted
12160 after the line containing the trail pointer; this usually means it is
12161 added to the end of the trail. Trail markers are useful mainly as the
12162 targets for later incremental searches in the trail.
12163
12164 @kindex t k
12165 @pindex calc-trail-kill
12166 The @kbd{t k} (@code{calc-trail-kill}) command removes the selected line
12167 from the trail. The line is saved in the Emacs kill ring suitable for
12168 yanking into another buffer, but it is not easy to yank the text back
12169 into the trail buffer. With a numeric prefix argument, this command
12170 kills the @var{n} lines below or above the selected one.
12171
12172 The @kbd{t .} (@code{calc-full-trail-vectors}) command is described
12173 elsewhere; @pxref{Vector and Matrix Formats}.
12174
12175 @node Keep Arguments, , Trail Commands, Stack and Trail
12176 @section Keep Arguments
12177
12178 @noindent
12179 @kindex K
12180 @pindex calc-keep-args
12181 The @kbd{K} (@code{calc-keep-args}) command acts like a prefix for
12182 the following command. It prevents that command from removing its
12183 arguments from the stack. For example, after @kbd{2 @key{RET} 3 +},
12184 the stack contains the sole number 5, but after @kbd{2 @key{RET} 3 K +},
12185 the stack contains the arguments and the result: @samp{2 3 5}.
12186
12187 This works for all commands that take arguments off the stack. As
12188 another example, @kbd{K a s} simplifies a formula, pushing the
12189 simplified version of the formula onto the stack after the original
12190 formula (rather than replacing the original formula).
12191
12192 Note that you could get the same effect by typing @kbd{@key{RET} a s},
12193 copying the formula and then simplifying the copy. One difference
12194 is that for a very large formula the time taken to format the
12195 intermediate copy in @kbd{@key{RET} a s} could be noticeable; @kbd{K a s}
12196 would avoid this extra work.
12197
12198 Even stack manipulation commands are affected. @key{TAB} works by
12199 popping two values and pushing them back in the opposite order,
12200 so @kbd{2 @key{RET} 3 K @key{TAB}} produces @samp{2 3 3 2}.
12201
12202 A few Calc commands provide other ways of doing the same thing.
12203 For example, @kbd{' sin($)} replaces the number on the stack with
12204 its sine using algebraic entry; to push the sine and keep the
12205 original argument you could use either @kbd{' sin($1)} or
12206 @kbd{K ' sin($)}. @xref{Algebraic Entry}. Also, the @kbd{s s}
12207 command is effectively the same as @kbd{K s t}. @xref{Storing Variables}.
12208
12209 Keyboard macros may interact surprisingly with the @kbd{K} prefix.
12210 If you have defined a keyboard macro to be, say, @samp{Q +} to add
12211 one number to the square root of another, then typing @kbd{K X} will
12212 execute @kbd{K Q +}, probably not what you expected. The @kbd{K}
12213 prefix will apply to just the first command in the macro rather than
12214 the whole macro.
12215
12216 If you execute a command and then decide you really wanted to keep
12217 the argument, you can press @kbd{M-@key{RET}} (@code{calc-last-args}).
12218 This command pushes the last arguments that were popped by any command
12219 onto the stack. Note that the order of things on the stack will be
12220 different than with @kbd{K}: @kbd{2 @key{RET} 3 + M-@key{RET}} leaves
12221 @samp{5 2 3} on the stack instead of @samp{2 3 5}. @xref{Undo}.
12222
12223 @node Mode Settings, Arithmetic, Stack and Trail, Top
12224 @chapter Mode Settings
12225
12226 @noindent
12227 This chapter describes commands that set modes in the Calculator.
12228 They do not affect the contents of the stack, although they may change
12229 the @emph{appearance} or @emph{interpretation} of the stack's contents.
12230
12231 @menu
12232 * General Mode Commands::
12233 * Precision::
12234 * Inverse and Hyperbolic::
12235 * Calculation Modes::
12236 * Simplification Modes::
12237 * Declarations::
12238 * Display Modes::
12239 * Language Modes::
12240 * Modes Variable::
12241 * Calc Mode Line::
12242 @end menu
12243
12244 @node General Mode Commands, Precision, Mode Settings, Mode Settings
12245 @section General Mode Commands
12246
12247 @noindent
12248 @kindex m m
12249 @pindex calc-save-modes
12250 @cindex Continuous memory
12251 @cindex Saving mode settings
12252 @cindex Permanent mode settings
12253 @cindex @file{.emacs} file, mode settings
12254 You can save all of the current mode settings in your @file{.emacs} file
12255 with the @kbd{m m} (@code{calc-save-modes}) command. This will cause
12256 Emacs to reestablish these modes each time it starts up. The modes saved
12257 in the file include everything controlled by the @kbd{m} and @kbd{d}
12258 prefix keys, the current precision and binary word size, whether or not
12259 the trail is displayed, the current height of the Calc window, and more.
12260 The current interface (used when you type @kbd{M-# M-#}) is also saved.
12261 If there were already saved mode settings in the file, they are replaced.
12262 Otherwise, the new mode information is appended to the end of the file.
12263
12264 @kindex m R
12265 @pindex calc-mode-record-mode
12266 The @kbd{m R} (@code{calc-mode-record-mode}) command tells Calc to
12267 record the new mode settings (as if by pressing @kbd{m m}) every
12268 time a mode setting changes. If Embedded mode is enabled, other
12269 options are available; @pxref{Mode Settings in Embedded Mode}.
12270
12271 @kindex m F
12272 @pindex calc-settings-file-name
12273 The @kbd{m F} (@code{calc-settings-file-name}) command allows you to
12274 choose a different place than your @file{.emacs} file for @kbd{m m},
12275 @kbd{Z P}, and similar commands to save permanent information.
12276 You are prompted for a file name. All Calc modes are then reset to
12277 their default values, then settings from the file you named are loaded
12278 if this file exists, and this file becomes the one that Calc will
12279 use in the future for commands like @kbd{m m}. The default settings
12280 file name is @file{~/.emacs}. You can see the current file name by
12281 giving a blank response to the @kbd{m F} prompt. See also the
12282 discussion of the @code{calc-settings-file} variable; @pxref{Installation}.
12283
12284 If the file name you give contains the string @samp{.emacs} anywhere
12285 inside it, @kbd{m F} will not automatically load the new file. This
12286 is because you are presumably switching to your @file{~/.emacs} file,
12287 which may contain other things you don't want to reread. You can give
12288 a numeric prefix argument of 1 to @kbd{m F} to force it to read the
12289 file no matter what its name. Conversely, an argument of @mathit{-1} tells
12290 @kbd{m F} @emph{not} to read the new file. An argument of 2 or @mathit{-2}
12291 tells @kbd{m F} not to reset the modes to their defaults beforehand,
12292 which is useful if you intend your new file to have a variant of the
12293 modes present in the file you were using before.
12294
12295 @kindex m x
12296 @pindex calc-always-load-extensions
12297 The @kbd{m x} (@code{calc-always-load-extensions}) command enables a mode
12298 in which the first use of Calc loads the entire program, including all
12299 extensions modules. Otherwise, the extensions modules will not be loaded
12300 until the various advanced Calc features are used. Since this mode only
12301 has effect when Calc is first loaded, @kbd{m x} is usually followed by
12302 @kbd{m m} to make the mode-setting permanent. To load all of Calc just
12303 once, rather than always in the future, you can press @kbd{M-# L}.
12304
12305 @kindex m S
12306 @pindex calc-shift-prefix
12307 The @kbd{m S} (@code{calc-shift-prefix}) command enables a mode in which
12308 all of Calc's letter prefix keys may be typed shifted as well as unshifted.
12309 If you are typing, say, @kbd{a S} (@code{calc-solve-for}) quite often
12310 you might find it easier to turn this mode on so that you can type
12311 @kbd{A S} instead. When this mode is enabled, the commands that used to
12312 be on those single shifted letters (e.g., @kbd{A} (@code{calc-abs})) can
12313 now be invoked by pressing the shifted letter twice: @kbd{A A}. Note
12314 that the @kbd{v} prefix key always works both shifted and unshifted, and
12315 the @kbd{z} and @kbd{Z} prefix keys are always distinct. Also, the @kbd{h}
12316 prefix is not affected by this mode. Press @kbd{m S} again to disable
12317 shifted-prefix mode.
12318
12319 @node Precision, Inverse and Hyperbolic, General Mode Commands, Mode Settings
12320 @section Precision
12321
12322 @noindent
12323 @kindex p
12324 @pindex calc-precision
12325 @cindex Precision of calculations
12326 The @kbd{p} (@code{calc-precision}) command controls the precision to
12327 which floating-point calculations are carried. The precision must be
12328 at least 3 digits and may be arbitrarily high, within the limits of
12329 memory and time. This affects only floats: Integer and rational
12330 calculations are always carried out with as many digits as necessary.
12331
12332 The @kbd{p} key prompts for the current precision. If you wish you
12333 can instead give the precision as a numeric prefix argument.
12334
12335 Many internal calculations are carried to one or two digits higher
12336 precision than normal. Results are rounded down afterward to the
12337 current precision. Unless a special display mode has been selected,
12338 floats are always displayed with their full stored precision, i.e.,
12339 what you see is what you get. Reducing the current precision does not
12340 round values already on the stack, but those values will be rounded
12341 down before being used in any calculation. The @kbd{c 0} through
12342 @kbd{c 9} commands (@pxref{Conversions}) can be used to round an
12343 existing value to a new precision.
12344
12345 @cindex Accuracy of calculations
12346 It is important to distinguish the concepts of @dfn{precision} and
12347 @dfn{accuracy}. In the normal usage of these words, the number
12348 123.4567 has a precision of 7 digits but an accuracy of 4 digits.
12349 The precision is the total number of digits not counting leading
12350 or trailing zeros (regardless of the position of the decimal point).
12351 The accuracy is simply the number of digits after the decimal point
12352 (again not counting trailing zeros). In Calc you control the precision,
12353 not the accuracy of computations. If you were to set the accuracy
12354 instead, then calculations like @samp{exp(100)} would generate many
12355 more digits than you would typically need, while @samp{exp(-100)} would
12356 probably round to zero! In Calc, both these computations give you
12357 exactly 12 (or the requested number of) significant digits.
12358
12359 The only Calc features that deal with accuracy instead of precision
12360 are fixed-point display mode for floats (@kbd{d f}; @pxref{Float Formats}),
12361 and the rounding functions like @code{floor} and @code{round}
12362 (@pxref{Integer Truncation}). Also, @kbd{c 0} through @kbd{c 9}
12363 deal with both precision and accuracy depending on the magnitudes
12364 of the numbers involved.
12365
12366 If you need to work with a particular fixed accuracy (say, dollars and
12367 cents with two digits after the decimal point), one solution is to work
12368 with integers and an ``implied'' decimal point. For example, $8.99
12369 divided by 6 would be entered @kbd{899 @key{RET} 6 /}, yielding 149.833
12370 (actually $1.49833 with our implied decimal point); pressing @kbd{R}
12371 would round this to 150 cents, i.e., $1.50.
12372
12373 @xref{Floats}, for still more on floating-point precision and related
12374 issues.
12375
12376 @node Inverse and Hyperbolic, Calculation Modes, Precision, Mode Settings
12377 @section Inverse and Hyperbolic Flags
12378
12379 @noindent
12380 @kindex I
12381 @pindex calc-inverse
12382 There is no single-key equivalent to the @code{calc-arcsin} function.
12383 Instead, you must first press @kbd{I} (@code{calc-inverse}) to set
12384 the @dfn{Inverse Flag}, then press @kbd{S} (@code{calc-sin}).
12385 The @kbd{I} key actually toggles the Inverse Flag. When this flag
12386 is set, the word @samp{Inv} appears in the mode line.
12387
12388 @kindex H
12389 @pindex calc-hyperbolic
12390 Likewise, the @kbd{H} key (@code{calc-hyperbolic}) sets or clears the
12391 Hyperbolic Flag, which transforms @code{calc-sin} into @code{calc-sinh}.
12392 If both of these flags are set at once, the effect will be
12393 @code{calc-arcsinh}. (The Hyperbolic flag is also used by some
12394 non-trigonometric commands; for example @kbd{H L} computes a base-10,
12395 instead of base-@mathit{e}, logarithm.)
12396
12397 Command names like @code{calc-arcsin} are provided for completeness, and
12398 may be executed with @kbd{x} or @kbd{M-x}. Their effect is simply to
12399 toggle the Inverse and/or Hyperbolic flags and then execute the
12400 corresponding base command (@code{calc-sin} in this case).
12401
12402 The Inverse and Hyperbolic flags apply only to the next Calculator
12403 command, after which they are automatically cleared. (They are also
12404 cleared if the next keystroke is not a Calc command.) Digits you
12405 type after @kbd{I} or @kbd{H} (or @kbd{K}) are treated as prefix
12406 arguments for the next command, not as numeric entries. The same
12407 is true of @kbd{C-u}, but not of the minus sign (@kbd{K -} means to
12408 subtract and keep arguments).
12409
12410 The third Calc prefix flag, @kbd{K} (keep-arguments), is discussed
12411 elsewhere. @xref{Keep Arguments}.
12412
12413 @node Calculation Modes, Simplification Modes, Inverse and Hyperbolic, Mode Settings
12414 @section Calculation Modes
12415
12416 @noindent
12417 The commands in this section are two-key sequences beginning with
12418 the @kbd{m} prefix. (That's the letter @kbd{m}, not the @key{META} key.)
12419 The @samp{m a} (@code{calc-algebraic-mode}) command is described elsewhere
12420 (@pxref{Algebraic Entry}).
12421
12422 @menu
12423 * Angular Modes::
12424 * Polar Mode::
12425 * Fraction Mode::
12426 * Infinite Mode::
12427 * Symbolic Mode::
12428 * Matrix Mode::
12429 * Automatic Recomputation::
12430 * Working Message::
12431 @end menu
12432
12433 @node Angular Modes, Polar Mode, Calculation Modes, Calculation Modes
12434 @subsection Angular Modes
12435
12436 @noindent
12437 @cindex Angular mode
12438 The Calculator supports three notations for angles: radians, degrees,
12439 and degrees-minutes-seconds. When a number is presented to a function
12440 like @code{sin} that requires an angle, the current angular mode is
12441 used to interpret the number as either radians or degrees. If an HMS
12442 form is presented to @code{sin}, it is always interpreted as
12443 degrees-minutes-seconds.
12444
12445 Functions that compute angles produce a number in radians, a number in
12446 degrees, or an HMS form depending on the current angular mode. If the
12447 result is a complex number and the current mode is HMS, the number is
12448 instead expressed in degrees. (Complex-number calculations would
12449 normally be done in Radians mode, though. Complex numbers are converted
12450 to degrees by calculating the complex result in radians and then
12451 multiplying by 180 over @cpi{}.)
12452
12453 @kindex m r
12454 @pindex calc-radians-mode
12455 @kindex m d
12456 @pindex calc-degrees-mode
12457 @kindex m h
12458 @pindex calc-hms-mode
12459 The @kbd{m r} (@code{calc-radians-mode}), @kbd{m d} (@code{calc-degrees-mode}),
12460 and @kbd{m h} (@code{calc-hms-mode}) commands control the angular mode.
12461 The current angular mode is displayed on the Emacs mode line.
12462 The default angular mode is Degrees.
12463
12464 @node Polar Mode, Fraction Mode, Angular Modes, Calculation Modes
12465 @subsection Polar Mode
12466
12467 @noindent
12468 @cindex Polar mode
12469 The Calculator normally ``prefers'' rectangular complex numbers in the
12470 sense that rectangular form is used when the proper form can not be
12471 decided from the input. This might happen by multiplying a rectangular
12472 number by a polar one, by taking the square root of a negative real
12473 number, or by entering @kbd{( 2 @key{SPC} 3 )}.
12474
12475 @kindex m p
12476 @pindex calc-polar-mode
12477 The @kbd{m p} (@code{calc-polar-mode}) command toggles complex-number
12478 preference between rectangular and polar forms. In Polar mode, all
12479 of the above example situations would produce polar complex numbers.
12480
12481 @node Fraction Mode, Infinite Mode, Polar Mode, Calculation Modes
12482 @subsection Fraction Mode
12483
12484 @noindent
12485 @cindex Fraction mode
12486 @cindex Division of integers
12487 Division of two integers normally yields a floating-point number if the
12488 result cannot be expressed as an integer. In some cases you would
12489 rather get an exact fractional answer. One way to accomplish this is
12490 to multiply fractions instead: @kbd{6 @key{RET} 1:4 *} produces @expr{3:2}
12491 even though @kbd{6 @key{RET} 4 /} produces @expr{1.5}.
12492
12493 @kindex m f
12494 @pindex calc-frac-mode
12495 To set the Calculator to produce fractional results for normal integer
12496 divisions, use the @kbd{m f} (@code{calc-frac-mode}) command.
12497 For example, @expr{8/4} produces @expr{2} in either mode,
12498 but @expr{6/4} produces @expr{3:2} in Fraction mode, @expr{1.5} in
12499 Float mode.
12500
12501 At any time you can use @kbd{c f} (@code{calc-float}) to convert a
12502 fraction to a float, or @kbd{c F} (@code{calc-fraction}) to convert a
12503 float to a fraction. @xref{Conversions}.
12504
12505 @node Infinite Mode, Symbolic Mode, Fraction Mode, Calculation Modes
12506 @subsection Infinite Mode
12507
12508 @noindent
12509 @cindex Infinite mode
12510 The Calculator normally treats results like @expr{1 / 0} as errors;
12511 formulas like this are left in unsimplified form. But Calc can be
12512 put into a mode where such calculations instead produce ``infinite''
12513 results.
12514
12515 @kindex m i
12516 @pindex calc-infinite-mode
12517 The @kbd{m i} (@code{calc-infinite-mode}) command turns this mode
12518 on and off. When the mode is off, infinities do not arise except
12519 in calculations that already had infinities as inputs. (One exception
12520 is that infinite open intervals like @samp{[0 .. inf)} can be
12521 generated; however, intervals closed at infinity (@samp{[0 .. inf]})
12522 will not be generated when Infinite mode is off.)
12523
12524 With Infinite mode turned on, @samp{1 / 0} will generate @code{uinf},
12525 an undirected infinity. @xref{Infinities}, for a discussion of the
12526 difference between @code{inf} and @code{uinf}. Also, @expr{0 / 0}
12527 evaluates to @code{nan}, the ``indeterminate'' symbol. Various other
12528 functions can also return infinities in this mode; for example,
12529 @samp{ln(0) = -inf}, and @samp{gamma(-7) = uinf}. Once again,
12530 note that @samp{exp(inf) = inf} regardless of Infinite mode because
12531 this calculation has infinity as an input.
12532
12533 @cindex Positive Infinite mode
12534 The @kbd{m i} command with a numeric prefix argument of zero,
12535 i.e., @kbd{C-u 0 m i}, turns on a Positive Infinite mode in
12536 which zero is treated as positive instead of being directionless.
12537 Thus, @samp{1 / 0 = inf} and @samp{-1 / 0 = -inf} in this mode.
12538 Note that zero never actually has a sign in Calc; there are no
12539 separate representations for @mathit{+0} and @mathit{-0}. Positive
12540 Infinite mode merely changes the interpretation given to the
12541 single symbol, @samp{0}. One consequence of this is that, while
12542 you might expect @samp{1 / -0 = -inf}, actually @samp{1 / -0}
12543 is equivalent to @samp{1 / 0}, which is equal to positive @code{inf}.
12544
12545 @node Symbolic Mode, Matrix Mode, Infinite Mode, Calculation Modes
12546 @subsection Symbolic Mode
12547
12548 @noindent
12549 @cindex Symbolic mode
12550 @cindex Inexact results
12551 Calculations are normally performed numerically wherever possible.
12552 For example, the @code{calc-sqrt} command, or @code{sqrt} function in an
12553 algebraic expression, produces a numeric answer if the argument is a
12554 number or a symbolic expression if the argument is an expression:
12555 @kbd{2 Q} pushes 1.4142 but @kbd{@key{'} x+1 @key{RET} Q} pushes @samp{sqrt(x+1)}.
12556
12557 @kindex m s
12558 @pindex calc-symbolic-mode
12559 In @dfn{Symbolic mode}, controlled by the @kbd{m s} (@code{calc-symbolic-mode})
12560 command, functions which would produce inexact, irrational results are
12561 left in symbolic form. Thus @kbd{16 Q} pushes 4, but @kbd{2 Q} pushes
12562 @samp{sqrt(2)}.
12563
12564 @kindex N
12565 @pindex calc-eval-num
12566 The shift-@kbd{N} (@code{calc-eval-num}) command evaluates numerically
12567 the expression at the top of the stack, by temporarily disabling
12568 @code{calc-symbolic-mode} and executing @kbd{=} (@code{calc-evaluate}).
12569 Given a numeric prefix argument, it also
12570 sets the floating-point precision to the specified value for the duration
12571 of the command.
12572
12573 To evaluate a formula numerically without expanding the variables it
12574 contains, you can use the key sequence @kbd{m s a v m s} (this uses
12575 @code{calc-alg-evaluate}, which resimplifies but doesn't evaluate
12576 variables.)
12577
12578 @node Matrix Mode, Automatic Recomputation, Symbolic Mode, Calculation Modes
12579 @subsection Matrix and Scalar Modes
12580
12581 @noindent
12582 @cindex Matrix mode
12583 @cindex Scalar mode
12584 Calc sometimes makes assumptions during algebraic manipulation that
12585 are awkward or incorrect when vectors and matrices are involved.
12586 Calc has two modes, @dfn{Matrix mode} and @dfn{Scalar mode}, which
12587 modify its behavior around vectors in useful ways.
12588
12589 @kindex m v
12590 @pindex calc-matrix-mode
12591 Press @kbd{m v} (@code{calc-matrix-mode}) once to enter Matrix mode.
12592 In this mode, all objects are assumed to be matrices unless provably
12593 otherwise. One major effect is that Calc will no longer consider
12594 multiplication to be commutative. (Recall that in matrix arithmetic,
12595 @samp{A*B} is not the same as @samp{B*A}.) This assumption affects
12596 rewrite rules and algebraic simplification. Another effect of this
12597 mode is that calculations that would normally produce constants like
12598 0 and 1 (e.g., @expr{a - a} and @expr{a / a}, respectively) will now
12599 produce function calls that represent ``generic'' zero or identity
12600 matrices: @samp{idn(0)}, @samp{idn(1)}. The @code{idn} function
12601 @samp{idn(@var{a},@var{n})} returns @var{a} times an @var{n}x@var{n}
12602 identity matrix; if @var{n} is omitted, it doesn't know what
12603 dimension to use and so the @code{idn} call remains in symbolic
12604 form. However, if this generic identity matrix is later combined
12605 with a matrix whose size is known, it will be converted into
12606 a true identity matrix of the appropriate size. On the other hand,
12607 if it is combined with a scalar (as in @samp{idn(1) + 2}), Calc
12608 will assume it really was a scalar after all and produce, e.g., 3.
12609
12610 Press @kbd{m v} a second time to get Scalar mode. Here, objects are
12611 assumed @emph{not} to be vectors or matrices unless provably so.
12612 For example, normally adding a variable to a vector, as in
12613 @samp{[x, y, z] + a}, will leave the sum in symbolic form because
12614 as far as Calc knows, @samp{a} could represent either a number or
12615 another 3-vector. In Scalar mode, @samp{a} is assumed to be a
12616 non-vector, and the addition is evaluated to @samp{[x+a, y+a, z+a]}.
12617
12618 Press @kbd{m v} a third time to return to the normal mode of operation.
12619
12620 If you press @kbd{m v} with a numeric prefix argument @var{n}, you
12621 get a special ``dimensioned'' Matrix mode in which matrices of
12622 unknown size are assumed to be @var{n}x@var{n} square matrices.
12623 Then, the function call @samp{idn(1)} will expand into an actual
12624 matrix rather than representing a ``generic'' matrix.
12625
12626 @cindex Declaring scalar variables
12627 Of course these modes are approximations to the true state of
12628 affairs, which is probably that some quantities will be matrices
12629 and others will be scalars. One solution is to ``declare''
12630 certain variables or functions to be scalar-valued.
12631 @xref{Declarations}, to see how to make declarations in Calc.
12632
12633 There is nothing stopping you from declaring a variable to be
12634 scalar and then storing a matrix in it; however, if you do, the
12635 results you get from Calc may not be valid. Suppose you let Calc
12636 get the result @samp{[x+a, y+a, z+a]} shown above, and then stored
12637 @samp{[1, 2, 3]} in @samp{a}. The result would not be the same as
12638 for @samp{[x, y, z] + [1, 2, 3]}, but that's because you have broken
12639 your earlier promise to Calc that @samp{a} would be scalar.
12640
12641 Another way to mix scalars and matrices is to use selections
12642 (@pxref{Selecting Subformulas}). Use Matrix mode when operating on
12643 your formula normally; then, to apply Scalar mode to a certain part
12644 of the formula without affecting the rest just select that part,
12645 change into Scalar mode and press @kbd{=} to resimplify the part
12646 under this mode, then change back to Matrix mode before deselecting.
12647
12648 @node Automatic Recomputation, Working Message, Matrix Mode, Calculation Modes
12649 @subsection Automatic Recomputation
12650
12651 @noindent
12652 The @dfn{evaluates-to} operator, @samp{=>}, has the special
12653 property that any @samp{=>} formulas on the stack are recomputed
12654 whenever variable values or mode settings that might affect them
12655 are changed. @xref{Evaluates-To Operator}.
12656
12657 @kindex m C
12658 @pindex calc-auto-recompute
12659 The @kbd{m C} (@code{calc-auto-recompute}) command turns this
12660 automatic recomputation on and off. If you turn it off, Calc will
12661 not update @samp{=>} operators on the stack (nor those in the
12662 attached Embedded mode buffer, if there is one). They will not
12663 be updated unless you explicitly do so by pressing @kbd{=} or until
12664 you press @kbd{m C} to turn recomputation back on. (While automatic
12665 recomputation is off, you can think of @kbd{m C m C} as a command
12666 to update all @samp{=>} operators while leaving recomputation off.)
12667
12668 To update @samp{=>} operators in an Embedded buffer while
12669 automatic recomputation is off, use @w{@kbd{M-# u}}.
12670 @xref{Embedded Mode}.
12671
12672 @node Working Message, , Automatic Recomputation, Calculation Modes
12673 @subsection Working Messages
12674
12675 @noindent
12676 @cindex Performance
12677 @cindex Working messages
12678 Since the Calculator is written entirely in Emacs Lisp, which is not
12679 designed for heavy numerical work, many operations are quite slow.
12680 The Calculator normally displays the message @samp{Working...} in the
12681 echo area during any command that may be slow. In addition, iterative
12682 operations such as square roots and trigonometric functions display the
12683 intermediate result at each step. Both of these types of messages can
12684 be disabled if you find them distracting.
12685
12686 @kindex m w
12687 @pindex calc-working
12688 Type @kbd{m w} (@code{calc-working}) with a numeric prefix of 0 to
12689 disable all ``working'' messages. Use a numeric prefix of 1 to enable
12690 only the plain @samp{Working...} message. Use a numeric prefix of 2 to
12691 see intermediate results as well. With no numeric prefix this displays
12692 the current mode.
12693
12694 While it may seem that the ``working'' messages will slow Calc down
12695 considerably, experiments have shown that their impact is actually
12696 quite small. But if your terminal is slow you may find that it helps
12697 to turn the messages off.
12698
12699 @node Simplification Modes, Declarations, Calculation Modes, Mode Settings
12700 @section Simplification Modes
12701
12702 @noindent
12703 The current @dfn{simplification mode} controls how numbers and formulas
12704 are ``normalized'' when being taken from or pushed onto the stack.
12705 Some normalizations are unavoidable, such as rounding floating-point
12706 results to the current precision, and reducing fractions to simplest
12707 form. Others, such as simplifying a formula like @expr{a+a} (or @expr{2+3}),
12708 are done by default but can be turned off when necessary.
12709
12710 When you press a key like @kbd{+} when @expr{2} and @expr{3} are on the
12711 stack, Calc pops these numbers, normalizes them, creates the formula
12712 @expr{2+3}, normalizes it, and pushes the result. Of course the standard
12713 rules for normalizing @expr{2+3} will produce the result @expr{5}.
12714
12715 Simplification mode commands consist of the lower-case @kbd{m} prefix key
12716 followed by a shifted letter.
12717
12718 @kindex m O
12719 @pindex calc-no-simplify-mode
12720 The @kbd{m O} (@code{calc-no-simplify-mode}) command turns off all optional
12721 simplifications. These would leave a formula like @expr{2+3} alone. In
12722 fact, nothing except simple numbers are ever affected by normalization
12723 in this mode.
12724
12725 @kindex m N
12726 @pindex calc-num-simplify-mode
12727 The @kbd{m N} (@code{calc-num-simplify-mode}) command turns off simplification
12728 of any formulas except those for which all arguments are constants. For
12729 example, @expr{1+2} is simplified to @expr{3}, and @expr{a+(2-2)} is
12730 simplified to @expr{a+0} but no further, since one argument of the sum
12731 is not a constant. Unfortunately, @expr{(a+2)-2} is @emph{not} simplified
12732 because the top-level @samp{-} operator's arguments are not both
12733 constant numbers (one of them is the formula @expr{a+2}).
12734 A constant is a number or other numeric object (such as a constant
12735 error form or modulo form), or a vector all of whose
12736 elements are constant.
12737
12738 @kindex m D
12739 @pindex calc-default-simplify-mode
12740 The @kbd{m D} (@code{calc-default-simplify-mode}) command restores the
12741 default simplifications for all formulas. This includes many easy and
12742 fast algebraic simplifications such as @expr{a+0} to @expr{a}, and
12743 @expr{a + 2 a} to @expr{3 a}, as well as evaluating functions like
12744 @texline @t{deriv}@expr{(x^2,x)}
12745 @infoline @expr{@t{deriv}(x^2, x)}
12746 to @expr{2 x}.
12747
12748 @kindex m B
12749 @pindex calc-bin-simplify-mode
12750 The @kbd{m B} (@code{calc-bin-simplify-mode}) mode applies the default
12751 simplifications to a result and then, if the result is an integer,
12752 uses the @kbd{b c} (@code{calc-clip}) command to clip the integer according
12753 to the current binary word size. @xref{Binary Functions}. Real numbers
12754 are rounded to the nearest integer and then clipped; other kinds of
12755 results (after the default simplifications) are left alone.
12756
12757 @kindex m A
12758 @pindex calc-alg-simplify-mode
12759 The @kbd{m A} (@code{calc-alg-simplify-mode}) mode does algebraic
12760 simplification; it applies all the default simplifications, and also
12761 the more powerful (and slower) simplifications made by @kbd{a s}
12762 (@code{calc-simplify}). @xref{Algebraic Simplifications}.
12763
12764 @kindex m E
12765 @pindex calc-ext-simplify-mode
12766 The @kbd{m E} (@code{calc-ext-simplify-mode}) mode does ``extended''
12767 algebraic simplification, as by the @kbd{a e} (@code{calc-simplify-extended})
12768 command. @xref{Unsafe Simplifications}.
12769
12770 @kindex m U
12771 @pindex calc-units-simplify-mode
12772 The @kbd{m U} (@code{calc-units-simplify-mode}) mode does units
12773 simplification; it applies the command @kbd{u s}
12774 (@code{calc-simplify-units}), which in turn
12775 is a superset of @kbd{a s}. In this mode, variable names which
12776 are identifiable as unit names (like @samp{mm} for ``millimeters'')
12777 are simplified with their unit definitions in mind.
12778
12779 A common technique is to set the simplification mode down to the lowest
12780 amount of simplification you will allow to be applied automatically, then
12781 use manual commands like @kbd{a s} and @kbd{c c} (@code{calc-clean}) to
12782 perform higher types of simplifications on demand. @xref{Algebraic
12783 Definitions}, for another sample use of No-Simplification mode.
12784
12785 @node Declarations, Display Modes, Simplification Modes, Mode Settings
12786 @section Declarations
12787
12788 @noindent
12789 A @dfn{declaration} is a statement you make that promises you will
12790 use a certain variable or function in a restricted way. This may
12791 give Calc the freedom to do things that it couldn't do if it had to
12792 take the fully general situation into account.
12793
12794 @menu
12795 * Declaration Basics::
12796 * Kinds of Declarations::
12797 * Functions for Declarations::
12798 @end menu
12799
12800 @node Declaration Basics, Kinds of Declarations, Declarations, Declarations
12801 @subsection Declaration Basics
12802
12803 @noindent
12804 @kindex s d
12805 @pindex calc-declare-variable
12806 The @kbd{s d} (@code{calc-declare-variable}) command is the easiest
12807 way to make a declaration for a variable. This command prompts for
12808 the variable name, then prompts for the declaration. The default
12809 at the declaration prompt is the previous declaration, if any.
12810 You can edit this declaration, or press @kbd{C-k} to erase it and
12811 type a new declaration. (Or, erase it and press @key{RET} to clear
12812 the declaration, effectively ``undeclaring'' the variable.)
12813
12814 A declaration is in general a vector of @dfn{type symbols} and
12815 @dfn{range} values. If there is only one type symbol or range value,
12816 you can write it directly rather than enclosing it in a vector.
12817 For example, @kbd{s d foo @key{RET} real @key{RET}} declares @code{foo} to
12818 be a real number, and @kbd{s d bar @key{RET} [int, const, [1..6]] @key{RET}}
12819 declares @code{bar} to be a constant integer between 1 and 6.
12820 (Actually, you can omit the outermost brackets and Calc will
12821 provide them for you: @kbd{s d bar @key{RET} int, const, [1..6] @key{RET}}.)
12822
12823 @cindex @code{Decls} variable
12824 @vindex Decls
12825 Declarations in Calc are kept in a special variable called @code{Decls}.
12826 This variable encodes the set of all outstanding declarations in
12827 the form of a matrix. Each row has two elements: A variable or
12828 vector of variables declared by that row, and the declaration
12829 specifier as described above. You can use the @kbd{s D} command to
12830 edit this variable if you wish to see all the declarations at once.
12831 @xref{Operations on Variables}, for a description of this command
12832 and the @kbd{s p} command that allows you to save your declarations
12833 permanently if you wish.
12834
12835 Items being declared can also be function calls. The arguments in
12836 the call are ignored; the effect is to say that this function returns
12837 values of the declared type for any valid arguments. The @kbd{s d}
12838 command declares only variables, so if you wish to make a function
12839 declaration you will have to edit the @code{Decls} matrix yourself.
12840
12841 For example, the declaration matrix
12842
12843 @smallexample
12844 @group
12845 [ [ foo, real ]
12846 [ [j, k, n], int ]
12847 [ f(1,2,3), [0 .. inf) ] ]
12848 @end group
12849 @end smallexample
12850
12851 @noindent
12852 declares that @code{foo} represents a real number, @code{j}, @code{k}
12853 and @code{n} represent integers, and the function @code{f} always
12854 returns a real number in the interval shown.
12855
12856 @vindex All
12857 If there is a declaration for the variable @code{All}, then that
12858 declaration applies to all variables that are not otherwise declared.
12859 It does not apply to function names. For example, using the row
12860 @samp{[All, real]} says that all your variables are real unless they
12861 are explicitly declared without @code{real} in some other row.
12862 The @kbd{s d} command declares @code{All} if you give a blank
12863 response to the variable-name prompt.
12864
12865 @node Kinds of Declarations, Functions for Declarations, Declaration Basics, Declarations
12866 @subsection Kinds of Declarations
12867
12868 @noindent
12869 The type-specifier part of a declaration (that is, the second prompt
12870 in the @kbd{s d} command) can be a type symbol, an interval, or a
12871 vector consisting of zero or more type symbols followed by zero or
12872 more intervals or numbers that represent the set of possible values
12873 for the variable.
12874
12875 @smallexample
12876 @group
12877 [ [ a, [1, 2, 3, 4, 5] ]
12878 [ b, [1 .. 5] ]
12879 [ c, [int, 1 .. 5] ] ]
12880 @end group
12881 @end smallexample
12882
12883 Here @code{a} is declared to contain one of the five integers shown;
12884 @code{b} is any number in the interval from 1 to 5 (any real number
12885 since we haven't specified), and @code{c} is any integer in that
12886 interval. Thus the declarations for @code{a} and @code{c} are
12887 nearly equivalent (see below).
12888
12889 The type-specifier can be the empty vector @samp{[]} to say that
12890 nothing is known about a given variable's value. This is the same
12891 as not declaring the variable at all except that it overrides any
12892 @code{All} declaration which would otherwise apply.
12893
12894 The initial value of @code{Decls} is the empty vector @samp{[]}.
12895 If @code{Decls} has no stored value or if the value stored in it
12896 is not valid, it is ignored and there are no declarations as far
12897 as Calc is concerned. (The @kbd{s d} command will replace such a
12898 malformed value with a fresh empty matrix, @samp{[]}, before recording
12899 the new declaration.) Unrecognized type symbols are ignored.
12900
12901 The following type symbols describe what sorts of numbers will be
12902 stored in a variable:
12903
12904 @table @code
12905 @item int
12906 Integers.
12907 @item numint
12908 Numerical integers. (Integers or integer-valued floats.)
12909 @item frac
12910 Fractions. (Rational numbers which are not integers.)
12911 @item rat
12912 Rational numbers. (Either integers or fractions.)
12913 @item float
12914 Floating-point numbers.
12915 @item real
12916 Real numbers. (Integers, fractions, or floats. Actually,
12917 intervals and error forms with real components also count as
12918 reals here.)
12919 @item pos
12920 Positive real numbers. (Strictly greater than zero.)
12921 @item nonneg
12922 Nonnegative real numbers. (Greater than or equal to zero.)
12923 @item number
12924 Numbers. (Real or complex.)
12925 @end table
12926
12927 Calc uses this information to determine when certain simplifications
12928 of formulas are safe. For example, @samp{(x^y)^z} cannot be
12929 simplified to @samp{x^(y z)} in general; for example,
12930 @samp{((-3)^2)^1:2} is 3, but @samp{(-3)^(2*1:2) = (-3)^1} is @mathit{-3}.
12931 However, this simplification @emph{is} safe if @code{z} is known
12932 to be an integer, or if @code{x} is known to be a nonnegative
12933 real number. If you have given declarations that allow Calc to
12934 deduce either of these facts, Calc will perform this simplification
12935 of the formula.
12936
12937 Calc can apply a certain amount of logic when using declarations.
12938 For example, @samp{(x^y)^(2n+1)} will be simplified if @code{n}
12939 has been declared @code{int}; Calc knows that an integer times an
12940 integer, plus an integer, must always be an integer. (In fact,
12941 Calc would simplify @samp{(-x)^(2n+1)} to @samp{-(x^(2n+1))} since
12942 it is able to determine that @samp{2n+1} must be an odd integer.)
12943
12944 Similarly, @samp{(abs(x)^y)^z} will be simplified to @samp{abs(x)^(y z)}
12945 because Calc knows that the @code{abs} function always returns a
12946 nonnegative real. If you had a @code{myabs} function that also had
12947 this property, you could get Calc to recognize it by adding the row
12948 @samp{[myabs(), nonneg]} to the @code{Decls} matrix.
12949
12950 One instance of this simplification is @samp{sqrt(x^2)} (since the
12951 @code{sqrt} function is effectively a one-half power). Normally
12952 Calc leaves this formula alone. After the command
12953 @kbd{s d x @key{RET} real @key{RET}}, however, it can simplify the formula to
12954 @samp{abs(x)}. And after @kbd{s d x @key{RET} nonneg @key{RET}}, Calc can
12955 simplify this formula all the way to @samp{x}.
12956
12957 If there are any intervals or real numbers in the type specifier,
12958 they comprise the set of possible values that the variable or
12959 function being declared can have. In particular, the type symbol
12960 @code{real} is effectively the same as the range @samp{[-inf .. inf]}
12961 (note that infinity is included in the range of possible values);
12962 @code{pos} is the same as @samp{(0 .. inf]}, and @code{nonneg} is
12963 the same as @samp{[0 .. inf]}. Saying @samp{[real, [-5 .. 5]]} is
12964 redundant because the fact that the variable is real can be
12965 deduced just from the interval, but @samp{[int, [-5 .. 5]]} and
12966 @samp{[rat, [-5 .. 5]]} are useful combinations.
12967
12968 Note that the vector of intervals or numbers is in the same format
12969 used by Calc's set-manipulation commands. @xref{Set Operations}.
12970
12971 The type specifier @samp{[1, 2, 3]} is equivalent to
12972 @samp{[numint, 1, 2, 3]}, @emph{not} to @samp{[int, 1, 2, 3]}.
12973 In other words, the range of possible values means only that
12974 the variable's value must be numerically equal to a number in
12975 that range, but not that it must be equal in type as well.
12976 Calc's set operations act the same way; @samp{in(2, [1., 2., 3.])}
12977 and @samp{in(1.5, [1:2, 3:2, 5:2])} both report ``true.''
12978
12979 If you use a conflicting combination of type specifiers, the
12980 results are unpredictable. An example is @samp{[pos, [0 .. 5]]},
12981 where the interval does not lie in the range described by the
12982 type symbol.
12983
12984 ``Real'' declarations mostly affect simplifications involving powers
12985 like the one described above. Another case where they are used
12986 is in the @kbd{a P} command which returns a list of all roots of a
12987 polynomial; if the variable has been declared real, only the real
12988 roots (if any) will be included in the list.
12989
12990 ``Integer'' declarations are used for simplifications which are valid
12991 only when certain values are integers (such as @samp{(x^y)^z}
12992 shown above).
12993
12994 Another command that makes use of declarations is @kbd{a s}, when
12995 simplifying equations and inequalities. It will cancel @code{x}
12996 from both sides of @samp{a x = b x} only if it is sure @code{x}
12997 is non-zero, say, because it has a @code{pos} declaration.
12998 To declare specifically that @code{x} is real and non-zero,
12999 use @samp{[[-inf .. 0), (0 .. inf]]}. (There is no way in the
13000 current notation to say that @code{x} is nonzero but not necessarily
13001 real.) The @kbd{a e} command does ``unsafe'' simplifications,
13002 including cancelling @samp{x} from the equation when @samp{x} is
13003 not known to be nonzero.
13004
13005 Another set of type symbols distinguish between scalars and vectors.
13006
13007 @table @code
13008 @item scalar
13009 The value is not a vector.
13010 @item vector
13011 The value is a vector.
13012 @item matrix
13013 The value is a matrix (a rectangular vector of vectors).
13014 @end table
13015
13016 These type symbols can be combined with the other type symbols
13017 described above; @samp{[int, matrix]} describes an object which
13018 is a matrix of integers.
13019
13020 Scalar/vector declarations are used to determine whether certain
13021 algebraic operations are safe. For example, @samp{[a, b, c] + x}
13022 is normally not simplified to @samp{[a + x, b + x, c + x]}, but
13023 it will be if @code{x} has been declared @code{scalar}. On the
13024 other hand, multiplication is usually assumed to be commutative,
13025 but the terms in @samp{x y} will never be exchanged if both @code{x}
13026 and @code{y} are known to be vectors or matrices. (Calc currently
13027 never distinguishes between @code{vector} and @code{matrix}
13028 declarations.)
13029
13030 @xref{Matrix Mode}, for a discussion of Matrix mode and
13031 Scalar mode, which are similar to declaring @samp{[All, matrix]}
13032 or @samp{[All, scalar]} but much more convenient.
13033
13034 One more type symbol that is recognized is used with the @kbd{H a d}
13035 command for taking total derivatives of a formula. @xref{Calculus}.
13036
13037 @table @code
13038 @item const
13039 The value is a constant with respect to other variables.
13040 @end table
13041
13042 Calc does not check the declarations for a variable when you store
13043 a value in it. However, storing @mathit{-3.5} in a variable that has
13044 been declared @code{pos}, @code{int}, or @code{matrix} may have
13045 unexpected effects; Calc may evaluate @samp{sqrt(x^2)} to @expr{3.5}
13046 if it substitutes the value first, or to @expr{-3.5} if @code{x}
13047 was declared @code{pos} and the formula @samp{sqrt(x^2)} is
13048 simplified to @samp{x} before the value is substituted. Before
13049 using a variable for a new purpose, it is best to use @kbd{s d}
13050 or @kbd{s D} to check to make sure you don't still have an old
13051 declaration for the variable that will conflict with its new meaning.
13052
13053 @node Functions for Declarations, , Kinds of Declarations, Declarations
13054 @subsection Functions for Declarations
13055
13056 @noindent
13057 Calc has a set of functions for accessing the current declarations
13058 in a convenient manner. These functions return 1 if the argument
13059 can be shown to have the specified property, or 0 if the argument
13060 can be shown @emph{not} to have that property; otherwise they are
13061 left unevaluated. These functions are suitable for use with rewrite
13062 rules (@pxref{Conditional Rewrite Rules}) or programming constructs
13063 (@pxref{Conditionals in Macros}). They can be entered only using
13064 algebraic notation. @xref{Logical Operations}, for functions
13065 that perform other tests not related to declarations.
13066
13067 For example, @samp{dint(17)} returns 1 because 17 is an integer, as
13068 do @samp{dint(n)} and @samp{dint(2 n - 3)} if @code{n} has been declared
13069 @code{int}, but @samp{dint(2.5)} and @samp{dint(n + 0.5)} return 0.
13070 Calc consults knowledge of its own built-in functions as well as your
13071 own declarations: @samp{dint(floor(x))} returns 1.
13072
13073 @ignore
13074 @starindex
13075 @end ignore
13076 @tindex dint
13077 @ignore
13078 @starindex
13079 @end ignore
13080 @tindex dnumint
13081 @ignore
13082 @starindex
13083 @end ignore
13084 @tindex dnatnum
13085 The @code{dint} function checks if its argument is an integer.
13086 The @code{dnatnum} function checks if its argument is a natural
13087 number, i.e., a nonnegative integer. The @code{dnumint} function
13088 checks if its argument is numerically an integer, i.e., either an
13089 integer or an integer-valued float. Note that these and the other
13090 data type functions also accept vectors or matrices composed of
13091 suitable elements, and that real infinities @samp{inf} and @samp{-inf}
13092 are considered to be integers for the purposes of these functions.
13093
13094 @ignore
13095 @starindex
13096 @end ignore
13097 @tindex drat
13098 The @code{drat} function checks if its argument is rational, i.e.,
13099 an integer or fraction. Infinities count as rational, but intervals
13100 and error forms do not.
13101
13102 @ignore
13103 @starindex
13104 @end ignore
13105 @tindex dreal
13106 The @code{dreal} function checks if its argument is real. This
13107 includes integers, fractions, floats, real error forms, and intervals.
13108
13109 @ignore
13110 @starindex
13111 @end ignore
13112 @tindex dimag
13113 The @code{dimag} function checks if its argument is imaginary,
13114 i.e., is mathematically equal to a real number times @expr{i}.
13115
13116 @ignore
13117 @starindex
13118 @end ignore
13119 @tindex dpos
13120 @ignore
13121 @starindex
13122 @end ignore
13123 @tindex dneg
13124 @ignore
13125 @starindex
13126 @end ignore
13127 @tindex dnonneg
13128 The @code{dpos} function checks for positive (but nonzero) reals.
13129 The @code{dneg} function checks for negative reals. The @code{dnonneg}
13130 function checks for nonnegative reals, i.e., reals greater than or
13131 equal to zero. Note that the @kbd{a s} command can simplify an
13132 expression like @expr{x > 0} to 1 or 0 using @code{dpos}, and that
13133 @kbd{a s} is effectively applied to all conditions in rewrite rules,
13134 so the actual functions @code{dpos}, @code{dneg}, and @code{dnonneg}
13135 are rarely necessary.
13136
13137 @ignore
13138 @starindex
13139 @end ignore
13140 @tindex dnonzero
13141 The @code{dnonzero} function checks that its argument is nonzero.
13142 This includes all nonzero real or complex numbers, all intervals that
13143 do not include zero, all nonzero modulo forms, vectors all of whose
13144 elements are nonzero, and variables or formulas whose values can be
13145 deduced to be nonzero. It does not include error forms, since they
13146 represent values which could be anything including zero. (This is
13147 also the set of objects considered ``true'' in conditional contexts.)
13148
13149 @ignore
13150 @starindex
13151 @end ignore
13152 @tindex deven
13153 @ignore
13154 @starindex
13155 @end ignore
13156 @tindex dodd
13157 The @code{deven} function returns 1 if its argument is known to be
13158 an even integer (or integer-valued float); it returns 0 if its argument
13159 is known not to be even (because it is known to be odd or a non-integer).
13160 The @kbd{a s} command uses this to simplify a test of the form
13161 @samp{x % 2 = 0}. There is also an analogous @code{dodd} function.
13162
13163 @ignore
13164 @starindex
13165 @end ignore
13166 @tindex drange
13167 The @code{drange} function returns a set (an interval or a vector
13168 of intervals and/or numbers; @pxref{Set Operations}) that describes
13169 the set of possible values of its argument. If the argument is
13170 a variable or a function with a declaration, the range is copied
13171 from the declaration. Otherwise, the possible signs of the
13172 expression are determined using a method similar to @code{dpos},
13173 etc., and a suitable set like @samp{[0 .. inf]} is returned. If
13174 the expression is not provably real, the @code{drange} function
13175 remains unevaluated.
13176
13177 @ignore
13178 @starindex
13179 @end ignore
13180 @tindex dscalar
13181 The @code{dscalar} function returns 1 if its argument is provably
13182 scalar, or 0 if its argument is provably non-scalar. It is left
13183 unevaluated if this cannot be determined. (If Matrix mode or Scalar
13184 mode is in effect, this function returns 1 or 0, respectively,
13185 if it has no other information.) When Calc interprets a condition
13186 (say, in a rewrite rule) it considers an unevaluated formula to be
13187 ``false.'' Thus, @samp{dscalar(a)} is ``true'' only if @code{a} is
13188 provably scalar, and @samp{!dscalar(a)} is ``true'' only if @code{a}
13189 is provably non-scalar; both are ``false'' if there is insufficient
13190 information to tell.
13191
13192 @node Display Modes, Language Modes, Declarations, Mode Settings
13193 @section Display Modes
13194
13195 @noindent
13196 The commands in this section are two-key sequences beginning with the
13197 @kbd{d} prefix. The @kbd{d l} (@code{calc-line-numbering}) and @kbd{d b}
13198 (@code{calc-line-breaking}) commands are described elsewhere;
13199 @pxref{Stack Basics} and @pxref{Normal Language Modes}, respectively.
13200 Display formats for vectors and matrices are also covered elsewhere;
13201 @pxref{Vector and Matrix Formats}.
13202
13203 One thing all display modes have in common is their treatment of the
13204 @kbd{H} prefix. This prefix causes any mode command that would normally
13205 refresh the stack to leave the stack display alone. The word ``Dirty''
13206 will appear in the mode line when Calc thinks the stack display may not
13207 reflect the latest mode settings.
13208
13209 @kindex d @key{RET}
13210 @pindex calc-refresh-top
13211 The @kbd{d @key{RET}} (@code{calc-refresh-top}) command reformats the
13212 top stack entry according to all the current modes. Positive prefix
13213 arguments reformat the top @var{n} entries; negative prefix arguments
13214 reformat the specified entry, and a prefix of zero is equivalent to
13215 @kbd{d @key{SPC}} (@code{calc-refresh}), which reformats the entire stack.
13216 For example, @kbd{H d s M-2 d @key{RET}} changes to scientific notation
13217 but reformats only the top two stack entries in the new mode.
13218
13219 The @kbd{I} prefix has another effect on the display modes. The mode
13220 is set only temporarily; the top stack entry is reformatted according
13221 to that mode, then the original mode setting is restored. In other
13222 words, @kbd{I d s} is equivalent to @kbd{H d s d @key{RET} H d (@var{old mode})}.
13223
13224 @menu
13225 * Radix Modes::
13226 * Grouping Digits::
13227 * Float Formats::
13228 * Complex Formats::
13229 * Fraction Formats::
13230 * HMS Formats::
13231 * Date Formats::
13232 * Truncating the Stack::
13233 * Justification::
13234 * Labels::
13235 @end menu
13236
13237 @node Radix Modes, Grouping Digits, Display Modes, Display Modes
13238 @subsection Radix Modes
13239
13240 @noindent
13241 @cindex Radix display
13242 @cindex Non-decimal numbers
13243 @cindex Decimal and non-decimal numbers
13244 Calc normally displays numbers in decimal (@dfn{base-10} or @dfn{radix-10})
13245 notation. Calc can actually display in any radix from two (binary) to 36.
13246 When the radix is above 10, the letters @code{A} to @code{Z} are used as
13247 digits. When entering such a number, letter keys are interpreted as
13248 potential digits rather than terminating numeric entry mode.
13249
13250 @kindex d 2
13251 @kindex d 8
13252 @kindex d 6
13253 @kindex d 0
13254 @cindex Hexadecimal integers
13255 @cindex Octal integers
13256 The key sequences @kbd{d 2}, @kbd{d 8}, @kbd{d 6}, and @kbd{d 0} select
13257 binary, octal, hexadecimal, and decimal as the current display radix,
13258 respectively. Numbers can always be entered in any radix, though the
13259 current radix is used as a default if you press @kbd{#} without any initial
13260 digits. A number entered without a @kbd{#} is @emph{always} interpreted
13261 as decimal.
13262
13263 @kindex d r
13264 @pindex calc-radix
13265 To set the radix generally, use @kbd{d r} (@code{calc-radix}) and enter
13266 an integer from 2 to 36. You can specify the radix as a numeric prefix
13267 argument; otherwise you will be prompted for it.
13268
13269 @kindex d z
13270 @pindex calc-leading-zeros
13271 @cindex Leading zeros
13272 Integers normally are displayed with however many digits are necessary to
13273 represent the integer and no more. The @kbd{d z} (@code{calc-leading-zeros})
13274 command causes integers to be padded out with leading zeros according to the
13275 current binary word size. (@xref{Binary Functions}, for a discussion of
13276 word size.) If the absolute value of the word size is @expr{w}, all integers
13277 are displayed with at least enough digits to represent
13278 @texline @math{2^w-1}
13279 @infoline @expr{(2^w)-1}
13280 in the current radix. (Larger integers will still be displayed in their
13281 entirety.)
13282
13283 @node Grouping Digits, Float Formats, Radix Modes, Display Modes
13284 @subsection Grouping Digits
13285
13286 @noindent
13287 @kindex d g
13288 @pindex calc-group-digits
13289 @cindex Grouping digits
13290 @cindex Digit grouping
13291 Long numbers can be hard to read if they have too many digits. For
13292 example, the factorial of 30 is 33 digits long! Press @kbd{d g}
13293 (@code{calc-group-digits}) to enable @dfn{Grouping} mode, in which digits
13294 are displayed in clumps of 3 or 4 (depending on the current radix)
13295 separated by commas.
13296
13297 The @kbd{d g} command toggles grouping on and off.
13298 With a numerix prefix of 0, this command displays the current state of
13299 the grouping flag; with an argument of minus one it disables grouping;
13300 with a positive argument @expr{N} it enables grouping on every @expr{N}
13301 digits. For floating-point numbers, grouping normally occurs only
13302 before the decimal point. A negative prefix argument @expr{-N} enables
13303 grouping every @expr{N} digits both before and after the decimal point.
13304
13305 @kindex d ,
13306 @pindex calc-group-char
13307 The @kbd{d ,} (@code{calc-group-char}) command allows you to choose any
13308 character as the grouping separator. The default is the comma character.
13309 If you find it difficult to read vectors of large integers grouped with
13310 commas, you may wish to use spaces or some other character instead.
13311 This command takes the next character you type, whatever it is, and
13312 uses it as the digit separator. As a special case, @kbd{d , \} selects
13313 @samp{\,} (@TeX{}'s thin-space symbol) as the digit separator.
13314
13315 Please note that grouped numbers will not generally be parsed correctly
13316 if re-read in textual form, say by the use of @kbd{M-# y} and @kbd{M-# g}.
13317 (@xref{Kill and Yank}, for details on these commands.) One exception is
13318 the @samp{\,} separator, which doesn't interfere with parsing because it
13319 is ignored by @TeX{} language mode.
13320
13321 @node Float Formats, Complex Formats, Grouping Digits, Display Modes
13322 @subsection Float Formats
13323
13324 @noindent
13325 Floating-point quantities are normally displayed in standard decimal
13326 form, with scientific notation used if the exponent is especially high
13327 or low. All significant digits are normally displayed. The commands
13328 in this section allow you to choose among several alternative display
13329 formats for floats.
13330
13331 @kindex d n
13332 @pindex calc-normal-notation
13333 The @kbd{d n} (@code{calc-normal-notation}) command selects the normal
13334 display format. All significant figures in a number are displayed.
13335 With a positive numeric prefix, numbers are rounded if necessary to
13336 that number of significant digits. With a negative numerix prefix,
13337 the specified number of significant digits less than the current
13338 precision is used. (Thus @kbd{C-u -2 d n} displays 10 digits if the
13339 current precision is 12.)
13340
13341 @kindex d f
13342 @pindex calc-fix-notation
13343 The @kbd{d f} (@code{calc-fix-notation}) command selects fixed-point
13344 notation. The numeric argument is the number of digits after the
13345 decimal point, zero or more. This format will relax into scientific
13346 notation if a nonzero number would otherwise have been rounded all the
13347 way to zero. Specifying a negative number of digits is the same as
13348 for a positive number, except that small nonzero numbers will be rounded
13349 to zero rather than switching to scientific notation.
13350
13351 @kindex d s
13352 @pindex calc-sci-notation
13353 @cindex Scientific notation, display of
13354 The @kbd{d s} (@code{calc-sci-notation}) command selects scientific
13355 notation. A positive argument sets the number of significant figures
13356 displayed, of which one will be before and the rest after the decimal
13357 point. A negative argument works the same as for @kbd{d n} format.
13358 The default is to display all significant digits.
13359
13360 @kindex d e
13361 @pindex calc-eng-notation
13362 @cindex Engineering notation, display of
13363 The @kbd{d e} (@code{calc-eng-notation}) command selects engineering
13364 notation. This is similar to scientific notation except that the
13365 exponent is rounded down to a multiple of three, with from one to three
13366 digits before the decimal point. An optional numeric prefix sets the
13367 number of significant digits to display, as for @kbd{d s}.
13368
13369 It is important to distinguish between the current @emph{precision} and
13370 the current @emph{display format}. After the commands @kbd{C-u 10 p}
13371 and @kbd{C-u 6 d n} the Calculator computes all results to ten
13372 significant figures but displays only six. (In fact, intermediate
13373 calculations are often carried to one or two more significant figures,
13374 but values placed on the stack will be rounded down to ten figures.)
13375 Numbers are never actually rounded to the display precision for storage,
13376 except by commands like @kbd{C-k} and @kbd{M-# y} which operate on the
13377 actual displayed text in the Calculator buffer.
13378
13379 @kindex d .
13380 @pindex calc-point-char
13381 The @kbd{d .} (@code{calc-point-char}) command selects the character used
13382 as a decimal point. Normally this is a period; users in some countries
13383 may wish to change this to a comma. Note that this is only a display
13384 style; on entry, periods must always be used to denote floating-point
13385 numbers, and commas to separate elements in a list.
13386
13387 @node Complex Formats, Fraction Formats, Float Formats, Display Modes
13388 @subsection Complex Formats
13389
13390 @noindent
13391 @kindex d c
13392 @pindex calc-complex-notation
13393 There are three supported notations for complex numbers in rectangular
13394 form. The default is as a pair of real numbers enclosed in parentheses
13395 and separated by a comma: @samp{(a,b)}. The @kbd{d c}
13396 (@code{calc-complex-notation}) command selects this style.
13397
13398 @kindex d i
13399 @pindex calc-i-notation
13400 @kindex d j
13401 @pindex calc-j-notation
13402 The other notations are @kbd{d i} (@code{calc-i-notation}), in which
13403 numbers are displayed in @samp{a+bi} form, and @kbd{d j}
13404 (@code{calc-j-notation}) which displays the form @samp{a+bj} preferred
13405 in some disciplines.
13406
13407 @cindex @code{i} variable
13408 @vindex i
13409 Complex numbers are normally entered in @samp{(a,b)} format.
13410 If you enter @samp{2+3i} as an algebraic formula, it will be stored as
13411 the formula @samp{2 + 3 * i}. However, if you use @kbd{=} to evaluate
13412 this formula and you have not changed the variable @samp{i}, the @samp{i}
13413 will be interpreted as @samp{(0,1)} and the formula will be simplified
13414 to @samp{(2,3)}. Other commands (like @code{calc-sin}) will @emph{not}
13415 interpret the formula @samp{2 + 3 * i} as a complex number.
13416 @xref{Variables}, under ``special constants.''
13417
13418 @node Fraction Formats, HMS Formats, Complex Formats, Display Modes
13419 @subsection Fraction Formats
13420
13421 @noindent
13422 @kindex d o
13423 @pindex calc-over-notation
13424 Display of fractional numbers is controlled by the @kbd{d o}
13425 (@code{calc-over-notation}) command. By default, a number like
13426 eight thirds is displayed in the form @samp{8:3}. The @kbd{d o} command
13427 prompts for a one- or two-character format. If you give one character,
13428 that character is used as the fraction separator. Common separators are
13429 @samp{:} and @samp{/}. (During input of numbers, the @kbd{:} key must be
13430 used regardless of the display format; in particular, the @kbd{/} is used
13431 for RPN-style division, @emph{not} for entering fractions.)
13432
13433 If you give two characters, fractions use ``integer-plus-fractional-part''
13434 notation. For example, the format @samp{+/} would display eight thirds
13435 as @samp{2+2/3}. If two colons are present in a number being entered,
13436 the number is interpreted in this form (so that the entries @kbd{2:2:3}
13437 and @kbd{8:3} are equivalent).
13438
13439 It is also possible to follow the one- or two-character format with
13440 a number. For example: @samp{:10} or @samp{+/3}. In this case,
13441 Calc adjusts all fractions that are displayed to have the specified
13442 denominator, if possible. Otherwise it adjusts the denominator to
13443 be a multiple of the specified value. For example, in @samp{:6} mode
13444 the fraction @expr{1:6} will be unaffected, but @expr{2:3} will be
13445 displayed as @expr{4:6}, @expr{1:2} will be displayed as @expr{3:6},
13446 and @expr{1:8} will be displayed as @expr{3:24}. Integers are also
13447 affected by this mode: 3 is displayed as @expr{18:6}. Note that the
13448 format @samp{:1} writes fractions the same as @samp{:}, but it writes
13449 integers as @expr{n:1}.
13450
13451 The fraction format does not affect the way fractions or integers are
13452 stored, only the way they appear on the screen. The fraction format
13453 never affects floats.
13454
13455 @node HMS Formats, Date Formats, Fraction Formats, Display Modes
13456 @subsection HMS Formats
13457
13458 @noindent
13459 @kindex d h
13460 @pindex calc-hms-notation
13461 The @kbd{d h} (@code{calc-hms-notation}) command controls the display of
13462 HMS (hours-minutes-seconds) forms. It prompts for a string which
13463 consists basically of an ``hours'' marker, optional punctuation, a
13464 ``minutes'' marker, more optional punctuation, and a ``seconds'' marker.
13465 Punctuation is zero or more spaces, commas, or semicolons. The hours
13466 marker is one or more non-punctuation characters. The minutes and
13467 seconds markers must be single non-punctuation characters.
13468
13469 The default HMS format is @samp{@@ ' "}, producing HMS values of the form
13470 @samp{23@@ 30' 15.75"}. The format @samp{deg, ms} would display this same
13471 value as @samp{23deg, 30m15.75s}. During numeric entry, the @kbd{h} or @kbd{o}
13472 keys are recognized as synonyms for @kbd{@@} regardless of display format.
13473 The @kbd{m} and @kbd{s} keys are recognized as synonyms for @kbd{'} and
13474 @kbd{"}, respectively, but only if an @kbd{@@} (or @kbd{h} or @kbd{o}) has
13475 already been typed; otherwise, they have their usual meanings
13476 (@kbd{m-} prefix and @kbd{s-} prefix). Thus, @kbd{5 "}, @kbd{0 @@ 5 "}, and
13477 @kbd{0 h 5 s} are some of the ways to enter the quantity ``five seconds.''
13478 The @kbd{'} key is recognized as ``minutes'' only if @kbd{@@} (or @kbd{h} or
13479 @kbd{o}) has already been pressed; otherwise it means to switch to algebraic
13480 entry.
13481
13482 @node Date Formats, Truncating the Stack, HMS Formats, Display Modes
13483 @subsection Date Formats
13484
13485 @noindent
13486 @kindex d d
13487 @pindex calc-date-notation
13488 The @kbd{d d} (@code{calc-date-notation}) command controls the display
13489 of date forms (@pxref{Date Forms}). It prompts for a string which
13490 contains letters that represent the various parts of a date and time.
13491 To show which parts should be omitted when the form represents a pure
13492 date with no time, parts of the string can be enclosed in @samp{< >}
13493 marks. If you don't include @samp{< >} markers in the format, Calc
13494 guesses at which parts, if any, should be omitted when formatting
13495 pure dates.
13496
13497 The default format is: @samp{<H:mm:SSpp >Www Mmm D, YYYY}.
13498 An example string in this format is @samp{3:32pm Wed Jan 9, 1991}.
13499 If you enter a blank format string, this default format is
13500 reestablished.
13501
13502 Calc uses @samp{< >} notation for nameless functions as well as for
13503 dates. @xref{Specifying Operators}. To avoid confusion with nameless
13504 functions, your date formats should avoid using the @samp{#} character.
13505
13506 @menu
13507 * Date Formatting Codes::
13508 * Free-Form Dates::
13509 * Standard Date Formats::
13510 @end menu
13511
13512 @node Date Formatting Codes, Free-Form Dates, Date Formats, Date Formats
13513 @subsubsection Date Formatting Codes
13514
13515 @noindent
13516 When displaying a date, the current date format is used. All
13517 characters except for letters and @samp{<} and @samp{>} are
13518 copied literally when dates are formatted. The portion between
13519 @samp{< >} markers is omitted for pure dates, or included for
13520 date/time forms. Letters are interpreted according to the table
13521 below.
13522
13523 When dates are read in during algebraic entry, Calc first tries to
13524 match the input string to the current format either with or without
13525 the time part. The punctuation characters (including spaces) must
13526 match exactly; letter fields must correspond to suitable text in
13527 the input. If this doesn't work, Calc checks if the input is a
13528 simple number; if so, the number is interpreted as a number of days
13529 since Jan 1, 1 AD. Otherwise, Calc tries a much more relaxed and
13530 flexible algorithm which is described in the next section.
13531
13532 Weekday names are ignored during reading.
13533
13534 Two-digit year numbers are interpreted as lying in the range
13535 from 1941 to 2039. Years outside that range are always
13536 entered and displayed in full. Year numbers with a leading
13537 @samp{+} sign are always interpreted exactly, allowing the
13538 entry and display of the years 1 through 99 AD.
13539
13540 Here is a complete list of the formatting codes for dates:
13541
13542 @table @asis
13543 @item Y
13544 Year: ``91'' for 1991, ``7'' for 2007, ``+23'' for 23 AD.
13545 @item YY
13546 Year: ``91'' for 1991, ``07'' for 2007, ``+23'' for 23 AD.
13547 @item BY
13548 Year: ``91'' for 1991, `` 7'' for 2007, ``+23'' for 23 AD.
13549 @item YYY
13550 Year: ``1991'' for 1991, ``23'' for 23 AD.
13551 @item YYYY
13552 Year: ``1991'' for 1991, ``+23'' for 23 AD.
13553 @item aa
13554 Year: ``ad'' or blank.
13555 @item AA
13556 Year: ``AD'' or blank.
13557 @item aaa
13558 Year: ``ad '' or blank. (Note trailing space.)
13559 @item AAA
13560 Year: ``AD '' or blank.
13561 @item aaaa
13562 Year: ``a.d.'' or blank.
13563 @item AAAA
13564 Year: ``A.D.'' or blank.
13565 @item bb
13566 Year: ``bc'' or blank.
13567 @item BB
13568 Year: ``BC'' or blank.
13569 @item bbb
13570 Year: `` bc'' or blank. (Note leading space.)
13571 @item BBB
13572 Year: `` BC'' or blank.
13573 @item bbbb
13574 Year: ``b.c.'' or blank.
13575 @item BBBB
13576 Year: ``B.C.'' or blank.
13577 @item M
13578 Month: ``8'' for August.
13579 @item MM
13580 Month: ``08'' for August.
13581 @item BM
13582 Month: `` 8'' for August.
13583 @item MMM
13584 Month: ``AUG'' for August.
13585 @item Mmm
13586 Month: ``Aug'' for August.
13587 @item mmm
13588 Month: ``aug'' for August.
13589 @item MMMM
13590 Month: ``AUGUST'' for August.
13591 @item Mmmm
13592 Month: ``August'' for August.
13593 @item D
13594 Day: ``7'' for 7th day of month.
13595 @item DD
13596 Day: ``07'' for 7th day of month.
13597 @item BD
13598 Day: `` 7'' for 7th day of month.
13599 @item W
13600 Weekday: ``0'' for Sunday, ``6'' for Saturday.
13601 @item WWW
13602 Weekday: ``SUN'' for Sunday.
13603 @item Www
13604 Weekday: ``Sun'' for Sunday.
13605 @item www
13606 Weekday: ``sun'' for Sunday.
13607 @item WWWW
13608 Weekday: ``SUNDAY'' for Sunday.
13609 @item Wwww
13610 Weekday: ``Sunday'' for Sunday.
13611 @item d
13612 Day of year: ``34'' for Feb. 3.
13613 @item ddd
13614 Day of year: ``034'' for Feb. 3.
13615 @item bdd
13616 Day of year: `` 34'' for Feb. 3.
13617 @item h
13618 Hour: ``5'' for 5 AM; ``17'' for 5 PM.
13619 @item hh
13620 Hour: ``05'' for 5 AM; ``17'' for 5 PM.
13621 @item bh
13622 Hour: `` 5'' for 5 AM; ``17'' for 5 PM.
13623 @item H
13624 Hour: ``5'' for 5 AM and 5 PM.
13625 @item HH
13626 Hour: ``05'' for 5 AM and 5 PM.
13627 @item BH
13628 Hour: `` 5'' for 5 AM and 5 PM.
13629 @item p
13630 AM/PM: ``a'' or ``p''.
13631 @item P
13632 AM/PM: ``A'' or ``P''.
13633 @item pp
13634 AM/PM: ``am'' or ``pm''.
13635 @item PP
13636 AM/PM: ``AM'' or ``PM''.
13637 @item pppp
13638 AM/PM: ``a.m.'' or ``p.m.''.
13639 @item PPPP
13640 AM/PM: ``A.M.'' or ``P.M.''.
13641 @item m
13642 Minutes: ``7'' for 7.
13643 @item mm
13644 Minutes: ``07'' for 7.
13645 @item bm
13646 Minutes: `` 7'' for 7.
13647 @item s
13648 Seconds: ``7'' for 7; ``7.23'' for 7.23.
13649 @item ss
13650 Seconds: ``07'' for 7; ``07.23'' for 7.23.
13651 @item bs
13652 Seconds: `` 7'' for 7; `` 7.23'' for 7.23.
13653 @item SS
13654 Optional seconds: ``07'' for 7; blank for 0.
13655 @item BS
13656 Optional seconds: `` 7'' for 7; blank for 0.
13657 @item N
13658 Numeric date/time: ``726842.25'' for 6:00am Wed Jan 9, 1991.
13659 @item n
13660 Numeric date: ``726842'' for any time on Wed Jan 9, 1991.
13661 @item J
13662 Julian date/time: ``2448265.75'' for 6:00am Wed Jan 9, 1991.
13663 @item j
13664 Julian date: ``2448266'' for any time on Wed Jan 9, 1991.
13665 @item U
13666 Unix time: ``663400800'' for 6:00am Wed Jan 9, 1991.
13667 @item X
13668 Brackets suppression. An ``X'' at the front of the format
13669 causes the surrounding @w{@samp{< >}} delimiters to be omitted
13670 when formatting dates. Note that the brackets are still
13671 required for algebraic entry.
13672 @end table
13673
13674 If ``SS'' or ``BS'' (optional seconds) is preceded by a colon, the
13675 colon is also omitted if the seconds part is zero.
13676
13677 If ``bb,'' ``bbb'' or ``bbbb'' or their upper-case equivalents
13678 appear in the format, then negative year numbers are displayed
13679 without a minus sign. Note that ``aa'' and ``bb'' are mutually
13680 exclusive. Some typical usages would be @samp{YYYY AABB};
13681 @samp{AAAYYYYBBB}; @samp{YYYYBBB}.
13682
13683 The formats ``YY,'' ``YYYY,'' ``MM,'' ``DD,'' ``ddd,'' ``hh,'' ``HH,''
13684 ``mm,'' ``ss,'' and ``SS'' actually match any number of digits during
13685 reading unless several of these codes are strung together with no
13686 punctuation in between, in which case the input must have exactly as
13687 many digits as there are letters in the format.
13688
13689 The ``j,'' ``J,'' and ``U'' formats do not make any time zone
13690 adjustment. They effectively use @samp{julian(x,0)} and
13691 @samp{unixtime(x,0)} to make the conversion; @pxref{Date Arithmetic}.
13692
13693 @node Free-Form Dates, Standard Date Formats, Date Formatting Codes, Date Formats
13694 @subsubsection Free-Form Dates
13695
13696 @noindent
13697 When reading a date form during algebraic entry, Calc falls back
13698 on the algorithm described here if the input does not exactly
13699 match the current date format. This algorithm generally
13700 ``does the right thing'' and you don't have to worry about it,
13701 but it is described here in full detail for the curious.
13702
13703 Calc does not distinguish between upper- and lower-case letters
13704 while interpreting dates.
13705
13706 First, the time portion, if present, is located somewhere in the
13707 text and then removed. The remaining text is then interpreted as
13708 the date.
13709
13710 A time is of the form @samp{hh:mm:ss}, possibly with the seconds
13711 part omitted and possibly with an AM/PM indicator added to indicate
13712 12-hour time. If the AM/PM is present, the minutes may also be
13713 omitted. The AM/PM part may be any of the words @samp{am},
13714 @samp{pm}, @samp{noon}, or @samp{midnight}; each of these may be
13715 abbreviated to one letter, and the alternate forms @samp{a.m.},
13716 @samp{p.m.}, and @samp{mid} are also understood. Obviously
13717 @samp{noon} and @samp{midnight} are allowed only on 12:00:00.
13718 The words @samp{noon}, @samp{mid}, and @samp{midnight} are also
13719 recognized with no number attached.
13720
13721 If there is no AM/PM indicator, the time is interpreted in 24-hour
13722 format.
13723
13724 To read the date portion, all words and numbers are isolated
13725 from the string; other characters are ignored. All words must
13726 be either month names or day-of-week names (the latter of which
13727 are ignored). Names can be written in full or as three-letter
13728 abbreviations.
13729
13730 Large numbers, or numbers with @samp{+} or @samp{-} signs,
13731 are interpreted as years. If one of the other numbers is
13732 greater than 12, then that must be the day and the remaining
13733 number in the input is therefore the month. Otherwise, Calc
13734 assumes the month, day and year are in the same order that they
13735 appear in the current date format. If the year is omitted, the
13736 current year is taken from the system clock.
13737
13738 If there are too many or too few numbers, or any unrecognizable
13739 words, then the input is rejected.
13740
13741 If there are any large numbers (of five digits or more) other than
13742 the year, they are ignored on the assumption that they are something
13743 like Julian dates that were included along with the traditional
13744 date components when the date was formatted.
13745
13746 One of the words @samp{ad}, @samp{a.d.}, @samp{bc}, or @samp{b.c.}
13747 may optionally be used; the latter two are equivalent to a
13748 minus sign on the year value.
13749
13750 If you always enter a four-digit year, and use a name instead
13751 of a number for the month, there is no danger of ambiguity.
13752
13753 @node Standard Date Formats, , Free-Form Dates, Date Formats
13754 @subsubsection Standard Date Formats
13755
13756 @noindent
13757 There are actually ten standard date formats, numbered 0 through 9.
13758 Entering a blank line at the @kbd{d d} command's prompt gives
13759 you format number 1, Calc's usual format. You can enter any digit
13760 to select the other formats.
13761
13762 To create your own standard date formats, give a numeric prefix
13763 argument from 0 to 9 to the @w{@kbd{d d}} command. The format you
13764 enter will be recorded as the new standard format of that
13765 number, as well as becoming the new current date format.
13766 You can save your formats permanently with the @w{@kbd{m m}}
13767 command (@pxref{Mode Settings}).
13768
13769 @table @asis
13770 @item 0
13771 @samp{N} (Numerical format)
13772 @item 1
13773 @samp{<H:mm:SSpp >Www Mmm D, YYYY} (American format)
13774 @item 2
13775 @samp{D Mmm YYYY<, h:mm:SS>} (European format)
13776 @item 3
13777 @samp{Www Mmm BD< hh:mm:ss> YYYY} (Unix written date format)
13778 @item 4
13779 @samp{M/D/Y< H:mm:SSpp>} (American slashed format)
13780 @item 5
13781 @samp{D.M.Y< h:mm:SS>} (European dotted format)
13782 @item 6
13783 @samp{M-D-Y< H:mm:SSpp>} (American dashed format)
13784 @item 7
13785 @samp{D-M-Y< h:mm:SS>} (European dashed format)
13786 @item 8
13787 @samp{j<, h:mm:ss>} (Julian day plus time)
13788 @item 9
13789 @samp{YYddd< hh:mm:ss>} (Year-day format)
13790 @end table
13791
13792 @node Truncating the Stack, Justification, Date Formats, Display Modes
13793 @subsection Truncating the Stack
13794
13795 @noindent
13796 @kindex d t
13797 @pindex calc-truncate-stack
13798 @cindex Truncating the stack
13799 @cindex Narrowing the stack
13800 The @kbd{d t} (@code{calc-truncate-stack}) command moves the @samp{.}@:
13801 line that marks the top-of-stack up or down in the Calculator buffer.
13802 The number right above that line is considered to the be at the top of
13803 the stack. Any numbers below that line are ``hidden'' from all stack
13804 operations. This is similar to the Emacs ``narrowing'' feature, except
13805 that the values below the @samp{.} are @emph{visible}, just temporarily
13806 frozen. This feature allows you to keep several independent calculations
13807 running at once in different parts of the stack, or to apply a certain
13808 command to an element buried deep in the stack.
13809
13810 Pressing @kbd{d t} by itself moves the @samp{.} to the line the cursor
13811 is on. Thus, this line and all those below it become hidden. To un-hide
13812 these lines, move down to the end of the buffer and press @w{@kbd{d t}}.
13813 With a positive numeric prefix argument @expr{n}, @kbd{d t} hides the
13814 bottom @expr{n} values in the buffer. With a negative argument, it hides
13815 all but the top @expr{n} values. With an argument of zero, it hides zero
13816 values, i.e., moves the @samp{.} all the way down to the bottom.
13817
13818 @kindex d [
13819 @pindex calc-truncate-up
13820 @kindex d ]
13821 @pindex calc-truncate-down
13822 The @kbd{d [} (@code{calc-truncate-up}) and @kbd{d ]}
13823 (@code{calc-truncate-down}) commands move the @samp{.} up or down one
13824 line at a time (or several lines with a prefix argument).
13825
13826 @node Justification, Labels, Truncating the Stack, Display Modes
13827 @subsection Justification
13828
13829 @noindent
13830 @kindex d <
13831 @pindex calc-left-justify
13832 @kindex d =
13833 @pindex calc-center-justify
13834 @kindex d >
13835 @pindex calc-right-justify
13836 Values on the stack are normally left-justified in the window. You can
13837 control this arrangement by typing @kbd{d <} (@code{calc-left-justify}),
13838 @kbd{d >} (@code{calc-right-justify}), or @kbd{d =}
13839 (@code{calc-center-justify}). For example, in Right-Justification mode,
13840 stack entries are displayed flush-right against the right edge of the
13841 window.
13842
13843 If you change the width of the Calculator window you may have to type
13844 @kbd{d @key{SPC}} (@code{calc-refresh}) to re-align right-justified or centered
13845 text.
13846
13847 Right-justification is especially useful together with fixed-point
13848 notation (see @code{d f}; @code{calc-fix-notation}). With these modes
13849 together, the decimal points on numbers will always line up.
13850
13851 With a numeric prefix argument, the justification commands give you
13852 a little extra control over the display. The argument specifies the
13853 horizontal ``origin'' of a display line. It is also possible to
13854 specify a maximum line width using the @kbd{d b} command (@pxref{Normal
13855 Language Modes}). For reference, the precise rules for formatting and
13856 breaking lines are given below. Notice that the interaction between
13857 origin and line width is slightly different in each justification
13858 mode.
13859
13860 In Left-Justified mode, the line is indented by a number of spaces
13861 given by the origin (default zero). If the result is longer than the
13862 maximum line width, if given, or too wide to fit in the Calc window
13863 otherwise, then it is broken into lines which will fit; each broken
13864 line is indented to the origin.
13865
13866 In Right-Justified mode, lines are shifted right so that the rightmost
13867 character is just before the origin, or just before the current
13868 window width if no origin was specified. If the line is too long
13869 for this, then it is broken; the current line width is used, if
13870 specified, or else the origin is used as a width if that is
13871 specified, or else the line is broken to fit in the window.
13872
13873 In Centering mode, the origin is the column number of the center of
13874 each stack entry. If a line width is specified, lines will not be
13875 allowed to go past that width; Calc will either indent less or
13876 break the lines if necessary. If no origin is specified, half the
13877 line width or Calc window width is used.
13878
13879 Note that, in each case, if line numbering is enabled the display
13880 is indented an additional four spaces to make room for the line
13881 number. The width of the line number is taken into account when
13882 positioning according to the current Calc window width, but not
13883 when positioning by explicit origins and widths. In the latter
13884 case, the display is formatted as specified, and then uniformly
13885 shifted over four spaces to fit the line numbers.
13886
13887 @node Labels, , Justification, Display Modes
13888 @subsection Labels
13889
13890 @noindent
13891 @kindex d @{
13892 @pindex calc-left-label
13893 The @kbd{d @{} (@code{calc-left-label}) command prompts for a string,
13894 then displays that string to the left of every stack entry. If the
13895 entries are left-justified (@pxref{Justification}), then they will
13896 appear immediately after the label (unless you specified an origin
13897 greater than the length of the label). If the entries are centered
13898 or right-justified, the label appears on the far left and does not
13899 affect the horizontal position of the stack entry.
13900
13901 Give a blank string (with @kbd{d @{ @key{RET}}) to turn the label off.
13902
13903 @kindex d @}
13904 @pindex calc-right-label
13905 The @kbd{d @}} (@code{calc-right-label}) command similarly adds a
13906 label on the righthand side. It does not affect positioning of
13907 the stack entries unless they are right-justified. Also, if both
13908 a line width and an origin are given in Right-Justified mode, the
13909 stack entry is justified to the origin and the righthand label is
13910 justified to the line width.
13911
13912 One application of labels would be to add equation numbers to
13913 formulas you are manipulating in Calc and then copying into a
13914 document (possibly using Embedded mode). The equations would
13915 typically be centered, and the equation numbers would be on the
13916 left or right as you prefer.
13917
13918 @node Language Modes, Modes Variable, Display Modes, Mode Settings
13919 @section Language Modes
13920
13921 @noindent
13922 The commands in this section change Calc to use a different notation for
13923 entry and display of formulas, corresponding to the conventions of some
13924 other common language such as Pascal or @TeX{}. Objects displayed on the
13925 stack or yanked from the Calculator to an editing buffer will be formatted
13926 in the current language; objects entered in algebraic entry or yanked from
13927 another buffer will be interpreted according to the current language.
13928
13929 The current language has no effect on things written to or read from the
13930 trail buffer, nor does it affect numeric entry. Only algebraic entry is
13931 affected. You can make even algebraic entry ignore the current language
13932 and use the standard notation by giving a numeric prefix, e.g., @kbd{C-u '}.
13933
13934 For example, suppose the formula @samp{2*a[1] + atan(a[2])} occurs in a C
13935 program; elsewhere in the program you need the derivatives of this formula
13936 with respect to @samp{a[1]} and @samp{a[2]}. First, type @kbd{d C}
13937 to switch to C notation. Now use @code{C-u M-# g} to grab the formula
13938 into the Calculator, @kbd{a d a[1] @key{RET}} to differentiate with respect
13939 to the first variable, and @kbd{M-# y} to yank the formula for the derivative
13940 back into your C program. Press @kbd{U} to undo the differentiation and
13941 repeat with @kbd{a d a[2] @key{RET}} for the other derivative.
13942
13943 Without being switched into C mode first, Calc would have misinterpreted
13944 the brackets in @samp{a[1]} and @samp{a[2]}, would not have known that
13945 @code{atan} was equivalent to Calc's built-in @code{arctan} function,
13946 and would have written the formula back with notations (like implicit
13947 multiplication) which would not have been legal for a C program.
13948
13949 As another example, suppose you are maintaining a C program and a @TeX{}
13950 document, each of which needs a copy of the same formula. You can grab the
13951 formula from the program in C mode, switch to @TeX{} mode, and yank the
13952 formula into the document in @TeX{} math-mode format.
13953
13954 Language modes are selected by typing the letter @kbd{d} followed by a
13955 shifted letter key.
13956
13957 @menu
13958 * Normal Language Modes::
13959 * C FORTRAN Pascal::
13960 * TeX Language Mode::
13961 * Eqn Language Mode::
13962 * Mathematica Language Mode::
13963 * Maple Language Mode::
13964 * Compositions::
13965 * Syntax Tables::
13966 @end menu
13967
13968 @node Normal Language Modes, C FORTRAN Pascal, Language Modes, Language Modes
13969 @subsection Normal Language Modes
13970
13971 @noindent
13972 @kindex d N
13973 @pindex calc-normal-language
13974 The @kbd{d N} (@code{calc-normal-language}) command selects the usual
13975 notation for Calc formulas, as described in the rest of this manual.
13976 Matrices are displayed in a multi-line tabular format, but all other
13977 objects are written in linear form, as they would be typed from the
13978 keyboard.
13979
13980 @kindex d O
13981 @pindex calc-flat-language
13982 @cindex Matrix display
13983 The @kbd{d O} (@code{calc-flat-language}) command selects a language
13984 identical with the normal one, except that matrices are written in
13985 one-line form along with everything else. In some applications this
13986 form may be more suitable for yanking data into other buffers.
13987
13988 @kindex d b
13989 @pindex calc-line-breaking
13990 @cindex Line breaking
13991 @cindex Breaking up long lines
13992 Even in one-line mode, long formulas or vectors will still be split
13993 across multiple lines if they exceed the width of the Calculator window.
13994 The @kbd{d b} (@code{calc-line-breaking}) command turns this line-breaking
13995 feature on and off. (It works independently of the current language.)
13996 If you give a numeric prefix argument of five or greater to the @kbd{d b}
13997 command, that argument will specify the line width used when breaking
13998 long lines.
13999
14000 @kindex d B
14001 @pindex calc-big-language
14002 The @kbd{d B} (@code{calc-big-language}) command selects a language
14003 which uses textual approximations to various mathematical notations,
14004 such as powers, quotients, and square roots:
14005
14006 @example
14007 ____________
14008 | a + 1 2
14009 | ----- + c
14010 \| b
14011 @end example
14012
14013 @noindent
14014 in place of @samp{sqrt((a+1)/b + c^2)}.
14015
14016 Subscripts like @samp{a_i} are displayed as actual subscripts in Big
14017 mode. Double subscripts, @samp{a_i_j} (@samp{subscr(subscr(a, i), j)})
14018 are displayed as @samp{a} with subscripts separated by commas:
14019 @samp{i, j}. They must still be entered in the usual underscore
14020 notation.
14021
14022 One slight ambiguity of Big notation is that
14023
14024 @example
14025 3
14026 - -
14027 4
14028 @end example
14029
14030 @noindent
14031 can represent either the negative rational number @expr{-3:4}, or the
14032 actual expression @samp{-(3/4)}; but the latter formula would normally
14033 never be displayed because it would immediately be evaluated to
14034 @expr{-3:4} or @expr{-0.75}, so this ambiguity is not a problem in
14035 typical use.
14036
14037 Non-decimal numbers are displayed with subscripts. Thus there is no
14038 way to tell the difference between @samp{16#C2} and @samp{C2_16},
14039 though generally you will know which interpretation is correct.
14040 Logarithms @samp{log(x,b)} and @samp{log10(x)} also use subscripts
14041 in Big mode.
14042
14043 In Big mode, stack entries often take up several lines. To aid
14044 readability, stack entries are separated by a blank line in this mode.
14045 You may find it useful to expand the Calc window's height using
14046 @kbd{C-x ^} (@code{enlarge-window}) or to make the Calc window the only
14047 one on the screen with @kbd{C-x 1} (@code{delete-other-windows}).
14048
14049 Long lines are currently not rearranged to fit the window width in
14050 Big mode, so you may need to use the @kbd{<} and @kbd{>} keys
14051 to scroll across a wide formula. For really big formulas, you may
14052 even need to use @kbd{@{} and @kbd{@}} to scroll up and down.
14053
14054 @kindex d U
14055 @pindex calc-unformatted-language
14056 The @kbd{d U} (@code{calc-unformatted-language}) command altogether disables
14057 the use of operator notation in formulas. In this mode, the formula
14058 shown above would be displayed:
14059
14060 @example
14061 sqrt(add(div(add(a, 1), b), pow(c, 2)))
14062 @end example
14063
14064 These four modes differ only in display format, not in the format
14065 expected for algebraic entry. The standard Calc operators work in
14066 all four modes, and unformatted notation works in any language mode
14067 (except that Mathematica mode expects square brackets instead of
14068 parentheses).
14069
14070 @node C FORTRAN Pascal, TeX Language Mode, Normal Language Modes, Language Modes
14071 @subsection C, FORTRAN, and Pascal Modes
14072
14073 @noindent
14074 @kindex d C
14075 @pindex calc-c-language
14076 @cindex C language
14077 The @kbd{d C} (@code{calc-c-language}) command selects the conventions
14078 of the C language for display and entry of formulas. This differs from
14079 the normal language mode in a variety of (mostly minor) ways. In
14080 particular, C language operators and operator precedences are used in
14081 place of Calc's usual ones. For example, @samp{a^b} means @samp{xor(a,b)}
14082 in C mode; a value raised to a power is written as a function call,
14083 @samp{pow(a,b)}.
14084
14085 In C mode, vectors and matrices use curly braces instead of brackets.
14086 Octal and hexadecimal values are written with leading @samp{0} or @samp{0x}
14087 rather than using the @samp{#} symbol. Array subscripting is
14088 translated into @code{subscr} calls, so that @samp{a[i]} in C
14089 mode is the same as @samp{a_i} in Normal mode. Assignments
14090 turn into the @code{assign} function, which Calc normally displays
14091 using the @samp{:=} symbol.
14092
14093 The variables @code{pi} and @code{e} would be displayed @samp{pi}
14094 and @samp{e} in Normal mode, but in C mode they are displayed as
14095 @samp{M_PI} and @samp{M_E}, corresponding to the names of constants
14096 typically provided in the @file{<math.h>} header. Functions whose
14097 names are different in C are translated automatically for entry and
14098 display purposes. For example, entering @samp{asin(x)} will push the
14099 formula @samp{arcsin(x)} onto the stack; this formula will be displayed
14100 as @samp{asin(x)} as long as C mode is in effect.
14101
14102 @kindex d P
14103 @pindex calc-pascal-language
14104 @cindex Pascal language
14105 The @kbd{d P} (@code{calc-pascal-language}) command selects Pascal
14106 conventions. Like C mode, Pascal mode interprets array brackets and uses
14107 a different table of operators. Hexadecimal numbers are entered and
14108 displayed with a preceding dollar sign. (Thus the regular meaning of
14109 @kbd{$2} during algebraic entry does not work in Pascal mode, though
14110 @kbd{$} (and @kbd{$$}, etc.) not followed by digits works the same as
14111 always.) No special provisions are made for other non-decimal numbers,
14112 vectors, and so on, since there is no universally accepted standard way
14113 of handling these in Pascal.
14114
14115 @kindex d F
14116 @pindex calc-fortran-language
14117 @cindex FORTRAN language
14118 The @kbd{d F} (@code{calc-fortran-language}) command selects FORTRAN
14119 conventions. Various function names are transformed into FORTRAN
14120 equivalents. Vectors are written as @samp{/1, 2, 3/}, and may be
14121 entered this way or using square brackets. Since FORTRAN uses round
14122 parentheses for both function calls and array subscripts, Calc displays
14123 both in the same way; @samp{a(i)} is interpreted as a function call
14124 upon reading, and subscripts must be entered as @samp{subscr(a, i)}.
14125 Also, if the variable @code{a} has been declared to have type
14126 @code{vector} or @code{matrix} then @samp{a(i)} will be parsed as a
14127 subscript. (@xref{Declarations}.) Usually it doesn't matter, though;
14128 if you enter the subscript expression @samp{a(i)} and Calc interprets
14129 it as a function call, you'll never know the difference unless you
14130 switch to another language mode or replace @code{a} with an actual
14131 vector (or unless @code{a} happens to be the name of a built-in
14132 function!).
14133
14134 Underscores are allowed in variable and function names in all of these
14135 language modes. The underscore here is equivalent to the @samp{#} in
14136 Normal mode, or to hyphens in the underlying Emacs Lisp variable names.
14137
14138 FORTRAN and Pascal modes normally do not adjust the case of letters in
14139 formulas. Most built-in Calc names use lower-case letters. If you use a
14140 positive numeric prefix argument with @kbd{d P} or @kbd{d F}, these
14141 modes will use upper-case letters exclusively for display, and will
14142 convert to lower-case on input. With a negative prefix, these modes
14143 convert to lower-case for display and input.
14144
14145 @node TeX Language Mode, Eqn Language Mode, C FORTRAN Pascal, Language Modes
14146 @subsection @TeX{} Language Mode
14147
14148 @noindent
14149 @kindex d T
14150 @pindex calc-tex-language
14151 @cindex TeX language
14152 The @kbd{d T} (@code{calc-tex-language}) command selects the conventions
14153 of ``math mode'' in the @TeX{} typesetting language, by Donald Knuth.
14154 Formulas are entered
14155 and displayed in @TeX{} notation, as in @samp{\sin\left( a \over b \right)}.
14156 Math formulas are usually enclosed by @samp{$ $} signs in @TeX{}; these
14157 should be omitted when interfacing with Calc. To Calc, the @samp{$} sign
14158 has the same meaning it always does in algebraic formulas (a reference to
14159 an existing entry on the stack).
14160
14161 Complex numbers are displayed as in @samp{3 + 4i}. Fractions and
14162 quotients are written using @code{\over};
14163 binomial coefficients are written with @code{\choose}.
14164 Interval forms are written with @code{\ldots}, and
14165 error forms are written with @code{\pm}.
14166 Absolute values are written as in @samp{|x + 1|}, and the floor and
14167 ceiling functions are written with @code{\lfloor}, @code{\rfloor}, etc.
14168 The words @code{\left} and @code{\right} are ignored when reading
14169 formulas in @TeX{} mode. Both @code{inf} and @code{uinf} are written
14170 as @code{\infty}; when read, @code{\infty} always translates to
14171 @code{inf}.
14172
14173 Function calls are written the usual way, with the function name followed
14174 by the arguments in parentheses. However, functions for which @TeX{} has
14175 special names (like @code{\sin}) will use curly braces instead of
14176 parentheses for very simple arguments. During input, curly braces and
14177 parentheses work equally well for grouping, but when the document is
14178 formatted the curly braces will be invisible. Thus the printed result is
14179 @texline @math{\sin{2 x}}
14180 @infoline @expr{sin 2x}
14181 but
14182 @texline @math{\sin(2 + x)}.
14183 @infoline @expr{sin(2 + x)}.
14184
14185 Function and variable names not treated specially by @TeX{} are simply
14186 written out as-is, which will cause them to come out in italic letters
14187 in the printed document. If you invoke @kbd{d T} with a positive numeric
14188 prefix argument, names of more than one character will instead be written
14189 @samp{\hbox@{@var{name}@}}. The @samp{\hbox@{ @}} notation is ignored
14190 during reading. If you use a negative prefix argument, such function
14191 names are written @samp{\@var{name}}, and function names that begin
14192 with @code{\} during reading have the @code{\} removed. (Note that
14193 in this mode, long variable names are still written with @code{\hbox}.
14194 However, you can always make an actual variable name like @code{\bar}
14195 in any @TeX{} mode.)
14196
14197 During reading, text of the form @samp{\matrix@{ ...@: @}} is replaced
14198 by @samp{[ ...@: ]}. The same also applies to @code{\pmatrix} and
14199 @code{\bmatrix}. The symbol @samp{&} is interpreted as a comma,
14200 and the symbols @samp{\cr} and @samp{\\} are interpreted as semicolons.
14201 During output, matrices are displayed in @samp{\matrix@{ a & b \\ c & d@}}
14202 format; you may need to edit this afterwards to change @code{\matrix}
14203 to @code{\pmatrix} or @code{\\} to @code{\cr}.
14204
14205 Accents like @code{\tilde} and @code{\bar} translate into function
14206 calls internally (@samp{tilde(x)}, @samp{bar(x)}). The @code{\underline}
14207 sequence is treated as an accent. The @code{\vec} accent corresponds
14208 to the function name @code{Vec}, because @code{vec} is the name of
14209 a built-in Calc function. The following table shows the accents
14210 in Calc, @TeX{}, and @dfn{eqn} (described in the next section):
14211
14212 @iftex
14213 @begingroup
14214 @let@calcindexershow=@calcindexernoshow @c Suppress marginal notes
14215 @let@calcindexersh=@calcindexernoshow
14216 @end iftex
14217 @ignore
14218 @starindex
14219 @end ignore
14220 @tindex acute
14221 @ignore
14222 @starindex
14223 @end ignore
14224 @tindex bar
14225 @ignore
14226 @starindex
14227 @end ignore
14228 @tindex breve
14229 @ignore
14230 @starindex
14231 @end ignore
14232 @tindex check
14233 @ignore
14234 @starindex
14235 @end ignore
14236 @tindex dot
14237 @ignore
14238 @starindex
14239 @end ignore
14240 @tindex dotdot
14241 @ignore
14242 @starindex
14243 @end ignore
14244 @tindex dyad
14245 @ignore
14246 @starindex
14247 @end ignore
14248 @tindex grave
14249 @ignore
14250 @starindex
14251 @end ignore
14252 @tindex hat
14253 @ignore
14254 @starindex
14255 @end ignore
14256 @tindex Prime
14257 @ignore
14258 @starindex
14259 @end ignore
14260 @tindex tilde
14261 @ignore
14262 @starindex
14263 @end ignore
14264 @tindex under
14265 @ignore
14266 @starindex
14267 @end ignore
14268 @tindex Vec
14269 @iftex
14270 @endgroup
14271 @end iftex
14272 @example
14273 Calc TeX eqn
14274 ---- --- ---
14275 acute \acute
14276 bar \bar bar
14277 breve \breve
14278 check \check
14279 dot \dot dot
14280 dotdot \ddot dotdot
14281 dyad dyad
14282 grave \grave
14283 hat \hat hat
14284 Prime prime
14285 tilde \tilde tilde
14286 under \underline under
14287 Vec \vec vec
14288 @end example
14289
14290 The @samp{=>} (evaluates-to) operator appears as a @code{\to} symbol:
14291 @samp{@{@var{a} \to @var{b}@}}. @TeX{} defines @code{\to} as an
14292 alias for @code{\rightarrow}. However, if the @samp{=>} is the
14293 top-level expression being formatted, a slightly different notation
14294 is used: @samp{\evalto @var{a} \to @var{b}}. The @code{\evalto}
14295 word is ignored by Calc's input routines, and is undefined in @TeX{}.
14296 You will typically want to include one of the following definitions
14297 at the top of a @TeX{} file that uses @code{\evalto}:
14298
14299 @example
14300 \def\evalto@{@}
14301 \def\evalto#1\to@{@}
14302 @end example
14303
14304 The first definition formats evaluates-to operators in the usual
14305 way. The second causes only the @var{b} part to appear in the
14306 printed document; the @var{a} part and the arrow are hidden.
14307 Another definition you may wish to use is @samp{\let\to=\Rightarrow}
14308 which causes @code{\to} to appear more like Calc's @samp{=>} symbol.
14309 @xref{Evaluates-To Operator}, for a discussion of @code{evalto}.
14310
14311 The complete set of @TeX{} control sequences that are ignored during
14312 reading is:
14313
14314 @example
14315 \hbox \mbox \text \left \right
14316 \, \> \: \; \! \quad \qquad \hfil \hfill
14317 \displaystyle \textstyle \dsize \tsize
14318 \scriptstyle \scriptscriptstyle \ssize \ssize
14319 \rm \bf \it \sl \roman \bold \italic \slanted
14320 \cal \mit \Cal \Bbb \frak \goth
14321 \evalto
14322 @end example
14323
14324 Note that, because these symbols are ignored, reading a @TeX{} formula
14325 into Calc and writing it back out may lose spacing and font information.
14326
14327 Also, the ``discretionary multiplication sign'' @samp{\*} is read
14328 the same as @samp{*}.
14329
14330 @ifinfo
14331 The @TeX{} version of this manual includes some printed examples at the
14332 end of this section.
14333 @end ifinfo
14334 @iftex
14335 Here are some examples of how various Calc formulas are formatted in @TeX{}:
14336
14337 @example
14338 @group
14339 sin(a^2 / b_i)
14340 \sin\left( {a^2 \over b_i} \right)
14341 @end group
14342 @end example
14343 @tex
14344 $$ \sin\left( a^2 \over b_i \right) $$
14345 @end tex
14346 @sp 1
14347
14348 @example
14349 @group
14350 [(3, 4), 3:4, 3 +/- 4, [3 .. inf)]
14351 [3 + 4i, @{3 \over 4@}, 3 \pm 4, [3 \ldots \infty)]
14352 @end group
14353 @end example
14354 @tex
14355 \turnoffactive
14356 $$ [3 + 4i, {3 \over 4}, 3 \pm 4, [ 3 \ldots \infty)] $$
14357 @end tex
14358 @sp 1
14359
14360 @example
14361 @group
14362 [abs(a), abs(a / b), floor(a), ceil(a / b)]
14363 [|a|, \left| a \over b \right|,
14364 \lfloor a \rfloor, \left\lceil a \over b \right\rceil]
14365 @end group
14366 @end example
14367 @tex
14368 $$ [|a|, \left| a \over b \right|,
14369 \lfloor a \rfloor, \left\lceil a \over b \right\rceil] $$
14370 @end tex
14371 @sp 1
14372
14373 @example
14374 @group
14375 [sin(a), sin(2 a), sin(2 + a), sin(a / b)]
14376 [\sin@{a@}, \sin@{2 a@}, \sin(2 + a),
14377 \sin\left( @{a \over b@} \right)]
14378 @end group
14379 @end example
14380 @tex
14381 \turnoffactive
14382 $$ [\sin{a}, \sin{2 a}, \sin(2 + a), \sin\left( {a \over b} \right)] $$
14383 @end tex
14384 @sp 2
14385
14386 First with plain @kbd{d T}, then with @kbd{C-u d T}, then finally with
14387 @kbd{C-u - d T} (using the example definition
14388 @samp{\def\foo#1@{\tilde F(#1)@}}:
14389
14390 @example
14391 @group
14392 [f(a), foo(bar), sin(pi)]
14393 [f(a), foo(bar), \sin{\pi}]
14394 [f(a), \hbox@{foo@}(\hbox@{bar@}), \sin@{\pi@}]
14395 [f(a), \foo@{\hbox@{bar@}@}, \sin@{\pi@}]
14396 @end group
14397 @end example
14398 @tex
14399 $$ [f(a), foo(bar), \sin{\pi}] $$
14400 $$ [f(a), \hbox{foo}(\hbox{bar}), \sin{\pi}] $$
14401 $$ [f(a), \tilde F(\hbox{bar}), \sin{\pi}] $$
14402 @end tex
14403 @sp 2
14404
14405 First with @samp{\def\evalto@{@}}, then with @samp{\def\evalto#1\to@{@}}:
14406
14407 @example
14408 @group
14409 2 + 3 => 5
14410 \evalto 2 + 3 \to 5
14411 @end group
14412 @end example
14413 @tex
14414 \turnoffactive
14415 $$ 2 + 3 \to 5 $$
14416 $$ 5 $$
14417 @end tex
14418 @sp 2
14419
14420 First with standard @code{\to}, then with @samp{\let\to\Rightarrow}:
14421
14422 @example
14423 @group
14424 [2 + 3 => 5, a / 2 => (b + c) / 2]
14425 [@{2 + 3 \to 5@}, @{@{a \over 2@} \to @{b + c \over 2@}@}]
14426 @end group
14427 @end example
14428 @tex
14429 \turnoffactive
14430 $$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$
14431 {\let\to\Rightarrow
14432 $$ [{2 + 3 \to 5}, {{a \over 2} \to {b + c \over 2}}] $$}
14433 @end tex
14434 @sp 2
14435
14436 Matrices normally, then changing @code{\matrix} to @code{\pmatrix}:
14437
14438 @example
14439 @group
14440 [ [ a / b, 0 ], [ 0, 2^(x + 1) ] ]
14441 \matrix@{ @{a \over b@} & 0 \\ 0 & 2^@{(x + 1)@} @}
14442 \pmatrix@{ @{a \over b@} & 0 \\ 0 & 2^@{(x + 1)@} @}
14443 @end group
14444 @end example
14445 @tex
14446 \turnoffactive
14447 $$ \matrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$
14448 $$ \pmatrix{ {a \over b} & 0 \cr 0 & 2^{(x + 1)} } $$
14449 @end tex
14450 @sp 2
14451 @end iftex
14452
14453 @node Eqn Language Mode, Mathematica Language Mode, TeX Language Mode, Language Modes
14454 @subsection Eqn Language Mode
14455
14456 @noindent
14457 @kindex d E
14458 @pindex calc-eqn-language
14459 @dfn{Eqn} is another popular formatter for math formulas. It is
14460 designed for use with the TROFF text formatter, and comes standard
14461 with many versions of Unix. The @kbd{d E} (@code{calc-eqn-language})
14462 command selects @dfn{eqn} notation.
14463
14464 The @dfn{eqn} language's main idiosyncrasy is that whitespace plays
14465 a significant part in the parsing of the language. For example,
14466 @samp{sqrt x+1 + y} treats @samp{x+1} as the argument of the
14467 @code{sqrt} operator. @dfn{Eqn} also understands more conventional
14468 grouping using curly braces: @samp{sqrt@{x+1@} + y}. Braces are
14469 required only when the argument contains spaces.
14470
14471 In Calc's @dfn{eqn} mode, however, curly braces are required to
14472 delimit arguments of operators like @code{sqrt}. The first of the
14473 above examples would treat only the @samp{x} as the argument of
14474 @code{sqrt}, and in fact @samp{sin x+1} would be interpreted as
14475 @samp{sin * x + 1}, because @code{sin} is not a special operator
14476 in the @dfn{eqn} language. If you always surround the argument
14477 with curly braces, Calc will never misunderstand.
14478
14479 Calc also understands parentheses as grouping characters. Another
14480 peculiarity of @dfn{eqn}'s syntax makes it advisable to separate
14481 words with spaces from any surrounding characters that aren't curly
14482 braces, so Calc writes @samp{sin ( x + y )} in @dfn{eqn} mode.
14483 (The spaces around @code{sin} are important to make @dfn{eqn}
14484 recognize that @code{sin} should be typeset in a roman font, and
14485 the spaces around @code{x} and @code{y} are a good idea just in
14486 case the @dfn{eqn} document has defined special meanings for these
14487 names, too.)
14488
14489 Powers and subscripts are written with the @code{sub} and @code{sup}
14490 operators, respectively. Note that the caret symbol @samp{^} is
14491 treated the same as a space in @dfn{eqn} mode, as is the @samp{~}
14492 symbol (these are used to introduce spaces of various widths into
14493 the typeset output of @dfn{eqn}).
14494
14495 As in @TeX{} mode, Calc's formatter omits parentheses around the
14496 arguments of functions like @code{ln} and @code{sin} if they are
14497 ``simple-looking''; in this case Calc surrounds the argument with
14498 braces, separated by a @samp{~} from the function name: @samp{sin~@{x@}}.
14499
14500 Font change codes (like @samp{roman @var{x}}) and positioning codes
14501 (like @samp{~} and @samp{down @var{n} @var{x}}) are ignored by the
14502 @dfn{eqn} reader. Also ignored are the words @code{left}, @code{right},
14503 @code{mark}, and @code{lineup}. Quotation marks in @dfn{eqn} mode input
14504 are treated the same as curly braces: @samp{sqrt "1+x"} is equivalent to
14505 @samp{sqrt @{1+x@}}; this is only an approximation to the true meaning
14506 of quotes in @dfn{eqn}, but it is good enough for most uses.
14507
14508 Accent codes (@samp{@var{x} dot}) are handled by treating them as
14509 function calls (@samp{dot(@var{x})}) internally. @xref{TeX Language
14510 Mode}, for a table of these accent functions. The @code{prime} accent
14511 is treated specially if it occurs on a variable or function name:
14512 @samp{f prime prime @w{( x prime )}} is stored internally as
14513 @samp{f'@w{'}(x')}. For example, taking the derivative of @samp{f(2 x)}
14514 with @kbd{a d x} will produce @samp{2 f'(2 x)}, which @dfn{eqn} mode
14515 will display as @samp{2 f prime ( 2 x )}.
14516
14517 Assignments are written with the @samp{<-} (left-arrow) symbol,
14518 and @code{evalto} operators are written with @samp{->} or
14519 @samp{evalto ... ->} (@pxref{TeX Language Mode}, for a discussion
14520 of this). The regular Calc symbols @samp{:=} and @samp{=>} are also
14521 recognized for these operators during reading.
14522
14523 Vectors in @dfn{eqn} mode use regular Calc square brackets, but
14524 matrices are formatted as @samp{matrix @{ ccol @{ a above b @} ... @}}.
14525 The words @code{lcol} and @code{rcol} are recognized as synonyms
14526 for @code{ccol} during input, and are generated instead of @code{ccol}
14527 if the matrix justification mode so specifies.
14528
14529 @node Mathematica Language Mode, Maple Language Mode, Eqn Language Mode, Language Modes
14530 @subsection Mathematica Language Mode
14531
14532 @noindent
14533 @kindex d M
14534 @pindex calc-mathematica-language
14535 @cindex Mathematica language
14536 The @kbd{d M} (@code{calc-mathematica-language}) command selects the
14537 conventions of Mathematica, a powerful and popular mathematical tool
14538 from Wolfram Research, Inc. Notable differences in Mathematica mode
14539 are that the names of built-in functions are capitalized, and function
14540 calls use square brackets instead of parentheses. Thus the Calc
14541 formula @samp{sin(2 x)} is entered and displayed @w{@samp{Sin[2 x]}} in
14542 Mathematica mode.
14543
14544 Vectors and matrices use curly braces in Mathematica. Complex numbers
14545 are written @samp{3 + 4 I}. The standard special constants in Calc are
14546 written @code{Pi}, @code{E}, @code{I}, @code{GoldenRatio}, @code{EulerGamma},
14547 @code{Infinity}, @code{ComplexInfinity}, and @code{Indeterminate} in
14548 Mathematica mode.
14549 Non-decimal numbers are written, e.g., @samp{16^^7fff}. Floating-point
14550 numbers in scientific notation are written @samp{1.23*10.^3}.
14551 Subscripts use double square brackets: @samp{a[[i]]}.
14552
14553 @node Maple Language Mode, Compositions, Mathematica Language Mode, Language Modes
14554 @subsection Maple Language Mode
14555
14556 @noindent
14557 @kindex d W
14558 @pindex calc-maple-language
14559 @cindex Maple language
14560 The @kbd{d W} (@code{calc-maple-language}) command selects the
14561 conventions of Maple, another mathematical tool from the University
14562 of Waterloo.
14563
14564 Maple's language is much like C. Underscores are allowed in symbol
14565 names; square brackets are used for subscripts; explicit @samp{*}s for
14566 multiplications are required. Use either @samp{^} or @samp{**} to
14567 denote powers.
14568
14569 Maple uses square brackets for lists and curly braces for sets. Calc
14570 interprets both notations as vectors, and displays vectors with square
14571 brackets. This means Maple sets will be converted to lists when they
14572 pass through Calc. As a special case, matrices are written as calls
14573 to the function @code{matrix}, given a list of lists as the argument,
14574 and can be read in this form or with all-capitals @code{MATRIX}.
14575
14576 The Maple interval notation @samp{2 .. 3} has no surrounding brackets;
14577 Calc reads @samp{2 .. 3} as the closed interval @samp{[2 .. 3]}, and
14578 writes any kind of interval as @samp{2 .. 3}. This means you cannot
14579 see the difference between an open and a closed interval while in
14580 Maple display mode.
14581
14582 Maple writes complex numbers as @samp{3 + 4*I}. Its special constants
14583 are @code{Pi}, @code{E}, @code{I}, and @code{infinity} (all three of
14584 @code{inf}, @code{uinf}, and @code{nan} display as @code{infinity}).
14585 Floating-point numbers are written @samp{1.23*10.^3}.
14586
14587 Among things not currently handled by Calc's Maple mode are the
14588 various quote symbols, procedures and functional operators, and
14589 inert (@samp{&}) operators.
14590
14591 @node Compositions, Syntax Tables, Maple Language Mode, Language Modes
14592 @subsection Compositions
14593
14594 @noindent
14595 @cindex Compositions
14596 There are several @dfn{composition functions} which allow you to get
14597 displays in a variety of formats similar to those in Big language
14598 mode. Most of these functions do not evaluate to anything; they are
14599 placeholders which are left in symbolic form by Calc's evaluator but
14600 are recognized by Calc's display formatting routines.
14601
14602 Two of these, @code{string} and @code{bstring}, are described elsewhere.
14603 @xref{Strings}. For example, @samp{string("ABC")} is displayed as
14604 @samp{ABC}. When viewed on the stack it will be indistinguishable from
14605 the variable @code{ABC}, but internally it will be stored as
14606 @samp{string([65, 66, 67])} and can still be manipulated this way; for
14607 example, the selection and vector commands @kbd{j 1 v v j u} would
14608 select the vector portion of this object and reverse the elements, then
14609 deselect to reveal a string whose characters had been reversed.
14610
14611 The composition functions do the same thing in all language modes
14612 (although their components will of course be formatted in the current
14613 language mode). The one exception is Unformatted mode (@kbd{d U}),
14614 which does not give the composition functions any special treatment.
14615 The functions are discussed here because of their relationship to
14616 the language modes.
14617
14618 @menu
14619 * Composition Basics::
14620 * Horizontal Compositions::
14621 * Vertical Compositions::
14622 * Other Compositions::
14623 * Information about Compositions::
14624 * User-Defined Compositions::
14625 @end menu
14626
14627 @node Composition Basics, Horizontal Compositions, Compositions, Compositions
14628 @subsubsection Composition Basics
14629
14630 @noindent
14631 Compositions are generally formed by stacking formulas together
14632 horizontally or vertically in various ways. Those formulas are
14633 themselves compositions. @TeX{} users will find this analogous
14634 to @TeX{}'s ``boxes.'' Each multi-line composition has a
14635 @dfn{baseline}; horizontal compositions use the baselines to
14636 decide how formulas should be positioned relative to one another.
14637 For example, in the Big mode formula
14638
14639 @example
14640 @group
14641 2
14642 a + b
14643 17 + ------
14644 c
14645 @end group
14646 @end example
14647
14648 @noindent
14649 the second term of the sum is four lines tall and has line three as
14650 its baseline. Thus when the term is combined with 17, line three
14651 is placed on the same level as the baseline of 17.
14652
14653 @tex
14654 \bigskip
14655 @end tex
14656
14657 Another important composition concept is @dfn{precedence}. This is
14658 an integer that represents the binding strength of various operators.
14659 For example, @samp{*} has higher precedence (195) than @samp{+} (180),
14660 which means that @samp{(a * b) + c} will be formatted without the
14661 parentheses, but @samp{a * (b + c)} will keep the parentheses.
14662
14663 The operator table used by normal and Big language modes has the
14664 following precedences:
14665
14666 @example
14667 _ 1200 @r{(subscripts)}
14668 % 1100 @r{(as in n}%@r{)}
14669 - 1000 @r{(as in }-@r{n)}
14670 ! 1000 @r{(as in }!@r{n)}
14671 mod 400
14672 +/- 300
14673 !! 210 @r{(as in n}!!@r{)}
14674 ! 210 @r{(as in n}!@r{)}
14675 ^ 200
14676 * 195 @r{(or implicit multiplication)}
14677 / % \ 190
14678 + - 180 @r{(as in a}+@r{b)}
14679 | 170
14680 < = 160 @r{(and other relations)}
14681 && 110
14682 || 100
14683 ? : 90
14684 !!! 85
14685 &&& 80
14686 ||| 75
14687 := 50
14688 :: 45
14689 => 40
14690 @end example
14691
14692 The general rule is that if an operator with precedence @expr{n}
14693 occurs as an argument to an operator with precedence @expr{m}, then
14694 the argument is enclosed in parentheses if @expr{n < m}. Top-level
14695 expressions and expressions which are function arguments, vector
14696 components, etc., are formatted with precedence zero (so that they
14697 normally never get additional parentheses).
14698
14699 For binary left-associative operators like @samp{+}, the righthand
14700 argument is actually formatted with one-higher precedence than shown
14701 in the table. This makes sure @samp{(a + b) + c} omits the parentheses,
14702 but the unnatural form @samp{a + (b + c)} keeps its parentheses.
14703 Right-associative operators like @samp{^} format the lefthand argument
14704 with one-higher precedence.
14705
14706 @ignore
14707 @starindex
14708 @end ignore
14709 @tindex cprec
14710 The @code{cprec} function formats an expression with an arbitrary
14711 precedence. For example, @samp{cprec(abc, 185)} will combine into
14712 sums and products as follows: @samp{7 + abc}, @samp{7 (abc)} (because
14713 this @code{cprec} form has higher precedence than addition, but lower
14714 precedence than multiplication).
14715
14716 @tex
14717 \bigskip
14718 @end tex
14719
14720 A final composition issue is @dfn{line breaking}. Calc uses two
14721 different strategies for ``flat'' and ``non-flat'' compositions.
14722 A non-flat composition is anything that appears on multiple lines
14723 (not counting line breaking). Examples would be matrices and Big
14724 mode powers and quotients. Non-flat compositions are displayed
14725 exactly as specified. If they come out wider than the current
14726 window, you must use horizontal scrolling (@kbd{<} and @kbd{>}) to
14727 view them.
14728
14729 Flat compositions, on the other hand, will be broken across several
14730 lines if they are too wide to fit the window. Certain points in a
14731 composition are noted internally as @dfn{break points}. Calc's
14732 general strategy is to fill each line as much as possible, then to
14733 move down to the next line starting at the first break point that
14734 didn't fit. However, the line breaker understands the hierarchical
14735 structure of formulas. It will not break an ``inner'' formula if
14736 it can use an earlier break point from an ``outer'' formula instead.
14737 For example, a vector of sums might be formatted as:
14738
14739 @example
14740 @group
14741 [ a + b + c, d + e + f,
14742 g + h + i, j + k + l, m ]
14743 @end group
14744 @end example
14745
14746 @noindent
14747 If the @samp{m} can fit, then so, it seems, could the @samp{g}.
14748 But Calc prefers to break at the comma since the comma is part
14749 of a ``more outer'' formula. Calc would break at a plus sign
14750 only if it had to, say, if the very first sum in the vector had
14751 itself been too large to fit.
14752
14753 Of the composition functions described below, only @code{choriz}
14754 generates break points. The @code{bstring} function (@pxref{Strings})
14755 also generates breakable items: A break point is added after every
14756 space (or group of spaces) except for spaces at the very beginning or
14757 end of the string.
14758
14759 Composition functions themselves count as levels in the formula
14760 hierarchy, so a @code{choriz} that is a component of a larger
14761 @code{choriz} will be less likely to be broken. As a special case,
14762 if a @code{bstring} occurs as a component of a @code{choriz} or
14763 @code{choriz}-like object (such as a vector or a list of arguments
14764 in a function call), then the break points in that @code{bstring}
14765 will be on the same level as the break points of the surrounding
14766 object.
14767
14768 @node Horizontal Compositions, Vertical Compositions, Composition Basics, Compositions
14769 @subsubsection Horizontal Compositions
14770
14771 @noindent
14772 @ignore
14773 @starindex
14774 @end ignore
14775 @tindex choriz
14776 The @code{choriz} function takes a vector of objects and composes
14777 them horizontally. For example, @samp{choriz([17, a b/c, d])} formats
14778 as @w{@samp{17a b / cd}} in Normal language mode, or as
14779
14780 @example
14781 @group
14782 a b
14783 17---d
14784 c
14785 @end group
14786 @end example
14787
14788 @noindent
14789 in Big language mode. This is actually one case of the general
14790 function @samp{choriz(@var{vec}, @var{sep}, @var{prec})}, where
14791 either or both of @var{sep} and @var{prec} may be omitted.
14792 @var{Prec} gives the @dfn{precedence} to use when formatting
14793 each of the components of @var{vec}. The default precedence is
14794 the precedence from the surrounding environment.
14795
14796 @var{Sep} is a string (i.e., a vector of character codes as might
14797 be entered with @code{" "} notation) which should separate components
14798 of the composition. Also, if @var{sep} is given, the line breaker
14799 will allow lines to be broken after each occurrence of @var{sep}.
14800 If @var{sep} is omitted, the composition will not be breakable
14801 (unless any of its component compositions are breakable).
14802
14803 For example, @samp{2 choriz([a, b c, d = e], " + ", 180)} is
14804 formatted as @samp{2 a + b c + (d = e)}. To get the @code{choriz}
14805 to have precedence 180 ``outwards'' as well as ``inwards,''
14806 enclose it in a @code{cprec} form: @samp{2 cprec(choriz(...), 180)}
14807 formats as @samp{2 (a + b c + (d = e))}.
14808
14809 The baseline of a horizontal composition is the same as the
14810 baselines of the component compositions, which are all aligned.
14811
14812 @node Vertical Compositions, Other Compositions, Horizontal Compositions, Compositions
14813 @subsubsection Vertical Compositions
14814
14815 @noindent
14816 @ignore
14817 @starindex
14818 @end ignore
14819 @tindex cvert
14820 The @code{cvert} function makes a vertical composition. Each
14821 component of the vector is centered in a column. The baseline of
14822 the result is by default the top line of the resulting composition.
14823 For example, @samp{f(cvert([a, bb, ccc]), cvert([a^2 + 1, b^2]))}
14824 formats in Big mode as
14825
14826 @example
14827 @group
14828 f( a , 2 )
14829 bb a + 1
14830 ccc 2
14831 b
14832 @end group
14833 @end example
14834
14835 @ignore
14836 @starindex
14837 @end ignore
14838 @tindex cbase
14839 There are several special composition functions that work only as
14840 components of a vertical composition. The @code{cbase} function
14841 controls the baseline of the vertical composition; the baseline
14842 will be the same as the baseline of whatever component is enclosed
14843 in @code{cbase}. Thus @samp{f(cvert([a, cbase(bb), ccc]),
14844 cvert([a^2 + 1, cbase(b^2)]))} displays as
14845
14846 @example
14847 @group
14848 2
14849 a + 1
14850 a 2
14851 f(bb , b )
14852 ccc
14853 @end group
14854 @end example
14855
14856 @ignore
14857 @starindex
14858 @end ignore
14859 @tindex ctbase
14860 @ignore
14861 @starindex
14862 @end ignore
14863 @tindex cbbase
14864 There are also @code{ctbase} and @code{cbbase} functions which
14865 make the baseline of the vertical composition equal to the top
14866 or bottom line (rather than the baseline) of that component.
14867 Thus @samp{cvert([cbase(a / b)]) + cvert([ctbase(a / b)]) +
14868 cvert([cbbase(a / b)])} gives
14869
14870 @example
14871 @group
14872 a
14873 a -
14874 - + a + b
14875 b -
14876 b
14877 @end group
14878 @end example
14879
14880 There should be only one @code{cbase}, @code{ctbase}, or @code{cbbase}
14881 function in a given vertical composition. These functions can also
14882 be written with no arguments: @samp{ctbase()} is a zero-height object
14883 which means the baseline is the top line of the following item, and
14884 @samp{cbbase()} means the baseline is the bottom line of the preceding
14885 item.
14886
14887 @ignore
14888 @starindex
14889 @end ignore
14890 @tindex crule
14891 The @code{crule} function builds a ``rule,'' or horizontal line,
14892 across a vertical composition. By itself @samp{crule()} uses @samp{-}
14893 characters to build the rule. You can specify any other character,
14894 e.g., @samp{crule("=")}. The argument must be a character code or
14895 vector of exactly one character code. It is repeated to match the
14896 width of the widest item in the stack. For example, a quotient
14897 with a thick line is @samp{cvert([a + 1, cbase(crule("=")), b^2])}:
14898
14899 @example
14900 @group
14901 a + 1
14902 =====
14903 2
14904 b
14905 @end group
14906 @end example
14907
14908 @ignore
14909 @starindex
14910 @end ignore
14911 @tindex clvert
14912 @ignore
14913 @starindex
14914 @end ignore
14915 @tindex crvert
14916 Finally, the functions @code{clvert} and @code{crvert} act exactly
14917 like @code{cvert} except that the items are left- or right-justified
14918 in the stack. Thus @samp{clvert([a, bb, ccc]) + crvert([a, bb, ccc])}
14919 gives:
14920
14921 @example
14922 @group
14923 a + a
14924 bb bb
14925 ccc ccc
14926 @end group
14927 @end example
14928
14929 Like @code{choriz}, the vertical compositions accept a second argument
14930 which gives the precedence to use when formatting the components.
14931 Vertical compositions do not support separator strings.
14932
14933 @node Other Compositions, Information about Compositions, Vertical Compositions, Compositions
14934 @subsubsection Other Compositions
14935
14936 @noindent
14937 @ignore
14938 @starindex
14939 @end ignore
14940 @tindex csup
14941 The @code{csup} function builds a superscripted expression. For
14942 example, @samp{csup(a, b)} looks the same as @samp{a^b} does in Big
14943 language mode. This is essentially a horizontal composition of
14944 @samp{a} and @samp{b}, where @samp{b} is shifted up so that its
14945 bottom line is one above the baseline.
14946
14947 @ignore
14948 @starindex
14949 @end ignore
14950 @tindex csub
14951 Likewise, the @code{csub} function builds a subscripted expression.
14952 This shifts @samp{b} down so that its top line is one below the
14953 bottom line of @samp{a} (note that this is not quite analogous to
14954 @code{csup}). Other arrangements can be obtained by using
14955 @code{choriz} and @code{cvert} directly.
14956
14957 @ignore
14958 @starindex
14959 @end ignore
14960 @tindex cflat
14961 The @code{cflat} function formats its argument in ``flat'' mode,
14962 as obtained by @samp{d O}, if the current language mode is normal
14963 or Big. It has no effect in other language modes. For example,
14964 @samp{a^(b/c)} is formatted by Big mode like @samp{csup(a, cflat(b/c))}
14965 to improve its readability.
14966
14967 @ignore
14968 @starindex
14969 @end ignore
14970 @tindex cspace
14971 The @code{cspace} function creates horizontal space. For example,
14972 @samp{cspace(4)} is effectively the same as @samp{string(" ")}.
14973 A second string (i.e., vector of characters) argument is repeated
14974 instead of the space character. For example, @samp{cspace(4, "ab")}
14975 looks like @samp{abababab}. If the second argument is not a string,
14976 it is formatted in the normal way and then several copies of that
14977 are composed together: @samp{cspace(4, a^2)} yields
14978
14979 @example
14980 @group
14981 2 2 2 2
14982 a a a a
14983 @end group
14984 @end example
14985
14986 @noindent
14987 If the number argument is zero, this is a zero-width object.
14988
14989 @ignore
14990 @starindex
14991 @end ignore
14992 @tindex cvspace
14993 The @code{cvspace} function creates vertical space, or a vertical
14994 stack of copies of a certain string or formatted object. The
14995 baseline is the center line of the resulting stack. A numerical
14996 argument of zero will produce an object which contributes zero
14997 height if used in a vertical composition.
14998
14999 @ignore
15000 @starindex
15001 @end ignore
15002 @tindex ctspace
15003 @ignore
15004 @starindex
15005 @end ignore
15006 @tindex cbspace
15007 There are also @code{ctspace} and @code{cbspace} functions which
15008 create vertical space with the baseline the same as the baseline
15009 of the top or bottom copy, respectively, of the second argument.
15010 Thus @samp{cvspace(2, a/b) + ctspace(2, a/b) + cbspace(2, a/b)}
15011 displays as:
15012
15013 @example
15014 @group
15015 a
15016 -
15017 a b
15018 - a a
15019 b + - + -
15020 a b b
15021 - a
15022 b -
15023 b
15024 @end group
15025 @end example
15026
15027 @node Information about Compositions, User-Defined Compositions, Other Compositions, Compositions
15028 @subsubsection Information about Compositions
15029
15030 @noindent
15031 The functions in this section are actual functions; they compose their
15032 arguments according to the current language and other display modes,
15033 then return a certain measurement of the composition as an integer.
15034
15035 @ignore
15036 @starindex
15037 @end ignore
15038 @tindex cwidth
15039 The @code{cwidth} function measures the width, in characters, of a
15040 composition. For example, @samp{cwidth(a + b)} is 5, and
15041 @samp{cwidth(a / b)} is 5 in Normal mode, 1 in Big mode, and 11 in
15042 @TeX{} mode (for @samp{@{a \over b@}}). The argument may involve
15043 the composition functions described in this section.
15044
15045 @ignore
15046 @starindex
15047 @end ignore
15048 @tindex cheight
15049 The @code{cheight} function measures the height of a composition.
15050 This is the total number of lines in the argument's printed form.
15051
15052 @ignore
15053 @starindex
15054 @end ignore
15055 @tindex cascent
15056 @ignore
15057 @starindex
15058 @end ignore
15059 @tindex cdescent
15060 The functions @code{cascent} and @code{cdescent} measure the amount
15061 of the height that is above (and including) the baseline, or below
15062 the baseline, respectively. Thus @samp{cascent(@var{x}) + cdescent(@var{x})}
15063 always equals @samp{cheight(@var{x})}. For a one-line formula like
15064 @samp{a + b}, @code{cascent} returns 1 and @code{cdescent} returns 0.
15065 For @samp{a / b} in Big mode, @code{cascent} returns 2 and @code{cdescent}
15066 returns 1. The only formula for which @code{cascent} will return zero
15067 is @samp{cvspace(0)} or equivalents.
15068
15069 @node User-Defined Compositions, , Information about Compositions, Compositions
15070 @subsubsection User-Defined Compositions
15071
15072 @noindent
15073 @kindex Z C
15074 @pindex calc-user-define-composition
15075 The @kbd{Z C} (@code{calc-user-define-composition}) command lets you
15076 define the display format for any algebraic function. You provide a
15077 formula containing a certain number of argument variables on the stack.
15078 Any time Calc formats a call to the specified function in the current
15079 language mode and with that number of arguments, Calc effectively
15080 replaces the function call with that formula with the arguments
15081 replaced.
15082
15083 Calc builds the default argument list by sorting all the variable names
15084 that appear in the formula into alphabetical order. You can edit this
15085 argument list before pressing @key{RET} if you wish. Any variables in
15086 the formula that do not appear in the argument list will be displayed
15087 literally; any arguments that do not appear in the formula will not
15088 affect the display at all.
15089
15090 You can define formats for built-in functions, for functions you have
15091 defined with @kbd{Z F} (@pxref{Algebraic Definitions}), or for functions
15092 which have no definitions but are being used as purely syntactic objects.
15093 You can define different formats for each language mode, and for each
15094 number of arguments, using a succession of @kbd{Z C} commands. When
15095 Calc formats a function call, it first searches for a format defined
15096 for the current language mode (and number of arguments); if there is
15097 none, it uses the format defined for the Normal language mode. If
15098 neither format exists, Calc uses its built-in standard format for that
15099 function (usually just @samp{@var{func}(@var{args})}).
15100
15101 If you execute @kbd{Z C} with the number 0 on the stack instead of a
15102 formula, any defined formats for the function in the current language
15103 mode will be removed. The function will revert to its standard format.
15104
15105 For example, the default format for the binomial coefficient function
15106 @samp{choose(n, m)} in the Big language mode is
15107
15108 @example
15109 @group
15110 n
15111 ( )
15112 m
15113 @end group
15114 @end example
15115
15116 @noindent
15117 You might prefer the notation,
15118
15119 @example
15120 @group
15121 C
15122 n m
15123 @end group
15124 @end example
15125
15126 @noindent
15127 To define this notation, first make sure you are in Big mode,
15128 then put the formula
15129
15130 @smallexample
15131 choriz([cvert([cvspace(1), n]), C, cvert([cvspace(1), m])])
15132 @end smallexample
15133
15134 @noindent
15135 on the stack and type @kbd{Z C}. Answer the first prompt with
15136 @code{choose}. The second prompt will be the default argument list
15137 of @samp{(C m n)}. Edit this list to be @samp{(n m)} and press
15138 @key{RET}. Now, try it out: For example, turn simplification
15139 off with @kbd{m O} and enter @samp{choose(a,b) + choose(7,3)}
15140 as an algebraic entry.
15141
15142 @example
15143 @group
15144 C + C
15145 a b 7 3
15146 @end group
15147 @end example
15148
15149 As another example, let's define the usual notation for Stirling
15150 numbers of the first kind, @samp{stir1(n, m)}. This is just like
15151 the regular format for binomial coefficients but with square brackets
15152 instead of parentheses.
15153
15154 @smallexample
15155 choriz([string("["), cvert([n, cbase(cvspace(1)), m]), string("]")])
15156 @end smallexample
15157
15158 Now type @kbd{Z C stir1 @key{RET}}, edit the argument list to
15159 @samp{(n m)}, and type @key{RET}.
15160
15161 The formula provided to @kbd{Z C} usually will involve composition
15162 functions, but it doesn't have to. Putting the formula @samp{a + b + c}
15163 onto the stack and typing @kbd{Z C foo @key{RET} @key{RET}} would define
15164 the function @samp{foo(x,y,z)} to display like @samp{x + y + z}.
15165 This ``sum'' will act exactly like a real sum for all formatting
15166 purposes (it will be parenthesized the same, and so on). However
15167 it will be computationally unrelated to a sum. For example, the
15168 formula @samp{2 * foo(1, 2, 3)} will display as @samp{2 (1 + 2 + 3)}.
15169 Operator precedences have caused the ``sum'' to be written in
15170 parentheses, but the arguments have not actually been summed.
15171 (Generally a display format like this would be undesirable, since
15172 it can easily be confused with a real sum.)
15173
15174 The special function @code{eval} can be used inside a @kbd{Z C}
15175 composition formula to cause all or part of the formula to be
15176 evaluated at display time. For example, if the formula is
15177 @samp{a + eval(b + c)}, then @samp{foo(1, 2, 3)} will be displayed
15178 as @samp{1 + 5}. Evaluation will use the default simplifications,
15179 regardless of the current simplification mode. There are also
15180 @code{evalsimp} and @code{evalextsimp} which simplify as if by
15181 @kbd{a s} and @kbd{a e} (respectively). Note that these ``functions''
15182 operate only in the context of composition formulas (and also in
15183 rewrite rules, where they serve a similar purpose; @pxref{Rewrite
15184 Rules}). On the stack, a call to @code{eval} will be left in
15185 symbolic form.
15186
15187 It is not a good idea to use @code{eval} except as a last resort.
15188 It can cause the display of formulas to be extremely slow. For
15189 example, while @samp{eval(a + b)} might seem quite fast and simple,
15190 there are several situations where it could be slow. For example,
15191 @samp{a} and/or @samp{b} could be polar complex numbers, in which
15192 case doing the sum requires trigonometry. Or, @samp{a} could be
15193 the factorial @samp{fact(100)} which is unevaluated because you
15194 have typed @kbd{m O}; @code{eval} will evaluate it anyway to
15195 produce a large, unwieldy integer.
15196
15197 You can save your display formats permanently using the @kbd{Z P}
15198 command (@pxref{Creating User Keys}).
15199
15200 @node Syntax Tables, , Compositions, Language Modes
15201 @subsection Syntax Tables
15202
15203 @noindent
15204 @cindex Syntax tables
15205 @cindex Parsing formulas, customized
15206 Syntax tables do for input what compositions do for output: They
15207 allow you to teach custom notations to Calc's formula parser.
15208 Calc keeps a separate syntax table for each language mode.
15209
15210 (Note that the Calc ``syntax tables'' discussed here are completely
15211 unrelated to the syntax tables described in the Emacs manual.)
15212
15213 @kindex Z S
15214 @pindex calc-edit-user-syntax
15215 The @kbd{Z S} (@code{calc-edit-user-syntax}) command edits the
15216 syntax table for the current language mode. If you want your
15217 syntax to work in any language, define it in the Normal language
15218 mode. Type @kbd{C-c C-c} to finish editing the syntax table, or
15219 @kbd{C-x k} to cancel the edit. The @kbd{m m} command saves all
15220 the syntax tables along with the other mode settings;
15221 @pxref{General Mode Commands}.
15222
15223 @menu
15224 * Syntax Table Basics::
15225 * Precedence in Syntax Tables::
15226 * Advanced Syntax Patterns::
15227 * Conditional Syntax Rules::
15228 @end menu
15229
15230 @node Syntax Table Basics, Precedence in Syntax Tables, Syntax Tables, Syntax Tables
15231 @subsubsection Syntax Table Basics
15232
15233 @noindent
15234 @dfn{Parsing} is the process of converting a raw string of characters,
15235 such as you would type in during algebraic entry, into a Calc formula.
15236 Calc's parser works in two stages. First, the input is broken down
15237 into @dfn{tokens}, such as words, numbers, and punctuation symbols
15238 like @samp{+}, @samp{:=}, and @samp{+/-}. Space between tokens is
15239 ignored (except when it serves to separate adjacent words). Next,
15240 the parser matches this string of tokens against various built-in
15241 syntactic patterns, such as ``an expression followed by @samp{+}
15242 followed by another expression'' or ``a name followed by @samp{(},
15243 zero or more expressions separated by commas, and @samp{)}.''
15244
15245 A @dfn{syntax table} is a list of user-defined @dfn{syntax rules},
15246 which allow you to specify new patterns to define your own
15247 favorite input notations. Calc's parser always checks the syntax
15248 table for the current language mode, then the table for the Normal
15249 language mode, before it uses its built-in rules to parse an
15250 algebraic formula you have entered. Each syntax rule should go on
15251 its own line; it consists of a @dfn{pattern}, a @samp{:=} symbol,
15252 and a Calc formula with an optional @dfn{condition}. (Syntax rules
15253 resemble algebraic rewrite rules, but the notation for patterns is
15254 completely different.)
15255
15256 A syntax pattern is a list of tokens, separated by spaces.
15257 Except for a few special symbols, tokens in syntax patterns are
15258 matched literally, from left to right. For example, the rule,
15259
15260 @example
15261 foo ( ) := 2+3
15262 @end example
15263
15264 @noindent
15265 would cause Calc to parse the formula @samp{4+foo()*5} as if it
15266 were @samp{4+(2+3)*5}. Notice that the parentheses were written
15267 as two separate tokens in the rule. As a result, the rule works
15268 for both @samp{foo()} and @w{@samp{foo ( )}}. If we had written
15269 the rule as @samp{foo () := 2+3}, then Calc would treat @samp{()}
15270 as a single, indivisible token, so that @w{@samp{foo( )}} would
15271 not be recognized by the rule. (It would be parsed as a regular
15272 zero-argument function call instead.) In fact, this rule would
15273 also make trouble for the rest of Calc's parser: An unrelated
15274 formula like @samp{bar()} would now be tokenized into @samp{bar ()}
15275 instead of @samp{bar ( )}, so that the standard parser for function
15276 calls would no longer recognize it!
15277
15278 While it is possible to make a token with a mixture of letters
15279 and punctuation symbols, this is not recommended. It is better to
15280 break it into several tokens, as we did with @samp{foo()} above.
15281
15282 The symbol @samp{#} in a syntax pattern matches any Calc expression.
15283 On the righthand side, the things that matched the @samp{#}s can
15284 be referred to as @samp{#1}, @samp{#2}, and so on (where @samp{#1}
15285 matches the leftmost @samp{#} in the pattern). For example, these
15286 rules match a user-defined function, prefix operator, infix operator,
15287 and postfix operator, respectively:
15288
15289 @example
15290 foo ( # ) := myfunc(#1)
15291 foo # := myprefix(#1)
15292 # foo # := myinfix(#1,#2)
15293 # foo := mypostfix(#1)
15294 @end example
15295
15296 Thus @samp{foo(3)} will parse as @samp{myfunc(3)}, and @samp{2+3 foo}
15297 will parse as @samp{mypostfix(2+3)}.
15298
15299 It is important to write the first two rules in the order shown,
15300 because Calc tries rules in order from first to last. If the
15301 pattern @samp{foo #} came first, it would match anything that could
15302 match the @samp{foo ( # )} rule, since an expression in parentheses
15303 is itself a valid expression. Thus the @w{@samp{foo ( # )}} rule would
15304 never get to match anything. Likewise, the last two rules must be
15305 written in the order shown or else @samp{3 foo 4} will be parsed as
15306 @samp{mypostfix(3) * 4}. (Of course, the best way to avoid these
15307 ambiguities is not to use the same symbol in more than one way at
15308 the same time! In case you're not convinced, try the following
15309 exercise: How will the above rules parse the input @samp{foo(3,4)},
15310 if at all? Work it out for yourself, then try it in Calc and see.)
15311
15312 Calc is quite flexible about what sorts of patterns are allowed.
15313 The only rule is that every pattern must begin with a literal
15314 token (like @samp{foo} in the first two patterns above), or with
15315 a @samp{#} followed by a literal token (as in the last two
15316 patterns). After that, any mixture is allowed, although putting
15317 two @samp{#}s in a row will not be very useful since two
15318 expressions with nothing between them will be parsed as one
15319 expression that uses implicit multiplication.
15320
15321 As a more practical example, Maple uses the notation
15322 @samp{sum(a(i), i=1..10)} for sums, which Calc's Maple mode doesn't
15323 recognize at present. To handle this syntax, we simply add the
15324 rule,
15325
15326 @example
15327 sum ( # , # = # .. # ) := sum(#1,#2,#3,#4)
15328 @end example
15329
15330 @noindent
15331 to the Maple mode syntax table. As another example, C mode can't
15332 read assignment operators like @samp{++} and @samp{*=}. We can
15333 define these operators quite easily:
15334
15335 @example
15336 # *= # := muleq(#1,#2)
15337 # ++ := postinc(#1)
15338 ++ # := preinc(#1)
15339 @end example
15340
15341 @noindent
15342 To complete the job, we would use corresponding composition functions
15343 and @kbd{Z C} to cause these functions to display in their respective
15344 Maple and C notations. (Note that the C example ignores issues of
15345 operator precedence, which are discussed in the next section.)
15346
15347 You can enclose any token in quotes to prevent its usual
15348 interpretation in syntax patterns:
15349
15350 @example
15351 # ":=" # := becomes(#1,#2)
15352 @end example
15353
15354 Quotes also allow you to include spaces in a token, although once
15355 again it is generally better to use two tokens than one token with
15356 an embedded space. To include an actual quotation mark in a quoted
15357 token, precede it with a backslash. (This also works to include
15358 backslashes in tokens.)
15359
15360 @example
15361 # "bad token" # "/\"\\" # := silly(#1,#2,#3)
15362 @end example
15363
15364 @noindent
15365 This will parse @samp{3 bad token 4 /"\ 5} to @samp{silly(3,4,5)}.
15366
15367 The token @kbd{#} has a predefined meaning in Calc's formula parser;
15368 it is not legal to use @samp{"#"} in a syntax rule. However, longer
15369 tokens that include the @samp{#} character are allowed. Also, while
15370 @samp{"$"} and @samp{"\""} are allowed as tokens, their presence in
15371 the syntax table will prevent those characters from working in their
15372 usual ways (referring to stack entries and quoting strings,
15373 respectively).
15374
15375 Finally, the notation @samp{%%} anywhere in a syntax table causes
15376 the rest of the line to be ignored as a comment.
15377
15378 @node Precedence in Syntax Tables, Advanced Syntax Patterns, Syntax Table Basics, Syntax Tables
15379 @subsubsection Precedence
15380
15381 @noindent
15382 Different operators are generally assigned different @dfn{precedences}.
15383 By default, an operator defined by a rule like
15384
15385 @example
15386 # foo # := foo(#1,#2)
15387 @end example
15388
15389 @noindent
15390 will have an extremely low precedence, so that @samp{2*3+4 foo 5 == 6}
15391 will be parsed as @samp{(2*3+4) foo (5 == 6)}. To change the
15392 precedence of an operator, use the notation @samp{#/@var{p}} in
15393 place of @samp{#}, where @var{p} is an integer precedence level.
15394 For example, 185 lies between the precedences for @samp{+} and
15395 @samp{*}, so if we change this rule to
15396
15397 @example
15398 #/185 foo #/186 := foo(#1,#2)
15399 @end example
15400
15401 @noindent
15402 then @samp{2+3 foo 4*5} will be parsed as @samp{2+(3 foo (4*5))}.
15403 Also, because we've given the righthand expression slightly higher
15404 precedence, our new operator will be left-associative:
15405 @samp{1 foo 2 foo 3} will be parsed as @samp{(1 foo 2) foo 3}.
15406 By raising the precedence of the lefthand expression instead, we
15407 can create a right-associative operator.
15408
15409 @xref{Composition Basics}, for a table of precedences of the
15410 standard Calc operators. For the precedences of operators in other
15411 language modes, look in the Calc source file @file{calc-lang.el}.
15412
15413 @node Advanced Syntax Patterns, Conditional Syntax Rules, Precedence in Syntax Tables, Syntax Tables
15414 @subsubsection Advanced Syntax Patterns
15415
15416 @noindent
15417 To match a function with a variable number of arguments, you could
15418 write
15419
15420 @example
15421 foo ( # ) := myfunc(#1)
15422 foo ( # , # ) := myfunc(#1,#2)
15423 foo ( # , # , # ) := myfunc(#1,#2,#3)
15424 @end example
15425
15426 @noindent
15427 but this isn't very elegant. To match variable numbers of items,
15428 Calc uses some notations inspired regular expressions and the
15429 ``extended BNF'' style used by some language designers.
15430
15431 @example
15432 foo ( @{ # @}*, ) := apply(myfunc,#1)
15433 @end example
15434
15435 The token @samp{@{} introduces a repeated or optional portion.
15436 One of the three tokens @samp{@}*}, @samp{@}+}, or @samp{@}?}
15437 ends the portion. These will match zero or more, one or more,
15438 or zero or one copies of the enclosed pattern, respectively.
15439 In addition, @samp{@}*} and @samp{@}+} can be followed by a
15440 separator token (with no space in between, as shown above).
15441 Thus @samp{@{ # @}*,} matches nothing, or one expression, or
15442 several expressions separated by commas.
15443
15444 A complete @samp{@{ ... @}} item matches as a vector of the
15445 items that matched inside it. For example, the above rule will
15446 match @samp{foo(1,2,3)} to get @samp{apply(myfunc,[1,2,3])}.
15447 The Calc @code{apply} function takes a function name and a vector
15448 of arguments and builds a call to the function with those
15449 arguments, so the net result is the formula @samp{myfunc(1,2,3)}.
15450
15451 If the body of a @samp{@{ ... @}} contains several @samp{#}s
15452 (or nested @samp{@{ ... @}} constructs), then the items will be
15453 strung together into the resulting vector. If the body
15454 does not contain anything but literal tokens, the result will
15455 always be an empty vector.
15456
15457 @example
15458 foo ( @{ # , # @}+, ) := bar(#1)
15459 foo ( @{ @{ # @}*, @}*; ) := matrix(#1)
15460 @end example
15461
15462 @noindent
15463 will parse @samp{foo(1, 2, 3, 4)} as @samp{bar([1, 2, 3, 4])}, and
15464 @samp{foo(1, 2; 3, 4)} as @samp{matrix([[1, 2], [3, 4]])}. Also, after
15465 some thought it's easy to see how this pair of rules will parse
15466 @samp{foo(1, 2, 3)} as @samp{matrix([[1, 2, 3]])}, since the first
15467 rule will only match an even number of arguments. The rule
15468
15469 @example
15470 foo ( # @{ , # , # @}? ) := bar(#1,#2)
15471 @end example
15472
15473 @noindent
15474 will parse @samp{foo(2,3,4)} as @samp{bar(2,[3,4])}, and
15475 @samp{foo(2)} as @samp{bar(2,[])}.
15476
15477 The notation @samp{@{ ... @}?.} (note the trailing period) works
15478 just the same as regular @samp{@{ ... @}?}, except that it does not
15479 count as an argument; the following two rules are equivalent:
15480
15481 @example
15482 foo ( # , @{ also @}? # ) := bar(#1,#3)
15483 foo ( # , @{ also @}?. # ) := bar(#1,#2)
15484 @end example
15485
15486 @noindent
15487 Note that in the first case the optional text counts as @samp{#2},
15488 which will always be an empty vector, but in the second case no
15489 empty vector is produced.
15490
15491 Another variant is @samp{@{ ... @}?$}, which means the body is
15492 optional only at the end of the input formula. All built-in syntax
15493 rules in Calc use this for closing delimiters, so that during
15494 algebraic entry you can type @kbd{[sqrt(2), sqrt(3 @key{RET}}, omitting
15495 the closing parenthesis and bracket. Calc does this automatically
15496 for trailing @samp{)}, @samp{]}, and @samp{>} tokens in syntax
15497 rules, but you can use @samp{@{ ... @}?$} explicitly to get
15498 this effect with any token (such as @samp{"@}"} or @samp{end}).
15499 Like @samp{@{ ... @}?.}, this notation does not count as an
15500 argument. Conversely, you can use quotes, as in @samp{")"}, to
15501 prevent a closing-delimiter token from being automatically treated
15502 as optional.
15503
15504 Calc's parser does not have full backtracking, which means some
15505 patterns will not work as you might expect:
15506
15507 @example
15508 foo ( @{ # , @}? # , # ) := bar(#1,#2,#3)
15509 @end example
15510
15511 @noindent
15512 Here we are trying to make the first argument optional, so that
15513 @samp{foo(2,3)} parses as @samp{bar([],2,3)}. Unfortunately, Calc
15514 first tries to match @samp{2,} against the optional part of the
15515 pattern, finds a match, and so goes ahead to match the rest of the
15516 pattern. Later on it will fail to match the second comma, but it
15517 doesn't know how to go back and try the other alternative at that
15518 point. One way to get around this would be to use two rules:
15519
15520 @example
15521 foo ( # , # , # ) := bar([#1],#2,#3)
15522 foo ( # , # ) := bar([],#1,#2)
15523 @end example
15524
15525 More precisely, when Calc wants to match an optional or repeated
15526 part of a pattern, it scans forward attempting to match that part.
15527 If it reaches the end of the optional part without failing, it
15528 ``finalizes'' its choice and proceeds. If it fails, though, it
15529 backs up and tries the other alternative. Thus Calc has ``partial''
15530 backtracking. A fully backtracking parser would go on to make sure
15531 the rest of the pattern matched before finalizing the choice.
15532
15533 @node Conditional Syntax Rules, , Advanced Syntax Patterns, Syntax Tables
15534 @subsubsection Conditional Syntax Rules
15535
15536 @noindent
15537 It is possible to attach a @dfn{condition} to a syntax rule. For
15538 example, the rules
15539
15540 @example
15541 foo ( # ) := ifoo(#1) :: integer(#1)
15542 foo ( # ) := gfoo(#1)
15543 @end example
15544
15545 @noindent
15546 will parse @samp{foo(3)} as @samp{ifoo(3)}, but will parse
15547 @samp{foo(3.5)} and @samp{foo(x)} as calls to @code{gfoo}. Any
15548 number of conditions may be attached; all must be true for the
15549 rule to succeed. A condition is ``true'' if it evaluates to a
15550 nonzero number. @xref{Logical Operations}, for a list of Calc
15551 functions like @code{integer} that perform logical tests.
15552
15553 The exact sequence of events is as follows: When Calc tries a
15554 rule, it first matches the pattern as usual. It then substitutes
15555 @samp{#1}, @samp{#2}, etc., in the conditions, if any. Next, the
15556 conditions are simplified and evaluated in order from left to right,
15557 as if by the @w{@kbd{a s}} algebra command (@pxref{Simplifying Formulas}).
15558 Each result is true if it is a nonzero number, or an expression
15559 that can be proven to be nonzero (@pxref{Declarations}). If the
15560 results of all conditions are true, the expression (such as
15561 @samp{ifoo(#1)}) has its @samp{#}s substituted, and that is the
15562 result of the parse. If the result of any condition is false, Calc
15563 goes on to try the next rule in the syntax table.
15564
15565 Syntax rules also support @code{let} conditions, which operate in
15566 exactly the same way as they do in algebraic rewrite rules.
15567 @xref{Other Features of Rewrite Rules}, for details. A @code{let}
15568 condition is always true, but as a side effect it defines a
15569 variable which can be used in later conditions, and also in the
15570 expression after the @samp{:=} sign:
15571
15572 @example
15573 foo ( # ) := hifoo(x) :: let(x := #1 + 0.5) :: dnumint(x)
15574 @end example
15575
15576 @noindent
15577 The @code{dnumint} function tests if a value is numerically an
15578 integer, i.e., either a true integer or an integer-valued float.
15579 This rule will parse @code{foo} with a half-integer argument,
15580 like @samp{foo(3.5)}, to a call like @samp{hifoo(4.)}.
15581
15582 The lefthand side of a syntax rule @code{let} must be a simple
15583 variable, not the arbitrary pattern that is allowed in rewrite
15584 rules.
15585
15586 The @code{matches} function is also treated specially in syntax
15587 rule conditions (again, in the same way as in rewrite rules).
15588 @xref{Matching Commands}. If the matching pattern contains
15589 meta-variables, then those meta-variables may be used in later
15590 conditions and in the result expression. The arguments to
15591 @code{matches} are not evaluated in this situation.
15592
15593 @example
15594 sum ( # , # ) := sum(#1,a,b,c) :: matches(#2, a=[b..c])
15595 @end example
15596
15597 @noindent
15598 This is another way to implement the Maple mode @code{sum} notation.
15599 In this approach, we allow @samp{#2} to equal the whole expression
15600 @samp{i=1..10}. Then, we use @code{matches} to break it apart into
15601 its components. If the expression turns out not to match the pattern,
15602 the syntax rule will fail. Note that @kbd{Z S} always uses Calc's
15603 Normal language mode for editing expressions in syntax rules, so we
15604 must use regular Calc notation for the interval @samp{[b..c]} that
15605 will correspond to the Maple mode interval @samp{1..10}.
15606
15607 @node Modes Variable, Calc Mode Line, Language Modes, Mode Settings
15608 @section The @code{Modes} Variable
15609
15610 @noindent
15611 @kindex m g
15612 @pindex calc-get-modes
15613 The @kbd{m g} (@code{calc-get-modes}) command pushes onto the stack
15614 a vector of numbers that describes the various mode settings that
15615 are in effect. With a numeric prefix argument, it pushes only the
15616 @var{n}th mode, i.e., the @var{n}th element of this vector. Keyboard
15617 macros can use the @kbd{m g} command to modify their behavior based
15618 on the current mode settings.
15619
15620 @cindex @code{Modes} variable
15621 @vindex Modes
15622 The modes vector is also available in the special variable
15623 @code{Modes}. In other words, @kbd{m g} is like @kbd{s r Modes @key{RET}}.
15624 It will not work to store into this variable; in fact, if you do,
15625 @code{Modes} will cease to track the current modes. (The @kbd{m g}
15626 command will continue to work, however.)
15627
15628 In general, each number in this vector is suitable as a numeric
15629 prefix argument to the associated mode-setting command. (Recall
15630 that the @kbd{~} key takes a number from the stack and gives it as
15631 a numeric prefix to the next command.)
15632
15633 The elements of the modes vector are as follows:
15634
15635 @enumerate
15636 @item
15637 Current precision. Default is 12; associated command is @kbd{p}.
15638
15639 @item
15640 Binary word size. Default is 32; associated command is @kbd{b w}.
15641
15642 @item
15643 Stack size (not counting the value about to be pushed by @kbd{m g}).
15644 This is zero if @kbd{m g} is executed with an empty stack.
15645
15646 @item
15647 Number radix. Default is 10; command is @kbd{d r}.
15648
15649 @item
15650 Floating-point format. This is the number of digits, plus the
15651 constant 0 for normal notation, 10000 for scientific notation,
15652 20000 for engineering notation, or 30000 for fixed-point notation.
15653 These codes are acceptable as prefix arguments to the @kbd{d n}
15654 command, but note that this may lose information: For example,
15655 @kbd{d s} and @kbd{C-u 12 d s} have similar (but not quite
15656 identical) effects if the current precision is 12, but they both
15657 produce a code of 10012, which will be treated by @kbd{d n} as
15658 @kbd{C-u 12 d s}. If the precision then changes, the float format
15659 will still be frozen at 12 significant figures.
15660
15661 @item
15662 Angular mode. Default is 1 (degrees). Other values are 2 (radians)
15663 and 3 (HMS). The @kbd{m d} command accepts these prefixes.
15664
15665 @item
15666 Symbolic mode. Value is 0 or 1; default is 0. Command is @kbd{m s}.
15667
15668 @item
15669 Fraction mode. Value is 0 or 1; default is 0. Command is @kbd{m f}.
15670
15671 @item
15672 Polar mode. Value is 0 (rectangular) or 1 (polar); default is 0.
15673 Command is @kbd{m p}.
15674
15675 @item
15676 Matrix/Scalar mode. Default value is @mathit{-1}. Value is 0 for Scalar
15677 mode, @mathit{-2} for Matrix mode, or @var{N} for
15678 @texline @math{N\times N}
15679 @infoline @var{N}x@var{N}
15680 Matrix mode. Command is @kbd{m v}.
15681
15682 @item
15683 Simplification mode. Default is 1. Value is @mathit{-1} for off (@kbd{m O}),
15684 0 for @kbd{m N}, 2 for @kbd{m B}, 3 for @kbd{m A}, 4 for @kbd{m E},
15685 or 5 for @w{@kbd{m U}}. The @kbd{m D} command accepts these prefixes.
15686
15687 @item
15688 Infinite mode. Default is @mathit{-1} (off). Value is 1 if the mode is on,
15689 or 0 if the mode is on with positive zeros. Command is @kbd{m i}.
15690 @end enumerate
15691
15692 For example, the sequence @kbd{M-1 m g @key{RET} 2 + ~ p} increases the
15693 precision by two, leaving a copy of the old precision on the stack.
15694 Later, @kbd{~ p} will restore the original precision using that
15695 stack value. (This sequence might be especially useful inside a
15696 keyboard macro.)
15697
15698 As another example, @kbd{M-3 m g 1 - ~ @key{DEL}} deletes all but the
15699 oldest (bottommost) stack entry.
15700
15701 Yet another example: The HP-48 ``round'' command rounds a number
15702 to the current displayed precision. You could roughly emulate this
15703 in Calc with the sequence @kbd{M-5 m g 10000 % ~ c c}. (This
15704 would not work for fixed-point mode, but it wouldn't be hard to
15705 do a full emulation with the help of the @kbd{Z [} and @kbd{Z ]}
15706 programming commands. @xref{Conditionals in Macros}.)
15707
15708 @node Calc Mode Line, , Modes Variable, Mode Settings
15709 @section The Calc Mode Line
15710
15711 @noindent
15712 @cindex Mode line indicators
15713 This section is a summary of all symbols that can appear on the
15714 Calc mode line, the highlighted bar that appears under the Calc
15715 stack window (or under an editing window in Embedded mode).
15716
15717 The basic mode line format is:
15718
15719 @example
15720 --%%-Calc: 12 Deg @var{other modes} (Calculator)
15721 @end example
15722
15723 The @samp{%%} is the Emacs symbol for ``read-only''; it shows that
15724 regular Emacs commands are not allowed to edit the stack buffer
15725 as if it were text.
15726
15727 The word @samp{Calc:} changes to @samp{CalcEmbed:} if Embedded mode
15728 is enabled. The words after this describe the various Calc modes
15729 that are in effect.
15730
15731 The first mode is always the current precision, an integer.
15732 The second mode is always the angular mode, either @code{Deg},
15733 @code{Rad}, or @code{Hms}.
15734
15735 Here is a complete list of the remaining symbols that can appear
15736 on the mode line:
15737
15738 @table @code
15739 @item Alg
15740 Algebraic mode (@kbd{m a}; @pxref{Algebraic Entry}).
15741
15742 @item Alg[(
15743 Incomplete algebraic mode (@kbd{C-u m a}).
15744
15745 @item Alg*
15746 Total algebraic mode (@kbd{m t}).
15747
15748 @item Symb
15749 Symbolic mode (@kbd{m s}; @pxref{Symbolic Mode}).
15750
15751 @item Matrix
15752 Matrix mode (@kbd{m v}; @pxref{Matrix Mode}).
15753
15754 @item Matrix@var{n}
15755 Dimensioned Matrix mode (@kbd{C-u @var{n} m v}).
15756
15757 @item Scalar
15758 Scalar mode (@kbd{m v}; @pxref{Matrix Mode}).
15759
15760 @item Polar
15761 Polar complex mode (@kbd{m p}; @pxref{Polar Mode}).
15762
15763 @item Frac
15764 Fraction mode (@kbd{m f}; @pxref{Fraction Mode}).
15765
15766 @item Inf
15767 Infinite mode (@kbd{m i}; @pxref{Infinite Mode}).
15768
15769 @item +Inf
15770 Positive Infinite mode (@kbd{C-u 0 m i}).
15771
15772 @item NoSimp
15773 Default simplifications off (@kbd{m O}; @pxref{Simplification Modes}).
15774
15775 @item NumSimp
15776 Default simplifications for numeric arguments only (@kbd{m N}).
15777
15778 @item BinSimp@var{w}
15779 Binary-integer simplification mode; word size @var{w} (@kbd{m B}, @kbd{b w}).
15780
15781 @item AlgSimp
15782 Algebraic simplification mode (@kbd{m A}).
15783
15784 @item ExtSimp
15785 Extended algebraic simplification mode (@kbd{m E}).
15786
15787 @item UnitSimp
15788 Units simplification mode (@kbd{m U}).
15789
15790 @item Bin
15791 Current radix is 2 (@kbd{d 2}; @pxref{Radix Modes}).
15792
15793 @item Oct
15794 Current radix is 8 (@kbd{d 8}).
15795
15796 @item Hex
15797 Current radix is 16 (@kbd{d 6}).
15798
15799 @item Radix@var{n}
15800 Current radix is @var{n} (@kbd{d r}).
15801
15802 @item Zero
15803 Leading zeros (@kbd{d z}; @pxref{Radix Modes}).
15804
15805 @item Big
15806 Big language mode (@kbd{d B}; @pxref{Normal Language Modes}).
15807
15808 @item Flat
15809 One-line normal language mode (@kbd{d O}).
15810
15811 @item Unform
15812 Unformatted language mode (@kbd{d U}).
15813
15814 @item C
15815 C language mode (@kbd{d C}; @pxref{C FORTRAN Pascal}).
15816
15817 @item Pascal
15818 Pascal language mode (@kbd{d P}).
15819
15820 @item Fortran
15821 FORTRAN language mode (@kbd{d F}).
15822
15823 @item TeX
15824 @TeX{} language mode (@kbd{d T}; @pxref{TeX Language Mode}).
15825
15826 @item Eqn
15827 @dfn{Eqn} language mode (@kbd{d E}; @pxref{Eqn Language Mode}).
15828
15829 @item Math
15830 Mathematica language mode (@kbd{d M}; @pxref{Mathematica Language Mode}).
15831
15832 @item Maple
15833 Maple language mode (@kbd{d W}; @pxref{Maple Language Mode}).
15834
15835 @item Norm@var{n}
15836 Normal float mode with @var{n} digits (@kbd{d n}; @pxref{Float Formats}).
15837
15838 @item Fix@var{n}
15839 Fixed point mode with @var{n} digits after the point (@kbd{d f}).
15840
15841 @item Sci
15842 Scientific notation mode (@kbd{d s}).
15843
15844 @item Sci@var{n}
15845 Scientific notation with @var{n} digits (@kbd{d s}).
15846
15847 @item Eng
15848 Engineering notation mode (@kbd{d e}).
15849
15850 @item Eng@var{n}
15851 Engineering notation with @var{n} digits (@kbd{d e}).
15852
15853 @item Left@var{n}
15854 Left-justified display indented by @var{n} (@kbd{d <}; @pxref{Justification}).
15855
15856 @item Right
15857 Right-justified display (@kbd{d >}).
15858
15859 @item Right@var{n}
15860 Right-justified display with width @var{n} (@kbd{d >}).
15861
15862 @item Center
15863 Centered display (@kbd{d =}).
15864
15865 @item Center@var{n}
15866 Centered display with center column @var{n} (@kbd{d =}).
15867
15868 @item Wid@var{n}
15869 Line breaking with width @var{n} (@kbd{d b}; @pxref{Normal Language Modes}).
15870
15871 @item Wide
15872 No line breaking (@kbd{d b}).
15873
15874 @item Break
15875 Selections show deep structure (@kbd{j b}; @pxref{Making Selections}).
15876
15877 @item Save
15878 Record modes in @file{~/.emacs} (@kbd{m R}; @pxref{General Mode Commands}).
15879
15880 @item Local
15881 Record modes in Embedded buffer (@kbd{m R}).
15882
15883 @item LocEdit
15884 Record modes as editing-only in Embedded buffer (@kbd{m R}).
15885
15886 @item LocPerm
15887 Record modes as permanent-only in Embedded buffer (@kbd{m R}).
15888
15889 @item Global
15890 Record modes as global in Embedded buffer (@kbd{m R}).
15891
15892 @item Manual
15893 Automatic recomputation turned off (@kbd{m C}; @pxref{Automatic
15894 Recomputation}).
15895
15896 @item Graph
15897 GNUPLOT process is alive in background (@pxref{Graphics}).
15898
15899 @item Sel
15900 Top-of-stack has a selection (Embedded only; @pxref{Making Selections}).
15901
15902 @item Dirty
15903 The stack display may not be up-to-date (@pxref{Display Modes}).
15904
15905 @item Inv
15906 ``Inverse'' prefix was pressed (@kbd{I}; @pxref{Inverse and Hyperbolic}).
15907
15908 @item Hyp
15909 ``Hyperbolic'' prefix was pressed (@kbd{H}).
15910
15911 @item Keep
15912 ``Keep-arguments'' prefix was pressed (@kbd{K}).
15913
15914 @item Narrow
15915 Stack is truncated (@kbd{d t}; @pxref{Truncating the Stack}).
15916 @end table
15917
15918 In addition, the symbols @code{Active} and @code{~Active} can appear
15919 as minor modes on an Embedded buffer's mode line. @xref{Embedded Mode}.
15920
15921 @node Arithmetic, Scientific Functions, Mode Settings, Top
15922 @chapter Arithmetic Functions
15923
15924 @noindent
15925 This chapter describes the Calc commands for doing simple calculations
15926 on numbers, such as addition, absolute value, and square roots. These
15927 commands work by removing the top one or two values from the stack,
15928 performing the desired operation, and pushing the result back onto the
15929 stack. If the operation cannot be performed, the result pushed is a
15930 formula instead of a number, such as @samp{2/0} (because division by zero
15931 is illegal) or @samp{sqrt(x)} (because the argument @samp{x} is a formula).
15932
15933 Most of the commands described here can be invoked by a single keystroke.
15934 Some of the more obscure ones are two-letter sequences beginning with
15935 the @kbd{f} (``functions'') prefix key.
15936
15937 @xref{Prefix Arguments}, for a discussion of the effect of numeric
15938 prefix arguments on commands in this chapter which do not otherwise
15939 interpret a prefix argument.
15940
15941 @menu
15942 * Basic Arithmetic::
15943 * Integer Truncation::
15944 * Complex Number Functions::
15945 * Conversions::
15946 * Date Arithmetic::
15947 * Financial Functions::
15948 * Binary Functions::
15949 @end menu
15950
15951 @node Basic Arithmetic, Integer Truncation, Arithmetic, Arithmetic
15952 @section Basic Arithmetic
15953
15954 @noindent
15955 @kindex +
15956 @pindex calc-plus
15957 @ignore
15958 @mindex @null
15959 @end ignore
15960 @tindex +
15961 The @kbd{+} (@code{calc-plus}) command adds two numbers. The numbers may
15962 be any of the standard Calc data types. The resulting sum is pushed back
15963 onto the stack.
15964
15965 If both arguments of @kbd{+} are vectors or matrices (of matching dimensions),
15966 the result is a vector or matrix sum. If one argument is a vector and the
15967 other a scalar (i.e., a non-vector), the scalar is added to each of the
15968 elements of the vector to form a new vector. If the scalar is not a
15969 number, the operation is left in symbolic form: Suppose you added @samp{x}
15970 to the vector @samp{[1,2]}. You may want the result @samp{[1+x,2+x]}, or
15971 you may plan to substitute a 2-vector for @samp{x} in the future. Since
15972 the Calculator can't tell which interpretation you want, it makes the
15973 safest assumption. @xref{Reducing and Mapping}, for a way to add @samp{x}
15974 to every element of a vector.
15975
15976 If either argument of @kbd{+} is a complex number, the result will in general
15977 be complex. If one argument is in rectangular form and the other polar,
15978 the current Polar mode determines the form of the result. If Symbolic
15979 mode is enabled, the sum may be left as a formula if the necessary
15980 conversions for polar addition are non-trivial.
15981
15982 If both arguments of @kbd{+} are HMS forms, the forms are added according to
15983 the usual conventions of hours-minutes-seconds notation. If one argument
15984 is an HMS form and the other is a number, that number is converted from
15985 degrees or radians (depending on the current Angular mode) to HMS format
15986 and then the two HMS forms are added.
15987
15988 If one argument of @kbd{+} is a date form, the other can be either a
15989 real number, which advances the date by a certain number of days, or
15990 an HMS form, which advances the date by a certain amount of time.
15991 Subtracting two date forms yields the number of days between them.
15992 Adding two date forms is meaningless, but Calc interprets it as the
15993 subtraction of one date form and the negative of the other. (The
15994 negative of a date form can be understood by remembering that dates
15995 are stored as the number of days before or after Jan 1, 1 AD.)
15996
15997 If both arguments of @kbd{+} are error forms, the result is an error form
15998 with an appropriately computed standard deviation. If one argument is an
15999 error form and the other is a number, the number is taken to have zero error.
16000 Error forms may have symbolic formulas as their mean and/or error parts;
16001 adding these will produce a symbolic error form result. However, adding an
16002 error form to a plain symbolic formula (as in @samp{(a +/- b) + c}) will not
16003 work, for the same reasons just mentioned for vectors. Instead you must
16004 write @samp{(a +/- b) + (c +/- 0)}.
16005
16006 If both arguments of @kbd{+} are modulo forms with equal values of @expr{M},
16007 or if one argument is a modulo form and the other a plain number, the
16008 result is a modulo form which represents the sum, modulo @expr{M}, of
16009 the two values.
16010
16011 If both arguments of @kbd{+} are intervals, the result is an interval
16012 which describes all possible sums of the possible input values. If
16013 one argument is a plain number, it is treated as the interval
16014 @w{@samp{[x ..@: x]}}.
16015
16016 If one argument of @kbd{+} is an infinity and the other is not, the
16017 result is that same infinity. If both arguments are infinite and in
16018 the same direction, the result is the same infinity, but if they are
16019 infinite in different directions the result is @code{nan}.
16020
16021 @kindex -
16022 @pindex calc-minus
16023 @ignore
16024 @mindex @null
16025 @end ignore
16026 @tindex -
16027 The @kbd{-} (@code{calc-minus}) command subtracts two values. The top
16028 number on the stack is subtracted from the one behind it, so that the
16029 computation @kbd{5 @key{RET} 2 -} produces 3, not @mathit{-3}. All options
16030 available for @kbd{+} are available for @kbd{-} as well.
16031
16032 @kindex *
16033 @pindex calc-times
16034 @ignore
16035 @mindex @null
16036 @end ignore
16037 @tindex *
16038 The @kbd{*} (@code{calc-times}) command multiplies two numbers. If one
16039 argument is a vector and the other a scalar, the scalar is multiplied by
16040 the elements of the vector to produce a new vector. If both arguments
16041 are vectors, the interpretation depends on the dimensions of the
16042 vectors: If both arguments are matrices, a matrix multiplication is
16043 done. If one argument is a matrix and the other a plain vector, the
16044 vector is interpreted as a row vector or column vector, whichever is
16045 dimensionally correct. If both arguments are plain vectors, the result
16046 is a single scalar number which is the dot product of the two vectors.
16047
16048 If one argument of @kbd{*} is an HMS form and the other a number, the
16049 HMS form is multiplied by that amount. It is an error to multiply two
16050 HMS forms together, or to attempt any multiplication involving date
16051 forms. Error forms, modulo forms, and intervals can be multiplied;
16052 see the comments for addition of those forms. When two error forms
16053 or intervals are multiplied they are considered to be statistically
16054 independent; thus, @samp{[-2 ..@: 3] * [-2 ..@: 3]} is @samp{[-6 ..@: 9]},
16055 whereas @w{@samp{[-2 ..@: 3] ^ 2}} is @samp{[0 ..@: 9]}.
16056
16057 @kindex /
16058 @pindex calc-divide
16059 @ignore
16060 @mindex @null
16061 @end ignore
16062 @tindex /
16063 The @kbd{/} (@code{calc-divide}) command divides two numbers. When
16064 dividing a scalar @expr{B} by a square matrix @expr{A}, the computation
16065 performed is @expr{B} times the inverse of @expr{A}. This also occurs
16066 if @expr{B} is itself a vector or matrix, in which case the effect is
16067 to solve the set of linear equations represented by @expr{B}. If @expr{B}
16068 is a matrix with the same number of rows as @expr{A}, or a plain vector
16069 (which is interpreted here as a column vector), then the equation
16070 @expr{A X = B} is solved for the vector or matrix @expr{X}. Otherwise,
16071 if @expr{B} is a non-square matrix with the same number of @emph{columns}
16072 as @expr{A}, the equation @expr{X A = B} is solved. If you wish a vector
16073 @expr{B} to be interpreted as a row vector to be solved as @expr{X A = B},
16074 make it into a one-row matrix with @kbd{C-u 1 v p} first. To force a
16075 left-handed solution with a square matrix @expr{B}, transpose @expr{A} and
16076 @expr{B} before dividing, then transpose the result.
16077
16078 HMS forms can be divided by real numbers or by other HMS forms. Error
16079 forms can be divided in any combination of ways. Modulo forms where both
16080 values and the modulo are integers can be divided to get an integer modulo
16081 form result. Intervals can be divided; dividing by an interval that
16082 encompasses zero or has zero as a limit will result in an infinite
16083 interval.
16084
16085 @kindex ^
16086 @pindex calc-power
16087 @ignore
16088 @mindex @null
16089 @end ignore
16090 @tindex ^
16091 The @kbd{^} (@code{calc-power}) command raises a number to a power. If
16092 the power is an integer, an exact result is computed using repeated
16093 multiplications. For non-integer powers, Calc uses Newton's method or
16094 logarithms and exponentials. Square matrices can be raised to integer
16095 powers. If either argument is an error (or interval or modulo) form,
16096 the result is also an error (or interval or modulo) form.
16097
16098 @kindex I ^
16099 @tindex nroot
16100 If you press the @kbd{I} (inverse) key first, the @kbd{I ^} command
16101 computes an Nth root: @kbd{125 @key{RET} 3 I ^} computes the number 5.
16102 (This is entirely equivalent to @kbd{125 @key{RET} 1:3 ^}.)
16103
16104 @kindex \
16105 @pindex calc-idiv
16106 @tindex idiv
16107 @ignore
16108 @mindex @null
16109 @end ignore
16110 @tindex \
16111 The @kbd{\} (@code{calc-idiv}) command divides two numbers on the stack
16112 to produce an integer result. It is equivalent to dividing with
16113 @key{/}, then rounding down with @kbd{F} (@code{calc-floor}), only a bit
16114 more convenient and efficient. Also, since it is an all-integer
16115 operation when the arguments are integers, it avoids problems that
16116 @kbd{/ F} would have with floating-point roundoff.
16117
16118 @kindex %
16119 @pindex calc-mod
16120 @ignore
16121 @mindex @null
16122 @end ignore
16123 @tindex %
16124 The @kbd{%} (@code{calc-mod}) command performs a ``modulo'' (or ``remainder'')
16125 operation. Mathematically, @samp{a%b = a - (a\b)*b}, and is defined
16126 for all real numbers @expr{a} and @expr{b} (except @expr{b=0}). For
16127 positive @expr{b}, the result will always be between 0 (inclusive) and
16128 @expr{b} (exclusive). Modulo does not work for HMS forms and error forms.
16129 If @expr{a} is a modulo form, its modulo is changed to @expr{b}, which
16130 must be positive real number.
16131
16132 @kindex :
16133 @pindex calc-fdiv
16134 @tindex fdiv
16135 The @kbd{:} (@code{calc-fdiv}) command [@code{fdiv} function in a formula]
16136 divides the two integers on the top of the stack to produce a fractional
16137 result. This is a convenient shorthand for enabling Fraction mode (with
16138 @kbd{m f}) temporarily and using @samp{/}. Note that during numeric entry
16139 the @kbd{:} key is interpreted as a fraction separator, so to divide 8 by 6
16140 you would have to type @kbd{8 @key{RET} 6 @key{RET} :}. (Of course, in
16141 this case, it would be much easier simply to enter the fraction directly
16142 as @kbd{8:6 @key{RET}}!)
16143
16144 @kindex n
16145 @pindex calc-change-sign
16146 The @kbd{n} (@code{calc-change-sign}) command negates the number on the top
16147 of the stack. It works on numbers, vectors and matrices, HMS forms, date
16148 forms, error forms, intervals, and modulo forms.
16149
16150 @kindex A
16151 @pindex calc-abs
16152 @tindex abs
16153 The @kbd{A} (@code{calc-abs}) [@code{abs}] command computes the absolute
16154 value of a number. The result of @code{abs} is always a nonnegative
16155 real number: With a complex argument, it computes the complex magnitude.
16156 With a vector or matrix argument, it computes the Frobenius norm, i.e.,
16157 the square root of the sum of the squares of the absolute values of the
16158 elements. The absolute value of an error form is defined by replacing
16159 the mean part with its absolute value and leaving the error part the same.
16160 The absolute value of a modulo form is undefined. The absolute value of
16161 an interval is defined in the obvious way.
16162
16163 @kindex f A
16164 @pindex calc-abssqr
16165 @tindex abssqr
16166 The @kbd{f A} (@code{calc-abssqr}) [@code{abssqr}] command computes the
16167 absolute value squared of a number, vector or matrix, or error form.
16168
16169 @kindex f s
16170 @pindex calc-sign
16171 @tindex sign
16172 The @kbd{f s} (@code{calc-sign}) [@code{sign}] command returns 1 if its
16173 argument is positive, @mathit{-1} if its argument is negative, or 0 if its
16174 argument is zero. In algebraic form, you can also write @samp{sign(a,x)}
16175 which evaluates to @samp{x * sign(a)}, i.e., either @samp{x}, @samp{-x}, or
16176 zero depending on the sign of @samp{a}.
16177
16178 @kindex &
16179 @pindex calc-inv
16180 @tindex inv
16181 @cindex Reciprocal
16182 The @kbd{&} (@code{calc-inv}) [@code{inv}] command computes the
16183 reciprocal of a number, i.e., @expr{1 / x}. Operating on a square
16184 matrix, it computes the inverse of that matrix.
16185
16186 @kindex Q
16187 @pindex calc-sqrt
16188 @tindex sqrt
16189 The @kbd{Q} (@code{calc-sqrt}) [@code{sqrt}] command computes the square
16190 root of a number. For a negative real argument, the result will be a
16191 complex number whose form is determined by the current Polar mode.
16192
16193 @kindex f h
16194 @pindex calc-hypot
16195 @tindex hypot
16196 The @kbd{f h} (@code{calc-hypot}) [@code{hypot}] command computes the square
16197 root of the sum of the squares of two numbers. That is, @samp{hypot(a,b)}
16198 is the length of the hypotenuse of a right triangle with sides @expr{a}
16199 and @expr{b}. If the arguments are complex numbers, their squared
16200 magnitudes are used.
16201
16202 @kindex f Q
16203 @pindex calc-isqrt
16204 @tindex isqrt
16205 The @kbd{f Q} (@code{calc-isqrt}) [@code{isqrt}] command computes the
16206 integer square root of an integer. This is the true square root of the
16207 number, rounded down to an integer. For example, @samp{isqrt(10)}
16208 produces 3. Note that, like @kbd{\} [@code{idiv}], this uses exact
16209 integer arithmetic throughout to avoid roundoff problems. If the input
16210 is a floating-point number or other non-integer value, this is exactly
16211 the same as @samp{floor(sqrt(x))}.
16212
16213 @kindex f n
16214 @kindex f x
16215 @pindex calc-min
16216 @tindex min
16217 @pindex calc-max
16218 @tindex max
16219 The @kbd{f n} (@code{calc-min}) [@code{min}] and @kbd{f x} (@code{calc-max})
16220 [@code{max}] commands take the minimum or maximum of two real numbers,
16221 respectively. These commands also work on HMS forms, date forms,
16222 intervals, and infinities. (In algebraic expressions, these functions
16223 take any number of arguments and return the maximum or minimum among
16224 all the arguments.)
16225
16226 @kindex f M
16227 @kindex f X
16228 @pindex calc-mant-part
16229 @tindex mant
16230 @pindex calc-xpon-part
16231 @tindex xpon
16232 The @kbd{f M} (@code{calc-mant-part}) [@code{mant}] function extracts
16233 the ``mantissa'' part @expr{m} of its floating-point argument; @kbd{f X}
16234 (@code{calc-xpon-part}) [@code{xpon}] extracts the ``exponent'' part
16235 @expr{e}. The original number is equal to
16236 @texline @math{m \times 10^e},
16237 @infoline @expr{m * 10^e},
16238 where @expr{m} is in the interval @samp{[1.0 ..@: 10.0)} except that
16239 @expr{m=e=0} if the original number is zero. For integers
16240 and fractions, @code{mant} returns the number unchanged and @code{xpon}
16241 returns zero. The @kbd{v u} (@code{calc-unpack}) command can also be
16242 used to ``unpack'' a floating-point number; this produces an integer
16243 mantissa and exponent, with the constraint that the mantissa is not
16244 a multiple of ten (again except for the @expr{m=e=0} case).
16245
16246 @kindex f S
16247 @pindex calc-scale-float
16248 @tindex scf
16249 The @kbd{f S} (@code{calc-scale-float}) [@code{scf}] function scales a number
16250 by a given power of ten. Thus, @samp{scf(mant(x), xpon(x)) = x} for any
16251 real @samp{x}. The second argument must be an integer, but the first
16252 may actually be any numeric value. For example, @samp{scf(5,-2) = 0.05}
16253 or @samp{1:20} depending on the current Fraction mode.
16254
16255 @kindex f [
16256 @kindex f ]
16257 @pindex calc-decrement
16258 @pindex calc-increment
16259 @tindex decr
16260 @tindex incr
16261 The @kbd{f [} (@code{calc-decrement}) [@code{decr}] and @kbd{f ]}
16262 (@code{calc-increment}) [@code{incr}] functions decrease or increase
16263 a number by one unit. For integers, the effect is obvious. For
16264 floating-point numbers, the change is by one unit in the last place.
16265 For example, incrementing @samp{12.3456} when the current precision
16266 is 6 digits yields @samp{12.3457}. If the current precision had been
16267 8 digits, the result would have been @samp{12.345601}. Incrementing
16268 @samp{0.0} produces
16269 @texline @math{10^{-p}},
16270 @infoline @expr{10^-p},
16271 where @expr{p} is the current
16272 precision. These operations are defined only on integers and floats.
16273 With numeric prefix arguments, they change the number by @expr{n} units.
16274
16275 Note that incrementing followed by decrementing, or vice-versa, will
16276 almost but not quite always cancel out. Suppose the precision is
16277 6 digits and the number @samp{9.99999} is on the stack. Incrementing
16278 will produce @samp{10.0000}; decrementing will produce @samp{9.9999}.
16279 One digit has been dropped. This is an unavoidable consequence of the
16280 way floating-point numbers work.
16281
16282 Incrementing a date/time form adjusts it by a certain number of seconds.
16283 Incrementing a pure date form adjusts it by a certain number of days.
16284
16285 @node Integer Truncation, Complex Number Functions, Basic Arithmetic, Arithmetic
16286 @section Integer Truncation
16287
16288 @noindent
16289 There are four commands for truncating a real number to an integer,
16290 differing mainly in their treatment of negative numbers. All of these
16291 commands have the property that if the argument is an integer, the result
16292 is the same integer. An integer-valued floating-point argument is converted
16293 to integer form.
16294
16295 If you press @kbd{H} (@code{calc-hyperbolic}) first, the result will be
16296 expressed as an integer-valued floating-point number.
16297
16298 @cindex Integer part of a number
16299 @kindex F
16300 @pindex calc-floor
16301 @tindex floor
16302 @tindex ffloor
16303 @ignore
16304 @mindex @null
16305 @end ignore
16306 @kindex H F
16307 The @kbd{F} (@code{calc-floor}) [@code{floor} or @code{ffloor}] command
16308 truncates a real number to the next lower integer, i.e., toward minus
16309 infinity. Thus @kbd{3.6 F} produces 3, but @kbd{_3.6 F} produces
16310 @mathit{-4}.
16311
16312 @kindex I F
16313 @pindex calc-ceiling
16314 @tindex ceil
16315 @tindex fceil
16316 @ignore
16317 @mindex @null
16318 @end ignore
16319 @kindex H I F
16320 The @kbd{I F} (@code{calc-ceiling}) [@code{ceil} or @code{fceil}]
16321 command truncates toward positive infinity. Thus @kbd{3.6 I F} produces
16322 4, and @kbd{_3.6 I F} produces @mathit{-3}.
16323
16324 @kindex R
16325 @pindex calc-round
16326 @tindex round
16327 @tindex fround
16328 @ignore
16329 @mindex @null
16330 @end ignore
16331 @kindex H R
16332 The @kbd{R} (@code{calc-round}) [@code{round} or @code{fround}] command
16333 rounds to the nearest integer. When the fractional part is .5 exactly,
16334 this command rounds away from zero. (All other rounding in the
16335 Calculator uses this convention as well.) Thus @kbd{3.5 R} produces 4
16336 but @kbd{3.4 R} produces 3; @kbd{_3.5 R} produces @mathit{-4}.
16337
16338 @kindex I R
16339 @pindex calc-trunc
16340 @tindex trunc
16341 @tindex ftrunc
16342 @ignore
16343 @mindex @null
16344 @end ignore
16345 @kindex H I R
16346 The @kbd{I R} (@code{calc-trunc}) [@code{trunc} or @code{ftrunc}]
16347 command truncates toward zero. In other words, it ``chops off''
16348 everything after the decimal point. Thus @kbd{3.6 I R} produces 3 and
16349 @kbd{_3.6 I R} produces @mathit{-3}.
16350
16351 These functions may not be applied meaningfully to error forms, but they
16352 do work for intervals. As a convenience, applying @code{floor} to a
16353 modulo form floors the value part of the form. Applied to a vector,
16354 these functions operate on all elements of the vector one by one.
16355 Applied to a date form, they operate on the internal numerical
16356 representation of dates, converting a date/time form into a pure date.
16357
16358 @ignore
16359 @starindex
16360 @end ignore
16361 @tindex rounde
16362 @ignore
16363 @starindex
16364 @end ignore
16365 @tindex roundu
16366 @ignore
16367 @starindex
16368 @end ignore
16369 @tindex frounde
16370 @ignore
16371 @starindex
16372 @end ignore
16373 @tindex froundu
16374 There are two more rounding functions which can only be entered in
16375 algebraic notation. The @code{roundu} function is like @code{round}
16376 except that it rounds up, toward plus infinity, when the fractional
16377 part is .5. This distinction matters only for negative arguments.
16378 Also, @code{rounde} rounds to an even number in the case of a tie,
16379 rounding up or down as necessary. For example, @samp{rounde(3.5)} and
16380 @samp{rounde(4.5)} both return 4, but @samp{rounde(5.5)} returns 6.
16381 The advantage of round-to-even is that the net error due to rounding
16382 after a long calculation tends to cancel out to zero. An important
16383 subtle point here is that the number being fed to @code{rounde} will
16384 already have been rounded to the current precision before @code{rounde}
16385 begins. For example, @samp{rounde(2.500001)} with a current precision
16386 of 6 will incorrectly, or at least surprisingly, yield 2 because the
16387 argument will first have been rounded down to @expr{2.5} (which
16388 @code{rounde} sees as an exact tie between 2 and 3).
16389
16390 Each of these functions, when written in algebraic formulas, allows
16391 a second argument which specifies the number of digits after the
16392 decimal point to keep. For example, @samp{round(123.4567, 2)} will
16393 produce the answer 123.46, and @samp{round(123.4567, -1)} will
16394 produce 120 (i.e., the cutoff is one digit to the @emph{left} of
16395 the decimal point). A second argument of zero is equivalent to
16396 no second argument at all.
16397
16398 @cindex Fractional part of a number
16399 To compute the fractional part of a number (i.e., the amount which, when
16400 added to `@t{floor(}@var{n}@t{)}', will produce @var{n}) just take @var{n}
16401 modulo 1 using the @code{%} command.
16402
16403 Note also the @kbd{\} (integer quotient), @kbd{f I} (integer logarithm),
16404 and @kbd{f Q} (integer square root) commands, which are analogous to
16405 @kbd{/}, @kbd{B}, and @kbd{Q}, respectively, except that they take integer
16406 arguments and return the result rounded down to an integer.
16407
16408 @node Complex Number Functions, Conversions, Integer Truncation, Arithmetic
16409 @section Complex Number Functions
16410
16411 @noindent
16412 @kindex J
16413 @pindex calc-conj
16414 @tindex conj
16415 The @kbd{J} (@code{calc-conj}) [@code{conj}] command computes the
16416 complex conjugate of a number. For complex number @expr{a+bi}, the
16417 complex conjugate is @expr{a-bi}. If the argument is a real number,
16418 this command leaves it the same. If the argument is a vector or matrix,
16419 this command replaces each element by its complex conjugate.
16420
16421 @kindex G
16422 @pindex calc-argument
16423 @tindex arg
16424 The @kbd{G} (@code{calc-argument}) [@code{arg}] command computes the
16425 ``argument'' or polar angle of a complex number. For a number in polar
16426 notation, this is simply the second component of the pair
16427 @texline `@t{(}@var{r}@t{;}@math{\theta}@t{)}'.
16428 @infoline `@t{(}@var{r}@t{;}@var{theta}@t{)}'.
16429 The result is expressed according to the current angular mode and will
16430 be in the range @mathit{-180} degrees (exclusive) to @mathit{+180} degrees
16431 (inclusive), or the equivalent range in radians.
16432
16433 @pindex calc-imaginary
16434 The @code{calc-imaginary} command multiplies the number on the
16435 top of the stack by the imaginary number @expr{i = (0,1)}. This
16436 command is not normally bound to a key in Calc, but it is available
16437 on the @key{IMAG} button in Keypad mode.
16438
16439 @kindex f r
16440 @pindex calc-re
16441 @tindex re
16442 The @kbd{f r} (@code{calc-re}) [@code{re}] command replaces a complex number
16443 by its real part. This command has no effect on real numbers. (As an
16444 added convenience, @code{re} applied to a modulo form extracts
16445 the value part.)
16446
16447 @kindex f i
16448 @pindex calc-im
16449 @tindex im
16450 The @kbd{f i} (@code{calc-im}) [@code{im}] command replaces a complex number
16451 by its imaginary part; real numbers are converted to zero. With a vector
16452 or matrix argument, these functions operate element-wise.
16453
16454 @ignore
16455 @mindex v p
16456 @end ignore
16457 @kindex v p (complex)
16458 @pindex calc-pack
16459 The @kbd{v p} (@code{calc-pack}) command can pack the top two numbers on
16460 the stack into a composite object such as a complex number. With
16461 a prefix argument of @mathit{-1}, it produces a rectangular complex number;
16462 with an argument of @mathit{-2}, it produces a polar complex number.
16463 (Also, @pxref{Building Vectors}.)
16464
16465 @ignore
16466 @mindex v u
16467 @end ignore
16468 @kindex v u (complex)
16469 @pindex calc-unpack
16470 The @kbd{v u} (@code{calc-unpack}) command takes the complex number
16471 (or other composite object) on the top of the stack and unpacks it
16472 into its separate components.
16473
16474 @node Conversions, Date Arithmetic, Complex Number Functions, Arithmetic
16475 @section Conversions
16476
16477 @noindent
16478 The commands described in this section convert numbers from one form
16479 to another; they are two-key sequences beginning with the letter @kbd{c}.
16480
16481 @kindex c f
16482 @pindex calc-float
16483 @tindex pfloat
16484 The @kbd{c f} (@code{calc-float}) [@code{pfloat}] command converts the
16485 number on the top of the stack to floating-point form. For example,
16486 @expr{23} is converted to @expr{23.0}, @expr{3:2} is converted to
16487 @expr{1.5}, and @expr{2.3} is left the same. If the value is a composite
16488 object such as a complex number or vector, each of the components is
16489 converted to floating-point. If the value is a formula, all numbers
16490 in the formula are converted to floating-point. Note that depending
16491 on the current floating-point precision, conversion to floating-point
16492 format may lose information.
16493
16494 As a special exception, integers which appear as powers or subscripts
16495 are not floated by @kbd{c f}. If you really want to float a power,
16496 you can use a @kbd{j s} command to select the power followed by @kbd{c f}.
16497 Because @kbd{c f} cannot examine the formula outside of the selection,
16498 it does not notice that the thing being floated is a power.
16499 @xref{Selecting Subformulas}.
16500
16501 The normal @kbd{c f} command is ``pervasive'' in the sense that it
16502 applies to all numbers throughout the formula. The @code{pfloat}
16503 algebraic function never stays around in a formula; @samp{pfloat(a + 1)}
16504 changes to @samp{a + 1.0} as soon as it is evaluated.
16505
16506 @kindex H c f
16507 @tindex float
16508 With the Hyperbolic flag, @kbd{H c f} [@code{float}] operates
16509 only on the number or vector of numbers at the top level of its
16510 argument. Thus, @samp{float(1)} is 1.0, but @samp{float(a + 1)}
16511 is left unevaluated because its argument is not a number.
16512
16513 You should use @kbd{H c f} if you wish to guarantee that the final
16514 value, once all the variables have been assigned, is a float; you
16515 would use @kbd{c f} if you wish to do the conversion on the numbers
16516 that appear right now.
16517
16518 @kindex c F
16519 @pindex calc-fraction
16520 @tindex pfrac
16521 The @kbd{c F} (@code{calc-fraction}) [@code{pfrac}] command converts a
16522 floating-point number into a fractional approximation. By default, it
16523 produces a fraction whose decimal representation is the same as the
16524 input number, to within the current precision. You can also give a
16525 numeric prefix argument to specify a tolerance, either directly, or,
16526 if the prefix argument is zero, by using the number on top of the stack
16527 as the tolerance. If the tolerance is a positive integer, the fraction
16528 is correct to within that many significant figures. If the tolerance is
16529 a non-positive integer, it specifies how many digits fewer than the current
16530 precision to use. If the tolerance is a floating-point number, the
16531 fraction is correct to within that absolute amount.
16532
16533 @kindex H c F
16534 @tindex frac
16535 The @code{pfrac} function is pervasive, like @code{pfloat}.
16536 There is also a non-pervasive version, @kbd{H c F} [@code{frac}],
16537 which is analogous to @kbd{H c f} discussed above.
16538
16539 @kindex c d
16540 @pindex calc-to-degrees
16541 @tindex deg
16542 The @kbd{c d} (@code{calc-to-degrees}) [@code{deg}] command converts a
16543 number into degrees form. The value on the top of the stack may be an
16544 HMS form (interpreted as degrees-minutes-seconds), or a real number which
16545 will be interpreted in radians regardless of the current angular mode.
16546
16547 @kindex c r
16548 @pindex calc-to-radians
16549 @tindex rad
16550 The @kbd{c r} (@code{calc-to-radians}) [@code{rad}] command converts an
16551 HMS form or angle in degrees into an angle in radians.
16552
16553 @kindex c h
16554 @pindex calc-to-hms
16555 @tindex hms
16556 The @kbd{c h} (@code{calc-to-hms}) [@code{hms}] command converts a real
16557 number, interpreted according to the current angular mode, to an HMS
16558 form describing the same angle. In algebraic notation, the @code{hms}
16559 function also accepts three arguments: @samp{hms(@var{h}, @var{m}, @var{s})}.
16560 (The three-argument version is independent of the current angular mode.)
16561
16562 @pindex calc-from-hms
16563 The @code{calc-from-hms} command converts the HMS form on the top of the
16564 stack into a real number according to the current angular mode.
16565
16566 @kindex c p
16567 @kindex I c p
16568 @pindex calc-polar
16569 @tindex polar
16570 @tindex rect
16571 The @kbd{c p} (@code{calc-polar}) command converts the complex number on
16572 the top of the stack from polar to rectangular form, or from rectangular
16573 to polar form, whichever is appropriate. Real numbers are left the same.
16574 This command is equivalent to the @code{rect} or @code{polar}
16575 functions in algebraic formulas, depending on the direction of
16576 conversion. (It uses @code{polar}, except that if the argument is
16577 already a polar complex number, it uses @code{rect} instead. The
16578 @kbd{I c p} command always uses @code{rect}.)
16579
16580 @kindex c c
16581 @pindex calc-clean
16582 @tindex pclean
16583 The @kbd{c c} (@code{calc-clean}) [@code{pclean}] command ``cleans'' the
16584 number on the top of the stack. Floating point numbers are re-rounded
16585 according to the current precision. Polar numbers whose angular
16586 components have strayed from the @mathit{-180} to @mathit{+180} degree range
16587 are normalized. (Note that results will be undesirable if the current
16588 angular mode is different from the one under which the number was
16589 produced!) Integers and fractions are generally unaffected by this
16590 operation. Vectors and formulas are cleaned by cleaning each component
16591 number (i.e., pervasively).
16592
16593 If the simplification mode is set below the default level, it is raised
16594 to the default level for the purposes of this command. Thus, @kbd{c c}
16595 applies the default simplifications even if their automatic application
16596 is disabled. @xref{Simplification Modes}.
16597
16598 @cindex Roundoff errors, correcting
16599 A numeric prefix argument to @kbd{c c} sets the floating-point precision
16600 to that value for the duration of the command. A positive prefix (of at
16601 least 3) sets the precision to the specified value; a negative or zero
16602 prefix decreases the precision by the specified amount.
16603
16604 @kindex c 0-9
16605 @pindex calc-clean-num
16606 The keystroke sequences @kbd{c 0} through @kbd{c 9} are equivalent
16607 to @kbd{c c} with the corresponding negative prefix argument. If roundoff
16608 errors have changed 2.0 into 1.999999, typing @kbd{c 1} to clip off one
16609 decimal place often conveniently does the trick.
16610
16611 The @kbd{c c} command with a numeric prefix argument, and the @kbd{c 0}
16612 through @kbd{c 9} commands, also ``clip'' very small floating-point
16613 numbers to zero. If the exponent is less than or equal to the negative
16614 of the specified precision, the number is changed to 0.0. For example,
16615 if the current precision is 12, then @kbd{c 2} changes the vector
16616 @samp{[1e-8, 1e-9, 1e-10, 1e-11]} to @samp{[1e-8, 1e-9, 0, 0]}.
16617 Numbers this small generally arise from roundoff noise.
16618
16619 If the numbers you are using really are legitimately this small,
16620 you should avoid using the @kbd{c 0} through @kbd{c 9} commands.
16621 (The plain @kbd{c c} command rounds to the current precision but
16622 does not clip small numbers.)
16623
16624 One more property of @kbd{c 0} through @kbd{c 9}, and of @kbd{c c} with
16625 a prefix argument, is that integer-valued floats are converted to
16626 plain integers, so that @kbd{c 1} on @samp{[1., 1.5, 2., 2.5, 3.]}
16627 produces @samp{[1, 1.5, 2, 2.5, 3]}. This is not done for huge
16628 numbers (@samp{1e100} is technically an integer-valued float, but
16629 you wouldn't want it automatically converted to a 100-digit integer).
16630
16631 @kindex H c 0-9
16632 @kindex H c c
16633 @tindex clean
16634 With the Hyperbolic flag, @kbd{H c c} and @kbd{H c 0} through @kbd{H c 9}
16635 operate non-pervasively [@code{clean}].
16636
16637 @node Date Arithmetic, Financial Functions, Conversions, Arithmetic
16638 @section Date Arithmetic
16639
16640 @noindent
16641 @cindex Date arithmetic, additional functions
16642 The commands described in this section perform various conversions
16643 and calculations involving date forms (@pxref{Date Forms}). They
16644 use the @kbd{t} (for time/date) prefix key followed by shifted
16645 letters.
16646
16647 The simplest date arithmetic is done using the regular @kbd{+} and @kbd{-}
16648 commands. In particular, adding a number to a date form advances the
16649 date form by a certain number of days; adding an HMS form to a date
16650 form advances the date by a certain amount of time; and subtracting two
16651 date forms produces a difference measured in days. The commands
16652 described here provide additional, more specialized operations on dates.
16653
16654 Many of these commands accept a numeric prefix argument; if you give
16655 plain @kbd{C-u} as the prefix, these commands will instead take the
16656 additional argument from the top of the stack.
16657
16658 @menu
16659 * Date Conversions::
16660 * Date Functions::
16661 * Time Zones::
16662 * Business Days::
16663 @end menu
16664
16665 @node Date Conversions, Date Functions, Date Arithmetic, Date Arithmetic
16666 @subsection Date Conversions
16667
16668 @noindent
16669 @kindex t D
16670 @pindex calc-date
16671 @tindex date
16672 The @kbd{t D} (@code{calc-date}) [@code{date}] command converts a
16673 date form into a number, measured in days since Jan 1, 1 AD. The
16674 result will be an integer if @var{date} is a pure date form, or a
16675 fraction or float if @var{date} is a date/time form. Or, if its
16676 argument is a number, it converts this number into a date form.
16677
16678 With a numeric prefix argument, @kbd{t D} takes that many objects
16679 (up to six) from the top of the stack and interprets them in one
16680 of the following ways:
16681
16682 The @samp{date(@var{year}, @var{month}, @var{day})} function
16683 builds a pure date form out of the specified year, month, and
16684 day, which must all be integers. @var{Year} is a year number,
16685 such as 1991 (@emph{not} the same as 91!). @var{Month} must be
16686 an integer in the range 1 to 12; @var{day} must be in the range
16687 1 to 31. If the specified month has fewer than 31 days and
16688 @var{day} is too large, the equivalent day in the following
16689 month will be used.
16690
16691 The @samp{date(@var{month}, @var{day})} function builds a
16692 pure date form using the current year, as determined by the
16693 real-time clock.
16694
16695 The @samp{date(@var{year}, @var{month}, @var{day}, @var{hms})}
16696 function builds a date/time form using an @var{hms} form.
16697
16698 The @samp{date(@var{year}, @var{month}, @var{day}, @var{hour},
16699 @var{minute}, @var{second})} function builds a date/time form.
16700 @var{hour} should be an integer in the range 0 to 23;
16701 @var{minute} should be an integer in the range 0 to 59;
16702 @var{second} should be any real number in the range @samp{[0 .. 60)}.
16703 The last two arguments default to zero if omitted.
16704
16705 @kindex t J
16706 @pindex calc-julian
16707 @tindex julian
16708 @cindex Julian day counts, conversions
16709 The @kbd{t J} (@code{calc-julian}) [@code{julian}] command converts
16710 a date form into a Julian day count, which is the number of days
16711 since noon on Jan 1, 4713 BC. A pure date is converted to an integer
16712 Julian count representing noon of that day. A date/time form is
16713 converted to an exact floating-point Julian count, adjusted to
16714 interpret the date form in the current time zone but the Julian
16715 day count in Greenwich Mean Time. A numeric prefix argument allows
16716 you to specify the time zone; @pxref{Time Zones}. Use a prefix of
16717 zero to suppress the time zone adjustment. Note that pure date forms
16718 are never time-zone adjusted.
16719
16720 This command can also do the opposite conversion, from a Julian day
16721 count (either an integer day, or a floating-point day and time in
16722 the GMT zone), into a pure date form or a date/time form in the
16723 current or specified time zone.
16724
16725 @kindex t U
16726 @pindex calc-unix-time
16727 @tindex unixtime
16728 @cindex Unix time format, conversions
16729 The @kbd{t U} (@code{calc-unix-time}) [@code{unixtime}] command
16730 converts a date form into a Unix time value, which is the number of
16731 seconds since midnight on Jan 1, 1970, or vice-versa. The numeric result
16732 will be an integer if the current precision is 12 or less; for higher
16733 precisions, the result may be a float with (@var{precision}@minus{}12)
16734 digits after the decimal. Just as for @kbd{t J}, the numeric time
16735 is interpreted in the GMT time zone and the date form is interpreted
16736 in the current or specified zone. Some systems use Unix-like
16737 numbering but with the local time zone; give a prefix of zero to
16738 suppress the adjustment if so.
16739
16740 @kindex t C
16741 @pindex calc-convert-time-zones
16742 @tindex tzconv
16743 @cindex Time Zones, converting between
16744 The @kbd{t C} (@code{calc-convert-time-zones}) [@code{tzconv}]
16745 command converts a date form from one time zone to another. You
16746 are prompted for each time zone name in turn; you can answer with
16747 any suitable Calc time zone expression (@pxref{Time Zones}).
16748 If you answer either prompt with a blank line, the local time
16749 zone is used for that prompt. You can also answer the first
16750 prompt with @kbd{$} to take the two time zone names from the
16751 stack (and the date to be converted from the third stack level).
16752
16753 @node Date Functions, Business Days, Date Conversions, Date Arithmetic
16754 @subsection Date Functions
16755
16756 @noindent
16757 @kindex t N
16758 @pindex calc-now
16759 @tindex now
16760 The @kbd{t N} (@code{calc-now}) [@code{now}] command pushes the
16761 current date and time on the stack as a date form. The time is
16762 reported in terms of the specified time zone; with no numeric prefix
16763 argument, @kbd{t N} reports for the current time zone.
16764
16765 @kindex t P
16766 @pindex calc-date-part
16767 The @kbd{t P} (@code{calc-date-part}) command extracts one part
16768 of a date form. The prefix argument specifies the part; with no
16769 argument, this command prompts for a part code from 1 to 9.
16770 The various part codes are described in the following paragraphs.
16771
16772 @tindex year
16773 The @kbd{M-1 t P} [@code{year}] function extracts the year number
16774 from a date form as an integer, e.g., 1991. This and the
16775 following functions will also accept a real number for an
16776 argument, which is interpreted as a standard Calc day number.
16777 Note that this function will never return zero, since the year
16778 1 BC immediately precedes the year 1 AD.
16779
16780 @tindex month
16781 The @kbd{M-2 t P} [@code{month}] function extracts the month number
16782 from a date form as an integer in the range 1 to 12.
16783
16784 @tindex day
16785 The @kbd{M-3 t P} [@code{day}] function extracts the day number
16786 from a date form as an integer in the range 1 to 31.
16787
16788 @tindex hour
16789 The @kbd{M-4 t P} [@code{hour}] function extracts the hour from
16790 a date form as an integer in the range 0 (midnight) to 23. Note
16791 that 24-hour time is always used. This returns zero for a pure
16792 date form. This function (and the following two) also accept
16793 HMS forms as input.
16794
16795 @tindex minute
16796 The @kbd{M-5 t P} [@code{minute}] function extracts the minute
16797 from a date form as an integer in the range 0 to 59.
16798
16799 @tindex second
16800 The @kbd{M-6 t P} [@code{second}] function extracts the second
16801 from a date form. If the current precision is 12 or less,
16802 the result is an integer in the range 0 to 59. For higher
16803 precisions, the result may instead be a floating-point number.
16804
16805 @tindex weekday
16806 The @kbd{M-7 t P} [@code{weekday}] function extracts the weekday
16807 number from a date form as an integer in the range 0 (Sunday)
16808 to 6 (Saturday).
16809
16810 @tindex yearday
16811 The @kbd{M-8 t P} [@code{yearday}] function extracts the day-of-year
16812 number from a date form as an integer in the range 1 (January 1)
16813 to 366 (December 31 of a leap year).
16814
16815 @tindex time
16816 The @kbd{M-9 t P} [@code{time}] function extracts the time portion
16817 of a date form as an HMS form. This returns @samp{0@@ 0' 0"}
16818 for a pure date form.
16819
16820 @kindex t M
16821 @pindex calc-new-month
16822 @tindex newmonth
16823 The @kbd{t M} (@code{calc-new-month}) [@code{newmonth}] command
16824 computes a new date form that represents the first day of the month
16825 specified by the input date. The result is always a pure date
16826 form; only the year and month numbers of the input are retained.
16827 With a numeric prefix argument @var{n} in the range from 1 to 31,
16828 @kbd{t M} computes the @var{n}th day of the month. (If @var{n}
16829 is greater than the actual number of days in the month, or if
16830 @var{n} is zero, the last day of the month is used.)
16831
16832 @kindex t Y
16833 @pindex calc-new-year
16834 @tindex newyear
16835 The @kbd{t Y} (@code{calc-new-year}) [@code{newyear}] command
16836 computes a new pure date form that represents the first day of
16837 the year specified by the input. The month, day, and time
16838 of the input date form are lost. With a numeric prefix argument
16839 @var{n} in the range from 1 to 366, @kbd{t Y} computes the
16840 @var{n}th day of the year (366 is treated as 365 in non-leap
16841 years). A prefix argument of 0 computes the last day of the
16842 year (December 31). A negative prefix argument from @mathit{-1} to
16843 @mathit{-12} computes the first day of the @var{n}th month of the year.
16844
16845 @kindex t W
16846 @pindex calc-new-week
16847 @tindex newweek
16848 The @kbd{t W} (@code{calc-new-week}) [@code{newweek}] command
16849 computes a new pure date form that represents the Sunday on or before
16850 the input date. With a numeric prefix argument, it can be made to
16851 use any day of the week as the starting day; the argument must be in
16852 the range from 0 (Sunday) to 6 (Saturday). This function always
16853 subtracts between 0 and 6 days from the input date.
16854
16855 Here's an example use of @code{newweek}: Find the date of the next
16856 Wednesday after a given date. Using @kbd{M-3 t W} or @samp{newweek(d, 3)}
16857 will give you the @emph{preceding} Wednesday, so @samp{newweek(d+7, 3)}
16858 will give you the following Wednesday. A further look at the definition
16859 of @code{newweek} shows that if the input date is itself a Wednesday,
16860 this formula will return the Wednesday one week in the future. An
16861 exercise for the reader is to modify this formula to yield the same day
16862 if the input is already a Wednesday. Another interesting exercise is
16863 to preserve the time-of-day portion of the input (@code{newweek} resets
16864 the time to midnight; hint:@: how can @code{newweek} be defined in terms
16865 of the @code{weekday} function?).
16866
16867 @ignore
16868 @starindex
16869 @end ignore
16870 @tindex pwday
16871 The @samp{pwday(@var{date})} function (not on any key) computes the
16872 day-of-month number of the Sunday on or before @var{date}. With
16873 two arguments, @samp{pwday(@var{date}, @var{day})} computes the day
16874 number of the Sunday on or before day number @var{day} of the month
16875 specified by @var{date}. The @var{day} must be in the range from
16876 7 to 31; if the day number is greater than the actual number of days
16877 in the month, the true number of days is used instead. Thus
16878 @samp{pwday(@var{date}, 7)} finds the first Sunday of the month, and
16879 @samp{pwday(@var{date}, 31)} finds the last Sunday of the month.
16880 With a third @var{weekday} argument, @code{pwday} can be made to look
16881 for any day of the week instead of Sunday.
16882
16883 @kindex t I
16884 @pindex calc-inc-month
16885 @tindex incmonth
16886 The @kbd{t I} (@code{calc-inc-month}) [@code{incmonth}] command
16887 increases a date form by one month, or by an arbitrary number of
16888 months specified by a numeric prefix argument. The time portion,
16889 if any, of the date form stays the same. The day also stays the
16890 same, except that if the new month has fewer days the day
16891 number may be reduced to lie in the valid range. For example,
16892 @samp{incmonth(<Jan 31, 1991>)} produces @samp{<Feb 28, 1991>}.
16893 Because of this, @kbd{t I t I} and @kbd{M-2 t I} do not always give
16894 the same results (@samp{<Mar 28, 1991>} versus @samp{<Mar 31, 1991>}
16895 in this case).
16896
16897 @ignore
16898 @starindex
16899 @end ignore
16900 @tindex incyear
16901 The @samp{incyear(@var{date}, @var{step})} function increases
16902 a date form by the specified number of years, which may be
16903 any positive or negative integer. Note that @samp{incyear(d, n)}
16904 is equivalent to @w{@samp{incmonth(d, 12*n)}}, but these do not have
16905 simple equivalents in terms of day arithmetic because
16906 months and years have varying lengths. If the @var{step}
16907 argument is omitted, 1 year is assumed. There is no keyboard
16908 command for this function; use @kbd{C-u 12 t I} instead.
16909
16910 There is no @code{newday} function at all because @kbd{F} [@code{floor}]
16911 serves this purpose. Similarly, instead of @code{incday} and
16912 @code{incweek} simply use @expr{d + n} or @expr{d + 7 n}.
16913
16914 @xref{Basic Arithmetic}, for the @kbd{f ]} [@code{incr}] command
16915 which can adjust a date/time form by a certain number of seconds.
16916
16917 @node Business Days, Time Zones, Date Functions, Date Arithmetic
16918 @subsection Business Days
16919
16920 @noindent
16921 Often time is measured in ``business days'' or ``working days,''
16922 where weekends and holidays are skipped. Calc's normal date
16923 arithmetic functions use calendar days, so that subtracting two
16924 consecutive Mondays will yield a difference of 7 days. By contrast,
16925 subtracting two consecutive Mondays would yield 5 business days
16926 (assuming two-day weekends and the absence of holidays).
16927
16928 @kindex t +
16929 @kindex t -
16930 @tindex badd
16931 @tindex bsub
16932 @pindex calc-business-days-plus
16933 @pindex calc-business-days-minus
16934 The @kbd{t +} (@code{calc-business-days-plus}) [@code{badd}]
16935 and @kbd{t -} (@code{calc-business-days-minus}) [@code{bsub}]
16936 commands perform arithmetic using business days. For @kbd{t +},
16937 one argument must be a date form and the other must be a real
16938 number (positive or negative). If the number is not an integer,
16939 then a certain amount of time is added as well as a number of
16940 days; for example, adding 0.5 business days to a time in Friday
16941 evening will produce a time in Monday morning. It is also
16942 possible to add an HMS form; adding @samp{12@@ 0' 0"} also adds
16943 half a business day. For @kbd{t -}, the arguments are either a
16944 date form and a number or HMS form, or two date forms, in which
16945 case the result is the number of business days between the two
16946 dates.
16947
16948 @cindex @code{Holidays} variable
16949 @vindex Holidays
16950 By default, Calc considers any day that is not a Saturday or
16951 Sunday to be a business day. You can define any number of
16952 additional holidays by editing the variable @code{Holidays}.
16953 (There is an @w{@kbd{s H}} convenience command for editing this
16954 variable.) Initially, @code{Holidays} contains the vector
16955 @samp{[sat, sun]}. Entries in the @code{Holidays} vector may
16956 be any of the following kinds of objects:
16957
16958 @itemize @bullet
16959 @item
16960 Date forms (pure dates, not date/time forms). These specify
16961 particular days which are to be treated as holidays.
16962
16963 @item
16964 Intervals of date forms. These specify a range of days, all of
16965 which are holidays (e.g., Christmas week). @xref{Interval Forms}.
16966
16967 @item
16968 Nested vectors of date forms. Each date form in the vector is
16969 considered to be a holiday.
16970
16971 @item
16972 Any Calc formula which evaluates to one of the above three things.
16973 If the formula involves the variable @expr{y}, it stands for a
16974 yearly repeating holiday; @expr{y} will take on various year
16975 numbers like 1992. For example, @samp{date(y, 12, 25)} specifies
16976 Christmas day, and @samp{newweek(date(y, 11, 7), 4) + 21} specifies
16977 Thanksgiving (which is held on the fourth Thursday of November).
16978 If the formula involves the variable @expr{m}, that variable
16979 takes on month numbers from 1 to 12: @samp{date(y, m, 15)} is
16980 a holiday that takes place on the 15th of every month.
16981
16982 @item
16983 A weekday name, such as @code{sat} or @code{sun}. This is really
16984 a variable whose name is a three-letter, lower-case day name.
16985
16986 @item
16987 An interval of year numbers (integers). This specifies the span of
16988 years over which this holiday list is to be considered valid. Any
16989 business-day arithmetic that goes outside this range will result
16990 in an error message. Use this if you are including an explicit
16991 list of holidays, rather than a formula to generate them, and you
16992 want to make sure you don't accidentally go beyond the last point
16993 where the holidays you entered are complete. If there is no
16994 limiting interval in the @code{Holidays} vector, the default
16995 @samp{[1 .. 2737]} is used. (This is the absolute range of years
16996 for which Calc's business-day algorithms will operate.)
16997
16998 @item
16999 An interval of HMS forms. This specifies the span of hours that
17000 are to be considered one business day. For example, if this
17001 range is @samp{[9@@ 0' 0" .. 17@@ 0' 0"]} (i.e., 9am to 5pm), then
17002 the business day is only eight hours long, so that @kbd{1.5 t +}
17003 on @samp{<4:00pm Fri Dec 13, 1991>} will add one business day and
17004 four business hours to produce @samp{<12:00pm Tue Dec 17, 1991>}.
17005 Likewise, @kbd{t -} will now express differences in time as
17006 fractions of an eight-hour day. Times before 9am will be treated
17007 as 9am by business date arithmetic, and times at or after 5pm will
17008 be treated as 4:59:59pm. If there is no HMS interval in @code{Holidays},
17009 the full 24-hour day @samp{[0@ 0' 0" .. 24@ 0' 0"]} is assumed.
17010 (Regardless of the type of bounds you specify, the interval is
17011 treated as inclusive on the low end and exclusive on the high end,
17012 so that the work day goes from 9am up to, but not including, 5pm.)
17013 @end itemize
17014
17015 If the @code{Holidays} vector is empty, then @kbd{t +} and
17016 @kbd{t -} will act just like @kbd{+} and @kbd{-} because there will
17017 then be no difference between business days and calendar days.
17018
17019 Calc expands the intervals and formulas you give into a complete
17020 list of holidays for internal use. This is done mainly to make
17021 sure it can detect multiple holidays. (For example,
17022 @samp{<Jan 1, 1989>} is both New Year's Day and a Sunday, but
17023 Calc's algorithms take care to count it only once when figuring
17024 the number of holidays between two dates.)
17025
17026 Since the complete list of holidays for all the years from 1 to
17027 2737 would be huge, Calc actually computes only the part of the
17028 list between the smallest and largest years that have been involved
17029 in business-day calculations so far. Normally, you won't have to
17030 worry about this. Keep in mind, however, that if you do one
17031 calculation for 1992, and another for 1792, even if both involve
17032 only a small range of years, Calc will still work out all the
17033 holidays that fall in that 200-year span.
17034
17035 If you add a (positive) number of days to a date form that falls on a
17036 weekend or holiday, the date form is treated as if it were the most
17037 recent business day. (Thus adding one business day to a Friday,
17038 Saturday, or Sunday will all yield the following Monday.) If you
17039 subtract a number of days from a weekend or holiday, the date is
17040 effectively on the following business day. (So subtracting one business
17041 day from Saturday, Sunday, or Monday yields the preceding Friday.) The
17042 difference between two dates one or both of which fall on holidays
17043 equals the number of actual business days between them. These
17044 conventions are consistent in the sense that, if you add @var{n}
17045 business days to any date, the difference between the result and the
17046 original date will come out to @var{n} business days. (It can't be
17047 completely consistent though; a subtraction followed by an addition
17048 might come out a bit differently, since @kbd{t +} is incapable of
17049 producing a date that falls on a weekend or holiday.)
17050
17051 @ignore
17052 @starindex
17053 @end ignore
17054 @tindex holiday
17055 There is a @code{holiday} function, not on any keys, that takes
17056 any date form and returns 1 if that date falls on a weekend or
17057 holiday, as defined in @code{Holidays}, or 0 if the date is a
17058 business day.
17059
17060 @node Time Zones, , Business Days, Date Arithmetic
17061 @subsection Time Zones
17062
17063 @noindent
17064 @cindex Time zones
17065 @cindex Daylight savings time
17066 Time zones and daylight savings time are a complicated business.
17067 The conversions to and from Julian and Unix-style dates automatically
17068 compute the correct time zone and daylight savings adjustment to use,
17069 provided they can figure out this information. This section describes
17070 Calc's time zone adjustment algorithm in detail, in case you want to
17071 do conversions in different time zones or in case Calc's algorithms
17072 can't determine the right correction to use.
17073
17074 Adjustments for time zones and daylight savings time are done by
17075 @kbd{t U}, @kbd{t J}, @kbd{t N}, and @kbd{t C}, but not by any other
17076 commands. In particular, @samp{<may 1 1991> - <apr 1 1991>} evaluates
17077 to exactly 30 days even though there is a daylight-savings
17078 transition in between. This is also true for Julian pure dates:
17079 @samp{julian(<may 1 1991>) - julian(<apr 1 1991>)}. But Julian
17080 and Unix date/times will adjust for daylight savings time:
17081 @samp{julian(<12am may 1 1991>) - julian(<12am apr 1 1991>)}
17082 evaluates to @samp{29.95834} (that's 29 days and 23 hours)
17083 because one hour was lost when daylight savings commenced on
17084 April 7, 1991.
17085
17086 In brief, the idiom @samp{julian(@var{date1}) - julian(@var{date2})}
17087 computes the actual number of 24-hour periods between two dates, whereas
17088 @samp{@var{date1} - @var{date2}} computes the number of calendar
17089 days between two dates without taking daylight savings into account.
17090
17091 @pindex calc-time-zone
17092 @ignore
17093 @starindex
17094 @end ignore
17095 @tindex tzone
17096 The @code{calc-time-zone} [@code{tzone}] command converts the time
17097 zone specified by its numeric prefix argument into a number of
17098 seconds difference from Greenwich mean time (GMT). If the argument
17099 is a number, the result is simply that value multiplied by 3600.
17100 Typical arguments for North America are 5 (Eastern) or 8 (Pacific). If
17101 Daylight Savings time is in effect, one hour should be subtracted from
17102 the normal difference.
17103
17104 If you give a prefix of plain @kbd{C-u}, @code{calc-time-zone} (like other
17105 date arithmetic commands that include a time zone argument) takes the
17106 zone argument from the top of the stack. (In the case of @kbd{t J}
17107 and @kbd{t U}, the normal argument is then taken from the second-to-top
17108 stack position.) This allows you to give a non-integer time zone
17109 adjustment. The time-zone argument can also be an HMS form, or
17110 it can be a variable which is a time zone name in upper- or lower-case.
17111 For example @samp{tzone(PST) = tzone(8)} and @samp{tzone(pdt) = tzone(7)}
17112 (for Pacific standard and daylight savings times, respectively).
17113
17114 North American and European time zone names are defined as follows;
17115 note that for each time zone there is one name for standard time,
17116 another for daylight savings time, and a third for ``generalized'' time
17117 in which the daylight savings adjustment is computed from context.
17118
17119 @smallexample
17120 @group
17121 YST PST MST CST EST AST NST GMT WET MET MEZ
17122 9 8 7 6 5 4 3.5 0 -1 -2 -2
17123
17124 YDT PDT MDT CDT EDT ADT NDT BST WETDST METDST MESZ
17125 8 7 6 5 4 3 2.5 -1 -2 -3 -3
17126
17127 YGT PGT MGT CGT EGT AGT NGT BGT WEGT MEGT MEGZ
17128 9/8 8/7 7/6 6/5 5/4 4/3 3.5/2.5 0/-1 -1/-2 -2/-3 -2/-3
17129 @end group
17130 @end smallexample
17131
17132 @vindex math-tzone-names
17133 To define time zone names that do not appear in the above table,
17134 you must modify the Lisp variable @code{math-tzone-names}. This
17135 is a list of lists describing the different time zone names; its
17136 structure is best explained by an example. The three entries for
17137 Pacific Time look like this:
17138
17139 @smallexample
17140 @group
17141 ( ( "PST" 8 0 ) ; Name as an upper-case string, then standard
17142 ( "PDT" 8 -1 ) ; adjustment, then daylight savings adjustment.
17143 ( "PGT" 8 "PST" "PDT" ) ) ; Generalized time zone.
17144 @end group
17145 @end smallexample
17146
17147 @cindex @code{TimeZone} variable
17148 @vindex TimeZone
17149 With no arguments, @code{calc-time-zone} or @samp{tzone()} obtains an
17150 argument from the Calc variable @code{TimeZone} if a value has been
17151 stored for that variable. If not, Calc runs the Unix @samp{date}
17152 command and looks for one of the above time zone names in the output;
17153 if this does not succeed, @samp{tzone()} leaves itself unevaluated.
17154 The time zone name in the @samp{date} output may be followed by a signed
17155 adjustment, e.g., @samp{GMT+5} or @samp{GMT+0500} which specifies a
17156 number of hours and minutes to be added to the base time zone.
17157 Calc stores the time zone it finds into @code{TimeZone} to speed
17158 later calls to @samp{tzone()}.
17159
17160 The special time zone name @code{local} is equivalent to no argument,
17161 i.e., it uses the local time zone as obtained from the @code{date}
17162 command.
17163
17164 If the time zone name found is one of the standard or daylight
17165 savings zone names from the above table, and Calc's internal
17166 daylight savings algorithm says that time and zone are consistent
17167 (e.g., @code{PDT} accompanies a date that Calc's algorithm would also
17168 consider to be daylight savings, or @code{PST} accompanies a date
17169 that Calc would consider to be standard time), then Calc substitutes
17170 the corresponding generalized time zone (like @code{PGT}).
17171
17172 If your system does not have a suitable @samp{date} command, you
17173 may wish to put a @samp{(setq var-TimeZone ...)} in your Emacs
17174 initialization file to set the time zone. (Since you are interacting
17175 with the variable @code{TimeZone} directly from Emacs Lisp, the
17176 @code{var-} prefix needs to be present.) The easiest way to do
17177 this is to edit the @code{TimeZone} variable using Calc's @kbd{s T}
17178 command, then use the @kbd{s p} (@code{calc-permanent-variable})
17179 command to save the value of @code{TimeZone} permanently.
17180
17181 The @kbd{t J} and @code{t U} commands with no numeric prefix
17182 arguments do the same thing as @samp{tzone()}. If the current
17183 time zone is a generalized time zone, e.g., @code{EGT}, Calc
17184 examines the date being converted to tell whether to use standard
17185 or daylight savings time. But if the current time zone is explicit,
17186 e.g., @code{EST} or @code{EDT}, then that adjustment is used exactly
17187 and Calc's daylight savings algorithm is not consulted.
17188
17189 Some places don't follow the usual rules for daylight savings time.
17190 The state of Arizona, for example, does not observe daylight savings
17191 time. If you run Calc during the winter season in Arizona, the
17192 Unix @code{date} command will report @code{MST} time zone, which
17193 Calc will change to @code{MGT}. If you then convert a time that
17194 lies in the summer months, Calc will apply an incorrect daylight
17195 savings time adjustment. To avoid this, set your @code{TimeZone}
17196 variable explicitly to @code{MST} to force the use of standard,
17197 non-daylight-savings time.
17198
17199 @vindex math-daylight-savings-hook
17200 @findex math-std-daylight-savings
17201 By default Calc always considers daylight savings time to begin at
17202 2 a.m.@: on the first Sunday of April, and to end at 2 a.m.@: on the
17203 last Sunday of October. This is the rule that has been in effect
17204 in North America since 1987. If you are in a country that uses
17205 different rules for computing daylight savings time, you have two
17206 choices: Write your own daylight savings hook, or control time
17207 zones explicitly by setting the @code{TimeZone} variable and/or
17208 always giving a time-zone argument for the conversion functions.
17209
17210 The Lisp variable @code{math-daylight-savings-hook} holds the
17211 name of a function that is used to compute the daylight savings
17212 adjustment for a given date. The default is
17213 @code{math-std-daylight-savings}, which computes an adjustment
17214 (either 0 or @mathit{-1}) using the North American rules given above.
17215
17216 The daylight savings hook function is called with four arguments:
17217 The date, as a floating-point number in standard Calc format;
17218 a six-element list of the date decomposed into year, month, day,
17219 hour, minute, and second, respectively; a string which contains
17220 the generalized time zone name in upper-case, e.g., @code{"WEGT"};
17221 and a special adjustment to be applied to the hour value when
17222 converting into a generalized time zone (see below).
17223
17224 @findex math-prev-weekday-in-month
17225 The Lisp function @code{math-prev-weekday-in-month} is useful for
17226 daylight savings computations. This is an internal version of
17227 the user-level @code{pwday} function described in the previous
17228 section. It takes four arguments: The floating-point date value,
17229 the corresponding six-element date list, the day-of-month number,
17230 and the weekday number (0-6).
17231
17232 The default daylight savings hook ignores the time zone name, but a
17233 more sophisticated hook could use different algorithms for different
17234 time zones. It would also be possible to use different algorithms
17235 depending on the year number, but the default hook always uses the
17236 algorithm for 1987 and later. Here is a listing of the default
17237 daylight savings hook:
17238
17239 @smallexample
17240 (defun math-std-daylight-savings (date dt zone bump)
17241 (cond ((< (nth 1 dt) 4) 0)
17242 ((= (nth 1 dt) 4)
17243 (let ((sunday (math-prev-weekday-in-month date dt 7 0)))
17244 (cond ((< (nth 2 dt) sunday) 0)
17245 ((= (nth 2 dt) sunday)
17246 (if (>= (nth 3 dt) (+ 3 bump)) -1 0))
17247 (t -1))))
17248 ((< (nth 1 dt) 10) -1)
17249 ((= (nth 1 dt) 10)
17250 (let ((sunday (math-prev-weekday-in-month date dt 31 0)))
17251 (cond ((< (nth 2 dt) sunday) -1)
17252 ((= (nth 2 dt) sunday)
17253 (if (>= (nth 3 dt) (+ 2 bump)) 0 -1))
17254 (t 0))))
17255 (t 0))
17256 )
17257 @end smallexample
17258
17259 @noindent
17260 The @code{bump} parameter is equal to zero when Calc is converting
17261 from a date form in a generalized time zone into a GMT date value.
17262 It is @mathit{-1} when Calc is converting in the other direction. The
17263 adjustments shown above ensure that the conversion behaves correctly
17264 and reasonably around the 2 a.m.@: transition in each direction.
17265
17266 There is a ``missing'' hour between 2 a.m.@: and 3 a.m.@: at the
17267 beginning of daylight savings time; converting a date/time form that
17268 falls in this hour results in a time value for the following hour,
17269 from 3 a.m.@: to 4 a.m. At the end of daylight savings time, the
17270 hour from 1 a.m.@: to 2 a.m.@: repeats itself; converting a date/time
17271 form that falls in in this hour results in a time value for the first
17272 manifestation of that time (@emph{not} the one that occurs one hour later).
17273
17274 If @code{math-daylight-savings-hook} is @code{nil}, then the
17275 daylight savings adjustment is always taken to be zero.
17276
17277 In algebraic formulas, @samp{tzone(@var{zone}, @var{date})}
17278 computes the time zone adjustment for a given zone name at a
17279 given date. The @var{date} is ignored unless @var{zone} is a
17280 generalized time zone. If @var{date} is a date form, the
17281 daylight savings computation is applied to it as it appears.
17282 If @var{date} is a numeric date value, it is adjusted for the
17283 daylight-savings version of @var{zone} before being given to
17284 the daylight savings hook. This odd-sounding rule ensures
17285 that the daylight-savings computation is always done in
17286 local time, not in the GMT time that a numeric @var{date}
17287 is typically represented in.
17288
17289 @ignore
17290 @starindex
17291 @end ignore
17292 @tindex dsadj
17293 The @samp{dsadj(@var{date}, @var{zone})} function computes the
17294 daylight savings adjustment that is appropriate for @var{date} in
17295 time zone @var{zone}. If @var{zone} is explicitly in or not in
17296 daylight savings time (e.g., @code{PDT} or @code{PST}) the
17297 @var{date} is ignored. If @var{zone} is a generalized time zone,
17298 the algorithms described above are used. If @var{zone} is omitted,
17299 the computation is done for the current time zone.
17300
17301 @xref{Reporting Bugs}, for the address of Calc's author, if you
17302 should wish to contribute your improved versions of
17303 @code{math-tzone-names} and @code{math-daylight-savings-hook}
17304 to the Calc distribution.
17305
17306 @node Financial Functions, Binary Functions, Date Arithmetic, Arithmetic
17307 @section Financial Functions
17308
17309 @noindent
17310 Calc's financial or business functions use the @kbd{b} prefix
17311 key followed by a shifted letter. (The @kbd{b} prefix followed by
17312 a lower-case letter is used for operations on binary numbers.)
17313
17314 Note that the rate and the number of intervals given to these
17315 functions must be on the same time scale, e.g., both months or
17316 both years. Mixing an annual interest rate with a time expressed
17317 in months will give you very wrong answers!
17318
17319 It is wise to compute these functions to a higher precision than
17320 you really need, just to make sure your answer is correct to the
17321 last penny; also, you may wish to check the definitions at the end
17322 of this section to make sure the functions have the meaning you expect.
17323
17324 @menu
17325 * Percentages::
17326 * Future Value::
17327 * Present Value::
17328 * Related Financial Functions::
17329 * Depreciation Functions::
17330 * Definitions of Financial Functions::
17331 @end menu
17332
17333 @node Percentages, Future Value, Financial Functions, Financial Functions
17334 @subsection Percentages
17335
17336 @kindex M-%
17337 @pindex calc-percent
17338 @tindex %
17339 @tindex percent
17340 The @kbd{M-%} (@code{calc-percent}) command takes a percentage value,
17341 say 5.4, and converts it to an equivalent actual number. For example,
17342 @kbd{5.4 M-%} enters 0.054 on the stack. (That's the @key{META} or
17343 @key{ESC} key combined with @kbd{%}.)
17344
17345 Actually, @kbd{M-%} creates a formula of the form @samp{5.4%}.
17346 You can enter @samp{5.4%} yourself during algebraic entry. The
17347 @samp{%} operator simply means, ``the preceding value divided by
17348 100.'' The @samp{%} operator has very high precedence, so that
17349 @samp{1+8%} is interpreted as @samp{1+(8%)}, not as @samp{(1+8)%}.
17350 (The @samp{%} operator is just a postfix notation for the
17351 @code{percent} function, just like @samp{20!} is the notation for
17352 @samp{fact(20)}, or twenty-factorial.)
17353
17354 The formula @samp{5.4%} would normally evaluate immediately to
17355 0.054, but the @kbd{M-%} command suppresses evaluation as it puts
17356 the formula onto the stack. However, the next Calc command that
17357 uses the formula @samp{5.4%} will evaluate it as its first step.
17358 The net effect is that you get to look at @samp{5.4%} on the stack,
17359 but Calc commands see it as @samp{0.054}, which is what they expect.
17360
17361 In particular, @samp{5.4%} and @samp{0.054} are suitable values
17362 for the @var{rate} arguments of the various financial functions,
17363 but the number @samp{5.4} is probably @emph{not} suitable---it
17364 represents a rate of 540 percent!
17365
17366 The key sequence @kbd{M-% *} effectively means ``percent-of.''
17367 For example, @kbd{68 @key{RET} 25 M-% *} computes 17, which is 25% of
17368 68 (and also 68% of 25, which comes out to the same thing).
17369
17370 @kindex c %
17371 @pindex calc-convert-percent
17372 The @kbd{c %} (@code{calc-convert-percent}) command converts the
17373 value on the top of the stack from numeric to percentage form.
17374 For example, if 0.08 is on the stack, @kbd{c %} converts it to
17375 @samp{8%}. The quantity is the same, it's just represented
17376 differently. (Contrast this with @kbd{M-%}, which would convert
17377 this number to @samp{0.08%}.) The @kbd{=} key is a convenient way
17378 to convert a formula like @samp{8%} back to numeric form, 0.08.
17379
17380 To compute what percentage one quantity is of another quantity,
17381 use @kbd{/ c %}. For example, @w{@kbd{17 @key{RET} 68 / c %}} displays
17382 @samp{25%}.
17383
17384 @kindex b %
17385 @pindex calc-percent-change
17386 @tindex relch
17387 The @kbd{b %} (@code{calc-percent-change}) [@code{relch}] command
17388 calculates the percentage change from one number to another.
17389 For example, @kbd{40 @key{RET} 50 b %} produces the answer @samp{25%},
17390 since 50 is 25% larger than 40. A negative result represents a
17391 decrease: @kbd{50 @key{RET} 40 b %} produces @samp{-20%}, since 40 is
17392 20% smaller than 50. (The answers are different in magnitude
17393 because, in the first case, we're increasing by 25% of 40, but
17394 in the second case, we're decreasing by 20% of 50.) The effect
17395 of @kbd{40 @key{RET} 50 b %} is to compute @expr{(50-40)/40}, converting
17396 the answer to percentage form as if by @kbd{c %}.
17397
17398 @node Future Value, Present Value, Percentages, Financial Functions
17399 @subsection Future Value
17400
17401 @noindent
17402 @kindex b F
17403 @pindex calc-fin-fv
17404 @tindex fv
17405 The @kbd{b F} (@code{calc-fin-fv}) [@code{fv}] command computes
17406 the future value of an investment. It takes three arguments
17407 from the stack: @samp{fv(@var{rate}, @var{n}, @var{payment})}.
17408 If you give payments of @var{payment} every year for @var{n}
17409 years, and the money you have paid earns interest at @var{rate} per
17410 year, then this function tells you what your investment would be
17411 worth at the end of the period. (The actual interval doesn't
17412 have to be years, as long as @var{n} and @var{rate} are expressed
17413 in terms of the same intervals.) This function assumes payments
17414 occur at the @emph{end} of each interval.
17415
17416 @kindex I b F
17417 @tindex fvb
17418 The @kbd{I b F} [@code{fvb}] command does the same computation,
17419 but assuming your payments are at the beginning of each interval.
17420 Suppose you plan to deposit $1000 per year in a savings account
17421 earning 5.4% interest, starting right now. How much will be
17422 in the account after five years? @code{fvb(5.4%, 5, 1000) = 5870.73}.
17423 Thus you will have earned $870 worth of interest over the years.
17424 Using the stack, this calculation would have been
17425 @kbd{5.4 M-% 5 @key{RET} 1000 I b F}. Note that the rate is expressed
17426 as a number between 0 and 1, @emph{not} as a percentage.
17427
17428 @kindex H b F
17429 @tindex fvl
17430 The @kbd{H b F} [@code{fvl}] command computes the future value
17431 of an initial lump sum investment. Suppose you could deposit
17432 those five thousand dollars in the bank right now; how much would
17433 they be worth in five years? @code{fvl(5.4%, 5, 5000) = 6503.89}.
17434
17435 The algebraic functions @code{fv} and @code{fvb} accept an optional
17436 fourth argument, which is used as an initial lump sum in the sense
17437 of @code{fvl}. In other words, @code{fv(@var{rate}, @var{n},
17438 @var{payment}, @var{initial}) = fv(@var{rate}, @var{n}, @var{payment})
17439 + fvl(@var{rate}, @var{n}, @var{initial})}.
17440
17441 To illustrate the relationships between these functions, we could
17442 do the @code{fvb} calculation ``by hand'' using @code{fvl}. The
17443 final balance will be the sum of the contributions of our five
17444 deposits at various times. The first deposit earns interest for
17445 five years: @code{fvl(5.4%, 5, 1000) = 1300.78}. The second
17446 deposit only earns interest for four years: @code{fvl(5.4%, 4, 1000) =
17447 1234.13}. And so on down to the last deposit, which earns one
17448 year's interest: @code{fvl(5.4%, 1, 1000) = 1054.00}. The sum of
17449 these five values is, sure enough, $5870.73, just as was computed
17450 by @code{fvb} directly.
17451
17452 What does @code{fv(5.4%, 5, 1000) = 5569.96} mean? The payments
17453 are now at the ends of the periods. The end of one year is the same
17454 as the beginning of the next, so what this really means is that we've
17455 lost the payment at year zero (which contributed $1300.78), but we're
17456 now counting the payment at year five (which, since it didn't have
17457 a chance to earn interest, counts as $1000). Indeed, @expr{5569.96 =
17458 5870.73 - 1300.78 + 1000} (give or take a bit of roundoff error).
17459
17460 @node Present Value, Related Financial Functions, Future Value, Financial Functions
17461 @subsection Present Value
17462
17463 @noindent
17464 @kindex b P
17465 @pindex calc-fin-pv
17466 @tindex pv
17467 The @kbd{b P} (@code{calc-fin-pv}) [@code{pv}] command computes
17468 the present value of an investment. Like @code{fv}, it takes
17469 three arguments: @code{pv(@var{rate}, @var{n}, @var{payment})}.
17470 It computes the present value of a series of regular payments.
17471 Suppose you have the chance to make an investment that will
17472 pay $2000 per year over the next four years; as you receive
17473 these payments you can put them in the bank at 9% interest.
17474 You want to know whether it is better to make the investment, or
17475 to keep the money in the bank where it earns 9% interest right
17476 from the start. The calculation @code{pv(9%, 4, 2000)} gives the
17477 result 6479.44. If your initial investment must be less than this,
17478 say, $6000, then the investment is worthwhile. But if you had to
17479 put up $7000, then it would be better just to leave it in the bank.
17480
17481 Here is the interpretation of the result of @code{pv}: You are
17482 trying to compare the return from the investment you are
17483 considering, which is @code{fv(9%, 4, 2000) = 9146.26}, with
17484 the return from leaving the money in the bank, which is
17485 @code{fvl(9%, 4, @var{x})} where @var{x} is the amount of money
17486 you would have to put up in advance. The @code{pv} function
17487 finds the break-even point, @expr{x = 6479.44}, at which
17488 @code{fvl(9%, 4, 6479.44)} is also equal to 9146.26. This is
17489 the largest amount you should be willing to invest.
17490
17491 @kindex I b P
17492 @tindex pvb
17493 The @kbd{I b P} [@code{pvb}] command solves the same problem,
17494 but with payments occurring at the beginning of each interval.
17495 It has the same relationship to @code{fvb} as @code{pv} has
17496 to @code{fv}. For example @code{pvb(9%, 4, 2000) = 7062.59},
17497 a larger number than @code{pv} produced because we get to start
17498 earning interest on the return from our investment sooner.
17499
17500 @kindex H b P
17501 @tindex pvl
17502 The @kbd{H b P} [@code{pvl}] command computes the present value of
17503 an investment that will pay off in one lump sum at the end of the
17504 period. For example, if we get our $8000 all at the end of the
17505 four years, @code{pvl(9%, 4, 8000) = 5667.40}. This is much
17506 less than @code{pv} reported, because we don't earn any interest
17507 on the return from this investment. Note that @code{pvl} and
17508 @code{fvl} are simple inverses: @code{fvl(9%, 4, 5667.40) = 8000}.
17509
17510 You can give an optional fourth lump-sum argument to @code{pv}
17511 and @code{pvb}; this is handled in exactly the same way as the
17512 fourth argument for @code{fv} and @code{fvb}.
17513
17514 @kindex b N
17515 @pindex calc-fin-npv
17516 @tindex npv
17517 The @kbd{b N} (@code{calc-fin-npv}) [@code{npv}] command computes
17518 the net present value of a series of irregular investments.
17519 The first argument is the interest rate. The second argument is
17520 a vector which represents the expected return from the investment
17521 at the end of each interval. For example, if the rate represents
17522 a yearly interest rate, then the vector elements are the return
17523 from the first year, second year, and so on.
17524
17525 Thus, @code{npv(9%, [2000,2000,2000,2000]) = pv(9%, 4, 2000) = 6479.44}.
17526 Obviously this function is more interesting when the payments are
17527 not all the same!
17528
17529 The @code{npv} function can actually have two or more arguments.
17530 Multiple arguments are interpreted in the same way as for the
17531 vector statistical functions like @code{vsum}.
17532 @xref{Single-Variable Statistics}. Basically, if there are several
17533 payment arguments, each either a vector or a plain number, all these
17534 values are collected left-to-right into the complete list of payments.
17535 A numeric prefix argument on the @kbd{b N} command says how many
17536 payment values or vectors to take from the stack.
17537
17538 @kindex I b N
17539 @tindex npvb
17540 The @kbd{I b N} [@code{npvb}] command computes the net present
17541 value where payments occur at the beginning of each interval
17542 rather than at the end.
17543
17544 @node Related Financial Functions, Depreciation Functions, Present Value, Financial Functions
17545 @subsection Related Financial Functions
17546
17547 @noindent
17548 The functions in this section are basically inverses of the
17549 present value functions with respect to the various arguments.
17550
17551 @kindex b M
17552 @pindex calc-fin-pmt
17553 @tindex pmt
17554 The @kbd{b M} (@code{calc-fin-pmt}) [@code{pmt}] command computes
17555 the amount of periodic payment necessary to amortize a loan.
17556 Thus @code{pmt(@var{rate}, @var{n}, @var{amount})} equals the
17557 value of @var{payment} such that @code{pv(@var{rate}, @var{n},
17558 @var{payment}) = @var{amount}}.
17559
17560 @kindex I b M
17561 @tindex pmtb
17562 The @kbd{I b M} [@code{pmtb}] command does the same computation
17563 but using @code{pvb} instead of @code{pv}. Like @code{pv} and
17564 @code{pvb}, these functions can also take a fourth argument which
17565 represents an initial lump-sum investment.
17566
17567 @kindex H b M
17568 The @kbd{H b M} key just invokes the @code{fvl} function, which is
17569 the inverse of @code{pvl}. There is no explicit @code{pmtl} function.
17570
17571 @kindex b #
17572 @pindex calc-fin-nper
17573 @tindex nper
17574 The @kbd{b #} (@code{calc-fin-nper}) [@code{nper}] command computes
17575 the number of regular payments necessary to amortize a loan.
17576 Thus @code{nper(@var{rate}, @var{payment}, @var{amount})} equals
17577 the value of @var{n} such that @code{pv(@var{rate}, @var{n},
17578 @var{payment}) = @var{amount}}. If @var{payment} is too small
17579 ever to amortize a loan for @var{amount} at interest rate @var{rate},
17580 the @code{nper} function is left in symbolic form.
17581
17582 @kindex I b #
17583 @tindex nperb
17584 The @kbd{I b #} [@code{nperb}] command does the same computation
17585 but using @code{pvb} instead of @code{pv}. You can give a fourth
17586 lump-sum argument to these functions, but the computation will be
17587 rather slow in the four-argument case.
17588
17589 @kindex H b #
17590 @tindex nperl
17591 The @kbd{H b #} [@code{nperl}] command does the same computation
17592 using @code{pvl}. By exchanging @var{payment} and @var{amount} you
17593 can also get the solution for @code{fvl}. For example,
17594 @code{nperl(8%, 2000, 1000) = 9.006}, so if you place $1000 in a
17595 bank account earning 8%, it will take nine years to grow to $2000.
17596
17597 @kindex b T
17598 @pindex calc-fin-rate
17599 @tindex rate
17600 The @kbd{b T} (@code{calc-fin-rate}) [@code{rate}] command computes
17601 the rate of return on an investment. This is also an inverse of @code{pv}:
17602 @code{rate(@var{n}, @var{payment}, @var{amount})} computes the value of
17603 @var{rate} such that @code{pv(@var{rate}, @var{n}, @var{payment}) =
17604 @var{amount}}. The result is expressed as a formula like @samp{6.3%}.
17605
17606 @kindex I b T
17607 @kindex H b T
17608 @tindex rateb
17609 @tindex ratel
17610 The @kbd{I b T} [@code{rateb}] and @kbd{H b T} [@code{ratel}]
17611 commands solve the analogous equations with @code{pvb} or @code{pvl}
17612 in place of @code{pv}. Also, @code{rate} and @code{rateb} can
17613 accept an optional fourth argument just like @code{pv} and @code{pvb}.
17614 To redo the above example from a different perspective,
17615 @code{ratel(9, 2000, 1000) = 8.00597%}, which says you will need an
17616 interest rate of 8% in order to double your account in nine years.
17617
17618 @kindex b I
17619 @pindex calc-fin-irr
17620 @tindex irr
17621 The @kbd{b I} (@code{calc-fin-irr}) [@code{irr}] command is the
17622 analogous function to @code{rate} but for net present value.
17623 Its argument is a vector of payments. Thus @code{irr(@var{payments})}
17624 computes the @var{rate} such that @code{npv(@var{rate}, @var{payments}) = 0};
17625 this rate is known as the @dfn{internal rate of return}.
17626
17627 @kindex I b I
17628 @tindex irrb
17629 The @kbd{I b I} [@code{irrb}] command computes the internal rate of
17630 return assuming payments occur at the beginning of each period.
17631
17632 @node Depreciation Functions, Definitions of Financial Functions, Related Financial Functions, Financial Functions
17633 @subsection Depreciation Functions
17634
17635 @noindent
17636 The functions in this section calculate @dfn{depreciation}, which is
17637 the amount of value that a possession loses over time. These functions
17638 are characterized by three parameters: @var{cost}, the original cost
17639 of the asset; @var{salvage}, the value the asset will have at the end
17640 of its expected ``useful life''; and @var{life}, the number of years
17641 (or other periods) of the expected useful life.
17642
17643 There are several methods for calculating depreciation that differ in
17644 the way they spread the depreciation over the lifetime of the asset.
17645
17646 @kindex b S
17647 @pindex calc-fin-sln
17648 @tindex sln
17649 The @kbd{b S} (@code{calc-fin-sln}) [@code{sln}] command computes the
17650 ``straight-line'' depreciation. In this method, the asset depreciates
17651 by the same amount every year (or period). For example,
17652 @samp{sln(12000, 2000, 5)} returns 2000. The asset costs $12000
17653 initially and will be worth $2000 after five years; it loses $2000
17654 per year.
17655
17656 @kindex b Y
17657 @pindex calc-fin-syd
17658 @tindex syd
17659 The @kbd{b Y} (@code{calc-fin-syd}) [@code{syd}] command computes the
17660 accelerated ``sum-of-years'-digits'' depreciation. Here the depreciation
17661 is higher during the early years of the asset's life. Since the
17662 depreciation is different each year, @kbd{b Y} takes a fourth @var{period}
17663 parameter which specifies which year is requested, from 1 to @var{life}.
17664 If @var{period} is outside this range, the @code{syd} function will
17665 return zero.
17666
17667 @kindex b D
17668 @pindex calc-fin-ddb
17669 @tindex ddb
17670 The @kbd{b D} (@code{calc-fin-ddb}) [@code{ddb}] command computes an
17671 accelerated depreciation using the double-declining balance method.
17672 It also takes a fourth @var{period} parameter.
17673
17674 For symmetry, the @code{sln} function will accept a @var{period}
17675 parameter as well, although it will ignore its value except that the
17676 return value will as usual be zero if @var{period} is out of range.
17677
17678 For example, pushing the vector @expr{[1,2,3,4,5]} (perhaps with @kbd{v x 5})
17679 and then mapping @kbd{V M ' [sln(12000,2000,5,$), syd(12000,2000,5,$),
17680 ddb(12000,2000,5,$)] @key{RET}} produces a matrix that allows us to compare
17681 the three depreciation methods:
17682
17683 @example
17684 @group
17685 [ [ 2000, 3333, 4800 ]
17686 [ 2000, 2667, 2880 ]
17687 [ 2000, 2000, 1728 ]
17688 [ 2000, 1333, 592 ]
17689 [ 2000, 667, 0 ] ]
17690 @end group
17691 @end example
17692
17693 @noindent
17694 (Values have been rounded to nearest integers in this figure.)
17695 We see that @code{sln} depreciates by the same amount each year,
17696 @kbd{syd} depreciates more at the beginning and less at the end,
17697 and @kbd{ddb} weights the depreciation even more toward the beginning.
17698
17699 Summing columns with @kbd{V R : +} yields @expr{[10000, 10000, 10000]};
17700 the total depreciation in any method is (by definition) the
17701 difference between the cost and the salvage value.
17702
17703 @node Definitions of Financial Functions, , Depreciation Functions, Financial Functions
17704 @subsection Definitions
17705
17706 @noindent
17707 For your reference, here are the actual formulas used to compute
17708 Calc's financial functions.
17709
17710 Calc will not evaluate a financial function unless the @var{rate} or
17711 @var{n} argument is known. However, @var{payment} or @var{amount} can
17712 be a variable. Calc expands these functions according to the
17713 formulas below for symbolic arguments only when you use the @kbd{a "}
17714 (@code{calc-expand-formula}) command, or when taking derivatives or
17715 integrals or solving equations involving the functions.
17716
17717 @ifinfo
17718 These formulas are shown using the conventions of Big display
17719 mode (@kbd{d B}); for example, the formula for @code{fv} written
17720 linearly is @samp{pmt * ((1 + rate)^n) - 1) / rate}.
17721
17722 @example
17723 n
17724 (1 + rate) - 1
17725 fv(rate, n, pmt) = pmt * ---------------
17726 rate
17727
17728 n
17729 ((1 + rate) - 1) (1 + rate)
17730 fvb(rate, n, pmt) = pmt * ----------------------------
17731 rate
17732
17733 n
17734 fvl(rate, n, pmt) = pmt * (1 + rate)
17735
17736 -n
17737 1 - (1 + rate)
17738 pv(rate, n, pmt) = pmt * ----------------
17739 rate
17740
17741 -n
17742 (1 - (1 + rate) ) (1 + rate)
17743 pvb(rate, n, pmt) = pmt * -----------------------------
17744 rate
17745
17746 -n
17747 pvl(rate, n, pmt) = pmt * (1 + rate)
17748
17749 -1 -2 -3
17750 npv(rate, [a, b, c]) = a*(1 + rate) + b*(1 + rate) + c*(1 + rate)
17751
17752 -1 -2
17753 npvb(rate, [a, b, c]) = a + b*(1 + rate) + c*(1 + rate)
17754
17755 -n
17756 (amt - x * (1 + rate) ) * rate
17757 pmt(rate, n, amt, x) = -------------------------------
17758 -n
17759 1 - (1 + rate)
17760
17761 -n
17762 (amt - x * (1 + rate) ) * rate
17763 pmtb(rate, n, amt, x) = -------------------------------
17764 -n
17765 (1 - (1 + rate) ) (1 + rate)
17766
17767 amt * rate
17768 nper(rate, pmt, amt) = - log(1 - ------------, 1 + rate)
17769 pmt
17770
17771 amt * rate
17772 nperb(rate, pmt, amt) = - log(1 - ---------------, 1 + rate)
17773 pmt * (1 + rate)
17774
17775 amt
17776 nperl(rate, pmt, amt) = - log(---, 1 + rate)
17777 pmt
17778
17779 1/n
17780 pmt
17781 ratel(n, pmt, amt) = ------ - 1
17782 1/n
17783 amt
17784
17785 cost - salv
17786 sln(cost, salv, life) = -----------
17787 life
17788
17789 (cost - salv) * (life - per + 1)
17790 syd(cost, salv, life, per) = --------------------------------
17791 life * (life + 1) / 2
17792
17793 book * 2
17794 ddb(cost, salv, life, per) = --------, book = cost - depreciation so far
17795 life
17796 @end example
17797 @end ifinfo
17798 @tex
17799 \turnoffactive
17800 $$ \code{fv}(r, n, p) = p { (1 + r)^n - 1 \over r } $$
17801 $$ \code{fvb}(r, n, p) = p { ((1 + r)^n - 1) (1 + r) \over r } $$
17802 $$ \code{fvl}(r, n, p) = p (1 + r)^n $$
17803 $$ \code{pv}(r, n, p) = p { 1 - (1 + r)^{-n} \over r } $$
17804 $$ \code{pvb}(r, n, p) = p { (1 - (1 + r)^{-n}) (1 + r) \over r } $$
17805 $$ \code{pvl}(r, n, p) = p (1 + r)^{-n} $$
17806 $$ \code{npv}(r, [a,b,c]) = a (1 + r)^{-1} + b (1 + r)^{-2} + c (1 + r)^{-3} $$
17807 $$ \code{npvb}(r, [a,b,c]) = a + b (1 + r)^{-1} + c (1 + r)^{-2} $$
17808 $$ \code{pmt}(r, n, a, x) = { (a - x (1 + r)^{-n}) r \over 1 - (1 + r)^{-n} }$$
17809 $$ \code{pmtb}(r, n, a, x) = { (a - x (1 + r)^{-n}) r \over
17810 (1 - (1 + r)^{-n}) (1 + r) } $$
17811 $$ \code{nper}(r, p, a) = -\code{log}(1 - { a r \over p }, 1 + r) $$
17812 $$ \code{nperb}(r, p, a) = -\code{log}(1 - { a r \over p (1 + r) }, 1 + r) $$
17813 $$ \code{nperl}(r, p, a) = -\code{log}({a \over p}, 1 + r) $$
17814 $$ \code{ratel}(n, p, a) = { p^{1/n} \over a^{1/n} } - 1 $$
17815 $$ \code{sln}(c, s, l) = { c - s \over l } $$
17816 $$ \code{syd}(c, s, l, p) = { (c - s) (l - p + 1) \over l (l+1) / 2 } $$
17817 $$ \code{ddb}(c, s, l, p) = { 2 (c - \hbox{depreciation so far}) \over l } $$
17818 @end tex
17819
17820 @noindent
17821 In @code{pmt} and @code{pmtb}, @expr{x=0} if omitted.
17822
17823 These functions accept any numeric objects, including error forms,
17824 intervals, and even (though not very usefully) complex numbers. The
17825 above formulas specify exactly the behavior of these functions with
17826 all sorts of inputs.
17827
17828 Note that if the first argument to the @code{log} in @code{nper} is
17829 negative, @code{nper} leaves itself in symbolic form rather than
17830 returning a (financially meaningless) complex number.
17831
17832 @samp{rate(num, pmt, amt)} solves the equation
17833 @samp{pv(rate, num, pmt) = amt} for @samp{rate} using @kbd{H a R}
17834 (@code{calc-find-root}), with the interval @samp{[.01% .. 100%]}
17835 for an initial guess. The @code{rateb} function is the same except
17836 that it uses @code{pvb}. Note that @code{ratel} can be solved
17837 directly; its formula is shown in the above list.
17838
17839 Similarly, @samp{irr(pmts)} solves the equation @samp{npv(rate, pmts) = 0}
17840 for @samp{rate}.
17841
17842 If you give a fourth argument to @code{nper} or @code{nperb}, Calc
17843 will also use @kbd{H a R} to solve the equation using an initial
17844 guess interval of @samp{[0 .. 100]}.
17845
17846 A fourth argument to @code{fv} simply sums the two components
17847 calculated from the above formulas for @code{fv} and @code{fvl}.
17848 The same is true of @code{fvb}, @code{pv}, and @code{pvb}.
17849
17850 The @kbd{ddb} function is computed iteratively; the ``book'' value
17851 starts out equal to @var{cost}, and decreases according to the above
17852 formula for the specified number of periods. If the book value
17853 would decrease below @var{salvage}, it only decreases to @var{salvage}
17854 and the depreciation is zero for all subsequent periods. The @code{ddb}
17855 function returns the amount the book value decreased in the specified
17856 period.
17857
17858 The Calc financial function names were borrowed mostly from Microsoft
17859 Excel and Borland's Quattro. The @code{ratel} function corresponds to
17860 @samp{@@CGR} in Borland's Reflex. The @code{nper} and @code{nperl}
17861 functions correspond to @samp{@@TERM} and @samp{@@CTERM} in Quattro,
17862 respectively. Beware that the Calc functions may take their arguments
17863 in a different order than the corresponding functions in your favorite
17864 spreadsheet.
17865
17866 @node Binary Functions, , Financial Functions, Arithmetic
17867 @section Binary Number Functions
17868
17869 @noindent
17870 The commands in this chapter all use two-letter sequences beginning with
17871 the @kbd{b} prefix.
17872
17873 @cindex Binary numbers
17874 The ``binary'' operations actually work regardless of the currently
17875 displayed radix, although their results make the most sense in a radix
17876 like 2, 8, or 16 (as obtained by the @kbd{d 2}, @kbd{d 8}, or @w{@kbd{d 6}}
17877 commands, respectively). You may also wish to enable display of leading
17878 zeros with @kbd{d z}. @xref{Radix Modes}.
17879
17880 @cindex Word size for binary operations
17881 The Calculator maintains a current @dfn{word size} @expr{w}, an
17882 arbitrary positive or negative integer. For a positive word size, all
17883 of the binary operations described here operate modulo @expr{2^w}. In
17884 particular, negative arguments are converted to positive integers modulo
17885 @expr{2^w} by all binary functions.
17886
17887 If the word size is negative, binary operations produce 2's complement
17888 integers from
17889 @texline @math{-2^{-w-1}}
17890 @infoline @expr{-(2^(-w-1))}
17891 to
17892 @texline @math{2^{-w-1}-1}
17893 @infoline @expr{2^(-w-1)-1}
17894 inclusive. Either mode accepts inputs in any range; the sign of
17895 @expr{w} affects only the results produced.
17896
17897 @kindex b c
17898 @pindex calc-clip
17899 @tindex clip
17900 The @kbd{b c} (@code{calc-clip})
17901 [@code{clip}] command can be used to clip a number by reducing it modulo
17902 @expr{2^w}. The commands described in this chapter automatically clip
17903 their results to the current word size. Note that other operations like
17904 addition do not use the current word size, since integer addition
17905 generally is not ``binary.'' (However, @pxref{Simplification Modes},
17906 @code{calc-bin-simplify-mode}.) For example, with a word size of 8
17907 bits @kbd{b c} converts a number to the range 0 to 255; with a word
17908 size of @mathit{-8} @kbd{b c} converts to the range @mathit{-128} to 127.
17909
17910 @kindex b w
17911 @pindex calc-word-size
17912 The default word size is 32 bits. All operations except the shifts and
17913 rotates allow you to specify a different word size for that one
17914 operation by giving a numeric prefix argument: @kbd{C-u 8 b c} clips the
17915 top of stack to the range 0 to 255 regardless of the current word size.
17916 To set the word size permanently, use @kbd{b w} (@code{calc-word-size}).
17917 This command displays a prompt with the current word size; press @key{RET}
17918 immediately to keep this word size, or type a new word size at the prompt.
17919
17920 When the binary operations are written in symbolic form, they take an
17921 optional second (or third) word-size parameter. When a formula like
17922 @samp{and(a,b)} is finally evaluated, the word size current at that time
17923 will be used, but when @samp{and(a,b,-8)} is evaluated, a word size of
17924 @mathit{-8} will always be used. A symbolic binary function will be left
17925 in symbolic form unless the all of its argument(s) are integers or
17926 integer-valued floats.
17927
17928 If either or both arguments are modulo forms for which @expr{M} is a
17929 power of two, that power of two is taken as the word size unless a
17930 numeric prefix argument overrides it. The current word size is never
17931 consulted when modulo-power-of-two forms are involved.
17932
17933 @kindex b a
17934 @pindex calc-and
17935 @tindex and
17936 The @kbd{b a} (@code{calc-and}) [@code{and}] command computes the bitwise
17937 AND of the two numbers on the top of the stack. In other words, for each
17938 of the @expr{w} binary digits of the two numbers (pairwise), the corresponding
17939 bit of the result is 1 if and only if both input bits are 1:
17940 @samp{and(2#1100, 2#1010) = 2#1000}.
17941
17942 @kindex b o
17943 @pindex calc-or
17944 @tindex or
17945 The @kbd{b o} (@code{calc-or}) [@code{or}] command computes the bitwise
17946 inclusive OR of two numbers. A bit is 1 if either of the input bits, or
17947 both, are 1: @samp{or(2#1100, 2#1010) = 2#1110}.
17948
17949 @kindex b x
17950 @pindex calc-xor
17951 @tindex xor
17952 The @kbd{b x} (@code{calc-xor}) [@code{xor}] command computes the bitwise
17953 exclusive OR of two numbers. A bit is 1 if exactly one of the input bits
17954 is 1: @samp{xor(2#1100, 2#1010) = 2#0110}.
17955
17956 @kindex b d
17957 @pindex calc-diff
17958 @tindex diff
17959 The @kbd{b d} (@code{calc-diff}) [@code{diff}] command computes the bitwise
17960 difference of two numbers; this is defined by @samp{diff(a,b) = and(a,not(b))},
17961 so that @samp{diff(2#1100, 2#1010) = 2#0100}.
17962
17963 @kindex b n
17964 @pindex calc-not
17965 @tindex not
17966 The @kbd{b n} (@code{calc-not}) [@code{not}] command computes the bitwise
17967 NOT of a number. A bit is 1 if the input bit is 0 and vice-versa.
17968
17969 @kindex b l
17970 @pindex calc-lshift-binary
17971 @tindex lsh
17972 The @kbd{b l} (@code{calc-lshift-binary}) [@code{lsh}] command shifts a
17973 number left by one bit, or by the number of bits specified in the numeric
17974 prefix argument. A negative prefix argument performs a logical right shift,
17975 in which zeros are shifted in on the left. In symbolic form, @samp{lsh(a)}
17976 is short for @samp{lsh(a,1)}, which in turn is short for @samp{lsh(a,n,w)}.
17977 Bits shifted ``off the end,'' according to the current word size, are lost.
17978
17979 @kindex H b l
17980 @kindex H b r
17981 @ignore
17982 @mindex @idots
17983 @end ignore
17984 @kindex H b L
17985 @ignore
17986 @mindex @null
17987 @end ignore
17988 @kindex H b R
17989 @ignore
17990 @mindex @null
17991 @end ignore
17992 @kindex H b t
17993 The @kbd{H b l} command also does a left shift, but it takes two arguments
17994 from the stack (the value to shift, and, at top-of-stack, the number of
17995 bits to shift). This version interprets the prefix argument just like
17996 the regular binary operations, i.e., as a word size. The Hyperbolic flag
17997 has a similar effect on the rest of the binary shift and rotate commands.
17998
17999 @kindex b r
18000 @pindex calc-rshift-binary
18001 @tindex rsh
18002 The @kbd{b r} (@code{calc-rshift-binary}) [@code{rsh}] command shifts a
18003 number right by one bit, or by the number of bits specified in the numeric
18004 prefix argument: @samp{rsh(a,n) = lsh(a,-n)}.
18005
18006 @kindex b L
18007 @pindex calc-lshift-arith
18008 @tindex ash
18009 The @kbd{b L} (@code{calc-lshift-arith}) [@code{ash}] command shifts a
18010 number left. It is analogous to @code{lsh}, except that if the shift
18011 is rightward (the prefix argument is negative), an arithmetic shift
18012 is performed as described below.
18013
18014 @kindex b R
18015 @pindex calc-rshift-arith
18016 @tindex rash
18017 The @kbd{b R} (@code{calc-rshift-arith}) [@code{rash}] command performs
18018 an ``arithmetic'' shift to the right, in which the leftmost bit (according
18019 to the current word size) is duplicated rather than shifting in zeros.
18020 This corresponds to dividing by a power of two where the input is interpreted
18021 as a signed, twos-complement number. (The distinction between the @samp{rsh}
18022 and @samp{rash} operations is totally independent from whether the word
18023 size is positive or negative.) With a negative prefix argument, this
18024 performs a standard left shift.
18025
18026 @kindex b t
18027 @pindex calc-rotate-binary
18028 @tindex rot
18029 The @kbd{b t} (@code{calc-rotate-binary}) [@code{rot}] command rotates a
18030 number one bit to the left. The leftmost bit (according to the current
18031 word size) is dropped off the left and shifted in on the right. With a
18032 numeric prefix argument, the number is rotated that many bits to the left
18033 or right.
18034
18035 @xref{Set Operations}, for the @kbd{b p} and @kbd{b u} commands that
18036 pack and unpack binary integers into sets. (For example, @kbd{b u}
18037 unpacks the number @samp{2#11001} to the set of bit-numbers
18038 @samp{[0, 3, 4]}.) Type @kbd{b u V #} to count the number of ``1''
18039 bits in a binary integer.
18040
18041 Another interesting use of the set representation of binary integers
18042 is to reverse the bits in, say, a 32-bit integer. Type @kbd{b u} to
18043 unpack; type @kbd{31 @key{TAB} -} to replace each bit-number in the set
18044 with 31 minus that bit-number; type @kbd{b p} to pack the set back
18045 into a binary integer.
18046
18047 @node Scientific Functions, Matrix Functions, Arithmetic, Top
18048 @chapter Scientific Functions
18049
18050 @noindent
18051 The functions described here perform trigonometric and other transcendental
18052 calculations. They generally produce floating-point answers correct to the
18053 full current precision. The @kbd{H} (Hyperbolic) and @kbd{I} (Inverse)
18054 flag keys must be used to get some of these functions from the keyboard.
18055
18056 @kindex P
18057 @pindex calc-pi
18058 @cindex @code{pi} variable
18059 @vindex pi
18060 @kindex H P
18061 @cindex @code{e} variable
18062 @vindex e
18063 @kindex I P
18064 @cindex @code{gamma} variable
18065 @vindex gamma
18066 @cindex Gamma constant, Euler's
18067 @cindex Euler's gamma constant
18068 @kindex H I P
18069 @cindex @code{phi} variable
18070 @cindex Phi, golden ratio
18071 @cindex Golden ratio
18072 One miscellaneous command is shift-@kbd{P} (@code{calc-pi}), which pushes
18073 the value of @cpi{} (at the current precision) onto the stack. With the
18074 Hyperbolic flag, it pushes the value @expr{e}, the base of natural logarithms.
18075 With the Inverse flag, it pushes Euler's constant
18076 @texline @math{\gamma}
18077 @infoline @expr{gamma}
18078 (about 0.5772). With both Inverse and Hyperbolic, it
18079 pushes the ``golden ratio''
18080 @texline @math{\phi}
18081 @infoline @expr{phi}
18082 (about 1.618). (At present, Euler's constant is not available
18083 to unlimited precision; Calc knows only the first 100 digits.)
18084 In Symbolic mode, these commands push the
18085 actual variables @samp{pi}, @samp{e}, @samp{gamma}, and @samp{phi},
18086 respectively, instead of their values; @pxref{Symbolic Mode}.
18087
18088 @ignore
18089 @mindex Q
18090 @end ignore
18091 @ignore
18092 @mindex I Q
18093 @end ignore
18094 @kindex I Q
18095 @tindex sqr
18096 The @kbd{Q} (@code{calc-sqrt}) [@code{sqrt}] function is described elsewhere;
18097 @pxref{Basic Arithmetic}. With the Inverse flag [@code{sqr}], this command
18098 computes the square of the argument.
18099
18100 @xref{Prefix Arguments}, for a discussion of the effect of numeric
18101 prefix arguments on commands in this chapter which do not otherwise
18102 interpret a prefix argument.
18103
18104 @menu
18105 * Logarithmic Functions::
18106 * Trigonometric and Hyperbolic Functions::
18107 * Advanced Math Functions::
18108 * Branch Cuts::
18109 * Random Numbers::
18110 * Combinatorial Functions::
18111 * Probability Distribution Functions::
18112 @end menu
18113
18114 @node Logarithmic Functions, Trigonometric and Hyperbolic Functions, Scientific Functions, Scientific Functions
18115 @section Logarithmic Functions
18116
18117 @noindent
18118 @kindex L
18119 @pindex calc-ln
18120 @tindex ln
18121 @ignore
18122 @mindex @null
18123 @end ignore
18124 @kindex I E
18125 The shift-@kbd{L} (@code{calc-ln}) [@code{ln}] command computes the natural
18126 logarithm of the real or complex number on the top of the stack. With
18127 the Inverse flag it computes the exponential function instead, although
18128 this is redundant with the @kbd{E} command.
18129
18130 @kindex E
18131 @pindex calc-exp
18132 @tindex exp
18133 @ignore
18134 @mindex @null
18135 @end ignore
18136 @kindex I L
18137 The shift-@kbd{E} (@code{calc-exp}) [@code{exp}] command computes the
18138 exponential, i.e., @expr{e} raised to the power of the number on the stack.
18139 The meanings of the Inverse and Hyperbolic flags follow from those for
18140 the @code{calc-ln} command.
18141
18142 @kindex H L
18143 @kindex H E
18144 @pindex calc-log10
18145 @tindex log10
18146 @tindex exp10
18147 @ignore
18148 @mindex @null
18149 @end ignore
18150 @kindex H I L
18151 @ignore
18152 @mindex @null
18153 @end ignore
18154 @kindex H I E
18155 The @kbd{H L} (@code{calc-log10}) [@code{log10}] command computes the common
18156 (base-10) logarithm of a number. (With the Inverse flag [@code{exp10}],
18157 it raises ten to a given power.) Note that the common logarithm of a
18158 complex number is computed by taking the natural logarithm and dividing
18159 by
18160 @texline @math{\ln10}.
18161 @infoline @expr{ln(10)}.
18162
18163 @kindex B
18164 @kindex I B
18165 @pindex calc-log
18166 @tindex log
18167 @tindex alog
18168 The @kbd{B} (@code{calc-log}) [@code{log}] command computes a logarithm
18169 to any base. For example, @kbd{1024 @key{RET} 2 B} produces 10, since
18170 @texline @math{2^{10} = 1024}.
18171 @infoline @expr{2^10 = 1024}.
18172 In certain cases like @samp{log(3,9)}, the result
18173 will be either @expr{1:2} or @expr{0.5} depending on the current Fraction
18174 mode setting. With the Inverse flag [@code{alog}], this command is
18175 similar to @kbd{^} except that the order of the arguments is reversed.
18176
18177 @kindex f I
18178 @pindex calc-ilog
18179 @tindex ilog
18180 The @kbd{f I} (@code{calc-ilog}) [@code{ilog}] command computes the
18181 integer logarithm of a number to any base. The number and the base must
18182 themselves be positive integers. This is the true logarithm, rounded
18183 down to an integer. Thus @kbd{ilog(x,10)} is 3 for all @expr{x} in the
18184 range from 1000 to 9999. If both arguments are positive integers, exact
18185 integer arithmetic is used; otherwise, this is equivalent to
18186 @samp{floor(log(x,b))}.
18187
18188 @kindex f E
18189 @pindex calc-expm1
18190 @tindex expm1
18191 The @kbd{f E} (@code{calc-expm1}) [@code{expm1}] command computes
18192 @texline @math{e^x - 1},
18193 @infoline @expr{exp(x)-1},
18194 but using an algorithm that produces a more accurate
18195 answer when the result is close to zero, i.e., when
18196 @texline @math{e^x}
18197 @infoline @expr{exp(x)}
18198 is close to one.
18199
18200 @kindex f L
18201 @pindex calc-lnp1
18202 @tindex lnp1
18203 The @kbd{f L} (@code{calc-lnp1}) [@code{lnp1}] command computes
18204 @texline @math{\ln(x+1)},
18205 @infoline @expr{ln(x+1)},
18206 producing a more accurate answer when @expr{x} is close to zero.
18207
18208 @node Trigonometric and Hyperbolic Functions, Advanced Math Functions, Logarithmic Functions, Scientific Functions
18209 @section Trigonometric/Hyperbolic Functions
18210
18211 @noindent
18212 @kindex S
18213 @pindex calc-sin
18214 @tindex sin
18215 The shift-@kbd{S} (@code{calc-sin}) [@code{sin}] command computes the sine
18216 of an angle or complex number. If the input is an HMS form, it is interpreted
18217 as degrees-minutes-seconds; otherwise, the input is interpreted according
18218 to the current angular mode. It is best to use Radians mode when operating
18219 on complex numbers.
18220
18221 Calc's ``units'' mechanism includes angular units like @code{deg},
18222 @code{rad}, and @code{grad}. While @samp{sin(45 deg)} is not evaluated
18223 all the time, the @kbd{u s} (@code{calc-simplify-units}) command will
18224 simplify @samp{sin(45 deg)} by taking the sine of 45 degrees, regardless
18225 of the current angular mode. @xref{Basic Operations on Units}.
18226
18227 Also, the symbolic variable @code{pi} is not ordinarily recognized in
18228 arguments to trigonometric functions, as in @samp{sin(3 pi / 4)}, but
18229 the @kbd{a s} (@code{calc-simplify}) command recognizes many such
18230 formulas when the current angular mode is Radians @emph{and} Symbolic
18231 mode is enabled; this example would be replaced by @samp{sqrt(2) / 2}.
18232 @xref{Symbolic Mode}. Beware, this simplification occurs even if you
18233 have stored a different value in the variable @samp{pi}; this is one
18234 reason why changing built-in variables is a bad idea. Arguments of
18235 the form @expr{x} plus a multiple of @cpiover{2} are also simplified.
18236 Calc includes similar formulas for @code{cos} and @code{tan}.
18237
18238 The @kbd{a s} command knows all angles which are integer multiples of
18239 @cpiover{12}, @cpiover{10}, or @cpiover{8} radians. In Degrees mode,
18240 analogous simplifications occur for integer multiples of 15 or 18
18241 degrees, and for arguments plus multiples of 90 degrees.
18242
18243 @kindex I S
18244 @pindex calc-arcsin
18245 @tindex arcsin
18246 With the Inverse flag, @code{calc-sin} computes an arcsine. This is also
18247 available as the @code{calc-arcsin} command or @code{arcsin} algebraic
18248 function. The returned argument is converted to degrees, radians, or HMS
18249 notation depending on the current angular mode.
18250
18251 @kindex H S
18252 @pindex calc-sinh
18253 @tindex sinh
18254 @kindex H I S
18255 @pindex calc-arcsinh
18256 @tindex arcsinh
18257 With the Hyperbolic flag, @code{calc-sin} computes the hyperbolic
18258 sine, also available as @code{calc-sinh} [@code{sinh}]. With the
18259 Hyperbolic and Inverse flags, it computes the hyperbolic arcsine
18260 (@code{calc-arcsinh}) [@code{arcsinh}].
18261
18262 @kindex C
18263 @pindex calc-cos
18264 @tindex cos
18265 @ignore
18266 @mindex @idots
18267 @end ignore
18268 @kindex I C
18269 @pindex calc-arccos
18270 @ignore
18271 @mindex @null
18272 @end ignore
18273 @tindex arccos
18274 @ignore
18275 @mindex @null
18276 @end ignore
18277 @kindex H C
18278 @pindex calc-cosh
18279 @ignore
18280 @mindex @null
18281 @end ignore
18282 @tindex cosh
18283 @ignore
18284 @mindex @null
18285 @end ignore
18286 @kindex H I C
18287 @pindex calc-arccosh
18288 @ignore
18289 @mindex @null
18290 @end ignore
18291 @tindex arccosh
18292 @ignore
18293 @mindex @null
18294 @end ignore
18295 @kindex T
18296 @pindex calc-tan
18297 @ignore
18298 @mindex @null
18299 @end ignore
18300 @tindex tan
18301 @ignore
18302 @mindex @null
18303 @end ignore
18304 @kindex I T
18305 @pindex calc-arctan
18306 @ignore
18307 @mindex @null
18308 @end ignore
18309 @tindex arctan
18310 @ignore
18311 @mindex @null
18312 @end ignore
18313 @kindex H T
18314 @pindex calc-tanh
18315 @ignore
18316 @mindex @null
18317 @end ignore
18318 @tindex tanh
18319 @ignore
18320 @mindex @null
18321 @end ignore
18322 @kindex H I T
18323 @pindex calc-arctanh
18324 @ignore
18325 @mindex @null
18326 @end ignore
18327 @tindex arctanh
18328 The shift-@kbd{C} (@code{calc-cos}) [@code{cos}] command computes the cosine
18329 of an angle or complex number, and shift-@kbd{T} (@code{calc-tan}) [@code{tan}]
18330 computes the tangent, along with all the various inverse and hyperbolic
18331 variants of these functions.
18332
18333 @kindex f T
18334 @pindex calc-arctan2
18335 @tindex arctan2
18336 The @kbd{f T} (@code{calc-arctan2}) [@code{arctan2}] command takes two
18337 numbers from the stack and computes the arc tangent of their ratio. The
18338 result is in the full range from @mathit{-180} (exclusive) to @mathit{+180}
18339 (inclusive) degrees, or the analogous range in radians. A similar
18340 result would be obtained with @kbd{/} followed by @kbd{I T}, but the
18341 value would only be in the range from @mathit{-90} to @mathit{+90} degrees
18342 since the division loses information about the signs of the two
18343 components, and an error might result from an explicit division by zero
18344 which @code{arctan2} would avoid. By (arbitrary) definition,
18345 @samp{arctan2(0,0)=0}.
18346
18347 @pindex calc-sincos
18348 @ignore
18349 @starindex
18350 @end ignore
18351 @tindex sincos
18352 @ignore
18353 @starindex
18354 @end ignore
18355 @ignore
18356 @mindex arc@idots
18357 @end ignore
18358 @tindex arcsincos
18359 The @code{calc-sincos} [@code{sincos}] command computes the sine and
18360 cosine of a number, returning them as a vector of the form
18361 @samp{[@var{cos}, @var{sin}]}.
18362 With the Inverse flag [@code{arcsincos}], this command takes a two-element
18363 vector as an argument and computes @code{arctan2} of the elements.
18364 (This command does not accept the Hyperbolic flag.)
18365
18366 @node Advanced Math Functions, Branch Cuts, Trigonometric and Hyperbolic Functions, Scientific Functions
18367 @section Advanced Mathematical Functions
18368
18369 @noindent
18370 Calc can compute a variety of less common functions that arise in
18371 various branches of mathematics. All of the functions described in
18372 this section allow arbitrary complex arguments and, except as noted,
18373 will work to arbitrarily large precisions. They can not at present
18374 handle error forms or intervals as arguments.
18375
18376 NOTE: These functions are still experimental. In particular, their
18377 accuracy is not guaranteed in all domains. It is advisable to set the
18378 current precision comfortably higher than you actually need when
18379 using these functions. Also, these functions may be impractically
18380 slow for some values of the arguments.
18381
18382 @kindex f g
18383 @pindex calc-gamma
18384 @tindex gamma
18385 The @kbd{f g} (@code{calc-gamma}) [@code{gamma}] command computes the Euler
18386 gamma function. For positive integer arguments, this is related to the
18387 factorial function: @samp{gamma(n+1) = fact(n)}. For general complex
18388 arguments the gamma function can be defined by the following definite
18389 integral:
18390 @texline @math{\Gamma(a) = \int_0^\infty t^{a-1} e^t dt}.
18391 @infoline @expr{gamma(a) = integ(t^(a-1) exp(t), t, 0, inf)}.
18392 (The actual implementation uses far more efficient computational methods.)
18393
18394 @kindex f G
18395 @tindex gammaP
18396 @ignore
18397 @mindex @idots
18398 @end ignore
18399 @kindex I f G
18400 @ignore
18401 @mindex @null
18402 @end ignore
18403 @kindex H f G
18404 @ignore
18405 @mindex @null
18406 @end ignore
18407 @kindex H I f G
18408 @pindex calc-inc-gamma
18409 @ignore
18410 @mindex @null
18411 @end ignore
18412 @tindex gammaQ
18413 @ignore
18414 @mindex @null
18415 @end ignore
18416 @tindex gammag
18417 @ignore
18418 @mindex @null
18419 @end ignore
18420 @tindex gammaG
18421 The @kbd{f G} (@code{calc-inc-gamma}) [@code{gammaP}] command computes
18422 the incomplete gamma function, denoted @samp{P(a,x)}. This is defined by
18423 the integral,
18424 @texline @math{P(a,x) = \left( \int_0^x t^{a-1} e^t dt \right) / \Gamma(a)}.
18425 @infoline @expr{gammaP(a,x) = integ(t^(a-1) exp(t), t, 0, x) / gamma(a)}.
18426 This implies that @samp{gammaP(a,inf) = 1} for any @expr{a} (see the
18427 definition of the normal gamma function).
18428
18429 Several other varieties of incomplete gamma function are defined.
18430 The complement of @expr{P(a,x)}, called @expr{Q(a,x) = 1-P(a,x)} by
18431 some authors, is computed by the @kbd{I f G} [@code{gammaQ}] command.
18432 You can think of this as taking the other half of the integral, from
18433 @expr{x} to infinity.
18434
18435 @ifinfo
18436 The functions corresponding to the integrals that define @expr{P(a,x)}
18437 and @expr{Q(a,x)} but without the normalizing @expr{1/gamma(a)}
18438 factor are called @expr{g(a,x)} and @expr{G(a,x)}, respectively
18439 (where @expr{g} and @expr{G} represent the lower- and upper-case Greek
18440 letter gamma). You can obtain these using the @kbd{H f G} [@code{gammag}]
18441 and @kbd{H I f G} [@code{gammaG}] commands.
18442 @end ifinfo
18443 @tex
18444 \turnoffactive
18445 The functions corresponding to the integrals that define $P(a,x)$
18446 and $Q(a,x)$ but without the normalizing $1/\Gamma(a)$
18447 factor are called $\gamma(a,x)$ and $\Gamma(a,x)$, respectively.
18448 You can obtain these using the \kbd{H f G} [\code{gammag}] and
18449 \kbd{I H f G} [\code{gammaG}] commands.
18450 @end tex
18451
18452 @kindex f b
18453 @pindex calc-beta
18454 @tindex beta
18455 The @kbd{f b} (@code{calc-beta}) [@code{beta}] command computes the
18456 Euler beta function, which is defined in terms of the gamma function as
18457 @texline @math{B(a,b) = \Gamma(a) \Gamma(b) / \Gamma(a+b)},
18458 @infoline @expr{beta(a,b) = gamma(a) gamma(b) / gamma(a+b)},
18459 or by
18460 @texline @math{B(a,b) = \int_0^1 t^{a-1} (1-t)^{b-1} dt}.
18461 @infoline @expr{beta(a,b) = integ(t^(a-1) (1-t)^(b-1), t, 0, 1)}.
18462
18463 @kindex f B
18464 @kindex H f B
18465 @pindex calc-inc-beta
18466 @tindex betaI
18467 @tindex betaB
18468 The @kbd{f B} (@code{calc-inc-beta}) [@code{betaI}] command computes
18469 the incomplete beta function @expr{I(x,a,b)}. It is defined by
18470 @texline @math{I(x,a,b) = \left( \int_0^x t^{a-1} (1-t)^{b-1} dt \right) / B(a,b)}.
18471 @infoline @expr{betaI(x,a,b) = integ(t^(a-1) (1-t)^(b-1), t, 0, x) / beta(a,b)}.
18472 Once again, the @kbd{H} (hyperbolic) prefix gives the corresponding
18473 un-normalized version [@code{betaB}].
18474
18475 @kindex f e
18476 @kindex I f e
18477 @pindex calc-erf
18478 @tindex erf
18479 @tindex erfc
18480 The @kbd{f e} (@code{calc-erf}) [@code{erf}] command computes the
18481 error function
18482 @texline @math{\hbox{erf}(x) = {2 \over \sqrt{\pi}} \int_0^x e^{-t^2} dt}.
18483 @infoline @expr{erf(x) = 2 integ(exp(-(t^2)), t, 0, x) / sqrt(pi)}.
18484 The complementary error function @kbd{I f e} (@code{calc-erfc}) [@code{erfc}]
18485 is the corresponding integral from @samp{x} to infinity; the sum
18486 @texline @math{\hbox{erf}(x) + \hbox{erfc}(x) = 1}.
18487 @infoline @expr{erf(x) + erfc(x) = 1}.
18488
18489 @kindex f j
18490 @kindex f y
18491 @pindex calc-bessel-J
18492 @pindex calc-bessel-Y
18493 @tindex besJ
18494 @tindex besY
18495 The @kbd{f j} (@code{calc-bessel-J}) [@code{besJ}] and @kbd{f y}
18496 (@code{calc-bessel-Y}) [@code{besY}] commands compute the Bessel
18497 functions of the first and second kinds, respectively.
18498 In @samp{besJ(n,x)} and @samp{besY(n,x)} the ``order'' parameter
18499 @expr{n} is often an integer, but is not required to be one.
18500 Calc's implementation of the Bessel functions currently limits the
18501 precision to 8 digits, and may not be exact even to that precision.
18502 Use with care!
18503
18504 @node Branch Cuts, Random Numbers, Advanced Math Functions, Scientific Functions
18505 @section Branch Cuts and Principal Values
18506
18507 @noindent
18508 @cindex Branch cuts
18509 @cindex Principal values
18510 All of the logarithmic, trigonometric, and other scientific functions are
18511 defined for complex numbers as well as for reals.
18512 This section describes the values
18513 returned in cases where the general result is a family of possible values.
18514 Calc follows section 12.5.3 of Steele's @dfn{Common Lisp, the Language},
18515 second edition, in these matters. This section will describe each
18516 function briefly; for a more detailed discussion (including some nifty
18517 diagrams), consult Steele's book.
18518
18519 Note that the branch cuts for @code{arctan} and @code{arctanh} were
18520 changed between the first and second editions of Steele. Versions of
18521 Calc starting with 2.00 follow the second edition.
18522
18523 The new branch cuts exactly match those of the HP-28/48 calculators.
18524 They also match those of Mathematica 1.2, except that Mathematica's
18525 @code{arctan} cut is always in the right half of the complex plane,
18526 and its @code{arctanh} cut is always in the top half of the plane.
18527 Calc's cuts are continuous with quadrants I and III for @code{arctan},
18528 or II and IV for @code{arctanh}.
18529
18530 Note: The current implementations of these functions with complex arguments
18531 are designed with proper behavior around the branch cuts in mind, @emph{not}
18532 efficiency or accuracy. You may need to increase the floating precision
18533 and wait a while to get suitable answers from them.
18534
18535 For @samp{sqrt(a+bi)}: When @expr{a<0} and @expr{b} is small but positive
18536 or zero, the result is close to the @expr{+i} axis. For @expr{b} small and
18537 negative, the result is close to the @expr{-i} axis. The result always lies
18538 in the right half of the complex plane.
18539
18540 For @samp{ln(a+bi)}: The real part is defined as @samp{ln(abs(a+bi))}.
18541 The imaginary part is defined as @samp{arg(a+bi) = arctan2(b,a)}.
18542 Thus the branch cuts for @code{sqrt} and @code{ln} both lie on the
18543 negative real axis.
18544
18545 The following table describes these branch cuts in another way.
18546 If the real and imaginary parts of @expr{z} are as shown, then
18547 the real and imaginary parts of @expr{f(z)} will be as shown.
18548 Here @code{eps} stands for a small positive value; each
18549 occurrence of @code{eps} may stand for a different small value.
18550
18551 @smallexample
18552 z sqrt(z) ln(z)
18553 ----------------------------------------
18554 +, 0 +, 0 any, 0
18555 -, 0 0, + any, pi
18556 -, +eps +eps, + +eps, +
18557 -, -eps +eps, - +eps, -
18558 @end smallexample
18559
18560 For @samp{z1^z2}: This is defined by @samp{exp(ln(z1)*z2)}.
18561 One interesting consequence of this is that @samp{(-8)^1:3} does
18562 not evaluate to @mathit{-2} as you might expect, but to the complex
18563 number @expr{(1., 1.732)}. Both of these are valid cube roots
18564 of @mathit{-8} (as is @expr{(1., -1.732)}); Calc chooses a perhaps
18565 less-obvious root for the sake of mathematical consistency.
18566
18567 For @samp{arcsin(z)}: This is defined by @samp{-i*ln(i*z + sqrt(1-z^2))}.
18568 The branch cuts are on the real axis, less than @mathit{-1} and greater than 1.
18569
18570 For @samp{arccos(z)}: This is defined by @samp{-i*ln(z + i*sqrt(1-z^2))},
18571 or equivalently by @samp{pi/2 - arcsin(z)}. The branch cuts are on
18572 the real axis, less than @mathit{-1} and greater than 1.
18573
18574 For @samp{arctan(z)}: This is defined by
18575 @samp{(ln(1+i*z) - ln(1-i*z)) / (2*i)}. The branch cuts are on the
18576 imaginary axis, below @expr{-i} and above @expr{i}.
18577
18578 For @samp{arcsinh(z)}: This is defined by @samp{ln(z + sqrt(1+z^2))}.
18579 The branch cuts are on the imaginary axis, below @expr{-i} and
18580 above @expr{i}.
18581
18582 For @samp{arccosh(z)}: This is defined by
18583 @samp{ln(z + (z+1)*sqrt((z-1)/(z+1)))}. The branch cut is on the
18584 real axis less than 1.
18585
18586 For @samp{arctanh(z)}: This is defined by @samp{(ln(1+z) - ln(1-z)) / 2}.
18587 The branch cuts are on the real axis, less than @mathit{-1} and greater than 1.
18588
18589 The following tables for @code{arcsin}, @code{arccos}, and
18590 @code{arctan} assume the current angular mode is Radians. The
18591 hyperbolic functions operate independently of the angular mode.
18592
18593 @smallexample
18594 z arcsin(z) arccos(z)
18595 -------------------------------------------------------
18596 (-1..1), 0 (-pi/2..pi/2), 0 (0..pi), 0
18597 (-1..1), +eps (-pi/2..pi/2), +eps (0..pi), -eps
18598 (-1..1), -eps (-pi/2..pi/2), -eps (0..pi), +eps
18599 <-1, 0 -pi/2, + pi, -
18600 <-1, +eps -pi/2 + eps, + pi - eps, -
18601 <-1, -eps -pi/2 + eps, - pi - eps, +
18602 >1, 0 pi/2, - 0, +
18603 >1, +eps pi/2 - eps, + +eps, -
18604 >1, -eps pi/2 - eps, - +eps, +
18605 @end smallexample
18606
18607 @smallexample
18608 z arccosh(z) arctanh(z)
18609 -----------------------------------------------------
18610 (-1..1), 0 0, (0..pi) any, 0
18611 (-1..1), +eps +eps, (0..pi) any, +eps
18612 (-1..1), -eps +eps, (-pi..0) any, -eps
18613 <-1, 0 +, pi -, pi/2
18614 <-1, +eps +, pi - eps -, pi/2 - eps
18615 <-1, -eps +, -pi + eps -, -pi/2 + eps
18616 >1, 0 +, 0 +, -pi/2
18617 >1, +eps +, +eps +, pi/2 - eps
18618 >1, -eps +, -eps +, -pi/2 + eps
18619 @end smallexample
18620
18621 @smallexample
18622 z arcsinh(z) arctan(z)
18623 -----------------------------------------------------
18624 0, (-1..1) 0, (-pi/2..pi/2) 0, any
18625 0, <-1 -, -pi/2 -pi/2, -
18626 +eps, <-1 +, -pi/2 + eps pi/2 - eps, -
18627 -eps, <-1 -, -pi/2 + eps -pi/2 + eps, -
18628 0, >1 +, pi/2 pi/2, +
18629 +eps, >1 +, pi/2 - eps pi/2 - eps, +
18630 -eps, >1 -, pi/2 - eps -pi/2 + eps, +
18631 @end smallexample
18632
18633 Finally, the following identities help to illustrate the relationship
18634 between the complex trigonometric and hyperbolic functions. They
18635 are valid everywhere, including on the branch cuts.
18636
18637 @smallexample
18638 sin(i*z) = i*sinh(z) arcsin(i*z) = i*arcsinh(z)
18639 cos(i*z) = cosh(z) arcsinh(i*z) = i*arcsin(z)
18640 tan(i*z) = i*tanh(z) arctan(i*z) = i*arctanh(z)
18641 sinh(i*z) = i*sin(z) cosh(i*z) = cos(z)
18642 @end smallexample
18643
18644 The ``advanced math'' functions (gamma, Bessel, etc.@:) are also defined
18645 for general complex arguments, but their branch cuts and principal values
18646 are not rigorously specified at present.
18647
18648 @node Random Numbers, Combinatorial Functions, Branch Cuts, Scientific Functions
18649 @section Random Numbers
18650
18651 @noindent
18652 @kindex k r
18653 @pindex calc-random
18654 @tindex random
18655 The @kbd{k r} (@code{calc-random}) [@code{random}] command produces
18656 random numbers of various sorts.
18657
18658 Given a positive numeric prefix argument @expr{M}, it produces a random
18659 integer @expr{N} in the range
18660 @texline @math{0 \le N < M}.
18661 @infoline @expr{0 <= N < M}.
18662 Each of the @expr{M} values appears with equal probability.
18663
18664 With no numeric prefix argument, the @kbd{k r} command takes its argument
18665 from the stack instead. Once again, if this is a positive integer @expr{M}
18666 the result is a random integer less than @expr{M}. However, note that
18667 while numeric prefix arguments are limited to six digits or so, an @expr{M}
18668 taken from the stack can be arbitrarily large. If @expr{M} is negative,
18669 the result is a random integer in the range
18670 @texline @math{M < N \le 0}.
18671 @infoline @expr{M < N <= 0}.
18672
18673 If the value on the stack is a floating-point number @expr{M}, the result
18674 is a random floating-point number @expr{N} in the range
18675 @texline @math{0 \le N < M}
18676 @infoline @expr{0 <= N < M}
18677 or
18678 @texline @math{M < N \le 0},
18679 @infoline @expr{M < N <= 0},
18680 according to the sign of @expr{M}.
18681
18682 If @expr{M} is zero, the result is a Gaussian-distributed random real
18683 number; the distribution has a mean of zero and a standard deviation
18684 of one. The algorithm used generates random numbers in pairs; thus,
18685 every other call to this function will be especially fast.
18686
18687 If @expr{M} is an error form
18688 @texline @math{m} @code{+/-} @math{\sigma}
18689 @infoline @samp{m +/- s}
18690 where @var{m} and
18691 @texline @math{\sigma}
18692 @infoline @var{s}
18693 are both real numbers, the result uses a Gaussian distribution with mean
18694 @var{m} and standard deviation
18695 @texline @math{\sigma}.
18696 @var{s}.
18697
18698 If @expr{M} is an interval form, the lower and upper bounds specify the
18699 acceptable limits of the random numbers. If both bounds are integers,
18700 the result is a random integer in the specified range. If either bound
18701 is floating-point, the result is a random real number in the specified
18702 range. If the interval is open at either end, the result will be sure
18703 not to equal that end value. (This makes a big difference for integer
18704 intervals, but for floating-point intervals it's relatively minor:
18705 with a precision of 6, @samp{random([1.0..2.0))} will return any of one
18706 million numbers from 1.00000 to 1.99999; @samp{random([1.0..2.0])} may
18707 additionally return 2.00000, but the probability of this happening is
18708 extremely small.)
18709
18710 If @expr{M} is a vector, the result is one element taken at random from
18711 the vector. All elements of the vector are given equal probabilities.
18712
18713 @vindex RandSeed
18714 The sequence of numbers produced by @kbd{k r} is completely random by
18715 default, i.e., the sequence is seeded each time you start Calc using
18716 the current time and other information. You can get a reproducible
18717 sequence by storing a particular ``seed value'' in the Calc variable
18718 @code{RandSeed}. Any integer will do for a seed; integers of from 1
18719 to 12 digits are good. If you later store a different integer into
18720 @code{RandSeed}, Calc will switch to a different pseudo-random
18721 sequence. If you ``unstore'' @code{RandSeed}, Calc will re-seed itself
18722 from the current time. If you store the same integer that you used
18723 before back into @code{RandSeed}, you will get the exact same sequence
18724 of random numbers as before.
18725
18726 @pindex calc-rrandom
18727 The @code{calc-rrandom} command (not on any key) produces a random real
18728 number between zero and one. It is equivalent to @samp{random(1.0)}.
18729
18730 @kindex k a
18731 @pindex calc-random-again
18732 The @kbd{k a} (@code{calc-random-again}) command produces another random
18733 number, re-using the most recent value of @expr{M}. With a numeric
18734 prefix argument @var{n}, it produces @var{n} more random numbers using
18735 that value of @expr{M}.
18736
18737 @kindex k h
18738 @pindex calc-shuffle
18739 @tindex shuffle
18740 The @kbd{k h} (@code{calc-shuffle}) command produces a vector of several
18741 random values with no duplicates. The value on the top of the stack
18742 specifies the set from which the random values are drawn, and may be any
18743 of the @expr{M} formats described above. The numeric prefix argument
18744 gives the length of the desired list. (If you do not provide a numeric
18745 prefix argument, the length of the list is taken from the top of the
18746 stack, and @expr{M} from second-to-top.)
18747
18748 If @expr{M} is a floating-point number, zero, or an error form (so
18749 that the random values are being drawn from the set of real numbers)
18750 there is little practical difference between using @kbd{k h} and using
18751 @kbd{k r} several times. But if the set of possible values consists
18752 of just a few integers, or the elements of a vector, then there is
18753 a very real chance that multiple @kbd{k r}'s will produce the same
18754 number more than once. The @kbd{k h} command produces a vector whose
18755 elements are always distinct. (Actually, there is a slight exception:
18756 If @expr{M} is a vector, no given vector element will be drawn more
18757 than once, but if several elements of @expr{M} are equal, they may
18758 each make it into the result vector.)
18759
18760 One use of @kbd{k h} is to rearrange a list at random. This happens
18761 if the prefix argument is equal to the number of values in the list:
18762 @kbd{[1, 1.5, 2, 2.5, 3] 5 k h} might produce the permuted list
18763 @samp{[2.5, 1, 1.5, 3, 2]}. As a convenient feature, if the argument
18764 @var{n} is negative it is replaced by the size of the set represented
18765 by @expr{M}. Naturally, this is allowed only when @expr{M} specifies
18766 a small discrete set of possibilities.
18767
18768 To do the equivalent of @kbd{k h} but with duplications allowed,
18769 given @expr{M} on the stack and with @var{n} just entered as a numeric
18770 prefix, use @kbd{v b} to build a vector of copies of @expr{M}, then use
18771 @kbd{V M k r} to ``map'' the normal @kbd{k r} function over the
18772 elements of this vector. @xref{Matrix Functions}.
18773
18774 @menu
18775 * Random Number Generator:: (Complete description of Calc's algorithm)
18776 @end menu
18777
18778 @node Random Number Generator, , Random Numbers, Random Numbers
18779 @subsection Random Number Generator
18780
18781 Calc's random number generator uses several methods to ensure that
18782 the numbers it produces are highly random. Knuth's @emph{Art of
18783 Computer Programming}, Volume II, contains a thorough description
18784 of the theory of random number generators and their measurement and
18785 characterization.
18786
18787 If @code{RandSeed} has no stored value, Calc calls Emacs' built-in
18788 @code{random} function to get a stream of random numbers, which it
18789 then treats in various ways to avoid problems inherent in the simple
18790 random number generators that many systems use to implement @code{random}.
18791
18792 When Calc's random number generator is first invoked, it ``seeds''
18793 the low-level random sequence using the time of day, so that the
18794 random number sequence will be different every time you use Calc.
18795
18796 Since Emacs Lisp doesn't specify the range of values that will be
18797 returned by its @code{random} function, Calc exercises the function
18798 several times to estimate the range. When Calc subsequently uses
18799 the @code{random} function, it takes only 10 bits of the result
18800 near the most-significant end. (It avoids at least the bottom
18801 four bits, preferably more, and also tries to avoid the top two
18802 bits.) This strategy works well with the linear congruential
18803 generators that are typically used to implement @code{random}.
18804
18805 If @code{RandSeed} contains an integer, Calc uses this integer to
18806 seed an ``additive congruential'' method (Knuth's algorithm 3.2.2A,
18807 computing
18808 @texline @math{X_{n-55} - X_{n-24}}.
18809 @infoline @expr{X_n-55 - X_n-24}).
18810 This method expands the seed
18811 value into a large table which is maintained internally; the variable
18812 @code{RandSeed} is changed from, e.g., 42 to the vector @expr{[42]}
18813 to indicate that the seed has been absorbed into this table. When
18814 @code{RandSeed} contains a vector, @kbd{k r} and related commands
18815 continue to use the same internal table as last time. There is no
18816 way to extract the complete state of the random number generator
18817 so that you can restart it from any point; you can only restart it
18818 from the same initial seed value. A simple way to restart from the
18819 same seed is to type @kbd{s r RandSeed} to get the seed vector,
18820 @kbd{v u} to unpack it back into a number, then @kbd{s t RandSeed}
18821 to reseed the generator with that number.
18822
18823 Calc uses a ``shuffling'' method as described in algorithm 3.2.2B
18824 of Knuth. It fills a table with 13 random 10-bit numbers. Then,
18825 to generate a new random number, it uses the previous number to
18826 index into the table, picks the value it finds there as the new
18827 random number, then replaces that table entry with a new value
18828 obtained from a call to the base random number generator (either
18829 the additive congruential generator or the @code{random} function
18830 supplied by the system). If there are any flaws in the base
18831 generator, shuffling will tend to even them out. But if the system
18832 provides an excellent @code{random} function, shuffling will not
18833 damage its randomness.
18834
18835 To create a random integer of a certain number of digits, Calc
18836 builds the integer three decimal digits at a time. For each group
18837 of three digits, Calc calls its 10-bit shuffling random number generator
18838 (which returns a value from 0 to 1023); if the random value is 1000
18839 or more, Calc throws it out and tries again until it gets a suitable
18840 value.
18841
18842 To create a random floating-point number with precision @var{p}, Calc
18843 simply creates a random @var{p}-digit integer and multiplies by
18844 @texline @math{10^{-p}}.
18845 @infoline @expr{10^-p}.
18846 The resulting random numbers should be very clean, but note
18847 that relatively small numbers will have few significant random digits.
18848 In other words, with a precision of 12, you will occasionally get
18849 numbers on the order of
18850 @texline @math{10^{-9}}
18851 @infoline @expr{10^-9}
18852 or
18853 @texline @math{10^{-10}},
18854 @infoline @expr{10^-10},
18855 but those numbers will only have two or three random digits since they
18856 correspond to small integers times
18857 @texline @math{10^{-12}}.
18858 @infoline @expr{10^-12}.
18859
18860 To create a random integer in the interval @samp{[0 .. @var{m})}, Calc
18861 counts the digits in @var{m}, creates a random integer with three
18862 additional digits, then reduces modulo @var{m}. Unless @var{m} is a
18863 power of ten the resulting values will be very slightly biased toward
18864 the lower numbers, but this bias will be less than 0.1%. (For example,
18865 if @var{m} is 42, Calc will reduce a random integer less than 100000
18866 modulo 42 to get a result less than 42. It is easy to show that the
18867 numbers 40 and 41 will be only 2380/2381 as likely to result from this
18868 modulo operation as numbers 39 and below.) If @var{m} is a power of
18869 ten, however, the numbers should be completely unbiased.
18870
18871 The Gaussian random numbers generated by @samp{random(0.0)} use the
18872 ``polar'' method described in Knuth section 3.4.1C. This method
18873 generates a pair of Gaussian random numbers at a time, so only every
18874 other call to @samp{random(0.0)} will require significant calculations.
18875
18876 @node Combinatorial Functions, Probability Distribution Functions, Random Numbers, Scientific Functions
18877 @section Combinatorial Functions
18878
18879 @noindent
18880 Commands relating to combinatorics and number theory begin with the
18881 @kbd{k} key prefix.
18882
18883 @kindex k g
18884 @pindex calc-gcd
18885 @tindex gcd
18886 The @kbd{k g} (@code{calc-gcd}) [@code{gcd}] command computes the
18887 Greatest Common Divisor of two integers. It also accepts fractions;
18888 the GCD of two fractions is defined by taking the GCD of the
18889 numerators, and the LCM of the denominators. This definition is
18890 consistent with the idea that @samp{a / gcd(a,x)} should yield an
18891 integer for any @samp{a} and @samp{x}. For other types of arguments,
18892 the operation is left in symbolic form.
18893
18894 @kindex k l
18895 @pindex calc-lcm
18896 @tindex lcm
18897 The @kbd{k l} (@code{calc-lcm}) [@code{lcm}] command computes the
18898 Least Common Multiple of two integers or fractions. The product of
18899 the LCM and GCD of two numbers is equal to the product of the
18900 numbers.
18901
18902 @kindex k E
18903 @pindex calc-extended-gcd
18904 @tindex egcd
18905 The @kbd{k E} (@code{calc-extended-gcd}) [@code{egcd}] command computes
18906 the GCD of two integers @expr{x} and @expr{y} and returns a vector
18907 @expr{[g, a, b]} where
18908 @texline @math{g = \gcd(x,y) = a x + b y}.
18909 @infoline @expr{g = gcd(x,y) = a x + b y}.
18910
18911 @kindex !
18912 @pindex calc-factorial
18913 @tindex fact
18914 @ignore
18915 @mindex @null
18916 @end ignore
18917 @tindex !
18918 The @kbd{!} (@code{calc-factorial}) [@code{fact}] command computes the
18919 factorial of the number at the top of the stack. If the number is an
18920 integer, the result is an exact integer. If the number is an
18921 integer-valued float, the result is a floating-point approximation. If
18922 the number is a non-integral real number, the generalized factorial is used,
18923 as defined by the Euler Gamma function. Please note that computation of
18924 large factorials can be slow; using floating-point format will help
18925 since fewer digits must be maintained. The same is true of many of
18926 the commands in this section.
18927
18928 @kindex k d
18929 @pindex calc-double-factorial
18930 @tindex dfact
18931 @ignore
18932 @mindex @null
18933 @end ignore
18934 @tindex !!
18935 The @kbd{k d} (@code{calc-double-factorial}) [@code{dfact}] command
18936 computes the ``double factorial'' of an integer. For an even integer,
18937 this is the product of even integers from 2 to @expr{N}. For an odd
18938 integer, this is the product of odd integers from 3 to @expr{N}. If
18939 the argument is an integer-valued float, the result is a floating-point
18940 approximation. This function is undefined for negative even integers.
18941 The notation @expr{N!!} is also recognized for double factorials.
18942
18943 @kindex k c
18944 @pindex calc-choose
18945 @tindex choose
18946 The @kbd{k c} (@code{calc-choose}) [@code{choose}] command computes the
18947 binomial coefficient @expr{N}-choose-@expr{M}, where @expr{M} is the number
18948 on the top of the stack and @expr{N} is second-to-top. If both arguments
18949 are integers, the result is an exact integer. Otherwise, the result is a
18950 floating-point approximation. The binomial coefficient is defined for all
18951 real numbers by
18952 @texline @math{N! \over M! (N-M)!\,}.
18953 @infoline @expr{N! / M! (N-M)!}.
18954
18955 @kindex H k c
18956 @pindex calc-perm
18957 @tindex perm
18958 @ifinfo
18959 The @kbd{H k c} (@code{calc-perm}) [@code{perm}] command computes the
18960 number-of-permutations function @expr{N! / (N-M)!}.
18961 @end ifinfo
18962 @tex
18963 The \kbd{H k c} (\code{calc-perm}) [\code{perm}] command computes the
18964 number-of-perm\-utations function $N! \over (N-M)!\,$.
18965 @end tex
18966
18967 @kindex k b
18968 @kindex H k b
18969 @pindex calc-bernoulli-number
18970 @tindex bern
18971 The @kbd{k b} (@code{calc-bernoulli-number}) [@code{bern}] command
18972 computes a given Bernoulli number. The value at the top of the stack
18973 is a nonnegative integer @expr{n} that specifies which Bernoulli number
18974 is desired. The @kbd{H k b} command computes a Bernoulli polynomial,
18975 taking @expr{n} from the second-to-top position and @expr{x} from the
18976 top of the stack. If @expr{x} is a variable or formula the result is
18977 a polynomial in @expr{x}; if @expr{x} is a number the result is a number.
18978
18979 @kindex k e
18980 @kindex H k e
18981 @pindex calc-euler-number
18982 @tindex euler
18983 The @kbd{k e} (@code{calc-euler-number}) [@code{euler}] command similarly
18984 computes an Euler number, and @w{@kbd{H k e}} computes an Euler polynomial.
18985 Bernoulli and Euler numbers occur in the Taylor expansions of several
18986 functions.
18987
18988 @kindex k s
18989 @kindex H k s
18990 @pindex calc-stirling-number
18991 @tindex stir1
18992 @tindex stir2
18993 The @kbd{k s} (@code{calc-stirling-number}) [@code{stir1}] command
18994 computes a Stirling number of the first
18995 @texline kind@tie{}@math{n \brack m},
18996 @infoline kind,
18997 given two integers @expr{n} and @expr{m} on the stack. The @kbd{H k s}
18998 [@code{stir2}] command computes a Stirling number of the second
18999 @texline kind@tie{}@math{n \brace m}.
19000 @infoline kind.
19001 These are the number of @expr{m}-cycle permutations of @expr{n} objects,
19002 and the number of ways to partition @expr{n} objects into @expr{m}
19003 non-empty sets, respectively.
19004
19005 @kindex k p
19006 @pindex calc-prime-test
19007 @cindex Primes
19008 The @kbd{k p} (@code{calc-prime-test}) command checks if the integer on
19009 the top of the stack is prime. For integers less than eight million, the
19010 answer is always exact and reasonably fast. For larger integers, a
19011 probabilistic method is used (see Knuth vol. II, section 4.5.4, algorithm P).
19012 The number is first checked against small prime factors (up to 13). Then,
19013 any number of iterations of the algorithm are performed. Each step either
19014 discovers that the number is non-prime, or substantially increases the
19015 certainty that the number is prime. After a few steps, the chance that
19016 a number was mistakenly described as prime will be less than one percent.
19017 (Indeed, this is a worst-case estimate of the probability; in practice
19018 even a single iteration is quite reliable.) After the @kbd{k p} command,
19019 the number will be reported as definitely prime or non-prime if possible,
19020 or otherwise ``probably'' prime with a certain probability of error.
19021
19022 @ignore
19023 @starindex
19024 @end ignore
19025 @tindex prime
19026 The normal @kbd{k p} command performs one iteration of the primality
19027 test. Pressing @kbd{k p} repeatedly for the same integer will perform
19028 additional iterations. Also, @kbd{k p} with a numeric prefix performs
19029 the specified number of iterations. There is also an algebraic function
19030 @samp{prime(n)} or @samp{prime(n,iters)} which returns 1 if @expr{n}
19031 is (probably) prime and 0 if not.
19032
19033 @kindex k f
19034 @pindex calc-prime-factors
19035 @tindex prfac
19036 The @kbd{k f} (@code{calc-prime-factors}) [@code{prfac}] command
19037 attempts to decompose an integer into its prime factors. For numbers up
19038 to 25 million, the answer is exact although it may take some time. The
19039 result is a vector of the prime factors in increasing order. For larger
19040 inputs, prime factors above 5000 may not be found, in which case the
19041 last number in the vector will be an unfactored integer greater than 25
19042 million (with a warning message). For negative integers, the first
19043 element of the list will be @mathit{-1}. For inputs @mathit{-1}, @mathit{0}, and
19044 @mathit{1}, the result is a list of the same number.
19045
19046 @kindex k n
19047 @pindex calc-next-prime
19048 @ignore
19049 @mindex nextpr@idots
19050 @end ignore
19051 @tindex nextprime
19052 The @kbd{k n} (@code{calc-next-prime}) [@code{nextprime}] command finds
19053 the next prime above a given number. Essentially, it searches by calling
19054 @code{calc-prime-test} on successive integers until it finds one that
19055 passes the test. This is quite fast for integers less than eight million,
19056 but once the probabilistic test comes into play the search may be rather
19057 slow. Ordinarily this command stops for any prime that passes one iteration
19058 of the primality test. With a numeric prefix argument, a number must pass
19059 the specified number of iterations before the search stops. (This only
19060 matters when searching above eight million.) You can always use additional
19061 @kbd{k p} commands to increase your certainty that the number is indeed
19062 prime.
19063
19064 @kindex I k n
19065 @pindex calc-prev-prime
19066 @ignore
19067 @mindex prevpr@idots
19068 @end ignore
19069 @tindex prevprime
19070 The @kbd{I k n} (@code{calc-prev-prime}) [@code{prevprime}] command
19071 analogously finds the next prime less than a given number.
19072
19073 @kindex k t
19074 @pindex calc-totient
19075 @tindex totient
19076 The @kbd{k t} (@code{calc-totient}) [@code{totient}] command computes the
19077 Euler ``totient''
19078 @texline function@tie{}@math{\phi(n)},
19079 @infoline function,
19080 the number of integers less than @expr{n} which
19081 are relatively prime to @expr{n}.
19082
19083 @kindex k m
19084 @pindex calc-moebius
19085 @tindex moebius
19086 The @kbd{k m} (@code{calc-moebius}) [@code{moebius}] command computes the
19087 @texline M@"obius @math{\mu}
19088 @infoline Moebius ``mu''
19089 function. If the input number is a product of @expr{k}
19090 distinct factors, this is @expr{(-1)^k}. If the input number has any
19091 duplicate factors (i.e., can be divided by the same prime more than once),
19092 the result is zero.
19093
19094 @node Probability Distribution Functions, , Combinatorial Functions, Scientific Functions
19095 @section Probability Distribution Functions
19096
19097 @noindent
19098 The functions in this section compute various probability distributions.
19099 For continuous distributions, this is the integral of the probability
19100 density function from @expr{x} to infinity. (These are the ``upper
19101 tail'' distribution functions; there are also corresponding ``lower
19102 tail'' functions which integrate from minus infinity to @expr{x}.)
19103 For discrete distributions, the upper tail function gives the sum
19104 from @expr{x} to infinity; the lower tail function gives the sum
19105 from minus infinity up to, but not including,@w{ }@expr{x}.
19106
19107 To integrate from @expr{x} to @expr{y}, just use the distribution
19108 function twice and subtract. For example, the probability that a
19109 Gaussian random variable with mean 2 and standard deviation 1 will
19110 lie in the range from 2.5 to 2.8 is @samp{utpn(2.5,2,1) - utpn(2.8,2,1)}
19111 (``the probability that it is greater than 2.5, but not greater than 2.8''),
19112 or equivalently @samp{ltpn(2.8,2,1) - ltpn(2.5,2,1)}.
19113
19114 @kindex k B
19115 @kindex I k B
19116 @pindex calc-utpb
19117 @tindex utpb
19118 @tindex ltpb
19119 The @kbd{k B} (@code{calc-utpb}) [@code{utpb}] function uses the
19120 binomial distribution. Push the parameters @var{n}, @var{p}, and
19121 then @var{x} onto the stack; the result (@samp{utpb(x,n,p)}) is the
19122 probability that an event will occur @var{x} or more times out
19123 of @var{n} trials, if its probability of occurring in any given
19124 trial is @var{p}. The @kbd{I k B} [@code{ltpb}] function is
19125 the probability that the event will occur fewer than @var{x} times.
19126
19127 The other probability distribution functions similarly take the
19128 form @kbd{k @var{X}} (@code{calc-utp@var{x}}) [@code{utp@var{x}}]
19129 and @kbd{I k @var{X}} [@code{ltp@var{x}}], for various letters
19130 @var{x}. The arguments to the algebraic functions are the value of
19131 the random variable first, then whatever other parameters define the
19132 distribution. Note these are among the few Calc functions where the
19133 order of the arguments in algebraic form differs from the order of
19134 arguments as found on the stack. (The random variable comes last on
19135 the stack, so that you can type, e.g., @kbd{2 @key{RET} 1 @key{RET} 2.5
19136 k N M-@key{RET} @key{DEL} 2.8 k N -}, using @kbd{M-@key{RET} @key{DEL}} to
19137 recover the original arguments but substitute a new value for @expr{x}.)
19138
19139 @kindex k C
19140 @pindex calc-utpc
19141 @tindex utpc
19142 @ignore
19143 @mindex @idots
19144 @end ignore
19145 @kindex I k C
19146 @ignore
19147 @mindex @null
19148 @end ignore
19149 @tindex ltpc
19150 The @samp{utpc(x,v)} function uses the chi-square distribution with
19151 @texline @math{\nu}
19152 @infoline @expr{v}
19153 degrees of freedom. It is the probability that a model is
19154 correct if its chi-square statistic is @expr{x}.
19155
19156 @kindex k F
19157 @pindex calc-utpf
19158 @tindex utpf
19159 @ignore
19160 @mindex @idots
19161 @end ignore
19162 @kindex I k F
19163 @ignore
19164 @mindex @null
19165 @end ignore
19166 @tindex ltpf
19167 The @samp{utpf(F,v1,v2)} function uses the F distribution, used in
19168 various statistical tests. The parameters
19169 @texline @math{\nu_1}
19170 @infoline @expr{v1}
19171 and
19172 @texline @math{\nu_2}
19173 @infoline @expr{v2}
19174 are the degrees of freedom in the numerator and denominator,
19175 respectively, used in computing the statistic @expr{F}.
19176
19177 @kindex k N
19178 @pindex calc-utpn
19179 @tindex utpn
19180 @ignore
19181 @mindex @idots
19182 @end ignore
19183 @kindex I k N
19184 @ignore
19185 @mindex @null
19186 @end ignore
19187 @tindex ltpn
19188 The @samp{utpn(x,m,s)} function uses a normal (Gaussian) distribution
19189 with mean @expr{m} and standard deviation
19190 @texline @math{\sigma}.
19191 @infoline @expr{s}.
19192 It is the probability that such a normal-distributed random variable
19193 would exceed @expr{x}.
19194
19195 @kindex k P
19196 @pindex calc-utpp
19197 @tindex utpp
19198 @ignore
19199 @mindex @idots
19200 @end ignore
19201 @kindex I k P
19202 @ignore
19203 @mindex @null
19204 @end ignore
19205 @tindex ltpp
19206 The @samp{utpp(n,x)} function uses a Poisson distribution with
19207 mean @expr{x}. It is the probability that @expr{n} or more such
19208 Poisson random events will occur.
19209
19210 @kindex k T
19211 @pindex calc-ltpt
19212 @tindex utpt
19213 @ignore
19214 @mindex @idots
19215 @end ignore
19216 @kindex I k T
19217 @ignore
19218 @mindex @null
19219 @end ignore
19220 @tindex ltpt
19221 The @samp{utpt(t,v)} function uses the Student's ``t'' distribution
19222 with
19223 @texline @math{\nu}
19224 @infoline @expr{v}
19225 degrees of freedom. It is the probability that a
19226 t-distributed random variable will be greater than @expr{t}.
19227 (Note: This computes the distribution function
19228 @texline @math{A(t|\nu)}
19229 @infoline @expr{A(t|v)}
19230 where
19231 @texline @math{A(0|\nu) = 1}
19232 @infoline @expr{A(0|v) = 1}
19233 and
19234 @texline @math{A(\infty|\nu) \to 0}.
19235 @infoline @expr{A(inf|v) -> 0}.
19236 The @code{UTPT} operation on the HP-48 uses a different definition which
19237 returns half of Calc's value: @samp{UTPT(t,v) = .5*utpt(t,v)}.)
19238
19239 While Calc does not provide inverses of the probability distribution
19240 functions, the @kbd{a R} command can be used to solve for the inverse.
19241 Since the distribution functions are monotonic, @kbd{a R} is guaranteed
19242 to be able to find a solution given any initial guess.
19243 @xref{Numerical Solutions}.
19244
19245 @node Matrix Functions, Algebra, Scientific Functions, Top
19246 @chapter Vector/Matrix Functions
19247
19248 @noindent
19249 Many of the commands described here begin with the @kbd{v} prefix.
19250 (For convenience, the shift-@kbd{V} prefix is equivalent to @kbd{v}.)
19251 The commands usually apply to both plain vectors and matrices; some
19252 apply only to matrices or only to square matrices. If the argument
19253 has the wrong dimensions the operation is left in symbolic form.
19254
19255 Vectors are entered and displayed using @samp{[a,b,c]} notation.
19256 Matrices are vectors of which all elements are vectors of equal length.
19257 (Though none of the standard Calc commands use this concept, a
19258 three-dimensional matrix or rank-3 tensor could be defined as a
19259 vector of matrices, and so on.)
19260
19261 @menu
19262 * Packing and Unpacking::
19263 * Building Vectors::
19264 * Extracting Elements::
19265 * Manipulating Vectors::
19266 * Vector and Matrix Arithmetic::
19267 * Set Operations::
19268 * Statistical Operations::
19269 * Reducing and Mapping::
19270 * Vector and Matrix Formats::
19271 @end menu
19272
19273 @node Packing and Unpacking, Building Vectors, Matrix Functions, Matrix Functions
19274 @section Packing and Unpacking
19275
19276 @noindent
19277 Calc's ``pack'' and ``unpack'' commands collect stack entries to build
19278 composite objects such as vectors and complex numbers. They are
19279 described in this chapter because they are most often used to build
19280 vectors.
19281
19282 @kindex v p
19283 @pindex calc-pack
19284 The @kbd{v p} (@code{calc-pack}) [@code{pack}] command collects several
19285 elements from the stack into a matrix, complex number, HMS form, error
19286 form, etc. It uses a numeric prefix argument to specify the kind of
19287 object to be built; this argument is referred to as the ``packing mode.''
19288 If the packing mode is a nonnegative integer, a vector of that
19289 length is created. For example, @kbd{C-u 5 v p} will pop the top
19290 five stack elements and push back a single vector of those five
19291 elements. (@kbd{C-u 0 v p} simply creates an empty vector.)
19292
19293 The same effect can be had by pressing @kbd{[} to push an incomplete
19294 vector on the stack, using @key{TAB} (@code{calc-roll-down}) to sneak
19295 the incomplete object up past a certain number of elements, and
19296 then pressing @kbd{]} to complete the vector.
19297
19298 Negative packing modes create other kinds of composite objects:
19299
19300 @table @cite
19301 @item -1
19302 Two values are collected to build a complex number. For example,
19303 @kbd{5 @key{RET} 7 C-u -1 v p} creates the complex number
19304 @expr{(5, 7)}. The result is always a rectangular complex
19305 number. The two input values must both be real numbers,
19306 i.e., integers, fractions, or floats. If they are not, Calc
19307 will instead build a formula like @samp{a + (0, 1) b}. (The
19308 other packing modes also create a symbolic answer if the
19309 components are not suitable.)
19310
19311 @item -2
19312 Two values are collected to build a polar complex number.
19313 The first is the magnitude; the second is the phase expressed
19314 in either degrees or radians according to the current angular
19315 mode.
19316
19317 @item -3
19318 Three values are collected into an HMS form. The first
19319 two values (hours and minutes) must be integers or
19320 integer-valued floats. The third value may be any real
19321 number.
19322
19323 @item -4
19324 Two values are collected into an error form. The inputs
19325 may be real numbers or formulas.
19326
19327 @item -5
19328 Two values are collected into a modulo form. The inputs
19329 must be real numbers.
19330
19331 @item -6
19332 Two values are collected into the interval @samp{[a .. b]}.
19333 The inputs may be real numbers, HMS or date forms, or formulas.
19334
19335 @item -7
19336 Two values are collected into the interval @samp{[a .. b)}.
19337
19338 @item -8
19339 Two values are collected into the interval @samp{(a .. b]}.
19340
19341 @item -9
19342 Two values are collected into the interval @samp{(a .. b)}.
19343
19344 @item -10
19345 Two integer values are collected into a fraction.
19346
19347 @item -11
19348 Two values are collected into a floating-point number.
19349 The first is the mantissa; the second, which must be an
19350 integer, is the exponent. The result is the mantissa
19351 times ten to the power of the exponent.
19352
19353 @item -12
19354 This is treated the same as @mathit{-11} by the @kbd{v p} command.
19355 When unpacking, @mathit{-12} specifies that a floating-point mantissa
19356 is desired.
19357
19358 @item -13
19359 A real number is converted into a date form.
19360
19361 @item -14
19362 Three numbers (year, month, day) are packed into a pure date form.
19363
19364 @item -15
19365 Six numbers are packed into a date/time form.
19366 @end table
19367
19368 With any of the two-input negative packing modes, either or both
19369 of the inputs may be vectors. If both are vectors of the same
19370 length, the result is another vector made by packing corresponding
19371 elements of the input vectors. If one input is a vector and the
19372 other is a plain number, the number is packed along with each vector
19373 element to produce a new vector. For example, @kbd{C-u -4 v p}
19374 could be used to convert a vector of numbers and a vector of errors
19375 into a single vector of error forms; @kbd{C-u -5 v p} could convert
19376 a vector of numbers and a single number @var{M} into a vector of
19377 numbers modulo @var{M}.
19378
19379 If you don't give a prefix argument to @kbd{v p}, it takes
19380 the packing mode from the top of the stack. The elements to
19381 be packed then begin at stack level 2. Thus
19382 @kbd{1 @key{RET} 2 @key{RET} 4 n v p} is another way to
19383 enter the error form @samp{1 +/- 2}.
19384
19385 If the packing mode taken from the stack is a vector, the result is a
19386 matrix with the dimensions specified by the elements of the vector,
19387 which must each be integers. For example, if the packing mode is
19388 @samp{[2, 3]}, then six numbers will be taken from the stack and
19389 returned in the form @samp{[@w{[a, b, c]}, [d, e, f]]}.
19390
19391 If any elements of the vector are negative, other kinds of
19392 packing are done at that level as described above. For
19393 example, @samp{[2, 3, -4]} takes 12 objects and creates a
19394 @texline @math{2\times3}
19395 @infoline 2x3
19396 matrix of error forms: @samp{[[a +/- b, c +/- d ... ]]}.
19397 Also, @samp{[-4, -10]} will convert four integers into an
19398 error form consisting of two fractions: @samp{a:b +/- c:d}.
19399
19400 @ignore
19401 @starindex
19402 @end ignore
19403 @tindex pack
19404 There is an equivalent algebraic function,
19405 @samp{pack(@var{mode}, @var{items})} where @var{mode} is a
19406 packing mode (an integer or a vector of integers) and @var{items}
19407 is a vector of objects to be packed (re-packed, really) according
19408 to that mode. For example, @samp{pack([3, -4], [a,b,c,d,e,f])}
19409 yields @samp{[a +/- b, @w{c +/- d}, e +/- f]}. The function is
19410 left in symbolic form if the packing mode is illegal, or if the
19411 number of data items does not match the number of items required
19412 by the mode.
19413
19414 @kindex v u
19415 @pindex calc-unpack
19416 The @kbd{v u} (@code{calc-unpack}) command takes the vector, complex
19417 number, HMS form, or other composite object on the top of the stack and
19418 ``unpacks'' it, pushing each of its elements onto the stack as separate
19419 objects. Thus, it is the ``inverse'' of @kbd{v p}. If the value
19420 at the top of the stack is a formula, @kbd{v u} unpacks it by pushing
19421 each of the arguments of the top-level operator onto the stack.
19422
19423 You can optionally give a numeric prefix argument to @kbd{v u}
19424 to specify an explicit (un)packing mode. If the packing mode is
19425 negative and the input is actually a vector or matrix, the result
19426 will be two or more similar vectors or matrices of the elements.
19427 For example, given the vector @samp{[@w{a +/- b}, c^2, d +/- 7]},
19428 the result of @kbd{C-u -4 v u} will be the two vectors
19429 @samp{[a, c^2, d]} and @w{@samp{[b, 0, 7]}}.
19430
19431 Note that the prefix argument can have an effect even when the input is
19432 not a vector. For example, if the input is the number @mathit{-5}, then
19433 @kbd{c-u -1 v u} yields @mathit{-5} and 0 (the components of @mathit{-5}
19434 when viewed as a rectangular complex number); @kbd{C-u -2 v u} yields 5
19435 and 180 (assuming Degrees mode); and @kbd{C-u -10 v u} yields @mathit{-5}
19436 and 1 (the numerator and denominator of @mathit{-5}, viewed as a rational
19437 number). Plain @kbd{v u} with this input would complain that the input
19438 is not a composite object.
19439
19440 Unpacking mode @mathit{-11} converts a float into an integer mantissa and
19441 an integer exponent, where the mantissa is not divisible by 10
19442 (except that 0.0 is represented by a mantissa and exponent of 0).
19443 Unpacking mode @mathit{-12} converts a float into a floating-point mantissa
19444 and integer exponent, where the mantissa (for non-zero numbers)
19445 is guaranteed to lie in the range [1 .. 10). In both cases,
19446 the mantissa is shifted left or right (and the exponent adjusted
19447 to compensate) in order to satisfy these constraints.
19448
19449 Positive unpacking modes are treated differently than for @kbd{v p}.
19450 A mode of 1 is much like plain @kbd{v u} with no prefix argument,
19451 except that in addition to the components of the input object,
19452 a suitable packing mode to re-pack the object is also pushed.
19453 Thus, @kbd{C-u 1 v u} followed by @kbd{v p} will re-build the
19454 original object.
19455
19456 A mode of 2 unpacks two levels of the object; the resulting
19457 re-packing mode will be a vector of length 2. This might be used
19458 to unpack a matrix, say, or a vector of error forms. Higher
19459 unpacking modes unpack the input even more deeply.
19460
19461 @ignore
19462 @starindex
19463 @end ignore
19464 @tindex unpack
19465 There are two algebraic functions analogous to @kbd{v u}.
19466 The @samp{unpack(@var{mode}, @var{item})} function unpacks the
19467 @var{item} using the given @var{mode}, returning the result as
19468 a vector of components. Here the @var{mode} must be an
19469 integer, not a vector. For example, @samp{unpack(-4, a +/- b)}
19470 returns @samp{[a, b]}, as does @samp{unpack(1, a +/- b)}.
19471
19472 @ignore
19473 @starindex
19474 @end ignore
19475 @tindex unpackt
19476 The @code{unpackt} function is like @code{unpack} but instead
19477 of returning a simple vector of items, it returns a vector of
19478 two things: The mode, and the vector of items. For example,
19479 @samp{unpackt(1, 2:3 +/- 1:4)} returns @samp{[-4, [2:3, 1:4]]},
19480 and @samp{unpackt(2, 2:3 +/- 1:4)} returns @samp{[[-4, -10], [2, 3, 1, 4]]}.
19481 The identity for re-building the original object is
19482 @samp{apply(pack, unpackt(@var{n}, @var{x})) = @var{x}}. (The
19483 @code{apply} function builds a function call given the function
19484 name and a vector of arguments.)
19485
19486 @cindex Numerator of a fraction, extracting
19487 Subscript notation is a useful way to extract a particular part
19488 of an object. For example, to get the numerator of a rational
19489 number, you can use @samp{unpack(-10, @var{x})_1}.
19490
19491 @node Building Vectors, Extracting Elements, Packing and Unpacking, Matrix Functions
19492 @section Building Vectors
19493
19494 @noindent
19495 Vectors and matrices can be added,
19496 subtracted, multiplied, and divided; @pxref{Basic Arithmetic}.
19497
19498 @kindex |
19499 @pindex calc-concat
19500 @ignore
19501 @mindex @null
19502 @end ignore
19503 @tindex |
19504 The @kbd{|} (@code{calc-concat}) command ``concatenates'' two vectors
19505 into one. For example, after @kbd{@w{[ 1 , 2 ]} [ 3 , 4 ] |}, the stack
19506 will contain the single vector @samp{[1, 2, 3, 4]}. If the arguments
19507 are matrices, the rows of the first matrix are concatenated with the
19508 rows of the second. (In other words, two matrices are just two vectors
19509 of row-vectors as far as @kbd{|} is concerned.)
19510
19511 If either argument to @kbd{|} is a scalar (a non-vector), it is treated
19512 like a one-element vector for purposes of concatenation: @kbd{1 [ 2 , 3 ] |}
19513 produces the vector @samp{[1, 2, 3]}. Likewise, if one argument is a
19514 matrix and the other is a plain vector, the vector is treated as a
19515 one-row matrix.
19516
19517 @kindex H |
19518 @tindex append
19519 The @kbd{H |} (@code{calc-append}) [@code{append}] command concatenates
19520 two vectors without any special cases. Both inputs must be vectors.
19521 Whether or not they are matrices is not taken into account. If either
19522 argument is a scalar, the @code{append} function is left in symbolic form.
19523 See also @code{cons} and @code{rcons} below.
19524
19525 @kindex I |
19526 @kindex H I |
19527 The @kbd{I |} and @kbd{H I |} commands are similar, but they use their
19528 two stack arguments in the opposite order. Thus @kbd{I |} is equivalent
19529 to @kbd{@key{TAB} |}, but possibly more convenient and also a bit faster.
19530
19531 @kindex v d
19532 @pindex calc-diag
19533 @tindex diag
19534 The @kbd{v d} (@code{calc-diag}) [@code{diag}] function builds a diagonal
19535 square matrix. The optional numeric prefix gives the number of rows
19536 and columns in the matrix. If the value at the top of the stack is a
19537 vector, the elements of the vector are used as the diagonal elements; the
19538 prefix, if specified, must match the size of the vector. If the value on
19539 the stack is a scalar, it is used for each element on the diagonal, and
19540 the prefix argument is required.
19541
19542 To build a constant square matrix, e.g., a
19543 @texline @math{3\times3}
19544 @infoline 3x3
19545 matrix filled with ones, use @kbd{0 M-3 v d 1 +}, i.e., build a zero
19546 matrix first and then add a constant value to that matrix. (Another
19547 alternative would be to use @kbd{v b} and @kbd{v a}; see below.)
19548
19549 @kindex v i
19550 @pindex calc-ident
19551 @tindex idn
19552 The @kbd{v i} (@code{calc-ident}) [@code{idn}] function builds an identity
19553 matrix of the specified size. It is a convenient form of @kbd{v d}
19554 where the diagonal element is always one. If no prefix argument is given,
19555 this command prompts for one.
19556
19557 In algebraic notation, @samp{idn(a,n)} acts much like @samp{diag(a,n)},
19558 except that @expr{a} is required to be a scalar (non-vector) quantity.
19559 If @expr{n} is omitted, @samp{idn(a)} represents @expr{a} times an
19560 identity matrix of unknown size. Calc can operate algebraically on
19561 such generic identity matrices, and if one is combined with a matrix
19562 whose size is known, it is converted automatically to an identity
19563 matrix of a suitable matching size. The @kbd{v i} command with an
19564 argument of zero creates a generic identity matrix, @samp{idn(1)}.
19565 Note that in dimensioned Matrix mode (@pxref{Matrix Mode}), generic
19566 identity matrices are immediately expanded to the current default
19567 dimensions.
19568
19569 @kindex v x
19570 @pindex calc-index
19571 @tindex index
19572 The @kbd{v x} (@code{calc-index}) [@code{index}] function builds a vector
19573 of consecutive integers from 1 to @var{n}, where @var{n} is the numeric
19574 prefix argument. If you do not provide a prefix argument, you will be
19575 prompted to enter a suitable number. If @var{n} is negative, the result
19576 is a vector of negative integers from @var{n} to @mathit{-1}.
19577
19578 With a prefix argument of just @kbd{C-u}, the @kbd{v x} command takes
19579 three values from the stack: @var{n}, @var{start}, and @var{incr} (with
19580 @var{incr} at top-of-stack). Counting starts at @var{start} and increases
19581 by @var{incr} for successive vector elements. If @var{start} or @var{n}
19582 is in floating-point format, the resulting vector elements will also be
19583 floats. Note that @var{start} and @var{incr} may in fact be any kind
19584 of numbers or formulas.
19585
19586 When @var{start} and @var{incr} are specified, a negative @var{n} has a
19587 different interpretation: It causes a geometric instead of arithmetic
19588 sequence to be generated. For example, @samp{index(-3, a, b)} produces
19589 @samp{[a, a b, a b^2]}. If you omit @var{incr} in the algebraic form,
19590 @samp{index(@var{n}, @var{start})}, the default value for @var{incr}
19591 is one for positive @var{n} or two for negative @var{n}.
19592
19593 @kindex v b
19594 @pindex calc-build-vector
19595 @tindex cvec
19596 The @kbd{v b} (@code{calc-build-vector}) [@code{cvec}] function builds a
19597 vector of @var{n} copies of the value on the top of the stack, where @var{n}
19598 is the numeric prefix argument. In algebraic formulas, @samp{cvec(x,n,m)}
19599 can also be used to build an @var{n}-by-@var{m} matrix of copies of @var{x}.
19600 (Interactively, just use @kbd{v b} twice: once to build a row, then again
19601 to build a matrix of copies of that row.)
19602
19603 @kindex v h
19604 @kindex I v h
19605 @pindex calc-head
19606 @pindex calc-tail
19607 @tindex head
19608 @tindex tail
19609 The @kbd{v h} (@code{calc-head}) [@code{head}] function returns the first
19610 element of a vector. The @kbd{I v h} (@code{calc-tail}) [@code{tail}]
19611 function returns the vector with its first element removed. In both
19612 cases, the argument must be a non-empty vector.
19613
19614 @kindex v k
19615 @pindex calc-cons
19616 @tindex cons
19617 The @kbd{v k} (@code{calc-cons}) [@code{cons}] function takes a value @var{h}
19618 and a vector @var{t} from the stack, and produces the vector whose head is
19619 @var{h} and whose tail is @var{t}. This is similar to @kbd{|}, except
19620 if @var{h} is itself a vector, @kbd{|} will concatenate the two vectors
19621 whereas @code{cons} will insert @var{h} at the front of the vector @var{t}.
19622
19623 @kindex H v h
19624 @tindex rhead
19625 @ignore
19626 @mindex @idots
19627 @end ignore
19628 @kindex H I v h
19629 @ignore
19630 @mindex @null
19631 @end ignore
19632 @kindex H v k
19633 @ignore
19634 @mindex @null
19635 @end ignore
19636 @tindex rtail
19637 @ignore
19638 @mindex @null
19639 @end ignore
19640 @tindex rcons
19641 Each of these three functions also accepts the Hyperbolic flag [@code{rhead},
19642 @code{rtail}, @code{rcons}] in which case @var{t} instead represents
19643 the @emph{last} single element of the vector, with @var{h}
19644 representing the remainder of the vector. Thus the vector
19645 @samp{[a, b, c, d] = cons(a, [b, c, d]) = rcons([a, b, c], d)}.
19646 Also, @samp{head([a, b, c, d]) = a}, @samp{tail([a, b, c, d]) = [b, c, d]},
19647 @samp{rhead([a, b, c, d]) = [a, b, c]}, and @samp{rtail([a, b, c, d]) = d}.
19648
19649 @node Extracting Elements, Manipulating Vectors, Building Vectors, Matrix Functions
19650 @section Extracting Vector Elements
19651
19652 @noindent
19653 @kindex v r
19654 @pindex calc-mrow
19655 @tindex mrow
19656 The @kbd{v r} (@code{calc-mrow}) [@code{mrow}] command extracts one row of
19657 the matrix on the top of the stack, or one element of the plain vector on
19658 the top of the stack. The row or element is specified by the numeric
19659 prefix argument; the default is to prompt for the row or element number.
19660 The matrix or vector is replaced by the specified row or element in the
19661 form of a vector or scalar, respectively.
19662
19663 @cindex Permutations, applying
19664 With a prefix argument of @kbd{C-u} only, @kbd{v r} takes the index of
19665 the element or row from the top of the stack, and the vector or matrix
19666 from the second-to-top position. If the index is itself a vector of
19667 integers, the result is a vector of the corresponding elements of the
19668 input vector, or a matrix of the corresponding rows of the input matrix.
19669 This command can be used to obtain any permutation of a vector.
19670
19671 With @kbd{C-u}, if the index is an interval form with integer components,
19672 it is interpreted as a range of indices and the corresponding subvector or
19673 submatrix is returned.
19674
19675 @cindex Subscript notation
19676 @kindex a _
19677 @pindex calc-subscript
19678 @tindex subscr
19679 @tindex _
19680 Subscript notation in algebraic formulas (@samp{a_b}) stands for the
19681 Calc function @code{subscr}, which is synonymous with @code{mrow}.
19682 Thus, @samp{[x, y, z]_k} produces @expr{x}, @expr{y}, or @expr{z} if
19683 @expr{k} is one, two, or three, respectively. A double subscript
19684 (@samp{M_i_j}, equivalent to @samp{subscr(subscr(M, i), j)}) will
19685 access the element at row @expr{i}, column @expr{j} of a matrix.
19686 The @kbd{a _} (@code{calc-subscript}) command creates a subscript
19687 formula @samp{a_b} out of two stack entries. (It is on the @kbd{a}
19688 ``algebra'' prefix because subscripted variables are often used
19689 purely as an algebraic notation.)
19690
19691 @tindex mrrow
19692 Given a negative prefix argument, @kbd{v r} instead deletes one row or
19693 element from the matrix or vector on the top of the stack. Thus
19694 @kbd{C-u 2 v r} replaces a matrix with its second row, but @kbd{C-u -2 v r}
19695 replaces the matrix with the same matrix with its second row removed.
19696 In algebraic form this function is called @code{mrrow}.
19697
19698 @tindex getdiag
19699 Given a prefix argument of zero, @kbd{v r} extracts the diagonal elements
19700 of a square matrix in the form of a vector. In algebraic form this
19701 function is called @code{getdiag}.
19702
19703 @kindex v c
19704 @pindex calc-mcol
19705 @tindex mcol
19706 @tindex mrcol
19707 The @kbd{v c} (@code{calc-mcol}) [@code{mcol} or @code{mrcol}] command is
19708 the analogous operation on columns of a matrix. Given a plain vector
19709 it extracts (or removes) one element, just like @kbd{v r}. If the
19710 index in @kbd{C-u v c} is an interval or vector and the argument is a
19711 matrix, the result is a submatrix with only the specified columns
19712 retained (and possibly permuted in the case of a vector index).
19713
19714 To extract a matrix element at a given row and column, use @kbd{v r} to
19715 extract the row as a vector, then @kbd{v c} to extract the column element
19716 from that vector. In algebraic formulas, it is often more convenient to
19717 use subscript notation: @samp{m_i_j} gives row @expr{i}, column @expr{j}
19718 of matrix @expr{m}.
19719
19720 @kindex v s
19721 @pindex calc-subvector
19722 @tindex subvec
19723 The @kbd{v s} (@code{calc-subvector}) [@code{subvec}] command extracts
19724 a subvector of a vector. The arguments are the vector, the starting
19725 index, and the ending index, with the ending index in the top-of-stack
19726 position. The starting index indicates the first element of the vector
19727 to take. The ending index indicates the first element @emph{past} the
19728 range to be taken. Thus, @samp{subvec([a, b, c, d, e], 2, 4)} produces
19729 the subvector @samp{[b, c]}. You could get the same result using
19730 @samp{mrow([a, b, c, d, e], @w{[2 .. 4)})}.
19731
19732 If either the start or the end index is zero or negative, it is
19733 interpreted as relative to the end of the vector. Thus
19734 @samp{subvec([a, b, c, d, e], 2, -2)} also produces @samp{[b, c]}. In
19735 the algebraic form, the end index can be omitted in which case it
19736 is taken as zero, i.e., elements from the starting element to the
19737 end of the vector are used. The infinity symbol, @code{inf}, also
19738 has this effect when used as the ending index.
19739
19740 @kindex I v s
19741 @tindex rsubvec
19742 With the Inverse flag, @kbd{I v s} [@code{rsubvec}] removes a subvector
19743 from a vector. The arguments are interpreted the same as for the
19744 normal @kbd{v s} command. Thus, @samp{rsubvec([a, b, c, d, e], 2, 4)}
19745 produces @samp{[a, d, e]}. It is always true that @code{subvec} and
19746 @code{rsubvec} return complementary parts of the input vector.
19747
19748 @xref{Selecting Subformulas}, for an alternative way to operate on
19749 vectors one element at a time.
19750
19751 @node Manipulating Vectors, Vector and Matrix Arithmetic, Extracting Elements, Matrix Functions
19752 @section Manipulating Vectors
19753
19754 @noindent
19755 @kindex v l
19756 @pindex calc-vlength
19757 @tindex vlen
19758 The @kbd{v l} (@code{calc-vlength}) [@code{vlen}] command computes the
19759 length of a vector. The length of a non-vector is considered to be zero.
19760 Note that matrices are just vectors of vectors for the purposes of this
19761 command.
19762
19763 @kindex H v l
19764 @tindex mdims
19765 With the Hyperbolic flag, @kbd{H v l} [@code{mdims}] computes a vector
19766 of the dimensions of a vector, matrix, or higher-order object. For
19767 example, @samp{mdims([[a,b,c],[d,e,f]])} returns @samp{[2, 3]} since
19768 its argument is a
19769 @texline @math{2\times3}
19770 @infoline 2x3
19771 matrix.
19772
19773 @kindex v f
19774 @pindex calc-vector-find
19775 @tindex find
19776 The @kbd{v f} (@code{calc-vector-find}) [@code{find}] command searches
19777 along a vector for the first element equal to a given target. The target
19778 is on the top of the stack; the vector is in the second-to-top position.
19779 If a match is found, the result is the index of the matching element.
19780 Otherwise, the result is zero. The numeric prefix argument, if given,
19781 allows you to select any starting index for the search.
19782
19783 @kindex v a
19784 @pindex calc-arrange-vector
19785 @tindex arrange
19786 @cindex Arranging a matrix
19787 @cindex Reshaping a matrix
19788 @cindex Flattening a matrix
19789 The @kbd{v a} (@code{calc-arrange-vector}) [@code{arrange}] command
19790 rearranges a vector to have a certain number of columns and rows. The
19791 numeric prefix argument specifies the number of columns; if you do not
19792 provide an argument, you will be prompted for the number of columns.
19793 The vector or matrix on the top of the stack is @dfn{flattened} into a
19794 plain vector. If the number of columns is nonzero, this vector is
19795 then formed into a matrix by taking successive groups of @var{n} elements.
19796 If the number of columns does not evenly divide the number of elements
19797 in the vector, the last row will be short and the result will not be
19798 suitable for use as a matrix. For example, with the matrix
19799 @samp{[[1, 2], @w{[3, 4]}]} on the stack, @kbd{v a 4} produces
19800 @samp{[[1, 2, 3, 4]]} (a
19801 @texline @math{1\times4}
19802 @infoline 1x4
19803 matrix), @kbd{v a 1} produces @samp{[[1], [2], [3], [4]]} (a
19804 @texline @math{4\times1}
19805 @infoline 4x1
19806 matrix), @kbd{v a 2} produces @samp{[[1, 2], [3, 4]]} (the original
19807 @texline @math{2\times2}
19808 @infoline 2x2
19809 matrix), @w{@kbd{v a 3}} produces @samp{[[1, 2, 3], [4]]} (not a
19810 matrix), and @kbd{v a 0} produces the flattened list
19811 @samp{[1, 2, @w{3, 4}]}.
19812
19813 @cindex Sorting data
19814 @kindex V S
19815 @kindex I V S
19816 @pindex calc-sort
19817 @tindex sort
19818 @tindex rsort
19819 The @kbd{V S} (@code{calc-sort}) [@code{sort}] command sorts the elements of
19820 a vector into increasing order. Real numbers, real infinities, and
19821 constant interval forms come first in this ordering; next come other
19822 kinds of numbers, then variables (in alphabetical order), then finally
19823 come formulas and other kinds of objects; these are sorted according
19824 to a kind of lexicographic ordering with the useful property that
19825 one vector is less or greater than another if the first corresponding
19826 unequal elements are less or greater, respectively. Since quoted strings
19827 are stored by Calc internally as vectors of ASCII character codes
19828 (@pxref{Strings}), this means vectors of strings are also sorted into
19829 alphabetical order by this command.
19830
19831 The @kbd{I V S} [@code{rsort}] command sorts a vector into decreasing order.
19832
19833 @cindex Permutation, inverse of
19834 @cindex Inverse of permutation
19835 @cindex Index tables
19836 @cindex Rank tables
19837 @kindex V G
19838 @kindex I V G
19839 @pindex calc-grade
19840 @tindex grade
19841 @tindex rgrade
19842 The @kbd{V G} (@code{calc-grade}) [@code{grade}, @code{rgrade}] command
19843 produces an index table or permutation vector which, if applied to the
19844 input vector (as the index of @kbd{C-u v r}, say), would sort the vector.
19845 A permutation vector is just a vector of integers from 1 to @var{n}, where
19846 each integer occurs exactly once. One application of this is to sort a
19847 matrix of data rows using one column as the sort key; extract that column,
19848 grade it with @kbd{V G}, then use the result to reorder the original matrix
19849 with @kbd{C-u v r}. Another interesting property of the @code{V G} command
19850 is that, if the input is itself a permutation vector, the result will
19851 be the inverse of the permutation. The inverse of an index table is
19852 a rank table, whose @var{k}th element says where the @var{k}th original
19853 vector element will rest when the vector is sorted. To get a rank
19854 table, just use @kbd{V G V G}.
19855
19856 With the Inverse flag, @kbd{I V G} produces an index table that would
19857 sort the input into decreasing order. Note that @kbd{V S} and @kbd{V G}
19858 use a ``stable'' sorting algorithm, i.e., any two elements which are equal
19859 will not be moved out of their original order. Generally there is no way
19860 to tell with @kbd{V S}, since two elements which are equal look the same,
19861 but with @kbd{V G} this can be an important issue. In the matrix-of-rows
19862 example, suppose you have names and telephone numbers as two columns and
19863 you wish to sort by phone number primarily, and by name when the numbers
19864 are equal. You can sort the data matrix by names first, and then again
19865 by phone numbers. Because the sort is stable, any two rows with equal
19866 phone numbers will remain sorted by name even after the second sort.
19867
19868 @cindex Histograms
19869 @kindex V H
19870 @pindex calc-histogram
19871 @ignore
19872 @mindex histo@idots
19873 @end ignore
19874 @tindex histogram
19875 The @kbd{V H} (@code{calc-histogram}) [@code{histogram}] command builds a
19876 histogram of a vector of numbers. Vector elements are assumed to be
19877 integers or real numbers in the range [0..@var{n}) for some ``number of
19878 bins'' @var{n}, which is the numeric prefix argument given to the
19879 command. The result is a vector of @var{n} counts of how many times
19880 each value appeared in the original vector. Non-integers in the input
19881 are rounded down to integers. Any vector elements outside the specified
19882 range are ignored. (You can tell if elements have been ignored by noting
19883 that the counts in the result vector don't add up to the length of the
19884 input vector.)
19885
19886 @kindex H V H
19887 With the Hyperbolic flag, @kbd{H V H} pulls two vectors from the stack.
19888 The second-to-top vector is the list of numbers as before. The top
19889 vector is an equal-sized list of ``weights'' to attach to the elements
19890 of the data vector. For example, if the first data element is 4.2 and
19891 the first weight is 10, then 10 will be added to bin 4 of the result
19892 vector. Without the hyperbolic flag, every element has a weight of one.
19893
19894 @kindex v t
19895 @pindex calc-transpose
19896 @tindex trn
19897 The @kbd{v t} (@code{calc-transpose}) [@code{trn}] command computes
19898 the transpose of the matrix at the top of the stack. If the argument
19899 is a plain vector, it is treated as a row vector and transposed into
19900 a one-column matrix.
19901
19902 @kindex v v
19903 @pindex calc-reverse-vector
19904 @tindex rev
19905 The @kbd{v v} (@code{calc-reverse-vector}) [@code{vec}] command reverses
19906 a vector end-for-end. Given a matrix, it reverses the order of the rows.
19907 (To reverse the columns instead, just use @kbd{v t v v v t}. The same
19908 principle can be used to apply other vector commands to the columns of
19909 a matrix.)
19910
19911 @kindex v m
19912 @pindex calc-mask-vector
19913 @tindex vmask
19914 The @kbd{v m} (@code{calc-mask-vector}) [@code{vmask}] command uses
19915 one vector as a mask to extract elements of another vector. The mask
19916 is in the second-to-top position; the target vector is on the top of
19917 the stack. These vectors must have the same length. The result is
19918 the same as the target vector, but with all elements which correspond
19919 to zeros in the mask vector deleted. Thus, for example,
19920 @samp{vmask([1, 0, 1, 0, 1], [a, b, c, d, e])} produces @samp{[a, c, e]}.
19921 @xref{Logical Operations}.
19922
19923 @kindex v e
19924 @pindex calc-expand-vector
19925 @tindex vexp
19926 The @kbd{v e} (@code{calc-expand-vector}) [@code{vexp}] command
19927 expands a vector according to another mask vector. The result is a
19928 vector the same length as the mask, but with nonzero elements replaced
19929 by successive elements from the target vector. The length of the target
19930 vector is normally the number of nonzero elements in the mask. If the
19931 target vector is longer, its last few elements are lost. If the target
19932 vector is shorter, the last few nonzero mask elements are left
19933 unreplaced in the result. Thus @samp{vexp([2, 0, 3, 0, 7], [a, b])}
19934 produces @samp{[a, 0, b, 0, 7]}.
19935
19936 @kindex H v e
19937 With the Hyperbolic flag, @kbd{H v e} takes a filler value from the
19938 top of the stack; the mask and target vectors come from the third and
19939 second elements of the stack. This filler is used where the mask is
19940 zero: @samp{vexp([2, 0, 3, 0, 7], [a, b], z)} produces
19941 @samp{[a, z, c, z, 7]}. If the filler value is itself a vector,
19942 then successive values are taken from it, so that the effect is to
19943 interleave two vectors according to the mask:
19944 @samp{vexp([2, 0, 3, 7, 0, 0], [a, b], [x, y])} produces
19945 @samp{[a, x, b, 7, y, 0]}.
19946
19947 Another variation on the masking idea is to combine @samp{[a, b, c, d, e]}
19948 with the mask @samp{[1, 0, 1, 0, 1]} to produce @samp{[a, 0, c, 0, e]}.
19949 You can accomplish this with @kbd{V M a &}, mapping the logical ``and''
19950 operation across the two vectors. @xref{Logical Operations}. Note that
19951 the @code{? :} operation also discussed there allows other types of
19952 masking using vectors.
19953
19954 @node Vector and Matrix Arithmetic, Set Operations, Manipulating Vectors, Matrix Functions
19955 @section Vector and Matrix Arithmetic
19956
19957 @noindent
19958 Basic arithmetic operations like addition and multiplication are defined
19959 for vectors and matrices as well as for numbers. Division of matrices, in
19960 the sense of multiplying by the inverse, is supported. (Division by a
19961 matrix actually uses LU-decomposition for greater accuracy and speed.)
19962 @xref{Basic Arithmetic}.
19963
19964 The following functions are applied element-wise if their arguments are
19965 vectors or matrices: @code{change-sign}, @code{conj}, @code{arg},
19966 @code{re}, @code{im}, @code{polar}, @code{rect}, @code{clean},
19967 @code{float}, @code{frac}. @xref{Function Index}.
19968
19969 @kindex V J
19970 @pindex calc-conj-transpose
19971 @tindex ctrn
19972 The @kbd{V J} (@code{calc-conj-transpose}) [@code{ctrn}] command computes
19973 the conjugate transpose of its argument, i.e., @samp{conj(trn(x))}.
19974
19975 @ignore
19976 @mindex A
19977 @end ignore
19978 @kindex A (vectors)
19979 @pindex calc-abs (vectors)
19980 @ignore
19981 @mindex abs
19982 @end ignore
19983 @tindex abs (vectors)
19984 The @kbd{A} (@code{calc-abs}) [@code{abs}] command computes the
19985 Frobenius norm of a vector or matrix argument. This is the square
19986 root of the sum of the squares of the absolute values of the
19987 elements of the vector or matrix. If the vector is interpreted as
19988 a point in two- or three-dimensional space, this is the distance
19989 from that point to the origin.
19990
19991 @kindex v n
19992 @pindex calc-rnorm
19993 @tindex rnorm
19994 The @kbd{v n} (@code{calc-rnorm}) [@code{rnorm}] command computes
19995 the row norm, or infinity-norm, of a vector or matrix. For a plain
19996 vector, this is the maximum of the absolute values of the elements.
19997 For a matrix, this is the maximum of the row-absolute-value-sums,
19998 i.e., of the sums of the absolute values of the elements along the
19999 various rows.
20000
20001 @kindex V N
20002 @pindex calc-cnorm
20003 @tindex cnorm
20004 The @kbd{V N} (@code{calc-cnorm}) [@code{cnorm}] command computes
20005 the column norm, or one-norm, of a vector or matrix. For a plain
20006 vector, this is the sum of the absolute values of the elements.
20007 For a matrix, this is the maximum of the column-absolute-value-sums.
20008 General @expr{k}-norms for @expr{k} other than one or infinity are
20009 not provided.
20010
20011 @kindex V C
20012 @pindex calc-cross
20013 @tindex cross
20014 The @kbd{V C} (@code{calc-cross}) [@code{cross}] command computes the
20015 right-handed cross product of two vectors, each of which must have
20016 exactly three elements.
20017
20018 @ignore
20019 @mindex &
20020 @end ignore
20021 @kindex & (matrices)
20022 @pindex calc-inv (matrices)
20023 @ignore
20024 @mindex inv
20025 @end ignore
20026 @tindex inv (matrices)
20027 The @kbd{&} (@code{calc-inv}) [@code{inv}] command computes the
20028 inverse of a square matrix. If the matrix is singular, the inverse
20029 operation is left in symbolic form. Matrix inverses are recorded so
20030 that once an inverse (or determinant) of a particular matrix has been
20031 computed, the inverse and determinant of the matrix can be recomputed
20032 quickly in the future.
20033
20034 If the argument to @kbd{&} is a plain number @expr{x}, this
20035 command simply computes @expr{1/x}. This is okay, because the
20036 @samp{/} operator also does a matrix inversion when dividing one
20037 by a matrix.
20038
20039 @kindex V D
20040 @pindex calc-mdet
20041 @tindex det
20042 The @kbd{V D} (@code{calc-mdet}) [@code{det}] command computes the
20043 determinant of a square matrix.
20044
20045 @kindex V L
20046 @pindex calc-mlud
20047 @tindex lud
20048 The @kbd{V L} (@code{calc-mlud}) [@code{lud}] command computes the
20049 LU decomposition of a matrix. The result is a list of three matrices
20050 which, when multiplied together left-to-right, form the original matrix.
20051 The first is a permutation matrix that arises from pivoting in the
20052 algorithm, the second is lower-triangular with ones on the diagonal,
20053 and the third is upper-triangular.
20054
20055 @kindex V T
20056 @pindex calc-mtrace
20057 @tindex tr
20058 The @kbd{V T} (@code{calc-mtrace}) [@code{tr}] command computes the
20059 trace of a square matrix. This is defined as the sum of the diagonal
20060 elements of the matrix.
20061
20062 @node Set Operations, Statistical Operations, Vector and Matrix Arithmetic, Matrix Functions
20063 @section Set Operations using Vectors
20064
20065 @noindent
20066 @cindex Sets, as vectors
20067 Calc includes several commands which interpret vectors as @dfn{sets} of
20068 objects. A set is a collection of objects; any given object can appear
20069 only once in the set. Calc stores sets as vectors of objects in
20070 sorted order. Objects in a Calc set can be any of the usual things,
20071 such as numbers, variables, or formulas. Two set elements are considered
20072 equal if they are identical, except that numerically equal numbers like
20073 the integer 4 and the float 4.0 are considered equal even though they
20074 are not ``identical.'' Variables are treated like plain symbols without
20075 attached values by the set operations; subtracting the set @samp{[b]}
20076 from @samp{[a, b]} always yields the set @samp{[a]} even though if
20077 the variables @samp{a} and @samp{b} both equaled 17, you might
20078 expect the answer @samp{[]}.
20079
20080 If a set contains interval forms, then it is assumed to be a set of
20081 real numbers. In this case, all set operations require the elements
20082 of the set to be only things that are allowed in intervals: Real
20083 numbers, plus and minus infinity, HMS forms, and date forms. If
20084 there are variables or other non-real objects present in a real set,
20085 all set operations on it will be left in unevaluated form.
20086
20087 If the input to a set operation is a plain number or interval form
20088 @var{a}, it is treated like the one-element vector @samp{[@var{a}]}.
20089 The result is always a vector, except that if the set consists of a
20090 single interval, the interval itself is returned instead.
20091
20092 @xref{Logical Operations}, for the @code{in} function which tests if
20093 a certain value is a member of a given set. To test if the set @expr{A}
20094 is a subset of the set @expr{B}, use @samp{vdiff(A, B) = []}.
20095
20096 @kindex V +
20097 @pindex calc-remove-duplicates
20098 @tindex rdup
20099 The @kbd{V +} (@code{calc-remove-duplicates}) [@code{rdup}] command
20100 converts an arbitrary vector into set notation. It works by sorting
20101 the vector as if by @kbd{V S}, then removing duplicates. (For example,
20102 @kbd{[a, 5, 4, a, 4.0]} is sorted to @samp{[4, 4.0, 5, a, a]} and then
20103 reduced to @samp{[4, 5, a]}). Overlapping intervals are merged as
20104 necessary. You rarely need to use @kbd{V +} explicitly, since all the
20105 other set-based commands apply @kbd{V +} to their inputs before using
20106 them.
20107
20108 @kindex V V
20109 @pindex calc-set-union
20110 @tindex vunion
20111 The @kbd{V V} (@code{calc-set-union}) [@code{vunion}] command computes
20112 the union of two sets. An object is in the union of two sets if and
20113 only if it is in either (or both) of the input sets. (You could
20114 accomplish the same thing by concatenating the sets with @kbd{|},
20115 then using @kbd{V +}.)
20116
20117 @kindex V ^
20118 @pindex calc-set-intersect
20119 @tindex vint
20120 The @kbd{V ^} (@code{calc-set-intersect}) [@code{vint}] command computes
20121 the intersection of two sets. An object is in the intersection if
20122 and only if it is in both of the input sets. Thus if the input
20123 sets are disjoint, i.e., if they share no common elements, the result
20124 will be the empty vector @samp{[]}. Note that the characters @kbd{V}
20125 and @kbd{^} were chosen to be close to the conventional mathematical
20126 notation for set
20127 @texline union@tie{}(@math{A \cup B})
20128 @infoline union
20129 and
20130 @texline intersection@tie{}(@math{A \cap B}).
20131 @infoline intersection.
20132
20133 @kindex V -
20134 @pindex calc-set-difference
20135 @tindex vdiff
20136 The @kbd{V -} (@code{calc-set-difference}) [@code{vdiff}] command computes
20137 the difference between two sets. An object is in the difference
20138 @expr{A - B} if and only if it is in @expr{A} but not in @expr{B}.
20139 Thus subtracting @samp{[y,z]} from a set will remove the elements
20140 @samp{y} and @samp{z} if they are present. You can also think of this
20141 as a general @dfn{set complement} operator; if @expr{A} is the set of
20142 all possible values, then @expr{A - B} is the ``complement'' of @expr{B}.
20143 Obviously this is only practical if the set of all possible values in
20144 your problem is small enough to list in a Calc vector (or simple
20145 enough to express in a few intervals).
20146
20147 @kindex V X
20148 @pindex calc-set-xor
20149 @tindex vxor
20150 The @kbd{V X} (@code{calc-set-xor}) [@code{vxor}] command computes
20151 the ``exclusive-or,'' or ``symmetric difference'' of two sets.
20152 An object is in the symmetric difference of two sets if and only
20153 if it is in one, but @emph{not} both, of the sets. Objects that
20154 occur in both sets ``cancel out.''
20155
20156 @kindex V ~
20157 @pindex calc-set-complement
20158 @tindex vcompl
20159 The @kbd{V ~} (@code{calc-set-complement}) [@code{vcompl}] command
20160 computes the complement of a set with respect to the real numbers.
20161 Thus @samp{vcompl(x)} is equivalent to @samp{vdiff([-inf .. inf], x)}.
20162 For example, @samp{vcompl([2, (3 .. 4]])} evaluates to
20163 @samp{[[-inf .. 2), (2 .. 3], (4 .. inf]]}.
20164
20165 @kindex V F
20166 @pindex calc-set-floor
20167 @tindex vfloor
20168 The @kbd{V F} (@code{calc-set-floor}) [@code{vfloor}] command
20169 reinterprets a set as a set of integers. Any non-integer values,
20170 and intervals that do not enclose any integers, are removed. Open
20171 intervals are converted to equivalent closed intervals. Successive
20172 integers are converted into intervals of integers. For example, the
20173 complement of the set @samp{[2, 6, 7, 8]} is messy, but if you wanted
20174 the complement with respect to the set of integers you could type
20175 @kbd{V ~ V F} to get @samp{[[-inf .. 1], [3 .. 5], [9 .. inf]]}.
20176
20177 @kindex V E
20178 @pindex calc-set-enumerate
20179 @tindex venum
20180 The @kbd{V E} (@code{calc-set-enumerate}) [@code{venum}] command
20181 converts a set of integers into an explicit vector. Intervals in
20182 the set are expanded out to lists of all integers encompassed by
20183 the intervals. This only works for finite sets (i.e., sets which
20184 do not involve @samp{-inf} or @samp{inf}).
20185
20186 @kindex V :
20187 @pindex calc-set-span
20188 @tindex vspan
20189 The @kbd{V :} (@code{calc-set-span}) [@code{vspan}] command converts any
20190 set of reals into an interval form that encompasses all its elements.
20191 The lower limit will be the smallest element in the set; the upper
20192 limit will be the largest element. For an empty set, @samp{vspan([])}
20193 returns the empty interval @w{@samp{[0 .. 0)}}.
20194
20195 @kindex V #
20196 @pindex calc-set-cardinality
20197 @tindex vcard
20198 The @kbd{V #} (@code{calc-set-cardinality}) [@code{vcard}] command counts
20199 the number of integers in a set. The result is the length of the vector
20200 that would be produced by @kbd{V E}, although the computation is much
20201 more efficient than actually producing that vector.
20202
20203 @cindex Sets, as binary numbers
20204 Another representation for sets that may be more appropriate in some
20205 cases is binary numbers. If you are dealing with sets of integers
20206 in the range 0 to 49, you can use a 50-bit binary number where a
20207 particular bit is 1 if the corresponding element is in the set.
20208 @xref{Binary Functions}, for a list of commands that operate on
20209 binary numbers. Note that many of the above set operations have
20210 direct equivalents in binary arithmetic: @kbd{b o} (@code{calc-or}),
20211 @kbd{b a} (@code{calc-and}), @kbd{b d} (@code{calc-diff}),
20212 @kbd{b x} (@code{calc-xor}), and @kbd{b n} (@code{calc-not}),
20213 respectively. You can use whatever representation for sets is most
20214 convenient to you.
20215
20216 @kindex b p
20217 @kindex b u
20218 @pindex calc-pack-bits
20219 @pindex calc-unpack-bits
20220 @tindex vpack
20221 @tindex vunpack
20222 The @kbd{b u} (@code{calc-unpack-bits}) [@code{vunpack}] command
20223 converts an integer that represents a set in binary into a set
20224 in vector/interval notation. For example, @samp{vunpack(67)}
20225 returns @samp{[[0 .. 1], 6]}. If the input is negative, the set
20226 it represents is semi-infinite: @samp{vunpack(-4) = [2 .. inf)}.
20227 Use @kbd{V E} afterwards to expand intervals to individual
20228 values if you wish. Note that this command uses the @kbd{b}
20229 (binary) prefix key.
20230
20231 The @kbd{b p} (@code{calc-pack-bits}) [@code{vpack}] command
20232 converts the other way, from a vector or interval representing
20233 a set of nonnegative integers into a binary integer describing
20234 the same set. The set may include positive infinity, but must
20235 not include any negative numbers. The input is interpreted as a
20236 set of integers in the sense of @kbd{V F} (@code{vfloor}). Beware
20237 that a simple input like @samp{[100]} can result in a huge integer
20238 representation
20239 @texline (@math{2^{100}}, a 31-digit integer, in this case).
20240 @infoline (@expr{2^100}, a 31-digit integer, in this case).
20241
20242 @node Statistical Operations, Reducing and Mapping, Set Operations, Matrix Functions
20243 @section Statistical Operations on Vectors
20244
20245 @noindent
20246 @cindex Statistical functions
20247 The commands in this section take vectors as arguments and compute
20248 various statistical measures on the data stored in the vectors. The
20249 references used in the definitions of these functions are Bevington's
20250 @emph{Data Reduction and Error Analysis for the Physical Sciences},
20251 and @emph{Numerical Recipes} by Press, Flannery, Teukolsky and
20252 Vetterling.
20253
20254 The statistical commands use the @kbd{u} prefix key followed by
20255 a shifted letter or other character.
20256
20257 @xref{Manipulating Vectors}, for a description of @kbd{V H}
20258 (@code{calc-histogram}).
20259
20260 @xref{Curve Fitting}, for the @kbd{a F} command for doing
20261 least-squares fits to statistical data.
20262
20263 @xref{Probability Distribution Functions}, for several common
20264 probability distribution functions.
20265
20266 @menu
20267 * Single-Variable Statistics::
20268 * Paired-Sample Statistics::
20269 @end menu
20270
20271 @node Single-Variable Statistics, Paired-Sample Statistics, Statistical Operations, Statistical Operations
20272 @subsection Single-Variable Statistics
20273
20274 @noindent
20275 These functions do various statistical computations on single
20276 vectors. Given a numeric prefix argument, they actually pop
20277 @var{n} objects from the stack and combine them into a data
20278 vector. Each object may be either a number or a vector; if a
20279 vector, any sub-vectors inside it are ``flattened'' as if by
20280 @kbd{v a 0}; @pxref{Manipulating Vectors}. By default one object
20281 is popped, which (in order to be useful) is usually a vector.
20282
20283 If an argument is a variable name, and the value stored in that
20284 variable is a vector, then the stored vector is used. This method
20285 has the advantage that if your data vector is large, you can avoid
20286 the slow process of manipulating it directly on the stack.
20287
20288 These functions are left in symbolic form if any of their arguments
20289 are not numbers or vectors, e.g., if an argument is a formula, or
20290 a non-vector variable. However, formulas embedded within vector
20291 arguments are accepted; the result is a symbolic representation
20292 of the computation, based on the assumption that the formula does
20293 not itself represent a vector. All varieties of numbers such as
20294 error forms and interval forms are acceptable.
20295
20296 Some of the functions in this section also accept a single error form
20297 or interval as an argument. They then describe a property of the
20298 normal or uniform (respectively) statistical distribution described
20299 by the argument. The arguments are interpreted in the same way as
20300 the @var{M} argument of the random number function @kbd{k r}. In
20301 particular, an interval with integer limits is considered an integer
20302 distribution, so that @samp{[2 .. 6)} is the same as @samp{[2 .. 5]}.
20303 An interval with at least one floating-point limit is a continuous
20304 distribution: @samp{[2.0 .. 6.0)} is @emph{not} the same as
20305 @samp{[2.0 .. 5.0]}!
20306
20307 @kindex u #
20308 @pindex calc-vector-count
20309 @tindex vcount
20310 The @kbd{u #} (@code{calc-vector-count}) [@code{vcount}] command
20311 computes the number of data values represented by the inputs.
20312 For example, @samp{vcount(1, [2, 3], [[4, 5], [], x, y])} returns 7.
20313 If the argument is a single vector with no sub-vectors, this
20314 simply computes the length of the vector.
20315
20316 @kindex u +
20317 @kindex u *
20318 @pindex calc-vector-sum
20319 @pindex calc-vector-prod
20320 @tindex vsum
20321 @tindex vprod
20322 @cindex Summations (statistical)
20323 The @kbd{u +} (@code{calc-vector-sum}) [@code{vsum}] command
20324 computes the sum of the data values. The @kbd{u *}
20325 (@code{calc-vector-prod}) [@code{vprod}] command computes the
20326 product of the data values. If the input is a single flat vector,
20327 these are the same as @kbd{V R +} and @kbd{V R *}
20328 (@pxref{Reducing and Mapping}).
20329
20330 @kindex u X
20331 @kindex u N
20332 @pindex calc-vector-max
20333 @pindex calc-vector-min
20334 @tindex vmax
20335 @tindex vmin
20336 The @kbd{u X} (@code{calc-vector-max}) [@code{vmax}] command
20337 computes the maximum of the data values, and the @kbd{u N}
20338 (@code{calc-vector-min}) [@code{vmin}] command computes the minimum.
20339 If the argument is an interval, this finds the minimum or maximum
20340 value in the interval. (Note that @samp{vmax([2..6)) = 5} as
20341 described above.) If the argument is an error form, this returns
20342 plus or minus infinity.
20343
20344 @kindex u M
20345 @pindex calc-vector-mean
20346 @tindex vmean
20347 @cindex Mean of data values
20348 The @kbd{u M} (@code{calc-vector-mean}) [@code{vmean}] command
20349 computes the average (arithmetic mean) of the data values.
20350 If the inputs are error forms
20351 @texline @math{x \pm \sigma},
20352 @infoline @samp{x +/- s},
20353 this is the weighted mean of the @expr{x} values with weights
20354 @texline @math{1 /\sigma^2}.
20355 @infoline @expr{1 / s^2}.
20356 @tex
20357 \turnoffactive
20358 $$ \mu = { \displaystyle \sum { x_i \over \sigma_i^2 } \over
20359 \displaystyle \sum { 1 \over \sigma_i^2 } } $$
20360 @end tex
20361 If the inputs are not error forms, this is simply the sum of the
20362 values divided by the count of the values.
20363
20364 Note that a plain number can be considered an error form with
20365 error
20366 @texline @math{\sigma = 0}.
20367 @infoline @expr{s = 0}.
20368 If the input to @kbd{u M} is a mixture of
20369 plain numbers and error forms, the result is the mean of the
20370 plain numbers, ignoring all values with non-zero errors. (By the
20371 above definitions it's clear that a plain number effectively
20372 has an infinite weight, next to which an error form with a finite
20373 weight is completely negligible.)
20374
20375 This function also works for distributions (error forms or
20376 intervals). The mean of an error form `@var{a} @t{+/-} @var{b}' is simply
20377 @expr{a}. The mean of an interval is the mean of the minimum
20378 and maximum values of the interval.
20379
20380 @kindex I u M
20381 @pindex calc-vector-mean-error
20382 @tindex vmeane
20383 The @kbd{I u M} (@code{calc-vector-mean-error}) [@code{vmeane}]
20384 command computes the mean of the data points expressed as an
20385 error form. This includes the estimated error associated with
20386 the mean. If the inputs are error forms, the error is the square
20387 root of the reciprocal of the sum of the reciprocals of the squares
20388 of the input errors. (I.e., the variance is the reciprocal of the
20389 sum of the reciprocals of the variances.)
20390 @tex
20391 \turnoffactive
20392 $$ \sigma_\mu^2 = {1 \over \displaystyle \sum {1 \over \sigma_i^2}} $$
20393 @end tex
20394 If the inputs are plain
20395 numbers, the error is equal to the standard deviation of the values
20396 divided by the square root of the number of values. (This works
20397 out to be equivalent to calculating the standard deviation and
20398 then assuming each value's error is equal to this standard
20399 deviation.)
20400 @tex
20401 \turnoffactive
20402 $$ \sigma_\mu^2 = {\sigma^2 \over N} $$
20403 @end tex
20404
20405 @kindex H u M
20406 @pindex calc-vector-median
20407 @tindex vmedian
20408 @cindex Median of data values
20409 The @kbd{H u M} (@code{calc-vector-median}) [@code{vmedian}]
20410 command computes the median of the data values. The values are
20411 first sorted into numerical order; the median is the middle
20412 value after sorting. (If the number of data values is even,
20413 the median is taken to be the average of the two middle values.)
20414 The median function is different from the other functions in
20415 this section in that the arguments must all be real numbers;
20416 variables are not accepted even when nested inside vectors.
20417 (Otherwise it is not possible to sort the data values.) If
20418 any of the input values are error forms, their error parts are
20419 ignored.
20420
20421 The median function also accepts distributions. For both normal
20422 (error form) and uniform (interval) distributions, the median is
20423 the same as the mean.
20424
20425 @kindex H I u M
20426 @pindex calc-vector-harmonic-mean
20427 @tindex vhmean
20428 @cindex Harmonic mean
20429 The @kbd{H I u M} (@code{calc-vector-harmonic-mean}) [@code{vhmean}]
20430 command computes the harmonic mean of the data values. This is
20431 defined as the reciprocal of the arithmetic mean of the reciprocals
20432 of the values.
20433 @tex
20434 \turnoffactive
20435 $$ { N \over \displaystyle \sum {1 \over x_i} } $$
20436 @end tex
20437
20438 @kindex u G
20439 @pindex calc-vector-geometric-mean
20440 @tindex vgmean
20441 @cindex Geometric mean
20442 The @kbd{u G} (@code{calc-vector-geometric-mean}) [@code{vgmean}]
20443 command computes the geometric mean of the data values. This
20444 is the @var{n}th root of the product of the values. This is also
20445 equal to the @code{exp} of the arithmetic mean of the logarithms
20446 of the data values.
20447 @tex
20448 \turnoffactive
20449 $$ \exp \left ( \sum { \ln x_i } \right ) =
20450 \left ( \prod { x_i } \right)^{1 / N} $$
20451 @end tex
20452
20453 @kindex H u G
20454 @tindex agmean
20455 The @kbd{H u G} [@code{agmean}] command computes the ``arithmetic-geometric
20456 mean'' of two numbers taken from the stack. This is computed by
20457 replacing the two numbers with their arithmetic mean and geometric
20458 mean, then repeating until the two values converge.
20459 @tex
20460 \turnoffactive
20461 $$ a_{i+1} = { a_i + b_i \over 2 } , \qquad b_{i+1} = \sqrt{a_i b_i} $$
20462 @end tex
20463
20464 @cindex Root-mean-square
20465 Another commonly used mean, the RMS (root-mean-square), can be computed
20466 for a vector of numbers simply by using the @kbd{A} command.
20467
20468 @kindex u S
20469 @pindex calc-vector-sdev
20470 @tindex vsdev
20471 @cindex Standard deviation
20472 @cindex Sample statistics
20473 The @kbd{u S} (@code{calc-vector-sdev}) [@code{vsdev}] command
20474 computes the standard
20475 @texline deviation@tie{}@math{\sigma}
20476 @infoline deviation
20477 of the data values. If the values are error forms, the errors are used
20478 as weights just as for @kbd{u M}. This is the @emph{sample} standard
20479 deviation, whose value is the square root of the sum of the squares of
20480 the differences between the values and the mean of the @expr{N} values,
20481 divided by @expr{N-1}.
20482 @tex
20483 \turnoffactive
20484 $$ \sigma^2 = {1 \over N - 1} \sum (x_i - \mu)^2 $$
20485 @end tex
20486
20487 This function also applies to distributions. The standard deviation
20488 of a single error form is simply the error part. The standard deviation
20489 of a continuous interval happens to equal the difference between the
20490 limits, divided by
20491 @texline @math{\sqrt{12}}.
20492 @infoline @expr{sqrt(12)}.
20493 The standard deviation of an integer interval is the same as the
20494 standard deviation of a vector of those integers.
20495
20496 @kindex I u S
20497 @pindex calc-vector-pop-sdev
20498 @tindex vpsdev
20499 @cindex Population statistics
20500 The @kbd{I u S} (@code{calc-vector-pop-sdev}) [@code{vpsdev}]
20501 command computes the @emph{population} standard deviation.
20502 It is defined by the same formula as above but dividing
20503 by @expr{N} instead of by @expr{N-1}. The population standard
20504 deviation is used when the input represents the entire set of
20505 data values in the distribution; the sample standard deviation
20506 is used when the input represents a sample of the set of all
20507 data values, so that the mean computed from the input is itself
20508 only an estimate of the true mean.
20509 @tex
20510 \turnoffactive
20511 $$ \sigma^2 = {1 \over N} \sum (x_i - \mu)^2 $$
20512 @end tex
20513
20514 For error forms and continuous intervals, @code{vpsdev} works
20515 exactly like @code{vsdev}. For integer intervals, it computes the
20516 population standard deviation of the equivalent vector of integers.
20517
20518 @kindex H u S
20519 @kindex H I u S
20520 @pindex calc-vector-variance
20521 @pindex calc-vector-pop-variance
20522 @tindex vvar
20523 @tindex vpvar
20524 @cindex Variance of data values
20525 The @kbd{H u S} (@code{calc-vector-variance}) [@code{vvar}] and
20526 @kbd{H I u S} (@code{calc-vector-pop-variance}) [@code{vpvar}]
20527 commands compute the variance of the data values. The variance
20528 is the
20529 @texline square@tie{}@math{\sigma^2}
20530 @infoline square
20531 of the standard deviation, i.e., the sum of the
20532 squares of the deviations of the data values from the mean.
20533 (This definition also applies when the argument is a distribution.)
20534
20535 @ignore
20536 @starindex
20537 @end ignore
20538 @tindex vflat
20539 The @code{vflat} algebraic function returns a vector of its
20540 arguments, interpreted in the same way as the other functions
20541 in this section. For example, @samp{vflat(1, [2, [3, 4]], 5)}
20542 returns @samp{[1, 2, 3, 4, 5]}.
20543
20544 @node Paired-Sample Statistics, , Single-Variable Statistics, Statistical Operations
20545 @subsection Paired-Sample Statistics
20546
20547 @noindent
20548 The functions in this section take two arguments, which must be
20549 vectors of equal size. The vectors are each flattened in the same
20550 way as by the single-variable statistical functions. Given a numeric
20551 prefix argument of 1, these functions instead take one object from
20552 the stack, which must be an
20553 @texline @math{N\times2}
20554 @infoline Nx2
20555 matrix of data values. Once again, variable names can be used in place
20556 of actual vectors and matrices.
20557
20558 @kindex u C
20559 @pindex calc-vector-covariance
20560 @tindex vcov
20561 @cindex Covariance
20562 The @kbd{u C} (@code{calc-vector-covariance}) [@code{vcov}] command
20563 computes the sample covariance of two vectors. The covariance
20564 of vectors @var{x} and @var{y} is the sum of the products of the
20565 differences between the elements of @var{x} and the mean of @var{x}
20566 times the differences between the corresponding elements of @var{y}
20567 and the mean of @var{y}, all divided by @expr{N-1}. Note that
20568 the variance of a vector is just the covariance of the vector
20569 with itself. Once again, if the inputs are error forms the
20570 errors are used as weight factors. If both @var{x} and @var{y}
20571 are composed of error forms, the error for a given data point
20572 is taken as the square root of the sum of the squares of the two
20573 input errors.
20574 @tex
20575 \turnoffactive
20576 $$ \sigma_{x\!y}^2 = {1 \over N-1} \sum (x_i - \mu_x) (y_i - \mu_y) $$
20577 $$ \sigma_{x\!y}^2 =
20578 {\displaystyle {1 \over N-1}
20579 \sum {(x_i - \mu_x) (y_i - \mu_y) \over \sigma_i^2}
20580 \over \displaystyle {1 \over N} \sum {1 \over \sigma_i^2}}
20581 $$
20582 @end tex
20583
20584 @kindex I u C
20585 @pindex calc-vector-pop-covariance
20586 @tindex vpcov
20587 The @kbd{I u C} (@code{calc-vector-pop-covariance}) [@code{vpcov}]
20588 command computes the population covariance, which is the same as the
20589 sample covariance computed by @kbd{u C} except dividing by @expr{N}
20590 instead of @expr{N-1}.
20591
20592 @kindex H u C
20593 @pindex calc-vector-correlation
20594 @tindex vcorr
20595 @cindex Correlation coefficient
20596 @cindex Linear correlation
20597 The @kbd{H u C} (@code{calc-vector-correlation}) [@code{vcorr}]
20598 command computes the linear correlation coefficient of two vectors.
20599 This is defined by the covariance of the vectors divided by the
20600 product of their standard deviations. (There is no difference
20601 between sample or population statistics here.)
20602 @tex
20603 \turnoffactive
20604 $$ r_{x\!y} = { \sigma_{x\!y}^2 \over \sigma_x^2 \sigma_y^2 } $$
20605 @end tex
20606
20607 @node Reducing and Mapping, Vector and Matrix Formats, Statistical Operations, Matrix Functions
20608 @section Reducing and Mapping Vectors
20609
20610 @noindent
20611 The commands in this section allow for more general operations on the
20612 elements of vectors.
20613
20614 @kindex V A
20615 @pindex calc-apply
20616 @tindex apply
20617 The simplest of these operations is @kbd{V A} (@code{calc-apply})
20618 [@code{apply}], which applies a given operator to the elements of a vector.
20619 For example, applying the hypothetical function @code{f} to the vector
20620 @w{@samp{[1, 2, 3]}} would produce the function call @samp{f(1, 2, 3)}.
20621 Applying the @code{+} function to the vector @samp{[a, b]} gives
20622 @samp{a + b}. Applying @code{+} to the vector @samp{[a, b, c]} is an
20623 error, since the @code{+} function expects exactly two arguments.
20624
20625 While @kbd{V A} is useful in some cases, you will usually find that either
20626 @kbd{V R} or @kbd{V M}, described below, is closer to what you want.
20627
20628 @menu
20629 * Specifying Operators::
20630 * Mapping::
20631 * Reducing::
20632 * Nesting and Fixed Points::
20633 * Generalized Products::
20634 @end menu
20635
20636 @node Specifying Operators, Mapping, Reducing and Mapping, Reducing and Mapping
20637 @subsection Specifying Operators
20638
20639 @noindent
20640 Commands in this section (like @kbd{V A}) prompt you to press the key
20641 corresponding to the desired operator. Press @kbd{?} for a partial
20642 list of the available operators. Generally, an operator is any key or
20643 sequence of keys that would normally take one or more arguments from
20644 the stack and replace them with a result. For example, @kbd{V A H C}
20645 uses the hyperbolic cosine operator, @code{cosh}. (Since @code{cosh}
20646 expects one argument, @kbd{V A H C} requires a vector with a single
20647 element as its argument.)
20648
20649 You can press @kbd{x} at the operator prompt to select any algebraic
20650 function by name to use as the operator. This includes functions you
20651 have defined yourself using the @kbd{Z F} command. (@xref{Algebraic
20652 Definitions}.) If you give a name for which no function has been
20653 defined, the result is left in symbolic form, as in @samp{f(1, 2, 3)}.
20654 Calc will prompt for the number of arguments the function takes if it
20655 can't figure it out on its own (say, because you named a function that
20656 is currently undefined). It is also possible to type a digit key before
20657 the function name to specify the number of arguments, e.g.,
20658 @kbd{V M 3 x f @key{RET}} calls @code{f} with three arguments even if it
20659 looks like it ought to have only two. This technique may be necessary
20660 if the function allows a variable number of arguments. For example,
20661 the @kbd{v e} [@code{vexp}] function accepts two or three arguments;
20662 if you want to map with the three-argument version, you will have to
20663 type @kbd{V M 3 v e}.
20664
20665 It is also possible to apply any formula to a vector by treating that
20666 formula as a function. When prompted for the operator to use, press
20667 @kbd{'} (the apostrophe) and type your formula as an algebraic entry.
20668 You will then be prompted for the argument list, which defaults to a
20669 list of all variables that appear in the formula, sorted into alphabetic
20670 order. For example, suppose you enter the formula @w{@samp{x + 2y^x}}.
20671 The default argument list would be @samp{(x y)}, which means that if
20672 this function is applied to the arguments @samp{[3, 10]} the result will
20673 be @samp{3 + 2*10^3}. (If you plan to use a certain formula in this
20674 way often, you might consider defining it as a function with @kbd{Z F}.)
20675
20676 Another way to specify the arguments to the formula you enter is with
20677 @kbd{$}, @kbd{$$}, and so on. For example, @kbd{V A ' $$ + 2$^$$}
20678 has the same effect as the previous example. The argument list is
20679 automatically taken to be @samp{($$ $)}. (The order of the arguments
20680 may seem backwards, but it is analogous to the way normal algebraic
20681 entry interacts with the stack.)
20682
20683 If you press @kbd{$} at the operator prompt, the effect is similar to
20684 the apostrophe except that the relevant formula is taken from top-of-stack
20685 instead. The actual vector arguments of the @kbd{V A $} or related command
20686 then start at the second-to-top stack position. You will still be
20687 prompted for an argument list.
20688
20689 @cindex Nameless functions
20690 @cindex Generic functions
20691 A function can be written without a name using the notation @samp{<#1 - #2>},
20692 which means ``a function of two arguments that computes the first
20693 argument minus the second argument.'' The symbols @samp{#1} and @samp{#2}
20694 are placeholders for the arguments. You can use any names for these
20695 placeholders if you wish, by including an argument list followed by a
20696 colon: @samp{<x, y : x - y>}. When you type @kbd{V A ' $$ + 2$^$$ @key{RET}},
20697 Calc builds the nameless function @samp{<#1 + 2 #2^#1>} as the function
20698 to map across the vectors. When you type @kbd{V A ' x + 2y^x @key{RET} @key{RET}},
20699 Calc builds the nameless function @w{@samp{<x, y : x + 2 y^x>}}. In both
20700 cases, Calc also writes the nameless function to the Trail so that you
20701 can get it back later if you wish.
20702
20703 If there is only one argument, you can write @samp{#} in place of @samp{#1}.
20704 (Note that @samp{< >} notation is also used for date forms. Calc tells
20705 that @samp{<@var{stuff}>} is a nameless function by the presence of
20706 @samp{#} signs inside @var{stuff}, or by the fact that @var{stuff}
20707 begins with a list of variables followed by a colon.)
20708
20709 You can type a nameless function directly to @kbd{V A '}, or put one on
20710 the stack and use it with @w{@kbd{V A $}}. Calc will not prompt for an
20711 argument list in this case, since the nameless function specifies the
20712 argument list as well as the function itself. In @kbd{V A '}, you can
20713 omit the @samp{< >} marks if you use @samp{#} notation for the arguments,
20714 so that @kbd{V A ' #1+#2 @key{RET}} is the same as @kbd{V A ' <#1+#2> @key{RET}},
20715 which in turn is the same as @kbd{V A ' $$+$ @key{RET}}.
20716
20717 @cindex Lambda expressions
20718 @ignore
20719 @starindex
20720 @end ignore
20721 @tindex lambda
20722 The internal format for @samp{<x, y : x + y>} is @samp{lambda(x, y, x + y)}.
20723 (The word @code{lambda} derives from Lisp notation and the theory of
20724 functions.) The internal format for @samp{<#1 + #2>} is @samp{lambda(ArgA,
20725 ArgB, ArgA + ArgB)}. Note that there is no actual Calc function called
20726 @code{lambda}; the whole point is that the @code{lambda} expression is
20727 used in its symbolic form, not evaluated for an answer until it is applied
20728 to specific arguments by a command like @kbd{V A} or @kbd{V M}.
20729
20730 (Actually, @code{lambda} does have one special property: Its arguments
20731 are never evaluated; for example, putting @samp{<(2/3) #>} on the stack
20732 will not simplify the @samp{2/3} until the nameless function is actually
20733 called.)
20734
20735 @tindex add
20736 @tindex sub
20737 @ignore
20738 @mindex @idots
20739 @end ignore
20740 @tindex mul
20741 @ignore
20742 @mindex @null
20743 @end ignore
20744 @tindex div
20745 @ignore
20746 @mindex @null
20747 @end ignore
20748 @tindex pow
20749 @ignore
20750 @mindex @null
20751 @end ignore
20752 @tindex neg
20753 @ignore
20754 @mindex @null
20755 @end ignore
20756 @tindex mod
20757 @ignore
20758 @mindex @null
20759 @end ignore
20760 @tindex vconcat
20761 As usual, commands like @kbd{V A} have algebraic function name equivalents.
20762 For example, @kbd{V A k g} with an argument of @samp{v} is equivalent to
20763 @samp{apply(gcd, v)}. The first argument specifies the operator name,
20764 and is either a variable whose name is the same as the function name,
20765 or a nameless function like @samp{<#^3+1>}. Operators that are normally
20766 written as algebraic symbols have the names @code{add}, @code{sub},
20767 @code{mul}, @code{div}, @code{pow}, @code{neg}, @code{mod}, and
20768 @code{vconcat}.
20769
20770 @ignore
20771 @starindex
20772 @end ignore
20773 @tindex call
20774 The @code{call} function builds a function call out of several arguments:
20775 @samp{call(gcd, x, y)} is the same as @samp{apply(gcd, [x, y])}, which
20776 in turn is the same as @samp{gcd(x, y)}. The first argument of @code{call},
20777 like the other functions described here, may be either a variable naming a
20778 function, or a nameless function (@samp{call(<#1+2#2>, x, y)} is the same
20779 as @samp{x + 2y}).
20780
20781 (Experts will notice that it's not quite proper to use a variable to name
20782 a function, since the name @code{gcd} corresponds to the Lisp variable
20783 @code{var-gcd} but to the Lisp function @code{calcFunc-gcd}. Calc
20784 automatically makes this translation, so you don't have to worry
20785 about it.)
20786
20787 @node Mapping, Reducing, Specifying Operators, Reducing and Mapping
20788 @subsection Mapping
20789
20790 @noindent
20791 @kindex V M
20792 @pindex calc-map
20793 @tindex map
20794 The @kbd{V M} (@code{calc-map}) [@code{map}] command applies a given
20795 operator elementwise to one or more vectors. For example, mapping
20796 @code{A} [@code{abs}] produces a vector of the absolute values of the
20797 elements in the input vector. Mapping @code{+} pops two vectors from
20798 the stack, which must be of equal length, and produces a vector of the
20799 pairwise sums of the elements. If either argument is a non-vector, it
20800 is duplicated for each element of the other vector. For example,
20801 @kbd{[1,2,3] 2 V M ^} squares the elements of the specified vector.
20802 With the 2 listed first, it would have computed a vector of powers of
20803 two. Mapping a user-defined function pops as many arguments from the
20804 stack as the function requires. If you give an undefined name, you will
20805 be prompted for the number of arguments to use.
20806
20807 If any argument to @kbd{V M} is a matrix, the operator is normally mapped
20808 across all elements of the matrix. For example, given the matrix
20809 @expr{[[1, -2, 3], [-4, 5, -6]]}, @kbd{V M A} takes six absolute values to
20810 produce another
20811 @texline @math{3\times2}
20812 @infoline 3x2
20813 matrix, @expr{[[1, 2, 3], [4, 5, 6]]}.
20814
20815 @tindex mapr
20816 The command @kbd{V M _} [@code{mapr}] (i.e., type an underscore at the
20817 operator prompt) maps by rows instead. For example, @kbd{V M _ A} views
20818 the above matrix as a vector of two 3-element row vectors. It produces
20819 a new vector which contains the absolute values of those row vectors,
20820 namely @expr{[3.74, 8.77]}. (Recall, the absolute value of a vector is
20821 defined as the square root of the sum of the squares of the elements.)
20822 Some operators accept vectors and return new vectors; for example,
20823 @kbd{v v} reverses a vector, so @kbd{V M _ v v} would reverse each row
20824 of the matrix to get a new matrix, @expr{[[3, -2, 1], [-6, 5, -4]]}.
20825
20826 Sometimes a vector of vectors (representing, say, strings, sets, or lists)
20827 happens to look like a matrix. If so, remember to use @kbd{V M _} if you
20828 want to map a function across the whole strings or sets rather than across
20829 their individual elements.
20830
20831 @tindex mapc
20832 The command @kbd{V M :} [@code{mapc}] maps by columns. Basically, it
20833 transposes the input matrix, maps by rows, and then, if the result is a
20834 matrix, transposes again. For example, @kbd{V M : A} takes the absolute
20835 values of the three columns of the matrix, treating each as a 2-vector,
20836 and @kbd{V M : v v} reverses the columns to get the matrix
20837 @expr{[[-4, 5, -6], [1, -2, 3]]}.
20838
20839 (The symbols @kbd{_} and @kbd{:} were chosen because they had row-like
20840 and column-like appearances, and were not already taken by useful
20841 operators. Also, they appear shifted on most keyboards so they are easy
20842 to type after @kbd{V M}.)
20843
20844 The @kbd{_} and @kbd{:} modifiers have no effect on arguments that are
20845 not matrices (so if none of the arguments are matrices, they have no
20846 effect at all). If some of the arguments are matrices and others are
20847 plain numbers, the plain numbers are held constant for all rows of the
20848 matrix (so that @kbd{2 V M _ ^} squares every row of a matrix; squaring
20849 a vector takes a dot product of the vector with itself).
20850
20851 If some of the arguments are vectors with the same lengths as the
20852 rows (for @kbd{V M _}) or columns (for @kbd{V M :}) of the matrix
20853 arguments, those vectors are also held constant for every row or
20854 column.
20855
20856 Sometimes it is useful to specify another mapping command as the operator
20857 to use with @kbd{V M}. For example, @kbd{V M _ V A +} applies @kbd{V A +}
20858 to each row of the input matrix, which in turn adds the two values on that
20859 row. If you give another vector-operator command as the operator for
20860 @kbd{V M}, it automatically uses map-by-rows mode if you don't specify
20861 otherwise; thus @kbd{V M V A +} is equivalent to @kbd{V M _ V A +}. (If
20862 you really want to map-by-elements another mapping command, you can use
20863 a triple-nested mapping command: @kbd{V M V M V A +} means to map
20864 @kbd{V M V A +} over the rows of the matrix; in turn, @kbd{V A +} is
20865 mapped over the elements of each row.)
20866
20867 @tindex mapa
20868 @tindex mapd
20869 Previous versions of Calc had ``map across'' and ``map down'' modes
20870 that are now considered obsolete; the old ``map across'' is now simply
20871 @kbd{V M V A}, and ``map down'' is now @kbd{V M : V A}. The algebraic
20872 functions @code{mapa} and @code{mapd} are still supported, though.
20873 Note also that, while the old mapping modes were persistent (once you
20874 set the mode, it would apply to later mapping commands until you reset
20875 it), the new @kbd{:} and @kbd{_} modifiers apply only to the current
20876 mapping command. The default @kbd{V M} always means map-by-elements.
20877
20878 @xref{Algebraic Manipulation}, for the @kbd{a M} command, which is like
20879 @kbd{V M} but for equations and inequalities instead of vectors.
20880 @xref{Storing Variables}, for the @kbd{s m} command which modifies a
20881 variable's stored value using a @kbd{V M}-like operator.
20882
20883 @node Reducing, Nesting and Fixed Points, Mapping, Reducing and Mapping
20884 @subsection Reducing
20885
20886 @noindent
20887 @kindex V R
20888 @pindex calc-reduce
20889 @tindex reduce
20890 The @kbd{V R} (@code{calc-reduce}) [@code{reduce}] command applies a given
20891 binary operator across all the elements of a vector. A binary operator is
20892 a function such as @code{+} or @code{max} which takes two arguments. For
20893 example, reducing @code{+} over a vector computes the sum of the elements
20894 of the vector. Reducing @code{-} computes the first element minus each of
20895 the remaining elements. Reducing @code{max} computes the maximum element
20896 and so on. In general, reducing @code{f} over the vector @samp{[a, b, c, d]}
20897 produces @samp{f(f(f(a, b), c), d)}.
20898
20899 @kindex I V R
20900 @tindex rreduce
20901 The @kbd{I V R} [@code{rreduce}] command is similar to @kbd{V R} except
20902 that works from right to left through the vector. For example, plain
20903 @kbd{V R -} on the vector @samp{[a, b, c, d]} produces @samp{a - b - c - d}
20904 but @kbd{I V R -} on the same vector produces @samp{a - (b - (c - d))},
20905 or @samp{a - b + c - d}. This ``alternating sum'' occurs frequently
20906 in power series expansions.
20907
20908 @kindex V U
20909 @tindex accum
20910 The @kbd{V U} (@code{calc-accumulate}) [@code{accum}] command does an
20911 accumulation operation. Here Calc does the corresponding reduction
20912 operation, but instead of producing only the final result, it produces
20913 a vector of all the intermediate results. Accumulating @code{+} over
20914 the vector @samp{[a, b, c, d]} produces the vector
20915 @samp{[a, a + b, a + b + c, a + b + c + d]}.
20916
20917 @kindex I V U
20918 @tindex raccum
20919 The @kbd{I V U} [@code{raccum}] command does a right-to-left accumulation.
20920 For example, @kbd{I V U -} on the vector @samp{[a, b, c, d]} produces the
20921 vector @samp{[a - b + c - d, b - c + d, c - d, d]}.
20922
20923 @tindex reducea
20924 @tindex rreducea
20925 @tindex reduced
20926 @tindex rreduced
20927 As for @kbd{V M}, @kbd{V R} normally reduces a matrix elementwise. For
20928 example, given the matrix @expr{[[a, b, c], [d, e, f]]}, @kbd{V R +} will
20929 compute @expr{a + b + c + d + e + f}. You can type @kbd{V R _} or
20930 @kbd{V R :} to modify this behavior. The @kbd{V R _} [@code{reducea}]
20931 command reduces ``across'' the matrix; it reduces each row of the matrix
20932 as a vector, then collects the results. Thus @kbd{V R _ +} of this
20933 matrix would produce @expr{[a + b + c, d + e + f]}. Similarly, @kbd{V R :}
20934 [@code{reduced}] reduces down; @kbd{V R : +} would produce @expr{[a + d,
20935 b + e, c + f]}.
20936
20937 @tindex reducer
20938 @tindex rreducer
20939 There is a third ``by rows'' mode for reduction that is occasionally
20940 useful; @kbd{V R =} [@code{reducer}] simply reduces the operator over
20941 the rows of the matrix themselves. Thus @kbd{V R = +} on the above
20942 matrix would get the same result as @kbd{V R : +}, since adding two
20943 row vectors is equivalent to adding their elements. But @kbd{V R = *}
20944 would multiply the two rows (to get a single number, their dot product),
20945 while @kbd{V R : *} would produce a vector of the products of the columns.
20946
20947 These three matrix reduction modes work with @kbd{V R} and @kbd{I V R},
20948 but they are not currently supported with @kbd{V U} or @kbd{I V U}.
20949
20950 @tindex reducec
20951 @tindex rreducec
20952 The obsolete reduce-by-columns function, @code{reducec}, is still
20953 supported but there is no way to get it through the @kbd{V R} command.
20954
20955 The commands @kbd{M-# :} and @kbd{M-# _} are equivalent to typing
20956 @kbd{M-# r} to grab a rectangle of data into Calc, and then typing
20957 @kbd{V R : +} or @kbd{V R _ +}, respectively, to sum the columns or
20958 rows of the matrix. @xref{Grabbing From Buffers}.
20959
20960 @node Nesting and Fixed Points, Generalized Products, Reducing, Reducing and Mapping
20961 @subsection Nesting and Fixed Points
20962
20963 @noindent
20964 @kindex H V R
20965 @tindex nest
20966 The @kbd{H V R} [@code{nest}] command applies a function to a given
20967 argument repeatedly. It takes two values, @samp{a} and @samp{n}, from
20968 the stack, where @samp{n} must be an integer. It then applies the
20969 function nested @samp{n} times; if the function is @samp{f} and @samp{n}
20970 is 3, the result is @samp{f(f(f(a)))}. The number @samp{n} may be
20971 negative if Calc knows an inverse for the function @samp{f}; for
20972 example, @samp{nest(sin, a, -2)} returns @samp{arcsin(arcsin(a))}.
20973
20974 @kindex H V U
20975 @tindex anest
20976 The @kbd{H V U} [@code{anest}] command is an accumulating version of
20977 @code{nest}: It returns a vector of @samp{n+1} values, e.g.,
20978 @samp{[a, f(a), f(f(a)), f(f(f(a)))]}. If @samp{n} is negative and
20979 @samp{F} is the inverse of @samp{f}, then the result is of the
20980 form @samp{[a, F(a), F(F(a)), F(F(F(a)))]}.
20981
20982 @kindex H I V R
20983 @tindex fixp
20984 @cindex Fixed points
20985 The @kbd{H I V R} [@code{fixp}] command is like @kbd{H V R}, except
20986 that it takes only an @samp{a} value from the stack; the function is
20987 applied until it reaches a ``fixed point,'' i.e., until the result
20988 no longer changes.
20989
20990 @kindex H I V U
20991 @tindex afixp
20992 The @kbd{H I V U} [@code{afixp}] command is an accumulating @code{fixp}.
20993 The first element of the return vector will be the initial value @samp{a};
20994 the last element will be the final result that would have been returned
20995 by @code{fixp}.
20996
20997 For example, 0.739085 is a fixed point of the cosine function (in radians):
20998 @samp{cos(0.739085) = 0.739085}. You can find this value by putting, say,
20999 1.0 on the stack and typing @kbd{H I V U C}. (We use the accumulating
21000 version so we can see the intermediate results: @samp{[1, 0.540302, 0.857553,
21001 0.65329, ...]}. With a precision of six, this command will take 36 steps
21002 to converge to 0.739085.)
21003
21004 Newton's method for finding roots is a classic example of iteration
21005 to a fixed point. To find the square root of five starting with an
21006 initial guess, Newton's method would look for a fixed point of the
21007 function @samp{(x + 5/x) / 2}. Putting a guess of 1 on the stack
21008 and typing @kbd{H I V R ' ($ + 5/$)/2 @key{RET}} quickly yields the result
21009 2.23607. This is equivalent to using the @kbd{a R} (@code{calc-find-root})
21010 command to find a root of the equation @samp{x^2 = 5}.
21011
21012 These examples used numbers for @samp{a} values. Calc keeps applying
21013 the function until two successive results are equal to within the
21014 current precision. For complex numbers, both the real parts and the
21015 imaginary parts must be equal to within the current precision. If
21016 @samp{a} is a formula (say, a variable name), then the function is
21017 applied until two successive results are exactly the same formula.
21018 It is up to you to ensure that the function will eventually converge;
21019 if it doesn't, you may have to press @kbd{C-g} to stop the Calculator.
21020
21021 The algebraic @code{fixp} function takes two optional arguments, @samp{n}
21022 and @samp{tol}. The first is the maximum number of steps to be allowed,
21023 and must be either an integer or the symbol @samp{inf} (infinity, the
21024 default). The second is a convergence tolerance. If a tolerance is
21025 specified, all results during the calculation must be numbers, not
21026 formulas, and the iteration stops when the magnitude of the difference
21027 between two successive results is less than or equal to the tolerance.
21028 (This implies that a tolerance of zero iterates until the results are
21029 exactly equal.)
21030
21031 Putting it all together, @samp{fixp(<(# + A/#)/2>, B, 20, 1e-10)}
21032 computes the square root of @samp{A} given the initial guess @samp{B},
21033 stopping when the result is correct within the specified tolerance, or
21034 when 20 steps have been taken, whichever is sooner.
21035
21036 @node Generalized Products, , Nesting and Fixed Points, Reducing and Mapping
21037 @subsection Generalized Products
21038
21039 @kindex V O
21040 @pindex calc-outer-product
21041 @tindex outer
21042 The @kbd{V O} (@code{calc-outer-product}) [@code{outer}] command applies
21043 a given binary operator to all possible pairs of elements from two
21044 vectors, to produce a matrix. For example, @kbd{V O *} with @samp{[a, b]}
21045 and @samp{[x, y, z]} on the stack produces a multiplication table:
21046 @samp{[[a x, a y, a z], [b x, b y, b z]]}. Element @var{r},@var{c} of
21047 the result matrix is obtained by applying the operator to element @var{r}
21048 of the lefthand vector and element @var{c} of the righthand vector.
21049
21050 @kindex V I
21051 @pindex calc-inner-product
21052 @tindex inner
21053 The @kbd{V I} (@code{calc-inner-product}) [@code{inner}] command computes
21054 the generalized inner product of two vectors or matrices, given a
21055 ``multiplicative'' operator and an ``additive'' operator. These can each
21056 actually be any binary operators; if they are @samp{*} and @samp{+},
21057 respectively, the result is a standard matrix multiplication. Element
21058 @var{r},@var{c} of the result matrix is obtained by mapping the
21059 multiplicative operator across row @var{r} of the lefthand matrix and
21060 column @var{c} of the righthand matrix, and then reducing with the additive
21061 operator. Just as for the standard @kbd{*} command, this can also do a
21062 vector-matrix or matrix-vector inner product, or a vector-vector
21063 generalized dot product.
21064
21065 Since @kbd{V I} requires two operators, it prompts twice. In each case,
21066 you can use any of the usual methods for entering the operator. If you
21067 use @kbd{$} twice to take both operator formulas from the stack, the
21068 first (multiplicative) operator is taken from the top of the stack
21069 and the second (additive) operator is taken from second-to-top.
21070
21071 @node Vector and Matrix Formats, , Reducing and Mapping, Matrix Functions
21072 @section Vector and Matrix Display Formats
21073
21074 @noindent
21075 Commands for controlling vector and matrix display use the @kbd{v} prefix
21076 instead of the usual @kbd{d} prefix. But they are display modes; in
21077 particular, they are influenced by the @kbd{I} and @kbd{H} prefix keys
21078 in the same way (@pxref{Display Modes}). Matrix display is also
21079 influenced by the @kbd{d O} (@code{calc-flat-language}) mode;
21080 @pxref{Normal Language Modes}.
21081
21082 @kindex V <
21083 @pindex calc-matrix-left-justify
21084 @kindex V =
21085 @pindex calc-matrix-center-justify
21086 @kindex V >
21087 @pindex calc-matrix-right-justify
21088 The commands @kbd{v <} (@code{calc-matrix-left-justify}), @kbd{v >}
21089 (@code{calc-matrix-right-justify}), and @w{@kbd{v =}}
21090 (@code{calc-matrix-center-justify}) control whether matrix elements
21091 are justified to the left, right, or center of their columns.
21092
21093 @kindex V [
21094 @pindex calc-vector-brackets
21095 @kindex V @{
21096 @pindex calc-vector-braces
21097 @kindex V (
21098 @pindex calc-vector-parens
21099 The @kbd{v [} (@code{calc-vector-brackets}) command turns the square
21100 brackets that surround vectors and matrices displayed in the stack on
21101 and off. The @kbd{v @{} (@code{calc-vector-braces}) and @kbd{v (}
21102 (@code{calc-vector-parens}) commands use curly braces or parentheses,
21103 respectively, instead of square brackets. For example, @kbd{v @{} might
21104 be used in preparation for yanking a matrix into a buffer running
21105 Mathematica. (In fact, the Mathematica language mode uses this mode;
21106 @pxref{Mathematica Language Mode}.) Note that, regardless of the
21107 display mode, either brackets or braces may be used to enter vectors,
21108 and parentheses may never be used for this purpose.
21109
21110 @kindex V ]
21111 @pindex calc-matrix-brackets
21112 The @kbd{v ]} (@code{calc-matrix-brackets}) command controls the
21113 ``big'' style display of matrices. It prompts for a string of code
21114 letters; currently implemented letters are @code{R}, which enables
21115 brackets on each row of the matrix; @code{O}, which enables outer
21116 brackets in opposite corners of the matrix; and @code{C}, which
21117 enables commas or semicolons at the ends of all rows but the last.
21118 The default format is @samp{RO}. (Before Calc 2.00, the format
21119 was fixed at @samp{ROC}.) Here are some example matrices:
21120
21121 @example
21122 @group
21123 [ [ 123, 0, 0 ] [ [ 123, 0, 0 ],
21124 [ 0, 123, 0 ] [ 0, 123, 0 ],
21125 [ 0, 0, 123 ] ] [ 0, 0, 123 ] ]
21126
21127 RO ROC
21128
21129 @end group
21130 @end example
21131 @noindent
21132 @example
21133 @group
21134 [ 123, 0, 0 [ 123, 0, 0 ;
21135 0, 123, 0 0, 123, 0 ;
21136 0, 0, 123 ] 0, 0, 123 ]
21137
21138 O OC
21139
21140 @end group
21141 @end example
21142 @noindent
21143 @example
21144 @group
21145 [ 123, 0, 0 ] 123, 0, 0
21146 [ 0, 123, 0 ] 0, 123, 0
21147 [ 0, 0, 123 ] 0, 0, 123
21148
21149 R @r{blank}
21150 @end group
21151 @end example
21152
21153 @noindent
21154 Note that of the formats shown here, @samp{RO}, @samp{ROC}, and
21155 @samp{OC} are all recognized as matrices during reading, while
21156 the others are useful for display only.
21157
21158 @kindex V ,
21159 @pindex calc-vector-commas
21160 The @kbd{v ,} (@code{calc-vector-commas}) command turns commas on and
21161 off in vector and matrix display.
21162
21163 In vectors of length one, and in all vectors when commas have been
21164 turned off, Calc adds extra parentheses around formulas that might
21165 otherwise be ambiguous. For example, @samp{[a b]} could be a vector
21166 of the one formula @samp{a b}, or it could be a vector of two
21167 variables with commas turned off. Calc will display the former
21168 case as @samp{[(a b)]}. You can disable these extra parentheses
21169 (to make the output less cluttered at the expense of allowing some
21170 ambiguity) by adding the letter @code{P} to the control string you
21171 give to @kbd{v ]} (as described above).
21172
21173 @kindex V .
21174 @pindex calc-full-vectors
21175 The @kbd{v .} (@code{calc-full-vectors}) command turns abbreviated
21176 display of long vectors on and off. In this mode, vectors of six
21177 or more elements, or matrices of six or more rows or columns, will
21178 be displayed in an abbreviated form that displays only the first
21179 three elements and the last element: @samp{[a, b, c, ..., z]}.
21180 When very large vectors are involved this will substantially
21181 improve Calc's display speed.
21182
21183 @kindex t .
21184 @pindex calc-full-trail-vectors
21185 The @kbd{t .} (@code{calc-full-trail-vectors}) command controls a
21186 similar mode for recording vectors in the Trail. If you turn on
21187 this mode, vectors of six or more elements and matrices of six or
21188 more rows or columns will be abbreviated when they are put in the
21189 Trail. The @kbd{t y} (@code{calc-trail-yank}) command will be
21190 unable to recover those vectors. If you are working with very
21191 large vectors, this mode will improve the speed of all operations
21192 that involve the trail.
21193
21194 @kindex V /
21195 @pindex calc-break-vectors
21196 The @kbd{v /} (@code{calc-break-vectors}) command turns multi-line
21197 vector display on and off. Normally, matrices are displayed with one
21198 row per line but all other types of vectors are displayed in a single
21199 line. This mode causes all vectors, whether matrices or not, to be
21200 displayed with a single element per line. Sub-vectors within the
21201 vectors will still use the normal linear form.
21202
21203 @node Algebra, Units, Matrix Functions, Top
21204 @chapter Algebra
21205
21206 @noindent
21207 This section covers the Calc features that help you work with
21208 algebraic formulas. First, the general sub-formula selection
21209 mechanism is described; this works in conjunction with any Calc
21210 commands. Then, commands for specific algebraic operations are
21211 described. Finally, the flexible @dfn{rewrite rule} mechanism
21212 is discussed.
21213
21214 The algebraic commands use the @kbd{a} key prefix; selection
21215 commands use the @kbd{j} (for ``just a letter that wasn't used
21216 for anything else'') prefix.
21217
21218 @xref{Editing Stack Entries}, to see how to manipulate formulas
21219 using regular Emacs editing commands.
21220
21221 When doing algebraic work, you may find several of the Calculator's
21222 modes to be helpful, including Algebraic Simplification mode (@kbd{m A})
21223 or No-Simplification mode (@kbd{m O}),
21224 Algebraic entry mode (@kbd{m a}), Fraction mode (@kbd{m f}), and
21225 Symbolic mode (@kbd{m s}). @xref{Mode Settings}, for discussions
21226 of these modes. You may also wish to select Big display mode (@kbd{d B}).
21227 @xref{Normal Language Modes}.
21228
21229 @menu
21230 * Selecting Subformulas::
21231 * Algebraic Manipulation::
21232 * Simplifying Formulas::
21233 * Polynomials::
21234 * Calculus::
21235 * Solving Equations::
21236 * Numerical Solutions::
21237 * Curve Fitting::
21238 * Summations::
21239 * Logical Operations::
21240 * Rewrite Rules::
21241 @end menu
21242
21243 @node Selecting Subformulas, Algebraic Manipulation, Algebra, Algebra
21244 @section Selecting Sub-Formulas
21245
21246 @noindent
21247 @cindex Selections
21248 @cindex Sub-formulas
21249 @cindex Parts of formulas
21250 When working with an algebraic formula it is often necessary to
21251 manipulate a portion of the formula rather than the formula as a
21252 whole. Calc allows you to ``select'' a portion of any formula on
21253 the stack. Commands which would normally operate on that stack
21254 entry will now operate only on the sub-formula, leaving the
21255 surrounding part of the stack entry alone.
21256
21257 One common non-algebraic use for selection involves vectors. To work
21258 on one element of a vector in-place, simply select that element as a
21259 ``sub-formula'' of the vector.
21260
21261 @menu
21262 * Making Selections::
21263 * Changing Selections::
21264 * Displaying Selections::
21265 * Operating on Selections::
21266 * Rearranging with Selections::
21267 @end menu
21268
21269 @node Making Selections, Changing Selections, Selecting Subformulas, Selecting Subformulas
21270 @subsection Making Selections
21271
21272 @noindent
21273 @kindex j s
21274 @pindex calc-select-here
21275 To select a sub-formula, move the Emacs cursor to any character in that
21276 sub-formula, and press @w{@kbd{j s}} (@code{calc-select-here}). Calc will
21277 highlight the smallest portion of the formula that contains that
21278 character. By default the sub-formula is highlighted by blanking out
21279 all of the rest of the formula with dots. Selection works in any
21280 display mode but is perhaps easiest in Big mode (@kbd{d B}).
21281 Suppose you enter the following formula:
21282
21283 @smallexample
21284 @group
21285 3 ___
21286 (a + b) + V c
21287 1: ---------------
21288 2 x + 1
21289 @end group
21290 @end smallexample
21291
21292 @noindent
21293 (by typing @kbd{' ((a+b)^3 + sqrt(c)) / (2x+1)}). If you move the
21294 cursor to the letter @samp{b} and press @w{@kbd{j s}}, the display changes
21295 to
21296
21297 @smallexample
21298 @group
21299 . ...
21300 .. . b. . . .
21301 1* ...............
21302 . . . .
21303 @end group
21304 @end smallexample
21305
21306 @noindent
21307 Every character not part of the sub-formula @samp{b} has been changed
21308 to a dot. The @samp{*} next to the line number is to remind you that
21309 the formula has a portion of it selected. (In this case, it's very
21310 obvious, but it might not always be. If Embedded mode is enabled,
21311 the word @samp{Sel} also appears in the mode line because the stack
21312 may not be visible. @pxref{Embedded Mode}.)
21313
21314 If you had instead placed the cursor on the parenthesis immediately to
21315 the right of the @samp{b}, the selection would have been:
21316
21317 @smallexample
21318 @group
21319 . ...
21320 (a + b) . . .
21321 1* ...............
21322 . . . .
21323 @end group
21324 @end smallexample
21325
21326 @noindent
21327 The portion selected is always large enough to be considered a complete
21328 formula all by itself, so selecting the parenthesis selects the whole
21329 formula that it encloses. Putting the cursor on the @samp{+} sign
21330 would have had the same effect.
21331
21332 (Strictly speaking, the Emacs cursor is really the manifestation of
21333 the Emacs ``point,'' which is a position @emph{between} two characters
21334 in the buffer. So purists would say that Calc selects the smallest
21335 sub-formula which contains the character to the right of ``point.'')
21336
21337 If you supply a numeric prefix argument @var{n}, the selection is
21338 expanded to the @var{n}th enclosing sub-formula. Thus, positioning
21339 the cursor on the @samp{b} and typing @kbd{C-u 1 j s} will select
21340 @samp{a + b}; typing @kbd{C-u 2 j s} will select @samp{(a + b)^3},
21341 and so on.
21342
21343 If the cursor is not on any part of the formula, or if you give a
21344 numeric prefix that is too large, the entire formula is selected.
21345
21346 If the cursor is on the @samp{.} line that marks the top of the stack
21347 (i.e., its normal ``rest position''), this command selects the entire
21348 formula at stack level 1. Most selection commands similarly operate
21349 on the formula at the top of the stack if you haven't positioned the
21350 cursor on any stack entry.
21351
21352 @kindex j a
21353 @pindex calc-select-additional
21354 The @kbd{j a} (@code{calc-select-additional}) command enlarges the
21355 current selection to encompass the cursor. To select the smallest
21356 sub-formula defined by two different points, move to the first and
21357 press @kbd{j s}, then move to the other and press @kbd{j a}. This
21358 is roughly analogous to using @kbd{C-@@} (@code{set-mark-command}) to
21359 select the two ends of a region of text during normal Emacs editing.
21360
21361 @kindex j o
21362 @pindex calc-select-once
21363 The @kbd{j o} (@code{calc-select-once}) command selects a formula in
21364 exactly the same way as @kbd{j s}, except that the selection will
21365 last only as long as the next command that uses it. For example,
21366 @kbd{j o 1 +} is a handy way to add one to the sub-formula indicated
21367 by the cursor.
21368
21369 (A somewhat more precise definition: The @kbd{j o} command sets a flag
21370 such that the next command involving selected stack entries will clear
21371 the selections on those stack entries afterwards. All other selection
21372 commands except @kbd{j a} and @kbd{j O} clear this flag.)
21373
21374 @kindex j S
21375 @kindex j O
21376 @pindex calc-select-here-maybe
21377 @pindex calc-select-once-maybe
21378 The @kbd{j S} (@code{calc-select-here-maybe}) and @kbd{j O}
21379 (@code{calc-select-once-maybe}) commands are equivalent to @kbd{j s}
21380 and @kbd{j o}, respectively, except that if the formula already
21381 has a selection they have no effect. This is analogous to the
21382 behavior of some commands such as @kbd{j r} (@code{calc-rewrite-selection};
21383 @pxref{Selections with Rewrite Rules}) and is mainly intended to be
21384 used in keyboard macros that implement your own selection-oriented
21385 commands.
21386
21387 Selection of sub-formulas normally treats associative terms like
21388 @samp{a + b - c + d} and @samp{x * y * z} as single levels of the formula.
21389 If you place the cursor anywhere inside @samp{a + b - c + d} except
21390 on one of the variable names and use @kbd{j s}, you will select the
21391 entire four-term sum.
21392
21393 @kindex j b
21394 @pindex calc-break-selections
21395 The @kbd{j b} (@code{calc-break-selections}) command controls a mode
21396 in which the ``deep structure'' of these associative formulas shows
21397 through. Calc actually stores the above formulas as @samp{((a + b) - c) + d}
21398 and @samp{x * (y * z)}. (Note that for certain obscure reasons, Calc
21399 treats multiplication as right-associative.) Once you have enabled
21400 @kbd{j b} mode, selecting with the cursor on the @samp{-} sign would
21401 only select the @samp{a + b - c} portion, which makes sense when the
21402 deep structure of the sum is considered. There is no way to select
21403 the @samp{b - c + d} portion; although this might initially look
21404 like just as legitimate a sub-formula as @samp{a + b - c}, the deep
21405 structure shows that it isn't. The @kbd{d U} command can be used
21406 to view the deep structure of any formula (@pxref{Normal Language Modes}).
21407
21408 When @kbd{j b} mode has not been enabled, the deep structure is
21409 generally hidden by the selection commands---what you see is what
21410 you get.
21411
21412 @kindex j u
21413 @pindex calc-unselect
21414 The @kbd{j u} (@code{calc-unselect}) command unselects the formula
21415 that the cursor is on. If there was no selection in the formula,
21416 this command has no effect. With a numeric prefix argument, it
21417 unselects the @var{n}th stack element rather than using the cursor
21418 position.
21419
21420 @kindex j c
21421 @pindex calc-clear-selections
21422 The @kbd{j c} (@code{calc-clear-selections}) command unselects all
21423 stack elements.
21424
21425 @node Changing Selections, Displaying Selections, Making Selections, Selecting Subformulas
21426 @subsection Changing Selections
21427
21428 @noindent
21429 @kindex j m
21430 @pindex calc-select-more
21431 Once you have selected a sub-formula, you can expand it using the
21432 @w{@kbd{j m}} (@code{calc-select-more}) command. If @samp{a + b} is
21433 selected, pressing @w{@kbd{j m}} repeatedly works as follows:
21434
21435 @smallexample
21436 @group
21437 3 ... 3 ___ 3 ___
21438 (a + b) . . . (a + b) + V c (a + b) + V c
21439 1* ............... 1* ............... 1* ---------------
21440 . . . . . . . . 2 x + 1
21441 @end group
21442 @end smallexample
21443
21444 @noindent
21445 In the last example, the entire formula is selected. This is roughly
21446 the same as having no selection at all, but because there are subtle
21447 differences the @samp{*} character is still there on the line number.
21448
21449 With a numeric prefix argument @var{n}, @kbd{j m} expands @var{n}
21450 times (or until the entire formula is selected). Note that @kbd{j s}
21451 with argument @var{n} is equivalent to plain @kbd{j s} followed by
21452 @kbd{j m} with argument @var{n}. If @w{@kbd{j m}} is used when there
21453 is no current selection, it is equivalent to @w{@kbd{j s}}.
21454
21455 Even though @kbd{j m} does not explicitly use the location of the
21456 cursor within the formula, it nevertheless uses the cursor to determine
21457 which stack element to operate on. As usual, @kbd{j m} when the cursor
21458 is not on any stack element operates on the top stack element.
21459
21460 @kindex j l
21461 @pindex calc-select-less
21462 The @kbd{j l} (@code{calc-select-less}) command reduces the current
21463 selection around the cursor position. That is, it selects the
21464 immediate sub-formula of the current selection which contains the
21465 cursor, the opposite of @kbd{j m}. If the cursor is not inside the
21466 current selection, the command de-selects the formula.
21467
21468 @kindex j 1-9
21469 @pindex calc-select-part
21470 The @kbd{j 1} through @kbd{j 9} (@code{calc-select-part}) commands
21471 select the @var{n}th sub-formula of the current selection. They are
21472 like @kbd{j l} (@code{calc-select-less}) except they use counting
21473 rather than the cursor position to decide which sub-formula to select.
21474 For example, if the current selection is @kbd{a + b + c} or
21475 @kbd{f(a, b, c)} or @kbd{[a, b, c]}, then @kbd{j 1} selects @samp{a},
21476 @kbd{j 2} selects @samp{b}, and @kbd{j 3} selects @samp{c}; in each of
21477 these cases, @kbd{j 4} through @kbd{j 9} would be errors.
21478
21479 If there is no current selection, @kbd{j 1} through @kbd{j 9} select
21480 the @var{n}th top-level sub-formula. (In other words, they act as if
21481 the entire stack entry were selected first.) To select the @var{n}th
21482 sub-formula where @var{n} is greater than nine, you must instead invoke
21483 @w{@kbd{j 1}} with @var{n} as a numeric prefix argument.
21484
21485 @kindex j n
21486 @kindex j p
21487 @pindex calc-select-next
21488 @pindex calc-select-previous
21489 The @kbd{j n} (@code{calc-select-next}) and @kbd{j p}
21490 (@code{calc-select-previous}) commands change the current selection
21491 to the next or previous sub-formula at the same level. For example,
21492 if @samp{b} is selected in @w{@samp{2 + a*b*c + x}}, then @kbd{j n}
21493 selects @samp{c}. Further @kbd{j n} commands would be in error because,
21494 even though there is something to the right of @samp{c} (namely, @samp{x}),
21495 it is not at the same level; in this case, it is not a term of the
21496 same product as @samp{b} and @samp{c}. However, @kbd{j m} (to select
21497 the whole product @samp{a*b*c} as a term of the sum) followed by
21498 @w{@kbd{j n}} would successfully select the @samp{x}.
21499
21500 Similarly, @kbd{j p} moves the selection from the @samp{b} in this
21501 sample formula to the @samp{a}. Both commands accept numeric prefix
21502 arguments to move several steps at a time.
21503
21504 It is interesting to compare Calc's selection commands with the
21505 Emacs Info system's commands for navigating through hierarchically
21506 organized documentation. Calc's @kbd{j n} command is completely
21507 analogous to Info's @kbd{n} command. Likewise, @kbd{j p} maps to
21508 @kbd{p}, @kbd{j 2} maps to @kbd{2}, and Info's @kbd{u} is like @kbd{j m}.
21509 (Note that @kbd{j u} stands for @code{calc-unselect}, not ``up''.)
21510 The Info @kbd{m} command is somewhat similar to Calc's @kbd{j s} and
21511 @kbd{j l}; in each case, you can jump directly to a sub-component
21512 of the hierarchy simply by pointing to it with the cursor.
21513
21514 @node Displaying Selections, Operating on Selections, Changing Selections, Selecting Subformulas
21515 @subsection Displaying Selections
21516
21517 @noindent
21518 @kindex j d
21519 @pindex calc-show-selections
21520 The @kbd{j d} (@code{calc-show-selections}) command controls how
21521 selected sub-formulas are displayed. One of the alternatives is
21522 illustrated in the above examples; if we press @kbd{j d} we switch
21523 to the other style in which the selected portion itself is obscured
21524 by @samp{#} signs:
21525
21526 @smallexample
21527 @group
21528 3 ... # ___
21529 (a + b) . . . ## # ## + V c
21530 1* ............... 1* ---------------
21531 . . . . 2 x + 1
21532 @end group
21533 @end smallexample
21534
21535 @node Operating on Selections, Rearranging with Selections, Displaying Selections, Selecting Subformulas
21536 @subsection Operating on Selections
21537
21538 @noindent
21539 Once a selection is made, all Calc commands that manipulate items
21540 on the stack will operate on the selected portions of the items
21541 instead. (Note that several stack elements may have selections
21542 at once, though there can be only one selection at a time in any
21543 given stack element.)
21544
21545 @kindex j e
21546 @pindex calc-enable-selections
21547 The @kbd{j e} (@code{calc-enable-selections}) command disables the
21548 effect that selections have on Calc commands. The current selections
21549 still exist, but Calc commands operate on whole stack elements anyway.
21550 This mode can be identified by the fact that the @samp{*} markers on
21551 the line numbers are gone, even though selections are visible. To
21552 reactivate the selections, press @kbd{j e} again.
21553
21554 To extract a sub-formula as a new formula, simply select the
21555 sub-formula and press @key{RET}. This normally duplicates the top
21556 stack element; here it duplicates only the selected portion of that
21557 element.
21558
21559 To replace a sub-formula with something different, you can enter the
21560 new value onto the stack and press @key{TAB}. This normally exchanges
21561 the top two stack elements; here it swaps the value you entered into
21562 the selected portion of the formula, returning the old selected
21563 portion to the top of the stack.
21564
21565 @smallexample
21566 @group
21567 3 ... ... ___
21568 (a + b) . . . 17 x y . . . 17 x y + V c
21569 2* ............... 2* ............. 2: -------------
21570 . . . . . . . . 2 x + 1
21571
21572 3 3
21573 1: 17 x y 1: (a + b) 1: (a + b)
21574 @end group
21575 @end smallexample
21576
21577 In this example we select a sub-formula of our original example,
21578 enter a new formula, @key{TAB} it into place, then deselect to see
21579 the complete, edited formula.
21580
21581 If you want to swap whole formulas around even though they contain
21582 selections, just use @kbd{j e} before and after.
21583
21584 @kindex j '
21585 @pindex calc-enter-selection
21586 The @kbd{j '} (@code{calc-enter-selection}) command is another way
21587 to replace a selected sub-formula. This command does an algebraic
21588 entry just like the regular @kbd{'} key. When you press @key{RET},
21589 the formula you type replaces the original selection. You can use
21590 the @samp{$} symbol in the formula to refer to the original
21591 selection. If there is no selection in the formula under the cursor,
21592 the cursor is used to make a temporary selection for the purposes of
21593 the command. Thus, to change a term of a formula, all you have to
21594 do is move the Emacs cursor to that term and press @kbd{j '}.
21595
21596 @kindex j `
21597 @pindex calc-edit-selection
21598 The @kbd{j `} (@code{calc-edit-selection}) command is a similar
21599 analogue of the @kbd{`} (@code{calc-edit}) command. It edits the
21600 selected sub-formula in a separate buffer. If there is no
21601 selection, it edits the sub-formula indicated by the cursor.
21602
21603 To delete a sub-formula, press @key{DEL}. This generally replaces
21604 the sub-formula with the constant zero, but in a few suitable contexts
21605 it uses the constant one instead. The @key{DEL} key automatically
21606 deselects and re-simplifies the entire formula afterwards. Thus:
21607
21608 @smallexample
21609 @group
21610 ###
21611 17 x y + # # 17 x y 17 # y 17 y
21612 1* ------------- 1: ------- 1* ------- 1: -------
21613 2 x + 1 2 x + 1 2 x + 1 2 x + 1
21614 @end group
21615 @end smallexample
21616
21617 In this example, we first delete the @samp{sqrt(c)} term; Calc
21618 accomplishes this by replacing @samp{sqrt(c)} with zero and
21619 resimplifying. We then delete the @kbd{x} in the numerator;
21620 since this is part of a product, Calc replaces it with @samp{1}
21621 and resimplifies.
21622
21623 If you select an element of a vector and press @key{DEL}, that
21624 element is deleted from the vector. If you delete one side of
21625 an equation or inequality, only the opposite side remains.
21626
21627 @kindex j @key{DEL}
21628 @pindex calc-del-selection
21629 The @kbd{j @key{DEL}} (@code{calc-del-selection}) command is like
21630 @key{DEL} but with the auto-selecting behavior of @kbd{j '} and
21631 @kbd{j `}. It deletes the selected portion of the formula
21632 indicated by the cursor, or, in the absence of a selection, it
21633 deletes the sub-formula indicated by the cursor position.
21634
21635 @kindex j @key{RET}
21636 @pindex calc-grab-selection
21637 (There is also an auto-selecting @kbd{j @key{RET}} (@code{calc-copy-selection})
21638 command.)
21639
21640 Normal arithmetic operations also apply to sub-formulas. Here we
21641 select the denominator, press @kbd{5 -} to subtract five from the
21642 denominator, press @kbd{n} to negate the denominator, then
21643 press @kbd{Q} to take the square root.
21644
21645 @smallexample
21646 @group
21647 .. . .. . .. . .. .
21648 1* ....... 1* ....... 1* ....... 1* ..........
21649 2 x + 1 2 x - 4 4 - 2 x _________
21650 V 4 - 2 x
21651 @end group
21652 @end smallexample
21653
21654 Certain types of operations on selections are not allowed. For
21655 example, for an arithmetic function like @kbd{-} no more than one of
21656 the arguments may be a selected sub-formula. (As the above example
21657 shows, the result of the subtraction is spliced back into the argument
21658 which had the selection; if there were more than one selection involved,
21659 this would not be well-defined.) If you try to subtract two selections,
21660 the command will abort with an error message.
21661
21662 Operations on sub-formulas sometimes leave the formula as a whole
21663 in an ``un-natural'' state. Consider negating the @samp{2 x} term
21664 of our sample formula by selecting it and pressing @kbd{n}
21665 (@code{calc-change-sign}).
21666
21667 @smallexample
21668 @group
21669 .. . .. .
21670 1* .......... 1* ...........
21671 ......... ..........
21672 . . . 2 x . . . -2 x
21673 @end group
21674 @end smallexample
21675
21676 Unselecting the sub-formula reveals that the minus sign, which would
21677 normally have cancelled out with the subtraction automatically, has
21678 not been able to do so because the subtraction was not part of the
21679 selected portion. Pressing @kbd{=} (@code{calc-evaluate}) or doing
21680 any other mathematical operation on the whole formula will cause it
21681 to be simplified.
21682
21683 @smallexample
21684 @group
21685 17 y 17 y
21686 1: ----------- 1: ----------
21687 __________ _________
21688 V 4 - -2 x V 4 + 2 x
21689 @end group
21690 @end smallexample
21691
21692 @node Rearranging with Selections, , Operating on Selections, Selecting Subformulas
21693 @subsection Rearranging Formulas using Selections
21694
21695 @noindent
21696 @kindex j R
21697 @pindex calc-commute-right
21698 The @kbd{j R} (@code{calc-commute-right}) command moves the selected
21699 sub-formula to the right in its surrounding formula. Generally the
21700 selection is one term of a sum or product; the sum or product is
21701 rearranged according to the commutative laws of algebra.
21702
21703 As with @kbd{j '} and @kbd{j @key{DEL}}, the term under the cursor is used
21704 if there is no selection in the current formula. All commands described
21705 in this section share this property. In this example, we place the
21706 cursor on the @samp{a} and type @kbd{j R}, then repeat.
21707
21708 @smallexample
21709 1: a + b - c 1: b + a - c 1: b - c + a
21710 @end smallexample
21711
21712 @noindent
21713 Note that in the final step above, the @samp{a} is switched with
21714 the @samp{c} but the signs are adjusted accordingly. When moving
21715 terms of sums and products, @kbd{j R} will never change the
21716 mathematical meaning of the formula.
21717
21718 The selected term may also be an element of a vector or an argument
21719 of a function. The term is exchanged with the one to its right.
21720 In this case, the ``meaning'' of the vector or function may of
21721 course be drastically changed.
21722
21723 @smallexample
21724 1: [a, b, c] 1: [b, a, c] 1: [b, c, a]
21725
21726 1: f(a, b, c) 1: f(b, a, c) 1: f(b, c, a)
21727 @end smallexample
21728
21729 @kindex j L
21730 @pindex calc-commute-left
21731 The @kbd{j L} (@code{calc-commute-left}) command is like @kbd{j R}
21732 except that it swaps the selected term with the one to its left.
21733
21734 With numeric prefix arguments, these commands move the selected
21735 term several steps at a time. It is an error to try to move a
21736 term left or right past the end of its enclosing formula.
21737 With numeric prefix arguments of zero, these commands move the
21738 selected term as far as possible in the given direction.
21739
21740 @kindex j D
21741 @pindex calc-sel-distribute
21742 The @kbd{j D} (@code{calc-sel-distribute}) command mixes the selected
21743 sum or product into the surrounding formula using the distributive
21744 law. For example, in @samp{a * (b - c)} with the @samp{b - c}
21745 selected, the result is @samp{a b - a c}. This also distributes
21746 products or quotients into surrounding powers, and can also do
21747 transformations like @samp{exp(a + b)} to @samp{exp(a) exp(b)},
21748 where @samp{a + b} is the selected term, and @samp{ln(a ^ b)}
21749 to @samp{ln(a) b}, where @samp{a ^ b} is the selected term.
21750
21751 For multiple-term sums or products, @kbd{j D} takes off one term
21752 at a time: @samp{a * (b + c - d)} goes to @samp{a * (c - d) + a b}
21753 with the @samp{c - d} selected so that you can type @kbd{j D}
21754 repeatedly to expand completely. The @kbd{j D} command allows a
21755 numeric prefix argument which specifies the maximum number of
21756 times to expand at once; the default is one time only.
21757
21758 @vindex DistribRules
21759 The @kbd{j D} command is implemented using rewrite rules.
21760 @xref{Selections with Rewrite Rules}. The rules are stored in
21761 the Calc variable @code{DistribRules}. A convenient way to view
21762 these rules is to use @kbd{s e} (@code{calc-edit-variable}) which
21763 displays and edits the stored value of a variable. Press @kbd{C-c C-c}
21764 to return from editing mode; be careful not to make any actual changes
21765 or else you will affect the behavior of future @kbd{j D} commands!
21766
21767 To extend @kbd{j D} to handle new cases, just edit @code{DistribRules}
21768 as described above. You can then use the @kbd{s p} command to save
21769 this variable's value permanently for future Calc sessions.
21770 @xref{Operations on Variables}.
21771
21772 @kindex j M
21773 @pindex calc-sel-merge
21774 @vindex MergeRules
21775 The @kbd{j M} (@code{calc-sel-merge}) command is the complement
21776 of @kbd{j D}; given @samp{a b - a c} with either @samp{a b} or
21777 @samp{a c} selected, the result is @samp{a * (b - c)}. Once
21778 again, @kbd{j M} can also merge calls to functions like @code{exp}
21779 and @code{ln}; examine the variable @code{MergeRules} to see all
21780 the relevant rules.
21781
21782 @kindex j C
21783 @pindex calc-sel-commute
21784 @vindex CommuteRules
21785 The @kbd{j C} (@code{calc-sel-commute}) command swaps the arguments
21786 of the selected sum, product, or equation. It always behaves as
21787 if @kbd{j b} mode were in effect, i.e., the sum @samp{a + b + c} is
21788 treated as the nested sums @samp{(a + b) + c} by this command.
21789 If you put the cursor on the first @samp{+}, the result is
21790 @samp{(b + a) + c}; if you put the cursor on the second @samp{+}, the
21791 result is @samp{c + (a + b)} (which the default simplifications
21792 will rearrange to @samp{(c + a) + b}). The relevant rules are stored
21793 in the variable @code{CommuteRules}.
21794
21795 You may need to turn default simplifications off (with the @kbd{m O}
21796 command) in order to get the full benefit of @kbd{j C}. For example,
21797 commuting @samp{a - b} produces @samp{-b + a}, but the default
21798 simplifications will ``simplify'' this right back to @samp{a - b} if
21799 you don't turn them off. The same is true of some of the other
21800 manipulations described in this section.
21801
21802 @kindex j N
21803 @pindex calc-sel-negate
21804 @vindex NegateRules
21805 The @kbd{j N} (@code{calc-sel-negate}) command replaces the selected
21806 term with the negative of that term, then adjusts the surrounding
21807 formula in order to preserve the meaning. For example, given
21808 @samp{exp(a - b)} where @samp{a - b} is selected, the result is
21809 @samp{1 / exp(b - a)}. By contrast, selecting a term and using the
21810 regular @kbd{n} (@code{calc-change-sign}) command negates the
21811 term without adjusting the surroundings, thus changing the meaning
21812 of the formula as a whole. The rules variable is @code{NegateRules}.
21813
21814 @kindex j &
21815 @pindex calc-sel-invert
21816 @vindex InvertRules
21817 The @kbd{j &} (@code{calc-sel-invert}) command is similar to @kbd{j N}
21818 except it takes the reciprocal of the selected term. For example,
21819 given @samp{a - ln(b)} with @samp{b} selected, the result is
21820 @samp{a + ln(1/b)}. The rules variable is @code{InvertRules}.
21821
21822 @kindex j E
21823 @pindex calc-sel-jump-equals
21824 @vindex JumpRules
21825 The @kbd{j E} (@code{calc-sel-jump-equals}) command moves the
21826 selected term from one side of an equation to the other. Given
21827 @samp{a + b = c + d} with @samp{c} selected, the result is
21828 @samp{a + b - c = d}. This command also works if the selected
21829 term is part of a @samp{*}, @samp{/}, or @samp{^} formula. The
21830 relevant rules variable is @code{JumpRules}.
21831
21832 @kindex j I
21833 @kindex H j I
21834 @pindex calc-sel-isolate
21835 The @kbd{j I} (@code{calc-sel-isolate}) command isolates the
21836 selected term on its side of an equation. It uses the @kbd{a S}
21837 (@code{calc-solve-for}) command to solve the equation, and the
21838 Hyperbolic flag affects it in the same way. @xref{Solving Equations}.
21839 When it applies, @kbd{j I} is often easier to use than @kbd{j E}.
21840 It understands more rules of algebra, and works for inequalities
21841 as well as equations.
21842
21843 @kindex j *
21844 @kindex j /
21845 @pindex calc-sel-mult-both-sides
21846 @pindex calc-sel-div-both-sides
21847 The @kbd{j *} (@code{calc-sel-mult-both-sides}) command prompts for a
21848 formula using algebraic entry, then multiplies both sides of the
21849 selected quotient or equation by that formula. It simplifies each
21850 side with @kbd{a s} (@code{calc-simplify}) before re-forming the
21851 quotient or equation. You can suppress this simplification by
21852 providing any numeric prefix argument. There is also a @kbd{j /}
21853 (@code{calc-sel-div-both-sides}) which is similar to @kbd{j *} but
21854 dividing instead of multiplying by the factor you enter.
21855
21856 As a special feature, if the numerator of the quotient is 1, then
21857 the denominator is expanded at the top level using the distributive
21858 law (i.e., using the @kbd{C-u -1 a x} command). Suppose the
21859 formula on the stack is @samp{1 / (sqrt(a) + 1)}, and you wish
21860 to eliminate the square root in the denominator by multiplying both
21861 sides by @samp{sqrt(a) - 1}. Calc's default simplifications would
21862 change the result @samp{(sqrt(a) - 1) / (sqrt(a) - 1) (sqrt(a) + 1)}
21863 right back to the original form by cancellation; Calc expands the
21864 denominator to @samp{sqrt(a) (sqrt(a) - 1) + sqrt(a) - 1} to prevent
21865 this. (You would now want to use an @kbd{a x} command to expand
21866 the rest of the way, whereupon the denominator would cancel out to
21867 the desired form, @samp{a - 1}.) When the numerator is not 1, this
21868 initial expansion is not necessary because Calc's default
21869 simplifications will not notice the potential cancellation.
21870
21871 If the selection is an inequality, @kbd{j *} and @kbd{j /} will
21872 accept any factor, but will warn unless they can prove the factor
21873 is either positive or negative. (In the latter case the direction
21874 of the inequality will be switched appropriately.) @xref{Declarations},
21875 for ways to inform Calc that a given variable is positive or
21876 negative. If Calc can't tell for sure what the sign of the factor
21877 will be, it will assume it is positive and display a warning
21878 message.
21879
21880 For selections that are not quotients, equations, or inequalities,
21881 these commands pull out a multiplicative factor: They divide (or
21882 multiply) by the entered formula, simplify, then multiply (or divide)
21883 back by the formula.
21884
21885 @kindex j +
21886 @kindex j -
21887 @pindex calc-sel-add-both-sides
21888 @pindex calc-sel-sub-both-sides
21889 The @kbd{j +} (@code{calc-sel-add-both-sides}) and @kbd{j -}
21890 (@code{calc-sel-sub-both-sides}) commands analogously add to or
21891 subtract from both sides of an equation or inequality. For other
21892 types of selections, they extract an additive factor. A numeric
21893 prefix argument suppresses simplification of the intermediate
21894 results.
21895
21896 @kindex j U
21897 @pindex calc-sel-unpack
21898 The @kbd{j U} (@code{calc-sel-unpack}) command replaces the
21899 selected function call with its argument. For example, given
21900 @samp{a + sin(x^2)} with @samp{sin(x^2)} selected, the result
21901 is @samp{a + x^2}. (The @samp{x^2} will remain selected; if you
21902 wanted to change the @code{sin} to @code{cos}, just press @kbd{C}
21903 now to take the cosine of the selected part.)
21904
21905 @kindex j v
21906 @pindex calc-sel-evaluate
21907 The @kbd{j v} (@code{calc-sel-evaluate}) command performs the
21908 normal default simplifications on the selected sub-formula.
21909 These are the simplifications that are normally done automatically
21910 on all results, but which may have been partially inhibited by
21911 previous selection-related operations, or turned off altogether
21912 by the @kbd{m O} command. This command is just an auto-selecting
21913 version of the @w{@kbd{a v}} command (@pxref{Algebraic Manipulation}).
21914
21915 With a numeric prefix argument of 2, @kbd{C-u 2 j v} applies
21916 the @kbd{a s} (@code{calc-simplify}) command to the selected
21917 sub-formula. With a prefix argument of 3 or more, e.g., @kbd{C-u j v}
21918 applies the @kbd{a e} (@code{calc-simplify-extended}) command.
21919 @xref{Simplifying Formulas}. With a negative prefix argument
21920 it simplifies at the top level only, just as with @kbd{a v}.
21921 Here the ``top'' level refers to the top level of the selected
21922 sub-formula.
21923
21924 @kindex j "
21925 @pindex calc-sel-expand-formula
21926 The @kbd{j "} (@code{calc-sel-expand-formula}) command is to @kbd{a "}
21927 (@pxref{Algebraic Manipulation}) what @kbd{j v} is to @kbd{a v}.
21928
21929 You can use the @kbd{j r} (@code{calc-rewrite-selection}) command
21930 to define other algebraic operations on sub-formulas. @xref{Rewrite Rules}.
21931
21932 @node Algebraic Manipulation, Simplifying Formulas, Selecting Subformulas, Algebra
21933 @section Algebraic Manipulation
21934
21935 @noindent
21936 The commands in this section perform general-purpose algebraic
21937 manipulations. They work on the whole formula at the top of the
21938 stack (unless, of course, you have made a selection in that
21939 formula).
21940
21941 Many algebra commands prompt for a variable name or formula. If you
21942 answer the prompt with a blank line, the variable or formula is taken
21943 from top-of-stack, and the normal argument for the command is taken
21944 from the second-to-top stack level.
21945
21946 @kindex a v
21947 @pindex calc-alg-evaluate
21948 The @kbd{a v} (@code{calc-alg-evaluate}) command performs the normal
21949 default simplifications on a formula; for example, @samp{a - -b} is
21950 changed to @samp{a + b}. These simplifications are normally done
21951 automatically on all Calc results, so this command is useful only if
21952 you have turned default simplifications off with an @kbd{m O}
21953 command. @xref{Simplification Modes}.
21954
21955 It is often more convenient to type @kbd{=}, which is like @kbd{a v}
21956 but which also substitutes stored values for variables in the formula.
21957 Use @kbd{a v} if you want the variables to ignore their stored values.
21958
21959 If you give a numeric prefix argument of 2 to @kbd{a v}, it simplifies
21960 as if in Algebraic Simplification mode. This is equivalent to typing
21961 @kbd{a s}; @pxref{Simplifying Formulas}. If you give a numeric prefix
21962 of 3 or more, it uses Extended Simplification mode (@kbd{a e}).
21963
21964 If you give a negative prefix argument @mathit{-1}, @mathit{-2}, or @mathit{-3},
21965 it simplifies in the corresponding mode but only works on the top-level
21966 function call of the formula. For example, @samp{(2 + 3) * (2 + 3)} will
21967 simplify to @samp{(2 + 3)^2}, without simplifying the sub-formulas
21968 @samp{2 + 3}. As another example, typing @kbd{V R +} to sum the vector
21969 @samp{[1, 2, 3, 4]} produces the formula @samp{reduce(add, [1, 2, 3, 4])}
21970 in No-Simplify mode. Using @kbd{a v} will evaluate this all the way to
21971 10; using @kbd{C-u - a v} will evaluate it only to @samp{1 + 2 + 3 + 4}.
21972 (@xref{Reducing and Mapping}.)
21973
21974 @tindex evalv
21975 @tindex evalvn
21976 The @kbd{=} command corresponds to the @code{evalv} function, and
21977 the related @kbd{N} command, which is like @kbd{=} but temporarily
21978 disables Symbolic mode (@kbd{m s}) during the evaluation, corresponds
21979 to the @code{evalvn} function. (These commands interpret their prefix
21980 arguments differently than @kbd{a v}; @kbd{=} treats the prefix as
21981 the number of stack elements to evaluate at once, and @kbd{N} treats
21982 it as a temporary different working precision.)
21983
21984 The @code{evalvn} function can take an alternate working precision
21985 as an optional second argument. This argument can be either an
21986 integer, to set the precision absolutely, or a vector containing
21987 a single integer, to adjust the precision relative to the current
21988 precision. Note that @code{evalvn} with a larger than current
21989 precision will do the calculation at this higher precision, but the
21990 result will as usual be rounded back down to the current precision
21991 afterward. For example, @samp{evalvn(pi - 3.1415)} at a precision
21992 of 12 will return @samp{9.265359e-5}; @samp{evalvn(pi - 3.1415, 30)}
21993 will return @samp{9.26535897932e-5} (computing a 25-digit result which
21994 is then rounded down to 12); and @samp{evalvn(pi - 3.1415, [-2])}
21995 will return @samp{9.2654e-5}.
21996
21997 @kindex a "
21998 @pindex calc-expand-formula
21999 The @kbd{a "} (@code{calc-expand-formula}) command expands functions
22000 into their defining formulas wherever possible. For example,
22001 @samp{deg(x^2)} is changed to @samp{180 x^2 / pi}. Most functions,
22002 like @code{sin} and @code{gcd}, are not defined by simple formulas
22003 and so are unaffected by this command. One important class of
22004 functions which @emph{can} be expanded is the user-defined functions
22005 created by the @kbd{Z F} command. @xref{Algebraic Definitions}.
22006 Other functions which @kbd{a "} can expand include the probability
22007 distribution functions, most of the financial functions, and the
22008 hyperbolic and inverse hyperbolic functions. A numeric prefix argument
22009 affects @kbd{a "} in the same way as it does @kbd{a v}: A positive
22010 argument expands all functions in the formula and then simplifies in
22011 various ways; a negative argument expands and simplifies only the
22012 top-level function call.
22013
22014 @kindex a M
22015 @pindex calc-map-equation
22016 @tindex mapeq
22017 The @kbd{a M} (@code{calc-map-equation}) [@code{mapeq}] command applies
22018 a given function or operator to one or more equations. It is analogous
22019 to @kbd{V M}, which operates on vectors instead of equations.
22020 @pxref{Reducing and Mapping}. For example, @kbd{a M S} changes
22021 @samp{x = y+1} to @samp{sin(x) = sin(y+1)}, and @kbd{a M +} with
22022 @samp{x = y+1} and @expr{6} on the stack produces @samp{x+6 = y+7}.
22023 With two equations on the stack, @kbd{a M +} would add the lefthand
22024 sides together and the righthand sides together to get the two
22025 respective sides of a new equation.
22026
22027 Mapping also works on inequalities. Mapping two similar inequalities
22028 produces another inequality of the same type. Mapping an inequality
22029 with an equation produces an inequality of the same type. Mapping a
22030 @samp{<=} with a @samp{<} or @samp{!=} (not-equal) produces a @samp{<}.
22031 If inequalities with opposite direction (e.g., @samp{<} and @samp{>})
22032 are mapped, the direction of the second inequality is reversed to
22033 match the first: Using @kbd{a M +} on @samp{a < b} and @samp{a > 2}
22034 reverses the latter to get @samp{2 < a}, which then allows the
22035 combination @samp{a + 2 < b + a}, which the @kbd{a s} command can
22036 then simplify to get @samp{2 < b}.
22037
22038 Using @kbd{a M *}, @kbd{a M /}, @kbd{a M n}, or @kbd{a M &} to negate
22039 or invert an inequality will reverse the direction of the inequality.
22040 Other adjustments to inequalities are @emph{not} done automatically;
22041 @kbd{a M S} will change @w{@samp{x < y}} to @samp{sin(x) < sin(y)} even
22042 though this is not true for all values of the variables.
22043
22044 @kindex H a M
22045 @tindex mapeqp
22046 With the Hyperbolic flag, @kbd{H a M} [@code{mapeqp}] does a plain
22047 mapping operation without reversing the direction of any inequalities.
22048 Thus, @kbd{H a M &} would change @kbd{x > 2} to @kbd{1/x > 0.5}.
22049 (This change is mathematically incorrect, but perhaps you were
22050 fixing an inequality which was already incorrect.)
22051
22052 @kindex I a M
22053 @tindex mapeqr
22054 With the Inverse flag, @kbd{I a M} [@code{mapeqr}] always reverses
22055 the direction of the inequality. You might use @kbd{I a M C} to
22056 change @samp{x < y} to @samp{cos(x) > cos(y)} if you know you are
22057 working with small positive angles.
22058
22059 @kindex a b
22060 @pindex calc-substitute
22061 @tindex subst
22062 The @kbd{a b} (@code{calc-substitute}) [@code{subst}] command substitutes
22063 all occurrences
22064 of some variable or sub-expression of an expression with a new
22065 sub-expression. For example, substituting @samp{sin(x)} with @samp{cos(y)}
22066 in @samp{2 sin(x)^2 + x sin(x) + sin(2 x)} produces
22067 @samp{2 cos(y)^2 + x cos(y) + @w{sin(2 x)}}.
22068 Note that this is a purely structural substitution; the lone @samp{x} and
22069 the @samp{sin(2 x)} stayed the same because they did not look like
22070 @samp{sin(x)}. @xref{Rewrite Rules}, for a more general method for
22071 doing substitutions.
22072
22073 The @kbd{a b} command normally prompts for two formulas, the old
22074 one and the new one. If you enter a blank line for the first
22075 prompt, all three arguments are taken from the stack (new, then old,
22076 then target expression). If you type an old formula but then enter a
22077 blank line for the new one, the new formula is taken from top-of-stack
22078 and the target from second-to-top. If you answer both prompts, the
22079 target is taken from top-of-stack as usual.
22080
22081 Note that @kbd{a b} has no understanding of commutativity or
22082 associativity. The pattern @samp{x+y} will not match the formula
22083 @samp{y+x}. Also, @samp{y+z} will not match inside the formula @samp{x+y+z}
22084 because the @samp{+} operator is left-associative, so the ``deep
22085 structure'' of that formula is @samp{(x+y) + z}. Use @kbd{d U}
22086 (@code{calc-unformatted-language}) mode to see the true structure of
22087 a formula. The rewrite rule mechanism, discussed later, does not have
22088 these limitations.
22089
22090 As an algebraic function, @code{subst} takes three arguments:
22091 Target expression, old, new. Note that @code{subst} is always
22092 evaluated immediately, even if its arguments are variables, so if
22093 you wish to put a call to @code{subst} onto the stack you must
22094 turn the default simplifications off first (with @kbd{m O}).
22095
22096 @node Simplifying Formulas, Polynomials, Algebraic Manipulation, Algebra
22097 @section Simplifying Formulas
22098
22099 @noindent
22100 @kindex a s
22101 @pindex calc-simplify
22102 @tindex simplify
22103 The @kbd{a s} (@code{calc-simplify}) [@code{simplify}] command applies
22104 various algebraic rules to simplify a formula. This includes rules which
22105 are not part of the default simplifications because they may be too slow
22106 to apply all the time, or may not be desirable all of the time. For
22107 example, non-adjacent terms of sums are combined, as in @samp{a + b + 2 a}
22108 to @samp{b + 3 a}, and some formulas like @samp{sin(arcsin(x))} are
22109 simplified to @samp{x}.
22110
22111 The sections below describe all the various kinds of algebraic
22112 simplifications Calc provides in full detail. None of Calc's
22113 simplification commands are designed to pull rabbits out of hats;
22114 they simply apply certain specific rules to put formulas into
22115 less redundant or more pleasing forms. Serious algebra in Calc
22116 must be done manually, usually with a combination of selections
22117 and rewrite rules. @xref{Rearranging with Selections}.
22118 @xref{Rewrite Rules}.
22119
22120 @xref{Simplification Modes}, for commands to control what level of
22121 simplification occurs automatically. Normally only the ``default
22122 simplifications'' occur.
22123
22124 @menu
22125 * Default Simplifications::
22126 * Algebraic Simplifications::
22127 * Unsafe Simplifications::
22128 * Simplification of Units::
22129 @end menu
22130
22131 @node Default Simplifications, Algebraic Simplifications, Simplifying Formulas, Simplifying Formulas
22132 @subsection Default Simplifications
22133
22134 @noindent
22135 @cindex Default simplifications
22136 This section describes the ``default simplifications,'' those which are
22137 normally applied to all results. For example, if you enter the variable
22138 @expr{x} on the stack twice and push @kbd{+}, Calc's default
22139 simplifications automatically change @expr{x + x} to @expr{2 x}.
22140
22141 The @kbd{m O} command turns off the default simplifications, so that
22142 @expr{x + x} will remain in this form unless you give an explicit
22143 ``simplify'' command like @kbd{=} or @kbd{a v}. @xref{Algebraic
22144 Manipulation}. The @kbd{m D} command turns the default simplifications
22145 back on.
22146
22147 The most basic default simplification is the evaluation of functions.
22148 For example, @expr{2 + 3} is evaluated to @expr{5}, and @expr{@t{sqrt}(9)}
22149 is evaluated to @expr{3}. Evaluation does not occur if the arguments
22150 to a function are somehow of the wrong type @expr{@t{tan}([2,3,4])}),
22151 range (@expr{@t{tan}(90)}), or number (@expr{@t{tan}(3,5)}),
22152 or if the function name is not recognized (@expr{@t{f}(5)}), or if
22153 Symbolic mode (@pxref{Symbolic Mode}) prevents evaluation
22154 (@expr{@t{sqrt}(2)}).
22155
22156 Calc simplifies (evaluates) the arguments to a function before it
22157 simplifies the function itself. Thus @expr{@t{sqrt}(5+4)} is
22158 simplified to @expr{@t{sqrt}(9)} before the @code{sqrt} function
22159 itself is applied. There are very few exceptions to this rule:
22160 @code{quote}, @code{lambda}, and @code{condition} (the @code{::}
22161 operator) do not evaluate their arguments, @code{if} (the @code{? :}
22162 operator) does not evaluate all of its arguments, and @code{evalto}
22163 does not evaluate its lefthand argument.
22164
22165 Most commands apply the default simplifications to all arguments they
22166 take from the stack, perform a particular operation, then simplify
22167 the result before pushing it back on the stack. In the common special
22168 case of regular arithmetic commands like @kbd{+} and @kbd{Q} [@code{sqrt}],
22169 the arguments are simply popped from the stack and collected into a
22170 suitable function call, which is then simplified (the arguments being
22171 simplified first as part of the process, as described above).
22172
22173 The default simplifications are too numerous to describe completely
22174 here, but this section will describe the ones that apply to the
22175 major arithmetic operators. This list will be rather technical in
22176 nature, and will probably be interesting to you only if you are
22177 a serious user of Calc's algebra facilities.
22178
22179 @tex
22180 \bigskip
22181 @end tex
22182
22183 As well as the simplifications described here, if you have stored
22184 any rewrite rules in the variable @code{EvalRules} then these rules
22185 will also be applied before any built-in default simplifications.
22186 @xref{Automatic Rewrites}, for details.
22187
22188 @tex
22189 \bigskip
22190 @end tex
22191
22192 And now, on with the default simplifications:
22193
22194 Arithmetic operators like @kbd{+} and @kbd{*} always take two
22195 arguments in Calc's internal form. Sums and products of three or
22196 more terms are arranged by the associative law of algebra into
22197 a left-associative form for sums, @expr{((a + b) + c) + d}, and
22198 a right-associative form for products, @expr{a * (b * (c * d))}.
22199 Formulas like @expr{(a + b) + (c + d)} are rearranged to
22200 left-associative form, though this rarely matters since Calc's
22201 algebra commands are designed to hide the inner structure of
22202 sums and products as much as possible. Sums and products in
22203 their proper associative form will be written without parentheses
22204 in the examples below.
22205
22206 Sums and products are @emph{not} rearranged according to the
22207 commutative law (@expr{a + b} to @expr{b + a}) except in a few
22208 special cases described below. Some algebra programs always
22209 rearrange terms into a canonical order, which enables them to
22210 see that @expr{a b + b a} can be simplified to @expr{2 a b}.
22211 Calc assumes you have put the terms into the order you want
22212 and generally leaves that order alone, with the consequence
22213 that formulas like the above will only be simplified if you
22214 explicitly give the @kbd{a s} command. @xref{Algebraic
22215 Simplifications}.
22216
22217 Differences @expr{a - b} are treated like sums @expr{a + (-b)}
22218 for purposes of simplification; one of the default simplifications
22219 is to rewrite @expr{a + (-b)} or @expr{(-b) + a}, where @expr{-b}
22220 represents a ``negative-looking'' term, into @expr{a - b} form.
22221 ``Negative-looking'' means negative numbers, negated formulas like
22222 @expr{-x}, and products or quotients in which either term is
22223 negative-looking.
22224
22225 Other simplifications involving negation are @expr{-(-x)} to @expr{x};
22226 @expr{-(a b)} or @expr{-(a/b)} where either @expr{a} or @expr{b} is
22227 negative-looking, simplified by negating that term, or else where
22228 @expr{a} or @expr{b} is any number, by negating that number;
22229 @expr{-(a + b)} to @expr{-a - b}, and @expr{-(b - a)} to @expr{a - b}.
22230 (This, and rewriting @expr{(-b) + a} to @expr{a - b}, are the only
22231 cases where the order of terms in a sum is changed by the default
22232 simplifications.)
22233
22234 The distributive law is used to simplify sums in some cases:
22235 @expr{a x + b x} to @expr{(a + b) x}, where @expr{a} represents
22236 a number or an implicit 1 or @mathit{-1} (as in @expr{x} or @expr{-x})
22237 and similarly for @expr{b}. Use the @kbd{a c}, @w{@kbd{a f}}, or
22238 @kbd{j M} commands to merge sums with non-numeric coefficients
22239 using the distributive law.
22240
22241 The distributive law is only used for sums of two terms, or
22242 for adjacent terms in a larger sum. Thus @expr{a + b + b + c}
22243 is simplified to @expr{a + 2 b + c}, but @expr{a + b + c + b}
22244 is not simplified. The reason is that comparing all terms of a
22245 sum with one another would require time proportional to the
22246 square of the number of terms; Calc relegates potentially slow
22247 operations like this to commands that have to be invoked
22248 explicitly, like @kbd{a s}.
22249
22250 Finally, @expr{a + 0} and @expr{0 + a} are simplified to @expr{a}.
22251 A consequence of the above rules is that @expr{0 - a} is simplified
22252 to @expr{-a}.
22253
22254 @tex
22255 \bigskip
22256 @end tex
22257
22258 The products @expr{1 a} and @expr{a 1} are simplified to @expr{a};
22259 @expr{(-1) a} and @expr{a (-1)} are simplified to @expr{-a};
22260 @expr{0 a} and @expr{a 0} are simplified to @expr{0}, except that
22261 in Matrix mode where @expr{a} is not provably scalar the result
22262 is the generic zero matrix @samp{idn(0)}, and that if @expr{a} is
22263 infinite the result is @samp{nan}.
22264
22265 Also, @expr{(-a) b} and @expr{a (-b)} are simplified to @expr{-(a b)},
22266 where this occurs for negated formulas but not for regular negative
22267 numbers.
22268
22269 Products are commuted only to move numbers to the front:
22270 @expr{a b 2} is commuted to @expr{2 a b}.
22271
22272 The product @expr{a (b + c)} is distributed over the sum only if
22273 @expr{a} and at least one of @expr{b} and @expr{c} are numbers:
22274 @expr{2 (x + 3)} goes to @expr{2 x + 6}. The formula
22275 @expr{(-a) (b - c)}, where @expr{-a} is a negative number, is
22276 rewritten to @expr{a (c - b)}.
22277
22278 The distributive law of products and powers is used for adjacent
22279 terms of the product: @expr{x^a x^b} goes to
22280 @texline @math{x^{a+b}}
22281 @infoline @expr{x^(a+b)}
22282 where @expr{a} is a number, or an implicit 1 (as in @expr{x}),
22283 or the implicit one-half of @expr{@t{sqrt}(x)}, and similarly for
22284 @expr{b}. The result is written using @samp{sqrt} or @samp{1/sqrt}
22285 if the sum of the powers is @expr{1/2} or @expr{-1/2}, respectively.
22286 If the sum of the powers is zero, the product is simplified to
22287 @expr{1} or to @samp{idn(1)} if Matrix mode is enabled.
22288
22289 The product of a negative power times anything but another negative
22290 power is changed to use division:
22291 @texline @math{x^{-2} y}
22292 @infoline @expr{x^(-2) y}
22293 goes to @expr{y / x^2} unless Matrix mode is
22294 in effect and neither @expr{x} nor @expr{y} are scalar (in which
22295 case it is considered unsafe to rearrange the order of the terms).
22296
22297 Finally, @expr{a (b/c)} is rewritten to @expr{(a b)/c}, and also
22298 @expr{(a/b) c} is changed to @expr{(a c)/b} unless in Matrix mode.
22299
22300 @tex
22301 \bigskip
22302 @end tex
22303
22304 Simplifications for quotients are analogous to those for products.
22305 The quotient @expr{0 / x} is simplified to @expr{0}, with the same
22306 exceptions that were noted for @expr{0 x}. Likewise, @expr{x / 1}
22307 and @expr{x / (-1)} are simplified to @expr{x} and @expr{-x},
22308 respectively.
22309
22310 The quotient @expr{x / 0} is left unsimplified or changed to an
22311 infinite quantity, as directed by the current infinite mode.
22312 @xref{Infinite Mode}.
22313
22314 The expression
22315 @texline @math{a / b^{-c}}
22316 @infoline @expr{a / b^(-c)}
22317 is changed to @expr{a b^c}, where @expr{-c} is any negative-looking
22318 power. Also, @expr{1 / b^c} is changed to
22319 @texline @math{b^{-c}}
22320 @infoline @expr{b^(-c)}
22321 for any power @expr{c}.
22322
22323 Also, @expr{(-a) / b} and @expr{a / (-b)} go to @expr{-(a/b)};
22324 @expr{(a/b) / c} goes to @expr{a / (b c)}; and @expr{a / (b/c)}
22325 goes to @expr{(a c) / b} unless Matrix mode prevents this
22326 rearrangement. Similarly, @expr{a / (b:c)} is simplified to
22327 @expr{(c:b) a} for any fraction @expr{b:c}.
22328
22329 The distributive law is applied to @expr{(a + b) / c} only if
22330 @expr{c} and at least one of @expr{a} and @expr{b} are numbers.
22331 Quotients of powers and square roots are distributed just as
22332 described for multiplication.
22333
22334 Quotients of products cancel only in the leading terms of the
22335 numerator and denominator. In other words, @expr{a x b / a y b}
22336 is cancelled to @expr{x b / y b} but not to @expr{x / y}. Once
22337 again this is because full cancellation can be slow; use @kbd{a s}
22338 to cancel all terms of the quotient.
22339
22340 Quotients of negative-looking values are simplified according
22341 to @expr{(-a) / (-b)} to @expr{a / b}, @expr{(-a) / (b - c)}
22342 to @expr{a / (c - b)}, and @expr{(a - b) / (-c)} to @expr{(b - a) / c}.
22343
22344 @tex
22345 \bigskip
22346 @end tex
22347
22348 The formula @expr{x^0} is simplified to @expr{1}, or to @samp{idn(1)}
22349 in Matrix mode. The formula @expr{0^x} is simplified to @expr{0}
22350 unless @expr{x} is a negative number or complex number, in which
22351 case the result is an infinity or an unsimplified formula according
22352 to the current infinite mode. Note that @expr{0^0} is an
22353 indeterminate form, as evidenced by the fact that the simplifications
22354 for @expr{x^0} and @expr{0^x} conflict when @expr{x=0}.
22355
22356 Powers of products or quotients @expr{(a b)^c}, @expr{(a/b)^c}
22357 are distributed to @expr{a^c b^c}, @expr{a^c / b^c} only if @expr{c}
22358 is an integer, or if either @expr{a} or @expr{b} are nonnegative
22359 real numbers. Powers of powers @expr{(a^b)^c} are simplified to
22360 @texline @math{a^{b c}}
22361 @infoline @expr{a^(b c)}
22362 only when @expr{c} is an integer and @expr{b c} also
22363 evaluates to an integer. Without these restrictions these simplifications
22364 would not be safe because of problems with principal values.
22365 (In other words,
22366 @texline @math{((-3)^{1/2})^2}
22367 @infoline @expr{((-3)^1:2)^2}
22368 is safe to simplify, but
22369 @texline @math{((-3)^2)^{1/2}}
22370 @infoline @expr{((-3)^2)^1:2}
22371 is not.) @xref{Declarations}, for ways to inform Calc that your
22372 variables satisfy these requirements.
22373
22374 As a special case of this rule, @expr{@t{sqrt}(x)^n} is simplified to
22375 @texline @math{x^{n/2}}
22376 @infoline @expr{x^(n/2)}
22377 only for even integers @expr{n}.
22378
22379 If @expr{a} is known to be real, @expr{b} is an even integer, and
22380 @expr{c} is a half- or quarter-integer, then @expr{(a^b)^c} is
22381 simplified to @expr{@t{abs}(a^(b c))}.
22382
22383 Also, @expr{(-a)^b} is simplified to @expr{a^b} if @expr{b} is an
22384 even integer, or to @expr{-(a^b)} if @expr{b} is an odd integer,
22385 for any negative-looking expression @expr{-a}.
22386
22387 Square roots @expr{@t{sqrt}(x)} generally act like one-half powers
22388 @texline @math{x^{1:2}}
22389 @infoline @expr{x^1:2}
22390 for the purposes of the above-listed simplifications.
22391
22392 Also, note that
22393 @texline @math{1 / x^{1:2}}
22394 @infoline @expr{1 / x^1:2}
22395 is changed to
22396 @texline @math{x^{-1:2}},
22397 @infoline @expr{x^(-1:2)},
22398 but @expr{1 / @t{sqrt}(x)} is left alone.
22399
22400 @tex
22401 \bigskip
22402 @end tex
22403
22404 Generic identity matrices (@pxref{Matrix Mode}) are simplified by the
22405 following rules: @expr{@t{idn}(a) + b} to @expr{a + b} if @expr{b}
22406 is provably scalar, or expanded out if @expr{b} is a matrix;
22407 @expr{@t{idn}(a) + @t{idn}(b)} to @expr{@t{idn}(a + b)};
22408 @expr{-@t{idn}(a)} to @expr{@t{idn}(-a)}; @expr{a @t{idn}(b)} to
22409 @expr{@t{idn}(a b)} if @expr{a} is provably scalar, or to @expr{a b}
22410 if @expr{a} is provably non-scalar; @expr{@t{idn}(a) @t{idn}(b)} to
22411 @expr{@t{idn}(a b)}; analogous simplifications for quotients involving
22412 @code{idn}; and @expr{@t{idn}(a)^n} to @expr{@t{idn}(a^n)} where
22413 @expr{n} is an integer.
22414
22415 @tex
22416 \bigskip
22417 @end tex
22418
22419 The @code{floor} function and other integer truncation functions
22420 vanish if the argument is provably integer-valued, so that
22421 @expr{@t{floor}(@t{round}(x))} simplifies to @expr{@t{round}(x)}.
22422 Also, combinations of @code{float}, @code{floor} and its friends,
22423 and @code{ffloor} and its friends, are simplified in appropriate
22424 ways. @xref{Integer Truncation}.
22425
22426 The expression @expr{@t{abs}(-x)} changes to @expr{@t{abs}(x)}.
22427 The expression @expr{@t{abs}(@t{abs}(x))} changes to
22428 @expr{@t{abs}(x)}; in fact, @expr{@t{abs}(x)} changes to @expr{x} or
22429 @expr{-x} if @expr{x} is provably nonnegative or nonpositive
22430 (@pxref{Declarations}).
22431
22432 While most functions do not recognize the variable @code{i} as an
22433 imaginary number, the @code{arg} function does handle the two cases
22434 @expr{@t{arg}(@t{i})} and @expr{@t{arg}(-@t{i})} just for convenience.
22435
22436 The expression @expr{@t{conj}(@t{conj}(x))} simplifies to @expr{x}.
22437 Various other expressions involving @code{conj}, @code{re}, and
22438 @code{im} are simplified, especially if some of the arguments are
22439 provably real or involve the constant @code{i}. For example,
22440 @expr{@t{conj}(a + b i)} is changed to
22441 @expr{@t{conj}(a) - @t{conj}(b) i}, or to @expr{a - b i} if @expr{a}
22442 and @expr{b} are known to be real.
22443
22444 Functions like @code{sin} and @code{arctan} generally don't have
22445 any default simplifications beyond simply evaluating the functions
22446 for suitable numeric arguments and infinity. The @kbd{a s} command
22447 described in the next section does provide some simplifications for
22448 these functions, though.
22449
22450 One important simplification that does occur is that
22451 @expr{@t{ln}(@t{e})} is simplified to 1, and @expr{@t{ln}(@t{e}^x)} is
22452 simplified to @expr{x} for any @expr{x}. This occurs even if you have
22453 stored a different value in the Calc variable @samp{e}; but this would
22454 be a bad idea in any case if you were also using natural logarithms!
22455
22456 Among the logical functions, @t{(@var{a} <= @var{b})} changes to
22457 @t{@var{a} > @var{b}} and so on. Equations and inequalities where both sides
22458 are either negative-looking or zero are simplified by negating both sides
22459 and reversing the inequality. While it might seem reasonable to simplify
22460 @expr{!!x} to @expr{x}, this would not be valid in general because
22461 @expr{!!2} is 1, not 2.
22462
22463 Most other Calc functions have few if any default simplifications
22464 defined, aside of course from evaluation when the arguments are
22465 suitable numbers.
22466
22467 @node Algebraic Simplifications, Unsafe Simplifications, Default Simplifications, Simplifying Formulas
22468 @subsection Algebraic Simplifications
22469
22470 @noindent
22471 @cindex Algebraic simplifications
22472 The @kbd{a s} command makes simplifications that may be too slow to
22473 do all the time, or that may not be desirable all of the time.
22474 If you find these simplifications are worthwhile, you can type
22475 @kbd{m A} to have Calc apply them automatically.
22476
22477 This section describes all simplifications that are performed by
22478 the @kbd{a s} command. Note that these occur in addition to the
22479 default simplifications; even if the default simplifications have
22480 been turned off by an @kbd{m O} command, @kbd{a s} will turn them
22481 back on temporarily while it simplifies the formula.
22482
22483 There is a variable, @code{AlgSimpRules}, in which you can put rewrites
22484 to be applied by @kbd{a s}. Its use is analogous to @code{EvalRules},
22485 but without the special restrictions. Basically, the simplifier does
22486 @samp{@w{a r} AlgSimpRules} with an infinite repeat count on the whole
22487 expression being simplified, then it traverses the expression applying
22488 the built-in rules described below. If the result is different from
22489 the original expression, the process repeats with the default
22490 simplifications (including @code{EvalRules}), then @code{AlgSimpRules},
22491 then the built-in simplifications, and so on.
22492
22493 @tex
22494 \bigskip
22495 @end tex
22496
22497 Sums are simplified in two ways. Constant terms are commuted to the
22498 end of the sum, so that @expr{a + 2 + b} changes to @expr{a + b + 2}.
22499 The only exception is that a constant will not be commuted away
22500 from the first position of a difference, i.e., @expr{2 - x} is not
22501 commuted to @expr{-x + 2}.
22502
22503 Also, terms of sums are combined by the distributive law, as in
22504 @expr{x + y + 2 x} to @expr{y + 3 x}. This always occurs for
22505 adjacent terms, but @kbd{a s} compares all pairs of terms including
22506 non-adjacent ones.
22507
22508 @tex
22509 \bigskip
22510 @end tex
22511
22512 Products are sorted into a canonical order using the commutative
22513 law. For example, @expr{b c a} is commuted to @expr{a b c}.
22514 This allows easier comparison of products; for example, the default
22515 simplifications will not change @expr{x y + y x} to @expr{2 x y},
22516 but @kbd{a s} will; it first rewrites the sum to @expr{x y + x y},
22517 and then the default simplifications are able to recognize a sum
22518 of identical terms.
22519
22520 The canonical ordering used to sort terms of products has the
22521 property that real-valued numbers, interval forms and infinities
22522 come first, and are sorted into increasing order. The @kbd{V S}
22523 command uses the same ordering when sorting a vector.
22524
22525 Sorting of terms of products is inhibited when Matrix mode is
22526 turned on; in this case, Calc will never exchange the order of
22527 two terms unless it knows at least one of the terms is a scalar.
22528
22529 Products of powers are distributed by comparing all pairs of
22530 terms, using the same method that the default simplifications
22531 use for adjacent terms of products.
22532
22533 Even though sums are not sorted, the commutative law is still
22534 taken into account when terms of a product are being compared.
22535 Thus @expr{(x + y) (y + x)} will be simplified to @expr{(x + y)^2}.
22536 A subtle point is that @expr{(x - y) (y - x)} will @emph{not}
22537 be simplified to @expr{-(x - y)^2}; Calc does not notice that
22538 one term can be written as a constant times the other, even if
22539 that constant is @mathit{-1}.
22540
22541 A fraction times any expression, @expr{(a:b) x}, is changed to
22542 a quotient involving integers: @expr{a x / b}. This is not
22543 done for floating-point numbers like @expr{0.5}, however. This
22544 is one reason why you may find it convenient to turn Fraction mode
22545 on while doing algebra; @pxref{Fraction Mode}.
22546
22547 @tex
22548 \bigskip
22549 @end tex
22550
22551 Quotients are simplified by comparing all terms in the numerator
22552 with all terms in the denominator for possible cancellation using
22553 the distributive law. For example, @expr{a x^2 b / c x^3 d} will
22554 cancel @expr{x^2} from both sides to get @expr{a b / c x d}.
22555 (The terms in the denominator will then be rearranged to @expr{c d x}
22556 as described above.) If there is any common integer or fractional
22557 factor in the numerator and denominator, it is cancelled out;
22558 for example, @expr{(4 x + 6) / 8 x} simplifies to @expr{(2 x + 3) / 4 x}.
22559
22560 Non-constant common factors are not found even by @kbd{a s}. To
22561 cancel the factor @expr{a} in @expr{(a x + a) / a^2} you could first
22562 use @kbd{j M} on the product @expr{a x} to Merge the numerator to
22563 @expr{a (1+x)}, which can then be simplified successfully.
22564
22565 @tex
22566 \bigskip
22567 @end tex
22568
22569 Integer powers of the variable @code{i} are simplified according
22570 to the identity @expr{i^2 = -1}. If you store a new value other
22571 than the complex number @expr{(0,1)} in @code{i}, this simplification
22572 will no longer occur. This is done by @kbd{a s} instead of by default
22573 in case someone (unwisely) uses the name @code{i} for a variable
22574 unrelated to complex numbers; it would be unfortunate if Calc
22575 quietly and automatically changed this formula for reasons the
22576 user might not have been thinking of.
22577
22578 Square roots of integer or rational arguments are simplified in
22579 several ways. (Note that these will be left unevaluated only in
22580 Symbolic mode.) First, square integer or rational factors are
22581 pulled out so that @expr{@t{sqrt}(8)} is rewritten as
22582 @texline @math{2\,\t{sqrt}(2)}.
22583 @infoline @expr{2 sqrt(2)}.
22584 Conceptually speaking this implies factoring the argument into primes
22585 and moving pairs of primes out of the square root, but for reasons of
22586 efficiency Calc only looks for primes up to 29.
22587
22588 Square roots in the denominator of a quotient are moved to the
22589 numerator: @expr{1 / @t{sqrt}(3)} changes to @expr{@t{sqrt}(3) / 3}.
22590 The same effect occurs for the square root of a fraction:
22591 @expr{@t{sqrt}(2:3)} changes to @expr{@t{sqrt}(6) / 3}.
22592
22593 @tex
22594 \bigskip
22595 @end tex
22596
22597 The @code{%} (modulo) operator is simplified in several ways
22598 when the modulus @expr{M} is a positive real number. First, if
22599 the argument is of the form @expr{x + n} for some real number
22600 @expr{n}, then @expr{n} is itself reduced modulo @expr{M}. For
22601 example, @samp{(x - 23) % 10} is simplified to @samp{(x + 7) % 10}.
22602
22603 If the argument is multiplied by a constant, and this constant
22604 has a common integer divisor with the modulus, then this factor is
22605 cancelled out. For example, @samp{12 x % 15} is changed to
22606 @samp{3 (4 x % 5)} by factoring out 3. Also, @samp{(12 x + 1) % 15}
22607 is changed to @samp{3 ((4 x + 1:3) % 5)}. While these forms may
22608 not seem ``simpler,'' they allow Calc to discover useful information
22609 about modulo forms in the presence of declarations.
22610
22611 If the modulus is 1, then Calc can use @code{int} declarations to
22612 evaluate the expression. For example, the idiom @samp{x % 2} is
22613 often used to check whether a number is odd or even. As described
22614 above, @w{@samp{2 n % 2}} and @samp{(2 n + 1) % 2} are simplified to
22615 @samp{2 (n % 1)} and @samp{2 ((n + 1:2) % 1)}, respectively; Calc
22616 can simplify these to 0 and 1 (respectively) if @code{n} has been
22617 declared to be an integer.
22618
22619 @tex
22620 \bigskip
22621 @end tex
22622
22623 Trigonometric functions are simplified in several ways. First,
22624 @expr{@t{sin}(@t{arcsin}(x))} is simplified to @expr{x}, and
22625 similarly for @code{cos} and @code{tan}. If the argument to
22626 @code{sin} is negative-looking, it is simplified to
22627 @expr{-@t{sin}(x),}, and similarly for @code{cos} and @code{tan}.
22628 Finally, certain special values of the argument are recognized;
22629 @pxref{Trigonometric and Hyperbolic Functions}.
22630
22631 Trigonometric functions of inverses of different trigonometric
22632 functions can also be simplified, as in @expr{@t{sin}(@t{arccos}(x))}
22633 to @expr{@t{sqrt}(1 - x^2)}.
22634
22635 Hyperbolic functions of their inverses and of negative-looking
22636 arguments are also handled, as are exponentials of inverse
22637 hyperbolic functions.
22638
22639 No simplifications for inverse trigonometric and hyperbolic
22640 functions are known, except for negative arguments of @code{arcsin},
22641 @code{arctan}, @code{arcsinh}, and @code{arctanh}. Note that
22642 @expr{@t{arcsin}(@t{sin}(x))} can @emph{not} safely change to
22643 @expr{x}, since this only correct within an integer multiple of
22644 @texline @math{2 \pi}
22645 @infoline @expr{2 pi}
22646 radians or 360 degrees. However, @expr{@t{arcsinh}(@t{sinh}(x))} is
22647 simplified to @expr{x} if @expr{x} is known to be real.
22648
22649 Several simplifications that apply to logarithms and exponentials
22650 are that @expr{@t{exp}(@t{ln}(x))},
22651 @texline @t{e}@math{^{\ln(x)}},
22652 @infoline @expr{e^@t{ln}(x)},
22653 and
22654 @texline @math{10^{{\rm log10}(x)}}
22655 @infoline @expr{10^@t{log10}(x)}
22656 all reduce to @expr{x}. Also, @expr{@t{ln}(@t{exp}(x))}, etc., can
22657 reduce to @expr{x} if @expr{x} is provably real. The form
22658 @expr{@t{exp}(x)^y} is simplified to @expr{@t{exp}(x y)}. If @expr{x}
22659 is a suitable multiple of
22660 @texline @math{\pi i}
22661 @infoline @expr{pi i}
22662 (as described above for the trigonometric functions), then
22663 @expr{@t{exp}(x)} or @expr{e^x} will be expanded. Finally,
22664 @expr{@t{ln}(x)} is simplified to a form involving @code{pi} and
22665 @code{i} where @expr{x} is provably negative, positive imaginary, or
22666 negative imaginary.
22667
22668 The error functions @code{erf} and @code{erfc} are simplified when
22669 their arguments are negative-looking or are calls to the @code{conj}
22670 function.
22671
22672 @tex
22673 \bigskip
22674 @end tex
22675
22676 Equations and inequalities are simplified by cancelling factors
22677 of products, quotients, or sums on both sides. Inequalities
22678 change sign if a negative multiplicative factor is cancelled.
22679 Non-constant multiplicative factors as in @expr{a b = a c} are
22680 cancelled from equations only if they are provably nonzero (generally
22681 because they were declared so; @pxref{Declarations}). Factors
22682 are cancelled from inequalities only if they are nonzero and their
22683 sign is known.
22684
22685 Simplification also replaces an equation or inequality with
22686 1 or 0 (``true'' or ``false'') if it can through the use of
22687 declarations. If @expr{x} is declared to be an integer greater
22688 than 5, then @expr{x < 3}, @expr{x = 3}, and @expr{x = 7.5} are
22689 all simplified to 0, but @expr{x > 3} is simplified to 1.
22690 By a similar analysis, @expr{abs(x) >= 0} is simplified to 1,
22691 as is @expr{x^2 >= 0} if @expr{x} is known to be real.
22692
22693 @node Unsafe Simplifications, Simplification of Units, Algebraic Simplifications, Simplifying Formulas
22694 @subsection ``Unsafe'' Simplifications
22695
22696 @noindent
22697 @cindex Unsafe simplifications
22698 @cindex Extended simplification
22699 @kindex a e
22700 @pindex calc-simplify-extended
22701 @ignore
22702 @mindex esimpl@idots
22703 @end ignore
22704 @tindex esimplify
22705 The @kbd{a e} (@code{calc-simplify-extended}) [@code{esimplify}] command
22706 is like @kbd{a s}
22707 except that it applies some additional simplifications which are not
22708 ``safe'' in all cases. Use this only if you know the values in your
22709 formula lie in the restricted ranges for which these simplifications
22710 are valid. The symbolic integrator uses @kbd{a e};
22711 one effect of this is that the integrator's results must be used with
22712 caution. Where an integral table will often attach conditions like
22713 ``for positive @expr{a} only,'' Calc (like most other symbolic
22714 integration programs) will simply produce an unqualified result.
22715
22716 Because @kbd{a e}'s simplifications are unsafe, it is sometimes better
22717 to type @kbd{C-u -3 a v}, which does extended simplification only
22718 on the top level of the formula without affecting the sub-formulas.
22719 In fact, @kbd{C-u -3 j v} allows you to target extended simplification
22720 to any specific part of a formula.
22721
22722 The variable @code{ExtSimpRules} contains rewrites to be applied by
22723 the @kbd{a e} command. These are applied in addition to
22724 @code{EvalRules} and @code{AlgSimpRules}. (The @kbd{a r AlgSimpRules}
22725 step described above is simply followed by an @kbd{a r ExtSimpRules} step.)
22726
22727 Following is a complete list of ``unsafe'' simplifications performed
22728 by @kbd{a e}.
22729
22730 @tex
22731 \bigskip
22732 @end tex
22733
22734 Inverse trigonometric or hyperbolic functions, called with their
22735 corresponding non-inverse functions as arguments, are simplified
22736 by @kbd{a e}. For example, @expr{@t{arcsin}(@t{sin}(x))} changes
22737 to @expr{x}. Also, @expr{@t{arcsin}(@t{cos}(x))} and
22738 @expr{@t{arccos}(@t{sin}(x))} both change to @expr{@t{pi}/2 - x}.
22739 These simplifications are unsafe because they are valid only for
22740 values of @expr{x} in a certain range; outside that range, values
22741 are folded down to the 360-degree range that the inverse trigonometric
22742 functions always produce.
22743
22744 Powers of powers @expr{(x^a)^b} are simplified to
22745 @texline @math{x^{a b}}
22746 @infoline @expr{x^(a b)}
22747 for all @expr{a} and @expr{b}. These results will be valid only
22748 in a restricted range of @expr{x}; for example, in
22749 @texline @math{(x^2)^{1:2}}
22750 @infoline @expr{(x^2)^1:2}
22751 the powers cancel to get @expr{x}, which is valid for positive values
22752 of @expr{x} but not for negative or complex values.
22753
22754 Similarly, @expr{@t{sqrt}(x^a)} and @expr{@t{sqrt}(x)^a} are both
22755 simplified (possibly unsafely) to
22756 @texline @math{x^{a/2}}.
22757 @infoline @expr{x^(a/2)}.
22758
22759 Forms like @expr{@t{sqrt}(1 - sin(x)^2)} are simplified to, e.g.,
22760 @expr{@t{cos}(x)}. Calc has identities of this sort for @code{sin},
22761 @code{cos}, @code{tan}, @code{sinh}, and @code{cosh}.
22762
22763 Arguments of square roots are partially factored to look for
22764 squared terms that can be extracted. For example,
22765 @expr{@t{sqrt}(a^2 b^3 + a^3 b^2)} simplifies to
22766 @expr{a b @t{sqrt}(a+b)}.
22767
22768 The simplifications of @expr{@t{ln}(@t{exp}(x))},
22769 @expr{@t{ln}(@t{e}^x)}, and @expr{@t{log10}(10^x)} to @expr{x} are also
22770 unsafe because of problems with principal values (although these
22771 simplifications are safe if @expr{x} is known to be real).
22772
22773 Common factors are cancelled from products on both sides of an
22774 equation, even if those factors may be zero: @expr{a x / b x}
22775 to @expr{a / b}. Such factors are never cancelled from
22776 inequalities: Even @kbd{a e} is not bold enough to reduce
22777 @expr{a x < b x} to @expr{a < b} (or @expr{a > b}, depending
22778 on whether you believe @expr{x} is positive or negative).
22779 The @kbd{a M /} command can be used to divide a factor out of
22780 both sides of an inequality.
22781
22782 @node Simplification of Units, , Unsafe Simplifications, Simplifying Formulas
22783 @subsection Simplification of Units
22784
22785 @noindent
22786 The simplifications described in this section are applied by the
22787 @kbd{u s} (@code{calc-simplify-units}) command. These are in addition
22788 to the regular @kbd{a s} (but not @kbd{a e}) simplifications described
22789 earlier. @xref{Basic Operations on Units}.
22790
22791 The variable @code{UnitSimpRules} contains rewrites to be applied by
22792 the @kbd{u s} command. These are applied in addition to @code{EvalRules}
22793 and @code{AlgSimpRules}.
22794
22795 Scalar mode is automatically put into effect when simplifying units.
22796 @xref{Matrix Mode}.
22797
22798 Sums @expr{a + b} involving units are simplified by extracting the
22799 units of @expr{a} as if by the @kbd{u x} command (call the result
22800 @expr{u_a}), then simplifying the expression @expr{b / u_a}
22801 using @kbd{u b} and @kbd{u s}. If the result has units then the sum
22802 is inconsistent and is left alone. Otherwise, it is rewritten
22803 in terms of the units @expr{u_a}.
22804
22805 If units auto-ranging mode is enabled, products or quotients in
22806 which the first argument is a number which is out of range for the
22807 leading unit are modified accordingly.
22808
22809 When cancelling and combining units in products and quotients,
22810 Calc accounts for unit names that differ only in the prefix letter.
22811 For example, @samp{2 km m} is simplified to @samp{2000 m^2}.
22812 However, compatible but different units like @code{ft} and @code{in}
22813 are not combined in this way.
22814
22815 Quotients @expr{a / b} are simplified in three additional ways. First,
22816 if @expr{b} is a number or a product beginning with a number, Calc
22817 computes the reciprocal of this number and moves it to the numerator.
22818
22819 Second, for each pair of unit names from the numerator and denominator
22820 of a quotient, if the units are compatible (e.g., they are both
22821 units of area) then they are replaced by the ratio between those
22822 units. For example, in @samp{3 s in N / kg cm} the units
22823 @samp{in / cm} will be replaced by @expr{2.54}.
22824
22825 Third, if the units in the quotient exactly cancel out, so that
22826 a @kbd{u b} command on the quotient would produce a dimensionless
22827 number for an answer, then the quotient simplifies to that number.
22828
22829 For powers and square roots, the ``unsafe'' simplifications
22830 @expr{(a b)^c} to @expr{a^c b^c}, @expr{(a/b)^c} to @expr{a^c / b^c},
22831 and @expr{(a^b)^c} to
22832 @texline @math{a^{b c}}
22833 @infoline @expr{a^(b c)}
22834 are done if the powers are real numbers. (These are safe in the context
22835 of units because all numbers involved can reasonably be assumed to be
22836 real.)
22837
22838 Also, if a unit name is raised to a fractional power, and the
22839 base units in that unit name all occur to powers which are a
22840 multiple of the denominator of the power, then the unit name
22841 is expanded out into its base units, which can then be simplified
22842 according to the previous paragraph. For example, @samp{acre^1.5}
22843 is simplified by noting that @expr{1.5 = 3:2}, that @samp{acre}
22844 is defined in terms of @samp{m^2}, and that the 2 in the power of
22845 @code{m} is a multiple of 2 in @expr{3:2}. Thus, @code{acre^1.5} is
22846 replaced by approximately
22847 @texline @math{(4046 m^2)^{1.5}}
22848 @infoline @expr{(4046 m^2)^1.5},
22849 which is then changed to
22850 @texline @math{4046^{1.5} \, (m^2)^{1.5}},
22851 @infoline @expr{4046^1.5 (m^2)^1.5},
22852 then to @expr{257440 m^3}.
22853
22854 The functions @code{float}, @code{frac}, @code{clean}, @code{abs},
22855 as well as @code{floor} and the other integer truncation functions,
22856 applied to unit names or products or quotients involving units, are
22857 simplified. For example, @samp{round(1.6 in)} is changed to
22858 @samp{round(1.6) round(in)}; the lefthand term evaluates to 2,
22859 and the righthand term simplifies to @code{in}.
22860
22861 The functions @code{sin}, @code{cos}, and @code{tan} with arguments
22862 that have angular units like @code{rad} or @code{arcmin} are
22863 simplified by converting to base units (radians), then evaluating
22864 with the angular mode temporarily set to radians.
22865
22866 @node Polynomials, Calculus, Simplifying Formulas, Algebra
22867 @section Polynomials
22868
22869 A @dfn{polynomial} is a sum of terms which are coefficients times
22870 various powers of a ``base'' variable. For example, @expr{2 x^2 + 3 x - 4}
22871 is a polynomial in @expr{x}. Some formulas can be considered
22872 polynomials in several different variables: @expr{1 + 2 x + 3 y + 4 x y^2}
22873 is a polynomial in both @expr{x} and @expr{y}. Polynomial coefficients
22874 are often numbers, but they may in general be any formulas not
22875 involving the base variable.
22876
22877 @kindex a f
22878 @pindex calc-factor
22879 @tindex factor
22880 The @kbd{a f} (@code{calc-factor}) [@code{factor}] command factors a
22881 polynomial into a product of terms. For example, the polynomial
22882 @expr{x^3 + 2 x^2 + x} is factored into @samp{x*(x+1)^2}. As another
22883 example, @expr{a c + b d + b c + a d} is factored into the product
22884 @expr{(a + b) (c + d)}.
22885
22886 Calc currently has three algorithms for factoring. Formulas which are
22887 linear in several variables, such as the second example above, are
22888 merged according to the distributive law. Formulas which are
22889 polynomials in a single variable, with constant integer or fractional
22890 coefficients, are factored into irreducible linear and/or quadratic
22891 terms. The first example above factors into three linear terms
22892 (@expr{x}, @expr{x+1}, and @expr{x+1} again). Finally, formulas
22893 which do not fit the above criteria are handled by the algebraic
22894 rewrite mechanism.
22895
22896 Calc's polynomial factorization algorithm works by using the general
22897 root-finding command (@w{@kbd{a P}}) to solve for the roots of the
22898 polynomial. It then looks for roots which are rational numbers
22899 or complex-conjugate pairs, and converts these into linear and
22900 quadratic terms, respectively. Because it uses floating-point
22901 arithmetic, it may be unable to find terms that involve large
22902 integers (whose number of digits approaches the current precision).
22903 Also, irreducible factors of degree higher than quadratic are not
22904 found, and polynomials in more than one variable are not treated.
22905 (A more robust factorization algorithm may be included in a future
22906 version of Calc.)
22907
22908 @vindex FactorRules
22909 @ignore
22910 @starindex
22911 @end ignore
22912 @tindex thecoefs
22913 @ignore
22914 @starindex
22915 @end ignore
22916 @ignore
22917 @mindex @idots
22918 @end ignore
22919 @tindex thefactors
22920 The rewrite-based factorization method uses rules stored in the variable
22921 @code{FactorRules}. @xref{Rewrite Rules}, for a discussion of the
22922 operation of rewrite rules. The default @code{FactorRules} are able
22923 to factor quadratic forms symbolically into two linear terms,
22924 @expr{(a x + b) (c x + d)}. You can edit these rules to include other
22925 cases if you wish. To use the rules, Calc builds the formula
22926 @samp{thecoefs(x, [a, b, c, ...])} where @code{x} is the polynomial
22927 base variable and @code{a}, @code{b}, etc., are polynomial coefficients
22928 (which may be numbers or formulas). The constant term is written first,
22929 i.e., in the @code{a} position. When the rules complete, they should have
22930 changed the formula into the form @samp{thefactors(x, [f1, f2, f3, ...])}
22931 where each @code{fi} should be a factored term, e.g., @samp{x - ai}.
22932 Calc then multiplies these terms together to get the complete
22933 factored form of the polynomial. If the rules do not change the
22934 @code{thecoefs} call to a @code{thefactors} call, @kbd{a f} leaves the
22935 polynomial alone on the assumption that it is unfactorable. (Note that
22936 the function names @code{thecoefs} and @code{thefactors} are used only
22937 as placeholders; there are no actual Calc functions by those names.)
22938
22939 @kindex H a f
22940 @tindex factors
22941 The @kbd{H a f} [@code{factors}] command also factors a polynomial,
22942 but it returns a list of factors instead of an expression which is the
22943 product of the factors. Each factor is represented by a sub-vector
22944 of the factor, and the power with which it appears. For example,
22945 @expr{x^5 + x^4 - 33 x^3 + 63 x^2} factors to @expr{(x + 7) x^2 (x - 3)^2}
22946 in @kbd{a f}, or to @expr{[ [x, 2], [x+7, 1], [x-3, 2] ]} in @kbd{H a f}.
22947 If there is an overall numeric factor, it always comes first in the list.
22948 The functions @code{factor} and @code{factors} allow a second argument
22949 when written in algebraic form; @samp{factor(x,v)} factors @expr{x} with
22950 respect to the specific variable @expr{v}. The default is to factor with
22951 respect to all the variables that appear in @expr{x}.
22952
22953 @kindex a c
22954 @pindex calc-collect
22955 @tindex collect
22956 The @kbd{a c} (@code{calc-collect}) [@code{collect}] command rearranges a
22957 formula as a
22958 polynomial in a given variable, ordered in decreasing powers of that
22959 variable. For example, given @expr{1 + 2 x + 3 y + 4 x y^2} on
22960 the stack, @kbd{a c x} would produce @expr{(2 + 4 y^2) x + (1 + 3 y)},
22961 and @kbd{a c y} would produce @expr{(4 x) y^2 + 3 y + (1 + 2 x)}.
22962 The polynomial will be expanded out using the distributive law as
22963 necessary: Collecting @expr{x} in @expr{(x - 1)^3} produces
22964 @expr{x^3 - 3 x^2 + 3 x - 1}. Terms not involving @expr{x} will
22965 not be expanded.
22966
22967 The ``variable'' you specify at the prompt can actually be any
22968 expression: @kbd{a c ln(x+1)} will collect together all terms multiplied
22969 by @samp{ln(x+1)} or integer powers thereof. If @samp{x} also appears
22970 in the formula in a context other than @samp{ln(x+1)}, @kbd{a c} will
22971 treat those occurrences as unrelated to @samp{ln(x+1)}, i.e., as constants.
22972
22973 @kindex a x
22974 @pindex calc-expand
22975 @tindex expand
22976 The @kbd{a x} (@code{calc-expand}) [@code{expand}] command expands an
22977 expression by applying the distributive law everywhere. It applies to
22978 products, quotients, and powers involving sums. By default, it fully
22979 distributes all parts of the expression. With a numeric prefix argument,
22980 the distributive law is applied only the specified number of times, then
22981 the partially expanded expression is left on the stack.
22982
22983 The @kbd{a x} and @kbd{j D} commands are somewhat redundant. Use
22984 @kbd{a x} if you want to expand all products of sums in your formula.
22985 Use @kbd{j D} if you want to expand a particular specified term of
22986 the formula. There is an exactly analogous correspondence between
22987 @kbd{a f} and @kbd{j M}. (The @kbd{j D} and @kbd{j M} commands
22988 also know many other kinds of expansions, such as
22989 @samp{exp(a + b) = exp(a) exp(b)}, which @kbd{a x} and @kbd{a f}
22990 do not do.)
22991
22992 Calc's automatic simplifications will sometimes reverse a partial
22993 expansion. For example, the first step in expanding @expr{(x+1)^3} is
22994 to write @expr{(x+1) (x+1)^2}. If @kbd{a x} stops there and tries
22995 to put this formula onto the stack, though, Calc will automatically
22996 simplify it back to @expr{(x+1)^3} form. The solution is to turn
22997 simplification off first (@pxref{Simplification Modes}), or to run
22998 @kbd{a x} without a numeric prefix argument so that it expands all
22999 the way in one step.
23000
23001 @kindex a a
23002 @pindex calc-apart
23003 @tindex apart
23004 The @kbd{a a} (@code{calc-apart}) [@code{apart}] command expands a
23005 rational function by partial fractions. A rational function is the
23006 quotient of two polynomials; @code{apart} pulls this apart into a
23007 sum of rational functions with simple denominators. In algebraic
23008 notation, the @code{apart} function allows a second argument that
23009 specifies which variable to use as the ``base''; by default, Calc
23010 chooses the base variable automatically.
23011
23012 @kindex a n
23013 @pindex calc-normalize-rat
23014 @tindex nrat
23015 The @kbd{a n} (@code{calc-normalize-rat}) [@code{nrat}] command
23016 attempts to arrange a formula into a quotient of two polynomials.
23017 For example, given @expr{1 + (a + b/c) / d}, the result would be
23018 @expr{(b + a c + c d) / c d}. The quotient is reduced, so that
23019 @kbd{a n} will simplify @expr{(x^2 + 2x + 1) / (x^2 - 1)} by dividing
23020 out the common factor @expr{x + 1}, yielding @expr{(x + 1) / (x - 1)}.
23021
23022 @kindex a \
23023 @pindex calc-poly-div
23024 @tindex pdiv
23025 The @kbd{a \} (@code{calc-poly-div}) [@code{pdiv}] command divides
23026 two polynomials @expr{u} and @expr{v}, yielding a new polynomial
23027 @expr{q}. If several variables occur in the inputs, the inputs are
23028 considered multivariate polynomials. (Calc divides by the variable
23029 with the largest power in @expr{u} first, or, in the case of equal
23030 powers, chooses the variables in alphabetical order.) For example,
23031 dividing @expr{x^2 + 3 x + 2} by @expr{x + 2} yields @expr{x + 1}.
23032 The remainder from the division, if any, is reported at the bottom
23033 of the screen and is also placed in the Trail along with the quotient.
23034
23035 Using @code{pdiv} in algebraic notation, you can specify the particular
23036 variable to be used as the base: @code{pdiv(@var{a},@var{b},@var{x})}.
23037 If @code{pdiv} is given only two arguments (as is always the case with
23038 the @kbd{a \} command), then it does a multivariate division as outlined
23039 above.
23040
23041 @kindex a %
23042 @pindex calc-poly-rem
23043 @tindex prem
23044 The @kbd{a %} (@code{calc-poly-rem}) [@code{prem}] command divides
23045 two polynomials and keeps the remainder @expr{r}. The quotient
23046 @expr{q} is discarded. For any formulas @expr{a} and @expr{b}, the
23047 results of @kbd{a \} and @kbd{a %} satisfy @expr{a = q b + r}.
23048 (This is analogous to plain @kbd{\} and @kbd{%}, which compute the
23049 integer quotient and remainder from dividing two numbers.)
23050
23051 @kindex a /
23052 @kindex H a /
23053 @pindex calc-poly-div-rem
23054 @tindex pdivrem
23055 @tindex pdivide
23056 The @kbd{a /} (@code{calc-poly-div-rem}) [@code{pdivrem}] command
23057 divides two polynomials and reports both the quotient and the
23058 remainder as a vector @expr{[q, r]}. The @kbd{H a /} [@code{pdivide}]
23059 command divides two polynomials and constructs the formula
23060 @expr{q + r/b} on the stack. (Naturally if the remainder is zero,
23061 this will immediately simplify to @expr{q}.)
23062
23063 @kindex a g
23064 @pindex calc-poly-gcd
23065 @tindex pgcd
23066 The @kbd{a g} (@code{calc-poly-gcd}) [@code{pgcd}] command computes
23067 the greatest common divisor of two polynomials. (The GCD actually
23068 is unique only to within a constant multiplier; Calc attempts to
23069 choose a GCD which will be unsurprising.) For example, the @kbd{a n}
23070 command uses @kbd{a g} to take the GCD of the numerator and denominator
23071 of a quotient, then divides each by the result using @kbd{a \}. (The
23072 definition of GCD ensures that this division can take place without
23073 leaving a remainder.)
23074
23075 While the polynomials used in operations like @kbd{a /} and @kbd{a g}
23076 often have integer coefficients, this is not required. Calc can also
23077 deal with polynomials over the rationals or floating-point reals.
23078 Polynomials with modulo-form coefficients are also useful in many
23079 applications; if you enter @samp{(x^2 + 3 x - 1) mod 5}, Calc
23080 automatically transforms this into a polynomial over the field of
23081 integers mod 5: @samp{(1 mod 5) x^2 + (3 mod 5) x + (4 mod 5)}.
23082
23083 Congratulations and thanks go to Ove Ewerlid
23084 (@code{ewerlid@@mizar.DoCS.UU.SE}), who contributed many of the
23085 polynomial routines used in the above commands.
23086
23087 @xref{Decomposing Polynomials}, for several useful functions for
23088 extracting the individual coefficients of a polynomial.
23089
23090 @node Calculus, Solving Equations, Polynomials, Algebra
23091 @section Calculus
23092
23093 @noindent
23094 The following calculus commands do not automatically simplify their
23095 inputs or outputs using @code{calc-simplify}. You may find it helps
23096 to do this by hand by typing @kbd{a s} or @kbd{a e}. It may also help
23097 to use @kbd{a x} and/or @kbd{a c} to arrange a result in the most
23098 readable way.
23099
23100 @menu
23101 * Differentiation::
23102 * Integration::
23103 * Customizing the Integrator::
23104 * Numerical Integration::
23105 * Taylor Series::
23106 @end menu
23107
23108 @node Differentiation, Integration, Calculus, Calculus
23109 @subsection Differentiation
23110
23111 @noindent
23112 @kindex a d
23113 @kindex H a d
23114 @pindex calc-derivative
23115 @tindex deriv
23116 @tindex tderiv
23117 The @kbd{a d} (@code{calc-derivative}) [@code{deriv}] command computes
23118 the derivative of the expression on the top of the stack with respect to
23119 some variable, which it will prompt you to enter. Normally, variables
23120 in the formula other than the specified differentiation variable are
23121 considered constant, i.e., @samp{deriv(y,x)} is reduced to zero. With
23122 the Hyperbolic flag, the @code{tderiv} (total derivative) operation is used
23123 instead, in which derivatives of variables are not reduced to zero
23124 unless those variables are known to be ``constant,'' i.e., independent
23125 of any other variables. (The built-in special variables like @code{pi}
23126 are considered constant, as are variables that have been declared
23127 @code{const}; @pxref{Declarations}.)
23128
23129 With a numeric prefix argument @var{n}, this command computes the
23130 @var{n}th derivative.
23131
23132 When working with trigonometric functions, it is best to switch to
23133 Radians mode first (with @w{@kbd{m r}}). The derivative of @samp{sin(x)}
23134 in degrees is @samp{(pi/180) cos(x)}, probably not the expected
23135 answer!
23136
23137 If you use the @code{deriv} function directly in an algebraic formula,
23138 you can write @samp{deriv(f,x,x0)} which represents the derivative
23139 of @expr{f} with respect to @expr{x}, evaluated at the point
23140 @texline @math{x=x_0}.
23141 @infoline @expr{x=x0}.
23142
23143 If the formula being differentiated contains functions which Calc does
23144 not know, the derivatives of those functions are produced by adding
23145 primes (apostrophe characters). For example, @samp{deriv(f(2x), x)}
23146 produces @samp{2 f'(2 x)}, where the function @code{f'} represents the
23147 derivative of @code{f}.
23148
23149 For functions you have defined with the @kbd{Z F} command, Calc expands
23150 the functions according to their defining formulas unless you have
23151 also defined @code{f'} suitably. For example, suppose we define
23152 @samp{sinc(x) = sin(x)/x} using @kbd{Z F}. If we then differentiate
23153 the formula @samp{sinc(2 x)}, the formula will be expanded to
23154 @samp{sin(2 x) / (2 x)} and differentiated. However, if we also
23155 define @samp{sinc'(x) = dsinc(x)}, say, then Calc will write the
23156 result as @samp{2 dsinc(2 x)}. @xref{Algebraic Definitions}.
23157
23158 For multi-argument functions @samp{f(x,y,z)}, the derivative with respect
23159 to the first argument is written @samp{f'(x,y,z)}; derivatives with
23160 respect to the other arguments are @samp{f'2(x,y,z)} and @samp{f'3(x,y,z)}.
23161 Various higher-order derivatives can be formed in the obvious way, e.g.,
23162 @samp{f'@var{}'(x)} (the second derivative of @code{f}) or
23163 @samp{f'@var{}'2'3(x,y,z)} (@code{f} differentiated with respect to each
23164 argument once).
23165
23166 @node Integration, Customizing the Integrator, Differentiation, Calculus
23167 @subsection Integration
23168
23169 @noindent
23170 @kindex a i
23171 @pindex calc-integral
23172 @tindex integ
23173 The @kbd{a i} (@code{calc-integral}) [@code{integ}] command computes the
23174 indefinite integral of the expression on the top of the stack with
23175 respect to a variable. The integrator is not guaranteed to work for
23176 all integrable functions, but it is able to integrate several large
23177 classes of formulas. In particular, any polynomial or rational function
23178 (a polynomial divided by a polynomial) is acceptable. (Rational functions
23179 don't have to be in explicit quotient form, however;
23180 @texline @math{x/(1+x^{-2})}
23181 @infoline @expr{x/(1+x^-2)}
23182 is not strictly a quotient of polynomials, but it is equivalent to
23183 @expr{x^3/(x^2+1)}, which is.) Also, square roots of terms involving
23184 @expr{x} and @expr{x^2} may appear in rational functions being
23185 integrated. Finally, rational functions involving trigonometric or
23186 hyperbolic functions can be integrated.
23187
23188 @ifinfo
23189 If you use the @code{integ} function directly in an algebraic formula,
23190 you can also write @samp{integ(f,x,v)} which expresses the resulting
23191 indefinite integral in terms of variable @code{v} instead of @code{x}.
23192 With four arguments, @samp{integ(f(x),x,a,b)} represents a definite
23193 integral from @code{a} to @code{b}.
23194 @end ifinfo
23195 @tex
23196 If you use the @code{integ} function directly in an algebraic formula,
23197 you can also write @samp{integ(f,x,v)} which expresses the resulting
23198 indefinite integral in terms of variable @code{v} instead of @code{x}.
23199 With four arguments, @samp{integ(f(x),x,a,b)} represents a definite
23200 integral $\int_a^b f(x) \, dx$.
23201 @end tex
23202
23203 Please note that the current implementation of Calc's integrator sometimes
23204 produces results that are significantly more complex than they need to
23205 be. For example, the integral Calc finds for
23206 @texline @math{1/(x+\sqrt{x^2+1})}
23207 @infoline @expr{1/(x+sqrt(x^2+1))}
23208 is several times more complicated than the answer Mathematica
23209 returns for the same input, although the two forms are numerically
23210 equivalent. Also, any indefinite integral should be considered to have
23211 an arbitrary constant of integration added to it, although Calc does not
23212 write an explicit constant of integration in its result. For example,
23213 Calc's solution for
23214 @texline @math{1/(1+\tan x)}
23215 @infoline @expr{1/(1+tan(x))}
23216 differs from the solution given in the @emph{CRC Math Tables} by a
23217 constant factor of
23218 @texline @math{\pi i / 2}
23219 @infoline @expr{pi i / 2},
23220 due to a different choice of constant of integration.
23221
23222 The Calculator remembers all the integrals it has done. If conditions
23223 change in a way that would invalidate the old integrals, say, a switch
23224 from Degrees to Radians mode, then they will be thrown out. If you
23225 suspect this is not happening when it should, use the
23226 @code{calc-flush-caches} command; @pxref{Caches}.
23227
23228 @vindex IntegLimit
23229 Calc normally will pursue integration by substitution or integration by
23230 parts up to 3 nested times before abandoning an approach as fruitless.
23231 If the integrator is taking too long, you can lower this limit by storing
23232 a number (like 2) in the variable @code{IntegLimit}. (The @kbd{s I}
23233 command is a convenient way to edit @code{IntegLimit}.) If this variable
23234 has no stored value or does not contain a nonnegative integer, a limit
23235 of 3 is used. The lower this limit is, the greater the chance that Calc
23236 will be unable to integrate a function it could otherwise handle. Raising
23237 this limit allows the Calculator to solve more integrals, though the time
23238 it takes may grow exponentially. You can monitor the integrator's actions
23239 by creating an Emacs buffer called @code{*Trace*}. If such a buffer
23240 exists, the @kbd{a i} command will write a log of its actions there.
23241
23242 If you want to manipulate integrals in a purely symbolic way, you can
23243 set the integration nesting limit to 0 to prevent all but fast
23244 table-lookup solutions of integrals. You might then wish to define
23245 rewrite rules for integration by parts, various kinds of substitutions,
23246 and so on. @xref{Rewrite Rules}.
23247
23248 @node Customizing the Integrator, Numerical Integration, Integration, Calculus
23249 @subsection Customizing the Integrator
23250
23251 @noindent
23252 @vindex IntegRules
23253 Calc has two built-in rewrite rules called @code{IntegRules} and
23254 @code{IntegAfterRules} which you can edit to define new integration
23255 methods. @xref{Rewrite Rules}. At each step of the integration process,
23256 Calc wraps the current integrand in a call to the fictitious function
23257 @samp{integtry(@var{expr},@var{var})}, where @var{expr} is the
23258 integrand and @var{var} is the integration variable. If your rules
23259 rewrite this to be a plain formula (not a call to @code{integtry}), then
23260 Calc will use this formula as the integral of @var{expr}. For example,
23261 the rule @samp{integtry(mysin(x),x) := -mycos(x)} would define a rule to
23262 integrate a function @code{mysin} that acts like the sine function.
23263 Then, putting @samp{4 mysin(2y+1)} on the stack and typing @kbd{a i y}
23264 will produce the integral @samp{-2 mycos(2y+1)}. Note that Calc has
23265 automatically made various transformations on the integral to allow it
23266 to use your rule; integral tables generally give rules for
23267 @samp{mysin(a x + b)}, but you don't need to use this much generality
23268 in your @code{IntegRules}.
23269
23270 @cindex Exponential integral Ei(x)
23271 @ignore
23272 @starindex
23273 @end ignore
23274 @tindex Ei
23275 As a more serious example, the expression @samp{exp(x)/x} cannot be
23276 integrated in terms of the standard functions, so the ``exponential
23277 integral'' function
23278 @texline @math{{\rm Ei}(x)}
23279 @infoline @expr{Ei(x)}
23280 was invented to describe it.
23281 We can get Calc to do this integral in terms of a made-up @code{Ei}
23282 function by adding the rule @samp{[integtry(exp(x)/x, x) := Ei(x)]}
23283 to @code{IntegRules}. Now entering @samp{exp(2x)/x} on the stack
23284 and typing @kbd{a i x} yields @samp{Ei(2 x)}. This new rule will
23285 work with Calc's various built-in integration methods (such as
23286 integration by substitution) to solve a variety of other problems
23287 involving @code{Ei}: For example, now Calc will also be able to
23288 integrate @samp{exp(exp(x))} and @samp{ln(ln(x))} (to get @samp{Ei(exp(x))}
23289 and @samp{x ln(ln(x)) - Ei(ln(x))}, respectively).
23290
23291 Your rule may do further integration by calling @code{integ}. For
23292 example, @samp{integtry(twice(u),x) := twice(integ(u))} allows Calc
23293 to integrate @samp{twice(sin(x))} to get @samp{twice(-cos(x))}.
23294 Note that @code{integ} was called with only one argument. This notation
23295 is allowed only within @code{IntegRules}; it means ``integrate this
23296 with respect to the same integration variable.'' If Calc is unable
23297 to integrate @code{u}, the integration that invoked @code{IntegRules}
23298 also fails. Thus integrating @samp{twice(f(x))} fails, returning the
23299 unevaluated integral @samp{integ(twice(f(x)), x)}. It is still legal
23300 to call @code{integ} with two or more arguments, however; in this case,
23301 if @code{u} is not integrable, @code{twice} itself will still be
23302 integrated: If the above rule is changed to @samp{... := twice(integ(u,x))},
23303 then integrating @samp{twice(f(x))} will yield @samp{twice(integ(f(x),x))}.
23304
23305 If a rule instead produces the formula @samp{integsubst(@var{sexpr},
23306 @var{svar})}, either replacing the top-level @code{integtry} call or
23307 nested anywhere inside the expression, then Calc will apply the
23308 substitution @samp{@var{u} = @var{sexpr}(@var{svar})} to try to
23309 integrate the original @var{expr}. For example, the rule
23310 @samp{sqrt(a) := integsubst(sqrt(x),x)} says that if Calc ever finds
23311 a square root in the integrand, it should attempt the substitution
23312 @samp{u = sqrt(x)}. (This particular rule is unnecessary because
23313 Calc always tries ``obvious'' substitutions where @var{sexpr} actually
23314 appears in the integrand.) The variable @var{svar} may be the same
23315 as the @var{var} that appeared in the call to @code{integtry}, but
23316 it need not be.
23317
23318 When integrating according to an @code{integsubst}, Calc uses the
23319 equation solver to find the inverse of @var{sexpr} (if the integrand
23320 refers to @var{var} anywhere except in subexpressions that exactly
23321 match @var{sexpr}). It uses the differentiator to find the derivative
23322 of @var{sexpr} and/or its inverse (it has two methods that use one
23323 derivative or the other). You can also specify these items by adding
23324 extra arguments to the @code{integsubst} your rules construct; the
23325 general form is @samp{integsubst(@var{sexpr}, @var{svar}, @var{sinv},
23326 @var{sprime})}, where @var{sinv} is the inverse of @var{sexpr} (still
23327 written as a function of @var{svar}), and @var{sprime} is the
23328 derivative of @var{sexpr} with respect to @var{svar}. If you don't
23329 specify these things, and Calc is not able to work them out on its
23330 own with the information it knows, then your substitution rule will
23331 work only in very specific, simple cases.
23332
23333 Calc applies @code{IntegRules} as if by @kbd{C-u 1 a r IntegRules};
23334 in other words, Calc stops rewriting as soon as any rule in your rule
23335 set succeeds. (If it weren't for this, the @samp{integsubst(sqrt(x),x)}
23336 example above would keep on adding layers of @code{integsubst} calls
23337 forever!)
23338
23339 @vindex IntegSimpRules
23340 Another set of rules, stored in @code{IntegSimpRules}, are applied
23341 every time the integrator uses @kbd{a s} to simplify an intermediate
23342 result. For example, putting the rule @samp{twice(x) := 2 x} into
23343 @code{IntegSimpRules} would tell Calc to convert the @code{twice}
23344 function into a form it knows whenever integration is attempted.
23345
23346 One more way to influence the integrator is to define a function with
23347 the @kbd{Z F} command (@pxref{Algebraic Definitions}). Calc's
23348 integrator automatically expands such functions according to their
23349 defining formulas, even if you originally asked for the function to
23350 be left unevaluated for symbolic arguments. (Certain other Calc
23351 systems, such as the differentiator and the equation solver, also
23352 do this.)
23353
23354 @vindex IntegAfterRules
23355 Sometimes Calc is able to find a solution to your integral, but it
23356 expresses the result in a way that is unnecessarily complicated. If
23357 this happens, you can either use @code{integsubst} as described
23358 above to try to hint at a more direct path to the desired result, or
23359 you can use @code{IntegAfterRules}. This is an extra rule set that
23360 runs after the main integrator returns its result; basically, Calc does
23361 an @kbd{a r IntegAfterRules} on the result before showing it to you.
23362 (It also does an @kbd{a s}, without @code{IntegSimpRules}, after that
23363 to further simplify the result.) For example, Calc's integrator
23364 sometimes produces expressions of the form @samp{ln(1+x) - ln(1-x)};
23365 the default @code{IntegAfterRules} rewrite this into the more readable
23366 form @samp{2 arctanh(x)}. Note that, unlike @code{IntegRules},
23367 @code{IntegSimpRules} and @code{IntegAfterRules} are applied any number
23368 of times until no further changes are possible. Rewriting by
23369 @code{IntegAfterRules} occurs only after the main integrator has
23370 finished, not at every step as for @code{IntegRules} and
23371 @code{IntegSimpRules}.
23372
23373 @node Numerical Integration, Taylor Series, Customizing the Integrator, Calculus
23374 @subsection Numerical Integration
23375
23376 @noindent
23377 @kindex a I
23378 @pindex calc-num-integral
23379 @tindex ninteg
23380 If you want a purely numerical answer to an integration problem, you can
23381 use the @kbd{a I} (@code{calc-num-integral}) [@code{ninteg}] command. This
23382 command prompts for an integration variable, a lower limit, and an
23383 upper limit. Except for the integration variable, all other variables
23384 that appear in the integrand formula must have stored values. (A stored
23385 value, if any, for the integration variable itself is ignored.)
23386
23387 Numerical integration works by evaluating your formula at many points in
23388 the specified interval. Calc uses an ``open Romberg'' method; this means
23389 that it does not evaluate the formula actually at the endpoints (so that
23390 it is safe to integrate @samp{sin(x)/x} from zero, for example). Also,
23391 the Romberg method works especially well when the function being
23392 integrated is fairly smooth. If the function is not smooth, Calc will
23393 have to evaluate it at quite a few points before it can accurately
23394 determine the value of the integral.
23395
23396 Integration is much faster when the current precision is small. It is
23397 best to set the precision to the smallest acceptable number of digits
23398 before you use @kbd{a I}. If Calc appears to be taking too long, press
23399 @kbd{C-g} to halt it and try a lower precision. If Calc still appears
23400 to need hundreds of evaluations, check to make sure your function is
23401 well-behaved in the specified interval.
23402
23403 It is possible for the lower integration limit to be @samp{-inf} (minus
23404 infinity). Likewise, the upper limit may be plus infinity. Calc
23405 internally transforms the integral into an equivalent one with finite
23406 limits. However, integration to or across singularities is not supported:
23407 The integral of @samp{1/sqrt(x)} from 0 to 1 exists (it can be found
23408 by Calc's symbolic integrator, for example), but @kbd{a I} will fail
23409 because the integrand goes to infinity at one of the endpoints.
23410
23411 @node Taylor Series, , Numerical Integration, Calculus
23412 @subsection Taylor Series
23413
23414 @noindent
23415 @kindex a t
23416 @pindex calc-taylor
23417 @tindex taylor
23418 The @kbd{a t} (@code{calc-taylor}) [@code{taylor}] command computes a
23419 power series expansion or Taylor series of a function. You specify the
23420 variable and the desired number of terms. You may give an expression of
23421 the form @samp{@var{var} = @var{a}} or @samp{@var{var} - @var{a}} instead
23422 of just a variable to produce a Taylor expansion about the point @var{a}.
23423 You may specify the number of terms with a numeric prefix argument;
23424 otherwise the command will prompt you for the number of terms. Note that
23425 many series expansions have coefficients of zero for some terms, so you
23426 may appear to get fewer terms than you asked for.
23427
23428 If the @kbd{a i} command is unable to find a symbolic integral for a
23429 function, you can get an approximation by integrating the function's
23430 Taylor series.
23431
23432 @node Solving Equations, Numerical Solutions, Calculus, Algebra
23433 @section Solving Equations
23434
23435 @noindent
23436 @kindex a S
23437 @pindex calc-solve-for
23438 @tindex solve
23439 @cindex Equations, solving
23440 @cindex Solving equations
23441 The @kbd{a S} (@code{calc-solve-for}) [@code{solve}] command rearranges
23442 an equation to solve for a specific variable. An equation is an
23443 expression of the form @expr{L = R}. For example, the command @kbd{a S x}
23444 will rearrange @expr{y = 3x + 6} to the form, @expr{x = y/3 - 2}. If the
23445 input is not an equation, it is treated like an equation of the
23446 form @expr{X = 0}.
23447
23448 This command also works for inequalities, as in @expr{y < 3x + 6}.
23449 Some inequalities cannot be solved where the analogous equation could
23450 be; for example, solving
23451 @texline @math{a < b \, c}
23452 @infoline @expr{a < b c}
23453 for @expr{b} is impossible
23454 without knowing the sign of @expr{c}. In this case, @kbd{a S} will
23455 produce the result
23456 @texline @math{b \mathbin{\hbox{\code{!=}}} a/c}
23457 @infoline @expr{b != a/c}
23458 (using the not-equal-to operator) to signify that the direction of the
23459 inequality is now unknown. The inequality
23460 @texline @math{a \le b \, c}
23461 @infoline @expr{a <= b c}
23462 is not even partially solved. @xref{Declarations}, for a way to tell
23463 Calc that the signs of the variables in a formula are in fact known.
23464
23465 Two useful commands for working with the result of @kbd{a S} are
23466 @kbd{a .} (@pxref{Logical Operations}), which converts @expr{x = y/3 - 2}
23467 to @expr{y/3 - 2}, and @kbd{s l} (@pxref{Let Command}) which evaluates
23468 another formula with @expr{x} set equal to @expr{y/3 - 2}.
23469
23470 @menu
23471 * Multiple Solutions::
23472 * Solving Systems of Equations::
23473 * Decomposing Polynomials::
23474 @end menu
23475
23476 @node Multiple Solutions, Solving Systems of Equations, Solving Equations, Solving Equations
23477 @subsection Multiple Solutions
23478
23479 @noindent
23480 @kindex H a S
23481 @tindex fsolve
23482 Some equations have more than one solution. The Hyperbolic flag
23483 (@code{H a S}) [@code{fsolve}] tells the solver to report the fully
23484 general family of solutions. It will invent variables @code{n1},
23485 @code{n2}, @dots{}, which represent independent arbitrary integers, and
23486 @code{s1}, @code{s2}, @dots{}, which represent independent arbitrary
23487 signs (either @mathit{+1} or @mathit{-1}). If you don't use the Hyperbolic
23488 flag, Calc will use zero in place of all arbitrary integers, and plus
23489 one in place of all arbitrary signs. Note that variables like @code{n1}
23490 and @code{s1} are not given any special interpretation in Calc except by
23491 the equation solver itself. As usual, you can use the @w{@kbd{s l}}
23492 (@code{calc-let}) command to obtain solutions for various actual values
23493 of these variables.
23494
23495 For example, @kbd{' x^2 = y @key{RET} H a S x @key{RET}} solves to
23496 get @samp{x = s1 sqrt(y)}, indicating that the two solutions to the
23497 equation are @samp{sqrt(y)} and @samp{-sqrt(y)}. Another way to
23498 think about it is that the square-root operation is really a
23499 two-valued function; since every Calc function must return a
23500 single result, @code{sqrt} chooses to return the positive result.
23501 Then @kbd{H a S} doctors this result using @code{s1} to indicate
23502 the full set of possible values of the mathematical square-root.
23503
23504 There is a similar phenomenon going the other direction: Suppose
23505 we solve @samp{sqrt(y) = x} for @code{y}. Calc squares both sides
23506 to get @samp{y = x^2}. This is correct, except that it introduces
23507 some dubious solutions. Consider solving @samp{sqrt(y) = -3}:
23508 Calc will report @expr{y = 9} as a valid solution, which is true
23509 in the mathematical sense of square-root, but false (there is no
23510 solution) for the actual Calc positive-valued @code{sqrt}. This
23511 happens for both @kbd{a S} and @kbd{H a S}.
23512
23513 @cindex @code{GenCount} variable
23514 @vindex GenCount
23515 @ignore
23516 @starindex
23517 @end ignore
23518 @tindex an
23519 @ignore
23520 @starindex
23521 @end ignore
23522 @tindex as
23523 If you store a positive integer in the Calc variable @code{GenCount},
23524 then Calc will generate formulas of the form @samp{as(@var{n})} for
23525 arbitrary signs, and @samp{an(@var{n})} for arbitrary integers,
23526 where @var{n} represents successive values taken by incrementing
23527 @code{GenCount} by one. While the normal arbitrary sign and
23528 integer symbols start over at @code{s1} and @code{n1} with each
23529 new Calc command, the @code{GenCount} approach will give each
23530 arbitrary value a name that is unique throughout the entire Calc
23531 session. Also, the arbitrary values are function calls instead
23532 of variables, which is advantageous in some cases. For example,
23533 you can make a rewrite rule that recognizes all arbitrary signs
23534 using a pattern like @samp{as(n)}. The @kbd{s l} command only works
23535 on variables, but you can use the @kbd{a b} (@code{calc-substitute})
23536 command to substitute actual values for function calls like @samp{as(3)}.
23537
23538 The @kbd{s G} (@code{calc-edit-GenCount}) command is a convenient
23539 way to create or edit this variable. Press @kbd{C-c C-c} to finish.
23540
23541 If you have not stored a value in @code{GenCount}, or if the value
23542 in that variable is not a positive integer, the regular
23543 @code{s1}/@code{n1} notation is used.
23544
23545 @kindex I a S
23546 @kindex H I a S
23547 @tindex finv
23548 @tindex ffinv
23549 With the Inverse flag, @kbd{I a S} [@code{finv}] treats the expression
23550 on top of the stack as a function of the specified variable and solves
23551 to find the inverse function, written in terms of the same variable.
23552 For example, @kbd{I a S x} inverts @expr{2x + 6} to @expr{x/2 - 3}.
23553 You can use both Inverse and Hyperbolic [@code{ffinv}] to obtain a
23554 fully general inverse, as described above.
23555
23556 @kindex a P
23557 @pindex calc-poly-roots
23558 @tindex roots
23559 Some equations, specifically polynomials, have a known, finite number
23560 of solutions. The @kbd{a P} (@code{calc-poly-roots}) [@code{roots}]
23561 command uses @kbd{H a S} to solve an equation in general form, then, for
23562 all arbitrary-sign variables like @code{s1}, and all arbitrary-integer
23563 variables like @code{n1} for which @code{n1} only usefully varies over
23564 a finite range, it expands these variables out to all their possible
23565 values. The results are collected into a vector, which is returned.
23566 For example, @samp{roots(x^4 = 1, x)} returns the four solutions
23567 @samp{[1, -1, (0, 1), (0, -1)]}. Generally an @var{n}th degree
23568 polynomial will always have @var{n} roots on the complex plane.
23569 (If you have given a @code{real} declaration for the solution
23570 variable, then only the real-valued solutions, if any, will be
23571 reported; @pxref{Declarations}.)
23572
23573 Note that because @kbd{a P} uses @kbd{H a S}, it is able to deliver
23574 symbolic solutions if the polynomial has symbolic coefficients. Also
23575 note that Calc's solver is not able to get exact symbolic solutions
23576 to all polynomials. Polynomials containing powers up to @expr{x^4}
23577 can always be solved exactly; polynomials of higher degree sometimes
23578 can be: @expr{x^6 + x^3 + 1} is converted to @expr{(x^3)^2 + (x^3) + 1},
23579 which can be solved for @expr{x^3} using the quadratic equation, and then
23580 for @expr{x} by taking cube roots. But in many cases, like
23581 @expr{x^6 + x + 1}, Calc does not know how to rewrite the polynomial
23582 into a form it can solve. The @kbd{a P} command can still deliver a
23583 list of numerical roots, however, provided that Symbolic mode (@kbd{m s})
23584 is not turned on. (If you work with Symbolic mode on, recall that the
23585 @kbd{N} (@code{calc-eval-num}) key is a handy way to reevaluate the
23586 formula on the stack with Symbolic mode temporarily off.) Naturally,
23587 @kbd{a P} can only provide numerical roots if the polynomial coefficients
23588 are all numbers (real or complex).
23589
23590 @node Solving Systems of Equations, Decomposing Polynomials, Multiple Solutions, Solving Equations
23591 @subsection Solving Systems of Equations
23592
23593 @noindent
23594 @cindex Systems of equations, symbolic
23595 You can also use the commands described above to solve systems of
23596 simultaneous equations. Just create a vector of equations, then
23597 specify a vector of variables for which to solve. (You can omit
23598 the surrounding brackets when entering the vector of variables
23599 at the prompt.)
23600
23601 For example, putting @samp{[x + y = a, x - y = b]} on the stack
23602 and typing @kbd{a S x,y @key{RET}} produces the vector of solutions
23603 @samp{[x = a - (a-b)/2, y = (a-b)/2]}. The result vector will
23604 have the same length as the variables vector, and the variables
23605 will be listed in the same order there. Note that the solutions
23606 are not always simplified as far as possible; the solution for
23607 @expr{x} here could be improved by an application of the @kbd{a n}
23608 command.
23609
23610 Calc's algorithm works by trying to eliminate one variable at a
23611 time by solving one of the equations for that variable and then
23612 substituting into the other equations. Calc will try all the
23613 possibilities, but you can speed things up by noting that Calc
23614 first tries to eliminate the first variable with the first
23615 equation, then the second variable with the second equation,
23616 and so on. It also helps to put the simpler (e.g., more linear)
23617 equations toward the front of the list. Calc's algorithm will
23618 solve any system of linear equations, and also many kinds of
23619 nonlinear systems.
23620
23621 @ignore
23622 @starindex
23623 @end ignore
23624 @tindex elim
23625 Normally there will be as many variables as equations. If you
23626 give fewer variables than equations (an ``over-determined'' system
23627 of equations), Calc will find a partial solution. For example,
23628 typing @kbd{a S y @key{RET}} with the above system of equations
23629 would produce @samp{[y = a - x]}. There are now several ways to
23630 express this solution in terms of the original variables; Calc uses
23631 the first one that it finds. You can control the choice by adding
23632 variable specifiers of the form @samp{elim(@var{v})} to the
23633 variables list. This says that @var{v} should be eliminated from
23634 the equations; the variable will not appear at all in the solution.
23635 For example, typing @kbd{a S y,elim(x)} would yield
23636 @samp{[y = a - (b+a)/2]}.
23637
23638 If the variables list contains only @code{elim} specifiers,
23639 Calc simply eliminates those variables from the equations
23640 and then returns the resulting set of equations. For example,
23641 @kbd{a S elim(x)} produces @samp{[a - 2 y = b]}. Every variable
23642 eliminated will reduce the number of equations in the system
23643 by one.
23644
23645 Again, @kbd{a S} gives you one solution to the system of
23646 equations. If there are several solutions, you can use @kbd{H a S}
23647 to get a general family of solutions, or, if there is a finite
23648 number of solutions, you can use @kbd{a P} to get a list. (In
23649 the latter case, the result will take the form of a matrix where
23650 the rows are different solutions and the columns correspond to the
23651 variables you requested.)
23652
23653 Another way to deal with certain kinds of overdetermined systems of
23654 equations is the @kbd{a F} command, which does least-squares fitting
23655 to satisfy the equations. @xref{Curve Fitting}.
23656
23657 @node Decomposing Polynomials, , Solving Systems of Equations, Solving Equations
23658 @subsection Decomposing Polynomials
23659
23660 @noindent
23661 @ignore
23662 @starindex
23663 @end ignore
23664 @tindex poly
23665 The @code{poly} function takes a polynomial and a variable as
23666 arguments, and returns a vector of polynomial coefficients (constant
23667 coefficient first). For example, @samp{poly(x^3 + 2 x, x)} returns
23668 @expr{[0, 2, 0, 1]}. If the input is not a polynomial in @expr{x},
23669 the call to @code{poly} is left in symbolic form. If the input does
23670 not involve the variable @expr{x}, the input is returned in a list
23671 of length one, representing a polynomial with only a constant
23672 coefficient. The call @samp{poly(x, x)} returns the vector @expr{[0, 1]}.
23673 The last element of the returned vector is guaranteed to be nonzero;
23674 note that @samp{poly(0, x)} returns the empty vector @expr{[]}.
23675 Note also that @expr{x} may actually be any formula; for example,
23676 @samp{poly(sin(x)^2 - sin(x) + 3, sin(x))} returns @expr{[3, -1, 1]}.
23677
23678 @cindex Coefficients of polynomial
23679 @cindex Degree of polynomial
23680 To get the @expr{x^k} coefficient of polynomial @expr{p}, use
23681 @samp{poly(p, x)_(k+1)}. To get the degree of polynomial @expr{p},
23682 use @samp{vlen(poly(p, x)) - 1}. For example, @samp{poly((x+1)^4, x)}
23683 returns @samp{[1, 4, 6, 4, 1]}, so @samp{poly((x+1)^4, x)_(2+1)}
23684 gives the @expr{x^2} coefficient of this polynomial, 6.
23685
23686 @ignore
23687 @starindex
23688 @end ignore
23689 @tindex gpoly
23690 One important feature of the solver is its ability to recognize
23691 formulas which are ``essentially'' polynomials. This ability is
23692 made available to the user through the @code{gpoly} function, which
23693 is used just like @code{poly}: @samp{gpoly(@var{expr}, @var{var})}.
23694 If @var{expr} is a polynomial in some term which includes @var{var}, then
23695 this function will return a vector @samp{[@var{x}, @var{c}, @var{a}]}
23696 where @var{x} is the term that depends on @var{var}, @var{c} is a
23697 vector of polynomial coefficients (like the one returned by @code{poly}),
23698 and @var{a} is a multiplier which is usually 1. Basically,
23699 @samp{@var{expr} = @var{a}*(@var{c}_1 + @var{c}_2 @var{x} +
23700 @var{c}_3 @var{x}^2 + ...)}. The last element of @var{c} is
23701 guaranteed to be non-zero, and @var{c} will not equal @samp{[1]}
23702 (i.e., the trivial decomposition @var{expr} = @var{x} is not
23703 considered a polynomial). One side effect is that @samp{gpoly(x, x)}
23704 and @samp{gpoly(6, x)}, both of which might be expected to recognize
23705 their arguments as polynomials, will not because the decomposition
23706 is considered trivial.
23707
23708 For example, @samp{gpoly((x-2)^2, x)} returns @samp{[x, [4, -4, 1], 1]},
23709 since the expanded form of this polynomial is @expr{4 - 4 x + x^2}.
23710
23711 The term @var{x} may itself be a polynomial in @var{var}. This is
23712 done to reduce the size of the @var{c} vector. For example,
23713 @samp{gpoly(x^4 + x^2 - 1, x)} returns @samp{[x^2, [-1, 1, 1], 1]},
23714 since a quadratic polynomial in @expr{x^2} is easier to solve than
23715 a quartic polynomial in @expr{x}.
23716
23717 A few more examples of the kinds of polynomials @code{gpoly} can
23718 discover:
23719
23720 @smallexample
23721 sin(x) - 1 [sin(x), [-1, 1], 1]
23722 x + 1/x - 1 [x, [1, -1, 1], 1/x]
23723 x + 1/x [x^2, [1, 1], 1/x]
23724 x^3 + 2 x [x^2, [2, 1], x]
23725 x + x^2:3 + sqrt(x) [x^1:6, [1, 1, 0, 1], x^1:2]
23726 x^(2a) + 2 x^a + 5 [x^a, [5, 2, 1], 1]
23727 (exp(-x) + exp(x)) / 2 [e^(2 x), [0.5, 0.5], e^-x]
23728 @end smallexample
23729
23730 The @code{poly} and @code{gpoly} functions accept a third integer argument
23731 which specifies the largest degree of polynomial that is acceptable.
23732 If this is @expr{n}, then only @var{c} vectors of length @expr{n+1}
23733 or less will be returned. Otherwise, the @code{poly} or @code{gpoly}
23734 call will remain in symbolic form. For example, the equation solver
23735 can handle quartics and smaller polynomials, so it calls
23736 @samp{gpoly(@var{expr}, @var{var}, 4)} to discover whether @var{expr}
23737 can be treated by its linear, quadratic, cubic, or quartic formulas.
23738
23739 @ignore
23740 @starindex
23741 @end ignore
23742 @tindex pdeg
23743 The @code{pdeg} function computes the degree of a polynomial;
23744 @samp{pdeg(p,x)} is the highest power of @code{x} that appears in
23745 @code{p}. This is the same as @samp{vlen(poly(p,x))-1}, but is
23746 much more efficient. If @code{p} is constant with respect to @code{x},
23747 then @samp{pdeg(p,x) = 0}. If @code{p} is not a polynomial in @code{x}
23748 (e.g., @samp{pdeg(2 cos(x), x)}, the function remains unevaluated.
23749 It is possible to omit the second argument @code{x}, in which case
23750 @samp{pdeg(p)} returns the highest total degree of any term of the
23751 polynomial, counting all variables that appear in @code{p}. Note
23752 that @code{pdeg(c) = pdeg(c,x) = 0} for any nonzero constant @code{c};
23753 the degree of the constant zero is considered to be @code{-inf}
23754 (minus infinity).
23755
23756 @ignore
23757 @starindex
23758 @end ignore
23759 @tindex plead
23760 The @code{plead} function finds the leading term of a polynomial.
23761 Thus @samp{plead(p,x)} is equivalent to @samp{poly(p,x)_vlen(poly(p,x))},
23762 though again more efficient. In particular, @samp{plead((2x+1)^10, x)}
23763 returns 1024 without expanding out the list of coefficients. The
23764 value of @code{plead(p,x)} will be zero only if @expr{p = 0}.
23765
23766 @ignore
23767 @starindex
23768 @end ignore
23769 @tindex pcont
23770 The @code{pcont} function finds the @dfn{content} of a polynomial. This
23771 is the greatest common divisor of all the coefficients of the polynomial.
23772 With two arguments, @code{pcont(p,x)} effectively uses @samp{poly(p,x)}
23773 to get a list of coefficients, then uses @code{pgcd} (the polynomial
23774 GCD function) to combine these into an answer. For example,
23775 @samp{pcont(4 x y^2 + 6 x^2 y, x)} is @samp{2 y}. The content is
23776 basically the ``biggest'' polynomial that can be divided into @code{p}
23777 exactly. The sign of the content is the same as the sign of the leading
23778 coefficient.
23779
23780 With only one argument, @samp{pcont(p)} computes the numerical
23781 content of the polynomial, i.e., the @code{gcd} of the numerical
23782 coefficients of all the terms in the formula. Note that @code{gcd}
23783 is defined on rational numbers as well as integers; it computes
23784 the @code{gcd} of the numerators and the @code{lcm} of the
23785 denominators. Thus @samp{pcont(4:3 x y^2 + 6 x^2 y)} returns 2:3.
23786 Dividing the polynomial by this number will clear all the
23787 denominators, as well as dividing by any common content in the
23788 numerators. The numerical content of a polynomial is negative only
23789 if all the coefficients in the polynomial are negative.
23790
23791 @ignore
23792 @starindex
23793 @end ignore
23794 @tindex pprim
23795 The @code{pprim} function finds the @dfn{primitive part} of a
23796 polynomial, which is simply the polynomial divided (using @code{pdiv}
23797 if necessary) by its content. If the input polynomial has rational
23798 coefficients, the result will have integer coefficients in simplest
23799 terms.
23800
23801 @node Numerical Solutions, Curve Fitting, Solving Equations, Algebra
23802 @section Numerical Solutions
23803
23804 @noindent
23805 Not all equations can be solved symbolically. The commands in this
23806 section use numerical algorithms that can find a solution to a specific
23807 instance of an equation to any desired accuracy. Note that the
23808 numerical commands are slower than their algebraic cousins; it is a
23809 good idea to try @kbd{a S} before resorting to these commands.
23810
23811 (@xref{Curve Fitting}, for some other, more specialized, operations
23812 on numerical data.)
23813
23814 @menu
23815 * Root Finding::
23816 * Minimization::
23817 * Numerical Systems of Equations::
23818 @end menu
23819
23820 @node Root Finding, Minimization, Numerical Solutions, Numerical Solutions
23821 @subsection Root Finding
23822
23823 @noindent
23824 @kindex a R
23825 @pindex calc-find-root
23826 @tindex root
23827 @cindex Newton's method
23828 @cindex Roots of equations
23829 @cindex Numerical root-finding
23830 The @kbd{a R} (@code{calc-find-root}) [@code{root}] command finds a
23831 numerical solution (or @dfn{root}) of an equation. (This command treats
23832 inequalities the same as equations. If the input is any other kind
23833 of formula, it is interpreted as an equation of the form @expr{X = 0}.)
23834
23835 The @kbd{a R} command requires an initial guess on the top of the
23836 stack, and a formula in the second-to-top position. It prompts for a
23837 solution variable, which must appear in the formula. All other variables
23838 that appear in the formula must have assigned values, i.e., when
23839 a value is assigned to the solution variable and the formula is
23840 evaluated with @kbd{=}, it should evaluate to a number. Any assigned
23841 value for the solution variable itself is ignored and unaffected by
23842 this command.
23843
23844 When the command completes, the initial guess is replaced on the stack
23845 by a vector of two numbers: The value of the solution variable that
23846 solves the equation, and the difference between the lefthand and
23847 righthand sides of the equation at that value. Ordinarily, the second
23848 number will be zero or very nearly zero. (Note that Calc uses a
23849 slightly higher precision while finding the root, and thus the second
23850 number may be slightly different from the value you would compute from
23851 the equation yourself.)
23852
23853 The @kbd{v h} (@code{calc-head}) command is a handy way to extract
23854 the first element of the result vector, discarding the error term.
23855
23856 The initial guess can be a real number, in which case Calc searches
23857 for a real solution near that number, or a complex number, in which
23858 case Calc searches the whole complex plane near that number for a
23859 solution, or it can be an interval form which restricts the search
23860 to real numbers inside that interval.
23861
23862 Calc tries to use @kbd{a d} to take the derivative of the equation.
23863 If this succeeds, it uses Newton's method. If the equation is not
23864 differentiable Calc uses a bisection method. (If Newton's method
23865 appears to be going astray, Calc switches over to bisection if it
23866 can, or otherwise gives up. In this case it may help to try again
23867 with a slightly different initial guess.) If the initial guess is a
23868 complex number, the function must be differentiable.
23869
23870 If the formula (or the difference between the sides of an equation)
23871 is negative at one end of the interval you specify and positive at
23872 the other end, the root finder is guaranteed to find a root.
23873 Otherwise, Calc subdivides the interval into small parts looking for
23874 positive and negative values to bracket the root. When your guess is
23875 an interval, Calc will not look outside that interval for a root.
23876
23877 @kindex H a R
23878 @tindex wroot
23879 The @kbd{H a R} [@code{wroot}] command is similar to @kbd{a R}, except
23880 that if the initial guess is an interval for which the function has
23881 the same sign at both ends, then rather than subdividing the interval
23882 Calc attempts to widen it to enclose a root. Use this mode if
23883 you are not sure if the function has a root in your interval.
23884
23885 If the function is not differentiable, and you give a simple number
23886 instead of an interval as your initial guess, Calc uses this widening
23887 process even if you did not type the Hyperbolic flag. (If the function
23888 @emph{is} differentiable, Calc uses Newton's method which does not
23889 require a bounding interval in order to work.)
23890
23891 If Calc leaves the @code{root} or @code{wroot} function in symbolic
23892 form on the stack, it will normally display an explanation for why
23893 no root was found. If you miss this explanation, press @kbd{w}
23894 (@code{calc-why}) to get it back.
23895
23896 @node Minimization, Numerical Systems of Equations, Root Finding, Numerical Solutions
23897 @subsection Minimization
23898
23899 @noindent
23900 @kindex a N
23901 @kindex H a N
23902 @kindex a X
23903 @kindex H a X
23904 @pindex calc-find-minimum
23905 @pindex calc-find-maximum
23906 @tindex minimize
23907 @tindex maximize
23908 @cindex Minimization, numerical
23909 The @kbd{a N} (@code{calc-find-minimum}) [@code{minimize}] command
23910 finds a minimum value for a formula. It is very similar in operation
23911 to @kbd{a R} (@code{calc-find-root}): You give the formula and an initial
23912 guess on the stack, and are prompted for the name of a variable. The guess
23913 may be either a number near the desired minimum, or an interval enclosing
23914 the desired minimum. The function returns a vector containing the
23915 value of the variable which minimizes the formula's value, along
23916 with the minimum value itself.
23917
23918 Note that this command looks for a @emph{local} minimum. Many functions
23919 have more than one minimum; some, like
23920 @texline @math{x \sin x},
23921 @infoline @expr{x sin(x)},
23922 have infinitely many. In fact, there is no easy way to define the
23923 ``global'' minimum of
23924 @texline @math{x \sin x}
23925 @infoline @expr{x sin(x)}
23926 but Calc can still locate any particular local minimum
23927 for you. Calc basically goes downhill from the initial guess until it
23928 finds a point at which the function's value is greater both to the left
23929 and to the right. Calc does not use derivatives when minimizing a function.
23930
23931 If your initial guess is an interval and it looks like the minimum
23932 occurs at one or the other endpoint of the interval, Calc will return
23933 that endpoint only if that endpoint is closed; thus, minimizing @expr{17 x}
23934 over @expr{[2..3]} will return @expr{[2, 38]}, but minimizing over
23935 @expr{(2..3]} would report no minimum found. In general, you should
23936 use closed intervals to find literally the minimum value in that
23937 range of @expr{x}, or open intervals to find the local minimum, if
23938 any, that happens to lie in that range.
23939
23940 Most functions are smooth and flat near their minimum values. Because
23941 of this flatness, if the current precision is, say, 12 digits, the
23942 variable can only be determined meaningfully to about six digits. Thus
23943 you should set the precision to twice as many digits as you need in your
23944 answer.
23945
23946 @ignore
23947 @mindex wmin@idots
23948 @end ignore
23949 @tindex wminimize
23950 @ignore
23951 @mindex wmax@idots
23952 @end ignore
23953 @tindex wmaximize
23954 The @kbd{H a N} [@code{wminimize}] command, analogously to @kbd{H a R},
23955 expands the guess interval to enclose a minimum rather than requiring
23956 that the minimum lie inside the interval you supply.
23957
23958 The @kbd{a X} (@code{calc-find-maximum}) [@code{maximize}] and
23959 @kbd{H a X} [@code{wmaximize}] commands effectively minimize the
23960 negative of the formula you supply.
23961
23962 The formula must evaluate to a real number at all points inside the
23963 interval (or near the initial guess if the guess is a number). If
23964 the initial guess is a complex number the variable will be minimized
23965 over the complex numbers; if it is real or an interval it will
23966 be minimized over the reals.
23967
23968 @node Numerical Systems of Equations, , Minimization, Numerical Solutions
23969 @subsection Systems of Equations
23970
23971 @noindent
23972 @cindex Systems of equations, numerical
23973 The @kbd{a R} command can also solve systems of equations. In this
23974 case, the equation should instead be a vector of equations, the
23975 guess should instead be a vector of numbers (intervals are not
23976 supported), and the variable should be a vector of variables. You
23977 can omit the brackets while entering the list of variables. Each
23978 equation must be differentiable by each variable for this mode to
23979 work. The result will be a vector of two vectors: The variable
23980 values that solved the system of equations, and the differences
23981 between the sides of the equations with those variable values.
23982 There must be the same number of equations as variables. Since
23983 only plain numbers are allowed as guesses, the Hyperbolic flag has
23984 no effect when solving a system of equations.
23985
23986 It is also possible to minimize over many variables with @kbd{a N}
23987 (or maximize with @kbd{a X}). Once again the variable name should
23988 be replaced by a vector of variables, and the initial guess should
23989 be an equal-sized vector of initial guesses. But, unlike the case of
23990 multidimensional @kbd{a R}, the formula being minimized should
23991 still be a single formula, @emph{not} a vector. Beware that
23992 multidimensional minimization is currently @emph{very} slow.
23993
23994 @node Curve Fitting, Summations, Numerical Solutions, Algebra
23995 @section Curve Fitting
23996
23997 @noindent
23998 The @kbd{a F} command fits a set of data to a @dfn{model formula},
23999 such as @expr{y = m x + b} where @expr{m} and @expr{b} are parameters
24000 to be determined. For a typical set of measured data there will be
24001 no single @expr{m} and @expr{b} that exactly fit the data; in this
24002 case, Calc chooses values of the parameters that provide the closest
24003 possible fit.
24004
24005 @menu
24006 * Linear Fits::
24007 * Polynomial and Multilinear Fits::
24008 * Error Estimates for Fits::
24009 * Standard Nonlinear Models::
24010 * Curve Fitting Details::
24011 * Interpolation::
24012 @end menu
24013
24014 @node Linear Fits, Polynomial and Multilinear Fits, Curve Fitting, Curve Fitting
24015 @subsection Linear Fits
24016
24017 @noindent
24018 @kindex a F
24019 @pindex calc-curve-fit
24020 @tindex fit
24021 @cindex Linear regression
24022 @cindex Least-squares fits
24023 The @kbd{a F} (@code{calc-curve-fit}) [@code{fit}] command attempts
24024 to fit a set of data (@expr{x} and @expr{y} vectors of numbers) to a
24025 straight line, polynomial, or other function of @expr{x}. For the
24026 moment we will consider only the case of fitting to a line, and we
24027 will ignore the issue of whether or not the model was in fact a good
24028 fit for the data.
24029
24030 In a standard linear least-squares fit, we have a set of @expr{(x,y)}
24031 data points that we wish to fit to the model @expr{y = m x + b}
24032 by adjusting the parameters @expr{m} and @expr{b} to make the @expr{y}
24033 values calculated from the formula be as close as possible to the actual
24034 @expr{y} values in the data set. (In a polynomial fit, the model is
24035 instead, say, @expr{y = a x^3 + b x^2 + c x + d}. In a multilinear fit,
24036 we have data points of the form @expr{(x_1,x_2,x_3,y)} and our model is
24037 @expr{y = a x_1 + b x_2 + c x_3 + d}. These will be discussed later.)
24038
24039 In the model formula, variables like @expr{x} and @expr{x_2} are called
24040 the @dfn{independent variables}, and @expr{y} is the @dfn{dependent
24041 variable}. Variables like @expr{m}, @expr{a}, and @expr{b} are called
24042 the @dfn{parameters} of the model.
24043
24044 The @kbd{a F} command takes the data set to be fitted from the stack.
24045 By default, it expects the data in the form of a matrix. For example,
24046 for a linear or polynomial fit, this would be a
24047 @texline @math{2\times N}
24048 @infoline 2xN
24049 matrix where the first row is a list of @expr{x} values and the second
24050 row has the corresponding @expr{y} values. For the multilinear fit
24051 shown above, the matrix would have four rows (@expr{x_1}, @expr{x_2},
24052 @expr{x_3}, and @expr{y}, respectively).
24053
24054 If you happen to have an
24055 @texline @math{N\times2}
24056 @infoline Nx2
24057 matrix instead of a
24058 @texline @math{2\times N}
24059 @infoline 2xN
24060 matrix, just press @kbd{v t} first to transpose the matrix.
24061
24062 After you type @kbd{a F}, Calc prompts you to select a model. For a
24063 linear fit, press the digit @kbd{1}.
24064
24065 Calc then prompts for you to name the variables. By default it chooses
24066 high letters like @expr{x} and @expr{y} for independent variables and
24067 low letters like @expr{a} and @expr{b} for parameters. (The dependent
24068 variable doesn't need a name.) The two kinds of variables are separated
24069 by a semicolon. Since you generally care more about the names of the
24070 independent variables than of the parameters, Calc also allows you to
24071 name only those and let the parameters use default names.
24072
24073 For example, suppose the data matrix
24074
24075 @ifinfo
24076 @example
24077 @group
24078 [ [ 1, 2, 3, 4, 5 ]
24079 [ 5, 7, 9, 11, 13 ] ]
24080 @end group
24081 @end example
24082 @end ifinfo
24083 @tex
24084 \turnoffactive
24085 \turnoffactive
24086 \beforedisplay
24087 $$ \pmatrix{ 1 & 2 & 3 & 4 & 5 \cr
24088 5 & 7 & 9 & 11 & 13 }
24089 $$
24090 \afterdisplay
24091 @end tex
24092
24093 @noindent
24094 is on the stack and we wish to do a simple linear fit. Type
24095 @kbd{a F}, then @kbd{1} for the model, then @key{RET} to use
24096 the default names. The result will be the formula @expr{3 + 2 x}
24097 on the stack. Calc has created the model expression @kbd{a + b x},
24098 then found the optimal values of @expr{a} and @expr{b} to fit the
24099 data. (In this case, it was able to find an exact fit.) Calc then
24100 substituted those values for @expr{a} and @expr{b} in the model
24101 formula.
24102
24103 The @kbd{a F} command puts two entries in the trail. One is, as
24104 always, a copy of the result that went to the stack; the other is
24105 a vector of the actual parameter values, written as equations:
24106 @expr{[a = 3, b = 2]}, in case you'd rather read them in a list
24107 than pick them out of the formula. (You can type @kbd{t y}
24108 to move this vector to the stack; see @ref{Trail Commands}.
24109
24110 Specifying a different independent variable name will affect the
24111 resulting formula: @kbd{a F 1 k @key{RET}} produces @kbd{3 + 2 k}.
24112 Changing the parameter names (say, @kbd{a F 1 k;b,m @key{RET}}) will affect
24113 the equations that go into the trail.
24114
24115 @tex
24116 \bigskip
24117 @end tex
24118
24119 To see what happens when the fit is not exact, we could change
24120 the number 13 in the data matrix to 14 and try the fit again.
24121 The result is:
24122
24123 @example
24124 2.6 + 2.2 x
24125 @end example
24126
24127 Evaluating this formula, say with @kbd{v x 5 @key{RET} @key{TAB} V M $ @key{RET}}, shows
24128 a reasonably close match to the y-values in the data.
24129
24130 @example
24131 [4.8, 7., 9.2, 11.4, 13.6]
24132 @end example
24133
24134 Since there is no line which passes through all the @var{n} data points,
24135 Calc has chosen a line that best approximates the data points using
24136 the method of least squares. The idea is to define the @dfn{chi-square}
24137 error measure
24138
24139 @ifinfo
24140 @example
24141 chi^2 = sum((y_i - (a + b x_i))^2, i, 1, N)
24142 @end example
24143 @end ifinfo
24144 @tex
24145 \turnoffactive
24146 \beforedisplay
24147 $$ \chi^2 = \sum_{i=1}^N (y_i - (a + b x_i))^2 $$
24148 \afterdisplay
24149 @end tex
24150
24151 @noindent
24152 which is clearly zero if @expr{a + b x} exactly fits all data points,
24153 and increases as various @expr{a + b x_i} values fail to match the
24154 corresponding @expr{y_i} values. There are several reasons why the
24155 summand is squared, one of them being to ensure that
24156 @texline @math{\chi^2 \ge 0}.
24157 @infoline @expr{chi^2 >= 0}.
24158 Least-squares fitting simply chooses the values of @expr{a} and @expr{b}
24159 for which the error
24160 @texline @math{\chi^2}
24161 @infoline @expr{chi^2}
24162 is as small as possible.
24163
24164 Other kinds of models do the same thing but with a different model
24165 formula in place of @expr{a + b x_i}.
24166
24167 @tex
24168 \bigskip
24169 @end tex
24170
24171 A numeric prefix argument causes the @kbd{a F} command to take the
24172 data in some other form than one big matrix. A positive argument @var{n}
24173 will take @var{N} items from the stack, corresponding to the @var{n} rows
24174 of a data matrix. In the linear case, @var{n} must be 2 since there
24175 is always one independent variable and one dependent variable.
24176
24177 A prefix of zero or plain @kbd{C-u} is a compromise; Calc takes two
24178 items from the stack, an @var{n}-row matrix of @expr{x} values, and a
24179 vector of @expr{y} values. If there is only one independent variable,
24180 the @expr{x} values can be either a one-row matrix or a plain vector,
24181 in which case the @kbd{C-u} prefix is the same as a @w{@kbd{C-u 2}} prefix.
24182
24183 @node Polynomial and Multilinear Fits, Error Estimates for Fits, Linear Fits, Curve Fitting
24184 @subsection Polynomial and Multilinear Fits
24185
24186 @noindent
24187 To fit the data to higher-order polynomials, just type one of the
24188 digits @kbd{2} through @kbd{9} when prompted for a model. For example,
24189 we could fit the original data matrix from the previous section
24190 (with 13, not 14) to a parabola instead of a line by typing
24191 @kbd{a F 2 @key{RET}}.
24192
24193 @example
24194 2.00000000001 x - 1.5e-12 x^2 + 2.99999999999
24195 @end example
24196
24197 Note that since the constant and linear terms are enough to fit the
24198 data exactly, it's no surprise that Calc chose a tiny contribution
24199 for @expr{x^2}. (The fact that it's not exactly zero is due only
24200 to roundoff error. Since our data are exact integers, we could get
24201 an exact answer by typing @kbd{m f} first to get Fraction mode.
24202 Then the @expr{x^2} term would vanish altogether. Usually, though,
24203 the data being fitted will be approximate floats so Fraction mode
24204 won't help.)
24205
24206 Doing the @kbd{a F 2} fit on the data set with 14 instead of 13
24207 gives a much larger @expr{x^2} contribution, as Calc bends the
24208 line slightly to improve the fit.
24209
24210 @example
24211 0.142857142855 x^2 + 1.34285714287 x + 3.59999999998
24212 @end example
24213
24214 An important result from the theory of polynomial fitting is that it
24215 is always possible to fit @var{n} data points exactly using a polynomial
24216 of degree @mathit{@var{n}-1}, sometimes called an @dfn{interpolating polynomial}.
24217 Using the modified (14) data matrix, a model number of 4 gives
24218 a polynomial that exactly matches all five data points:
24219
24220 @example
24221 0.04167 x^4 - 0.4167 x^3 + 1.458 x^2 - 0.08333 x + 4.
24222 @end example
24223
24224 The actual coefficients we get with a precision of 12, like
24225 @expr{0.0416666663588}, clearly suffer from loss of precision.
24226 It is a good idea to increase the working precision to several
24227 digits beyond what you need when you do a fitting operation.
24228 Or, if your data are exact, use Fraction mode to get exact
24229 results.
24230
24231 You can type @kbd{i} instead of a digit at the model prompt to fit
24232 the data exactly to a polynomial. This just counts the number of
24233 columns of the data matrix to choose the degree of the polynomial
24234 automatically.
24235
24236 Fitting data ``exactly'' to high-degree polynomials is not always
24237 a good idea, though. High-degree polynomials have a tendency to
24238 wiggle uncontrollably in between the fitting data points. Also,
24239 if the exact-fit polynomial is going to be used to interpolate or
24240 extrapolate the data, it is numerically better to use the @kbd{a p}
24241 command described below. @xref{Interpolation}.
24242
24243 @tex
24244 \bigskip
24245 @end tex
24246
24247 Another generalization of the linear model is to assume the
24248 @expr{y} values are a sum of linear contributions from several
24249 @expr{x} values. This is a @dfn{multilinear} fit, and it is also
24250 selected by the @kbd{1} digit key. (Calc decides whether the fit
24251 is linear or multilinear by counting the rows in the data matrix.)
24252
24253 Given the data matrix,
24254
24255 @example
24256 @group
24257 [ [ 1, 2, 3, 4, 5 ]
24258 [ 7, 2, 3, 5, 2 ]
24259 [ 14.5, 15, 18.5, 22.5, 24 ] ]
24260 @end group
24261 @end example
24262
24263 @noindent
24264 the command @kbd{a F 1 @key{RET}} will call the first row @expr{x} and the
24265 second row @expr{y}, and will fit the values in the third row to the
24266 model @expr{a + b x + c y}.
24267
24268 @example
24269 8. + 3. x + 0.5 y
24270 @end example
24271
24272 Calc can do multilinear fits with any number of independent variables
24273 (i.e., with any number of data rows).
24274
24275 @tex
24276 \bigskip
24277 @end tex
24278
24279 Yet another variation is @dfn{homogeneous} linear models, in which
24280 the constant term is known to be zero. In the linear case, this
24281 means the model formula is simply @expr{a x}; in the multilinear
24282 case, the model might be @expr{a x + b y + c z}; and in the polynomial
24283 case, the model could be @expr{a x + b x^2 + c x^3}. You can get
24284 a homogeneous linear or multilinear model by pressing the letter
24285 @kbd{h} followed by a regular model key, like @kbd{1} or @kbd{2}.
24286
24287 It is certainly possible to have other constrained linear models,
24288 like @expr{2.3 + a x} or @expr{a - 4 x}. While there is no single
24289 key to select models like these, a later section shows how to enter
24290 any desired model by hand. In the first case, for example, you
24291 would enter @kbd{a F ' 2.3 + a x}.
24292
24293 Another class of models that will work but must be entered by hand
24294 are multinomial fits, e.g., @expr{a + b x + c y + d x^2 + e y^2 + f x y}.
24295
24296 @node Error Estimates for Fits, Standard Nonlinear Models, Polynomial and Multilinear Fits, Curve Fitting
24297 @subsection Error Estimates for Fits
24298
24299 @noindent
24300 @kindex H a F
24301 @tindex efit
24302 With the Hyperbolic flag, @kbd{H a F} [@code{efit}] performs the same
24303 fitting operation as @kbd{a F}, but reports the coefficients as error
24304 forms instead of plain numbers. Fitting our two data matrices (first
24305 with 13, then with 14) to a line with @kbd{H a F} gives the results,
24306
24307 @example
24308 3. + 2. x
24309 2.6 +/- 0.382970843103 + 2.2 +/- 0.115470053838 x
24310 @end example
24311
24312 In the first case the estimated errors are zero because the linear
24313 fit is perfect. In the second case, the errors are nonzero but
24314 moderately small, because the data are still very close to linear.
24315
24316 It is also possible for the @emph{input} to a fitting operation to
24317 contain error forms. The data values must either all include errors
24318 or all be plain numbers. Error forms can go anywhere but generally
24319 go on the numbers in the last row of the data matrix. If the last
24320 row contains error forms
24321 @texline `@var{y_i}@w{ @t{+/-} }@math{\sigma_i}',
24322 @infoline `@var{y_i}@w{ @t{+/-} }@var{sigma_i}',
24323 then the
24324 @texline @math{\chi^2}
24325 @infoline @expr{chi^2}
24326 statistic is now,
24327
24328 @ifinfo
24329 @example
24330 chi^2 = sum(((y_i - (a + b x_i)) / sigma_i)^2, i, 1, N)
24331 @end example
24332 @end ifinfo
24333 @tex
24334 \turnoffactive
24335 \beforedisplay
24336 $$ \chi^2 = \sum_{i=1}^N \left(y_i - (a + b x_i) \over \sigma_i\right)^2 $$
24337 \afterdisplay
24338 @end tex
24339
24340 @noindent
24341 so that data points with larger error estimates contribute less to
24342 the fitting operation.
24343
24344 If there are error forms on other rows of the data matrix, all the
24345 errors for a given data point are combined; the square root of the
24346 sum of the squares of the errors forms the
24347 @texline @math{\sigma_i}
24348 @infoline @expr{sigma_i}
24349 used for the data point.
24350
24351 Both @kbd{a F} and @kbd{H a F} can accept error forms in the input
24352 matrix, although if you are concerned about error analysis you will
24353 probably use @kbd{H a F} so that the output also contains error
24354 estimates.
24355
24356 If the input contains error forms but all the
24357 @texline @math{\sigma_i}
24358 @infoline @expr{sigma_i}
24359 values are the same, it is easy to see that the resulting fitted model
24360 will be the same as if the input did not have error forms at all
24361 @texline (@math{\chi^2}
24362 @infoline (@expr{chi^2}
24363 is simply scaled uniformly by
24364 @texline @math{1 / \sigma^2},
24365 @infoline @expr{1 / sigma^2},
24366 which doesn't affect where it has a minimum). But there @emph{will} be
24367 a difference in the estimated errors of the coefficients reported by
24368 @kbd{H a F}.
24369
24370 Consult any text on statistical modeling of data for a discussion
24371 of where these error estimates come from and how they should be
24372 interpreted.
24373
24374 @tex
24375 \bigskip
24376 @end tex
24377
24378 @kindex I a F
24379 @tindex xfit
24380 With the Inverse flag, @kbd{I a F} [@code{xfit}] produces even more
24381 information. The result is a vector of six items:
24382
24383 @enumerate
24384 @item
24385 The model formula with error forms for its coefficients or
24386 parameters. This is the result that @kbd{H a F} would have
24387 produced.
24388
24389 @item
24390 A vector of ``raw'' parameter values for the model. These are the
24391 polynomial coefficients or other parameters as plain numbers, in the
24392 same order as the parameters appeared in the final prompt of the
24393 @kbd{I a F} command. For polynomials of degree @expr{d}, this vector
24394 will have length @expr{M = d+1} with the constant term first.
24395
24396 @item
24397 The covariance matrix @expr{C} computed from the fit. This is
24398 an @var{m}x@var{m} symmetric matrix; the diagonal elements
24399 @texline @math{C_{jj}}
24400 @infoline @expr{C_j_j}
24401 are the variances
24402 @texline @math{\sigma_j^2}
24403 @infoline @expr{sigma_j^2}
24404 of the parameters. The other elements are covariances
24405 @texline @math{\sigma_{ij}^2}
24406 @infoline @expr{sigma_i_j^2}
24407 that describe the correlation between pairs of parameters. (A related
24408 set of numbers, the @dfn{linear correlation coefficients}
24409 @texline @math{r_{ij}},
24410 @infoline @expr{r_i_j},
24411 are defined as
24412 @texline @math{\sigma_{ij}^2 / \sigma_i \, \sigma_j}.)
24413 @infoline @expr{sigma_i_j^2 / sigma_i sigma_j}.)
24414
24415 @item
24416 A vector of @expr{M} ``parameter filter'' functions whose
24417 meanings are described below. If no filters are necessary this
24418 will instead be an empty vector; this is always the case for the
24419 polynomial and multilinear fits described so far.
24420
24421 @item
24422 The value of
24423 @texline @math{\chi^2}
24424 @infoline @expr{chi^2}
24425 for the fit, calculated by the formulas shown above. This gives a
24426 measure of the quality of the fit; statisticians consider
24427 @texline @math{\chi^2 \approx N - M}
24428 @infoline @expr{chi^2 = N - M}
24429 to indicate a moderately good fit (where again @expr{N} is the number of
24430 data points and @expr{M} is the number of parameters).
24431
24432 @item
24433 A measure of goodness of fit expressed as a probability @expr{Q}.
24434 This is computed from the @code{utpc} probability distribution
24435 function using
24436 @texline @math{\chi^2}
24437 @infoline @expr{chi^2}
24438 with @expr{N - M} degrees of freedom. A
24439 value of 0.5 implies a good fit; some texts recommend that often
24440 @expr{Q = 0.1} or even 0.001 can signify an acceptable fit. In
24441 particular,
24442 @texline @math{\chi^2}
24443 @infoline @expr{chi^2}
24444 statistics assume the errors in your inputs
24445 follow a normal (Gaussian) distribution; if they don't, you may
24446 have to accept smaller values of @expr{Q}.
24447
24448 The @expr{Q} value is computed only if the input included error
24449 estimates. Otherwise, Calc will report the symbol @code{nan}
24450 for @expr{Q}. The reason is that in this case the
24451 @texline @math{\chi^2}
24452 @infoline @expr{chi^2}
24453 value has effectively been used to estimate the original errors
24454 in the input, and thus there is no redundant information left
24455 over to use for a confidence test.
24456 @end enumerate
24457
24458 @node Standard Nonlinear Models, Curve Fitting Details, Error Estimates for Fits, Curve Fitting
24459 @subsection Standard Nonlinear Models
24460
24461 @noindent
24462 The @kbd{a F} command also accepts other kinds of models besides
24463 lines and polynomials. Some common models have quick single-key
24464 abbreviations; others must be entered by hand as algebraic formulas.
24465
24466 Here is a complete list of the standard models recognized by @kbd{a F}:
24467
24468 @table @kbd
24469 @item 1
24470 Linear or multilinear. @mathit{a + b x + c y + d z}.
24471 @item 2-9
24472 Polynomials. @mathit{a + b x + c x^2 + d x^3}.
24473 @item e
24474 Exponential. @mathit{a} @t{exp}@mathit{(b x)} @t{exp}@mathit{(c y)}.
24475 @item E
24476 Base-10 exponential. @mathit{a} @t{10^}@mathit{(b x)} @t{10^}@mathit{(c y)}.
24477 @item x
24478 Exponential (alternate notation). @t{exp}@mathit{(a + b x + c y)}.
24479 @item X
24480 Base-10 exponential (alternate). @t{10^}@mathit{(a + b x + c y)}.
24481 @item l
24482 Logarithmic. @mathit{a + b} @t{ln}@mathit{(x) + c} @t{ln}@mathit{(y)}.
24483 @item L
24484 Base-10 logarithmic. @mathit{a + b} @t{log10}@mathit{(x) + c} @t{log10}@mathit{(y)}.
24485 @item ^
24486 General exponential. @mathit{a b^x c^y}.
24487 @item p
24488 Power law. @mathit{a x^b y^c}.
24489 @item q
24490 Quadratic. @mathit{a + b (x-c)^2 + d (x-e)^2}.
24491 @item g
24492 Gaussian.
24493 @texline @math{{a \over b \sqrt{2 \pi}} \exp\left( -{1 \over 2} \left( x - c \over b \right)^2 \right)}.
24494 @infoline @mathit{(a / b sqrt(2 pi)) exp(-0.5*((x-c)/b)^2)}.
24495 @end table
24496
24497 All of these models are used in the usual way; just press the appropriate
24498 letter at the model prompt, and choose variable names if you wish. The
24499 result will be a formula as shown in the above table, with the best-fit
24500 values of the parameters substituted. (You may find it easier to read
24501 the parameter values from the vector that is placed in the trail.)
24502
24503 All models except Gaussian and polynomials can generalize as shown to any
24504 number of independent variables. Also, all the built-in models have an
24505 additive or multiplicative parameter shown as @expr{a} in the above table
24506 which can be replaced by zero or one, as appropriate, by typing @kbd{h}
24507 before the model key.
24508
24509 Note that many of these models are essentially equivalent, but express
24510 the parameters slightly differently. For example, @expr{a b^x} and
24511 the other two exponential models are all algebraic rearrangements of
24512 each other. Also, the ``quadratic'' model is just a degree-2 polynomial
24513 with the parameters expressed differently. Use whichever form best
24514 matches the problem.
24515
24516 The HP-28/48 calculators support four different models for curve
24517 fitting, called @code{LIN}, @code{LOG}, @code{EXP}, and @code{PWR}.
24518 These correspond to Calc models @samp{a + b x}, @samp{a + b ln(x)},
24519 @samp{a exp(b x)}, and @samp{a x^b}, respectively. In each case,
24520 @expr{a} is what the HP-48 identifies as the ``intercept,'' and
24521 @expr{b} is what it calls the ``slope.''
24522
24523 @tex
24524 \bigskip
24525 @end tex
24526
24527 If the model you want doesn't appear on this list, press @kbd{'}
24528 (the apostrophe key) at the model prompt to enter any algebraic
24529 formula, such as @kbd{m x - b}, as the model. (Not all models
24530 will work, though---see the next section for details.)
24531
24532 The model can also be an equation like @expr{y = m x + b}.
24533 In this case, Calc thinks of all the rows of the data matrix on
24534 equal terms; this model effectively has two parameters
24535 (@expr{m} and @expr{b}) and two independent variables (@expr{x}
24536 and @expr{y}), with no ``dependent'' variables. Model equations
24537 do not need to take this @expr{y =} form. For example, the
24538 implicit line equation @expr{a x + b y = 1} works fine as a
24539 model.
24540
24541 When you enter a model, Calc makes an alphabetical list of all
24542 the variables that appear in the model. These are used for the
24543 default parameters, independent variables, and dependent variable
24544 (in that order). If you enter a plain formula (not an equation),
24545 Calc assumes the dependent variable does not appear in the formula
24546 and thus does not need a name.
24547
24548 For example, if the model formula has the variables @expr{a,mu,sigma,t,x},
24549 and the data matrix has three rows (meaning two independent variables),
24550 Calc will use @expr{a,mu,sigma} as the default parameters, and the
24551 data rows will be named @expr{t} and @expr{x}, respectively. If you
24552 enter an equation instead of a plain formula, Calc will use @expr{a,mu}
24553 as the parameters, and @expr{sigma,t,x} as the three independent
24554 variables.
24555
24556 You can, of course, override these choices by entering something
24557 different at the prompt. If you leave some variables out of the list,
24558 those variables must have stored values and those stored values will
24559 be used as constants in the model. (Stored values for the parameters
24560 and independent variables are ignored by the @kbd{a F} command.)
24561 If you list only independent variables, all the remaining variables
24562 in the model formula will become parameters.
24563
24564 If there are @kbd{$} signs in the model you type, they will stand
24565 for parameters and all other variables (in alphabetical order)
24566 will be independent. Use @kbd{$} for one parameter, @kbd{$$} for
24567 another, and so on. Thus @kbd{$ x + $$} is another way to describe
24568 a linear model.
24569
24570 If you type a @kbd{$} instead of @kbd{'} at the model prompt itself,
24571 Calc will take the model formula from the stack. (The data must then
24572 appear at the second stack level.) The same conventions are used to
24573 choose which variables in the formula are independent by default and
24574 which are parameters.
24575
24576 Models taken from the stack can also be expressed as vectors of
24577 two or three elements, @expr{[@var{model}, @var{vars}]} or
24578 @expr{[@var{model}, @var{vars}, @var{params}]}. Each of @var{vars}
24579 and @var{params} may be either a variable or a vector of variables.
24580 (If @var{params} is omitted, all variables in @var{model} except
24581 those listed as @var{vars} are parameters.)
24582
24583 When you enter a model manually with @kbd{'}, Calc puts a 3-vector
24584 describing the model in the trail so you can get it back if you wish.
24585
24586 @tex
24587 \bigskip
24588 @end tex
24589
24590 @vindex Model1
24591 @vindex Model2
24592 Finally, you can store a model in one of the Calc variables
24593 @code{Model1} or @code{Model2}, then use this model by typing
24594 @kbd{a F u} or @kbd{a F U} (respectively). The value stored in
24595 the variable can be any of the formats that @kbd{a F $} would
24596 accept for a model on the stack.
24597
24598 @tex
24599 \bigskip
24600 @end tex
24601
24602 Calc uses the principal values of inverse functions like @code{ln}
24603 and @code{arcsin} when doing fits. For example, when you enter
24604 the model @samp{y = sin(a t + b)} Calc actually uses the easier
24605 form @samp{arcsin(y) = a t + b}. The @code{arcsin} function always
24606 returns results in the range from @mathit{-90} to 90 degrees (or the
24607 equivalent range in radians). Suppose you had data that you
24608 believed to represent roughly three oscillations of a sine wave,
24609 so that the argument of the sine might go from zero to
24610 @texline @math{3\times360}
24611 @infoline @mathit{3*360}
24612 degrees.
24613 The above model would appear to be a good way to determine the
24614 true frequency and phase of the sine wave, but in practice it
24615 would fail utterly. The righthand side of the actual model
24616 @samp{arcsin(y) = a t + b} will grow smoothly with @expr{t}, but
24617 the lefthand side will bounce back and forth between @mathit{-90} and 90.
24618 No values of @expr{a} and @expr{b} can make the two sides match,
24619 even approximately.
24620
24621 There is no good solution to this problem at present. You could
24622 restrict your data to small enough ranges so that the above problem
24623 doesn't occur (i.e., not straddling any peaks in the sine wave).
24624 Or, in this case, you could use a totally different method such as
24625 Fourier analysis, which is beyond the scope of the @kbd{a F} command.
24626 (Unfortunately, Calc does not currently have any facilities for
24627 taking Fourier and related transforms.)
24628
24629 @node Curve Fitting Details, Interpolation, Standard Nonlinear Models, Curve Fitting
24630 @subsection Curve Fitting Details
24631
24632 @noindent
24633 Calc's internal least-squares fitter can only handle multilinear
24634 models. More precisely, it can handle any model of the form
24635 @expr{a f(x,y,z) + b g(x,y,z) + c h(x,y,z)}, where @expr{a,b,c}
24636 are the parameters and @expr{x,y,z} are the independent variables
24637 (of course there can be any number of each, not just three).
24638
24639 In a simple multilinear or polynomial fit, it is easy to see how
24640 to convert the model into this form. For example, if the model
24641 is @expr{a + b x + c x^2}, then @expr{f(x) = 1}, @expr{g(x) = x},
24642 and @expr{h(x) = x^2} are suitable functions.
24643
24644 For other models, Calc uses a variety of algebraic manipulations
24645 to try to put the problem into the form
24646
24647 @smallexample
24648 Y(x,y,z) = A(a,b,c) F(x,y,z) + B(a,b,c) G(x,y,z) + C(a,b,c) H(x,y,z)
24649 @end smallexample
24650
24651 @noindent
24652 where @expr{Y,A,B,C,F,G,H} are arbitrary functions. It computes
24653 @expr{Y}, @expr{F}, @expr{G}, and @expr{H} for all the data points,
24654 does a standard linear fit to find the values of @expr{A}, @expr{B},
24655 and @expr{C}, then uses the equation solver to solve for @expr{a,b,c}
24656 in terms of @expr{A,B,C}.
24657
24658 A remarkable number of models can be cast into this general form.
24659 We'll look at two examples here to see how it works. The power-law
24660 model @expr{y = a x^b} with two independent variables and two parameters
24661 can be rewritten as follows:
24662
24663 @example
24664 y = a x^b
24665 y = a exp(b ln(x))
24666 y = exp(ln(a) + b ln(x))
24667 ln(y) = ln(a) + b ln(x)
24668 @end example
24669
24670 @noindent
24671 which matches the desired form with
24672 @texline @math{Y = \ln(y)},
24673 @infoline @expr{Y = ln(y)},
24674 @texline @math{A = \ln(a)},
24675 @infoline @expr{A = ln(a)},
24676 @expr{F = 1}, @expr{B = b}, and
24677 @texline @math{G = \ln(x)}.
24678 @infoline @expr{G = ln(x)}.
24679 Calc thus computes the logarithms of your @expr{y} and @expr{x} values,
24680 does a linear fit for @expr{A} and @expr{B}, then solves to get
24681 @texline @math{a = \exp(A)}
24682 @infoline @expr{a = exp(A)}
24683 and @expr{b = B}.
24684
24685 Another interesting example is the ``quadratic'' model, which can
24686 be handled by expanding according to the distributive law.
24687
24688 @example
24689 y = a + b*(x - c)^2
24690 y = a + b c^2 - 2 b c x + b x^2
24691 @end example
24692
24693 @noindent
24694 which matches with @expr{Y = y}, @expr{A = a + b c^2}, @expr{F = 1},
24695 @expr{B = -2 b c}, @expr{G = x} (the @mathit{-2} factor could just as easily
24696 have been put into @expr{G} instead of @expr{B}), @expr{C = b}, and
24697 @expr{H = x^2}.
24698
24699 The Gaussian model looks quite complicated, but a closer examination
24700 shows that it's actually similar to the quadratic model but with an
24701 exponential that can be brought to the top and moved into @expr{Y}.
24702
24703 An example of a model that cannot be put into general linear
24704 form is a Gaussian with a constant background added on, i.e.,
24705 @expr{d} + the regular Gaussian formula. If you have a model like
24706 this, your best bet is to replace enough of your parameters with
24707 constants to make the model linearizable, then adjust the constants
24708 manually by doing a series of fits. You can compare the fits by
24709 graphing them, by examining the goodness-of-fit measures returned by
24710 @kbd{I a F}, or by some other method suitable to your application.
24711 Note that some models can be linearized in several ways. The
24712 Gaussian-plus-@var{d} model can be linearized by setting @expr{d}
24713 (the background) to a constant, or by setting @expr{b} (the standard
24714 deviation) and @expr{c} (the mean) to constants.
24715
24716 To fit a model with constants substituted for some parameters, just
24717 store suitable values in those parameter variables, then omit them
24718 from the list of parameters when you answer the variables prompt.
24719
24720 @tex
24721 \bigskip
24722 @end tex
24723
24724 A last desperate step would be to use the general-purpose
24725 @code{minimize} function rather than @code{fit}. After all, both
24726 functions solve the problem of minimizing an expression (the
24727 @texline @math{\chi^2}
24728 @infoline @expr{chi^2}
24729 sum) by adjusting certain parameters in the expression. The @kbd{a F}
24730 command is able to use a vastly more efficient algorithm due to its
24731 special knowledge about linear chi-square sums, but the @kbd{a N}
24732 command can do the same thing by brute force.
24733
24734 A compromise would be to pick out a few parameters without which the
24735 fit is linearizable, and use @code{minimize} on a call to @code{fit}
24736 which efficiently takes care of the rest of the parameters. The thing
24737 to be minimized would be the value of
24738 @texline @math{\chi^2}
24739 @infoline @expr{chi^2}
24740 returned as the fifth result of the @code{xfit} function:
24741
24742 @smallexample
24743 minimize(xfit(gaus(a,b,c,d,x), x, [a,b,c], data)_5, d, guess)
24744 @end smallexample
24745
24746 @noindent
24747 where @code{gaus} represents the Gaussian model with background,
24748 @code{data} represents the data matrix, and @code{guess} represents
24749 the initial guess for @expr{d} that @code{minimize} requires.
24750 This operation will only be, shall we say, extraordinarily slow
24751 rather than astronomically slow (as would be the case if @code{minimize}
24752 were used by itself to solve the problem).
24753
24754 @tex
24755 \bigskip
24756 @end tex
24757
24758 The @kbd{I a F} [@code{xfit}] command is somewhat trickier when
24759 nonlinear models are used. The second item in the result is the
24760 vector of ``raw'' parameters @expr{A}, @expr{B}, @expr{C}. The
24761 covariance matrix is written in terms of those raw parameters.
24762 The fifth item is a vector of @dfn{filter} expressions. This
24763 is the empty vector @samp{[]} if the raw parameters were the same
24764 as the requested parameters, i.e., if @expr{A = a}, @expr{B = b},
24765 and so on (which is always true if the model is already linear
24766 in the parameters as written, e.g., for polynomial fits). If the
24767 parameters had to be rearranged, the fifth item is instead a vector
24768 of one formula per parameter in the original model. The raw
24769 parameters are expressed in these ``filter'' formulas as
24770 @samp{fitdummy(1)} for @expr{A}, @samp{fitdummy(2)} for @expr{B},
24771 and so on.
24772
24773 When Calc needs to modify the model to return the result, it replaces
24774 @samp{fitdummy(1)} in all the filters with the first item in the raw
24775 parameters list, and so on for the other raw parameters, then
24776 evaluates the resulting filter formulas to get the actual parameter
24777 values to be substituted into the original model. In the case of
24778 @kbd{H a F} and @kbd{I a F} where the parameters must be error forms,
24779 Calc uses the square roots of the diagonal entries of the covariance
24780 matrix as error values for the raw parameters, then lets Calc's
24781 standard error-form arithmetic take it from there.
24782
24783 If you use @kbd{I a F} with a nonlinear model, be sure to remember
24784 that the covariance matrix is in terms of the raw parameters,
24785 @emph{not} the actual requested parameters. It's up to you to
24786 figure out how to interpret the covariances in the presence of
24787 nontrivial filter functions.
24788
24789 Things are also complicated when the input contains error forms.
24790 Suppose there are three independent and dependent variables, @expr{x},
24791 @expr{y}, and @expr{z}, one or more of which are error forms in the
24792 data. Calc combines all the error values by taking the square root
24793 of the sum of the squares of the errors. It then changes @expr{x}
24794 and @expr{y} to be plain numbers, and makes @expr{z} into an error
24795 form with this combined error. The @expr{Y(x,y,z)} part of the
24796 linearized model is evaluated, and the result should be an error
24797 form. The error part of that result is used for
24798 @texline @math{\sigma_i}
24799 @infoline @expr{sigma_i}
24800 for the data point. If for some reason @expr{Y(x,y,z)} does not return
24801 an error form, the combined error from @expr{z} is used directly for
24802 @texline @math{\sigma_i}.
24803 @infoline @expr{sigma_i}.
24804 Finally, @expr{z} is also stripped of its error
24805 for use in computing @expr{F(x,y,z)}, @expr{G(x,y,z)} and so on;
24806 the righthand side of the linearized model is computed in regular
24807 arithmetic with no error forms.
24808
24809 (While these rules may seem complicated, they are designed to do
24810 the most reasonable thing in the typical case that @expr{Y(x,y,z)}
24811 depends only on the dependent variable @expr{z}, and in fact is
24812 often simply equal to @expr{z}. For common cases like polynomials
24813 and multilinear models, the combined error is simply used as the
24814 @texline @math{\sigma}
24815 @infoline @expr{sigma}
24816 for the data point with no further ado.)
24817
24818 @tex
24819 \bigskip
24820 @end tex
24821
24822 @vindex FitRules
24823 It may be the case that the model you wish to use is linearizable,
24824 but Calc's built-in rules are unable to figure it out. Calc uses
24825 its algebraic rewrite mechanism to linearize a model. The rewrite
24826 rules are kept in the variable @code{FitRules}. You can edit this
24827 variable using the @kbd{s e FitRules} command; in fact, there is
24828 a special @kbd{s F} command just for editing @code{FitRules}.
24829 @xref{Operations on Variables}.
24830
24831 @xref{Rewrite Rules}, for a discussion of rewrite rules.
24832
24833 @ignore
24834 @starindex
24835 @end ignore
24836 @tindex fitvar
24837 @ignore
24838 @starindex
24839 @end ignore
24840 @ignore
24841 @mindex @idots
24842 @end ignore
24843 @tindex fitparam
24844 @ignore
24845 @starindex
24846 @end ignore
24847 @ignore
24848 @mindex @null
24849 @end ignore
24850 @tindex fitmodel
24851 @ignore
24852 @starindex
24853 @end ignore
24854 @ignore
24855 @mindex @null
24856 @end ignore
24857 @tindex fitsystem
24858 @ignore
24859 @starindex
24860 @end ignore
24861 @ignore
24862 @mindex @null
24863 @end ignore
24864 @tindex fitdummy
24865 Calc uses @code{FitRules} as follows. First, it converts the model
24866 to an equation if necessary and encloses the model equation in a
24867 call to the function @code{fitmodel} (which is not actually a defined
24868 function in Calc; it is only used as a placeholder by the rewrite rules).
24869 Parameter variables are renamed to function calls @samp{fitparam(1)},
24870 @samp{fitparam(2)}, and so on, and independent variables are renamed
24871 to @samp{fitvar(1)}, @samp{fitvar(2)}, etc. The dependent variable
24872 is the highest-numbered @code{fitvar}. For example, the power law
24873 model @expr{a x^b} is converted to @expr{y = a x^b}, then to
24874
24875 @smallexample
24876 @group
24877 fitmodel(fitvar(2) = fitparam(1) fitvar(1)^fitparam(2))
24878 @end group
24879 @end smallexample
24880
24881 Calc then applies the rewrites as if by @samp{C-u 0 a r FitRules}.
24882 (The zero prefix means that rewriting should continue until no further
24883 changes are possible.)
24884
24885 When rewriting is complete, the @code{fitmodel} call should have
24886 been replaced by a @code{fitsystem} call that looks like this:
24887
24888 @example
24889 fitsystem(@var{Y}, @var{FGH}, @var{abc})
24890 @end example
24891
24892 @noindent
24893 where @var{Y} is a formula that describes the function @expr{Y(x,y,z)},
24894 @var{FGH} is the vector of formulas @expr{[F(x,y,z), G(x,y,z), H(x,y,z)]},
24895 and @var{abc} is the vector of parameter filters which refer to the
24896 raw parameters as @samp{fitdummy(1)} for @expr{A}, @samp{fitdummy(2)}
24897 for @expr{B}, etc. While the number of raw parameters (the length of
24898 the @var{FGH} vector) is usually the same as the number of original
24899 parameters (the length of the @var{abc} vector), this is not required.
24900
24901 The power law model eventually boils down to
24902
24903 @smallexample
24904 @group
24905 fitsystem(ln(fitvar(2)),
24906 [1, ln(fitvar(1))],
24907 [exp(fitdummy(1)), fitdummy(2)])
24908 @end group
24909 @end smallexample
24910
24911 The actual implementation of @code{FitRules} is complicated; it
24912 proceeds in four phases. First, common rearrangements are done
24913 to try to bring linear terms together and to isolate functions like
24914 @code{exp} and @code{ln} either all the way ``out'' (so that they
24915 can be put into @var{Y}) or all the way ``in'' (so that they can
24916 be put into @var{abc} or @var{FGH}). In particular, all
24917 non-constant powers are converted to logs-and-exponentials form,
24918 and the distributive law is used to expand products of sums.
24919 Quotients are rewritten to use the @samp{fitinv} function, where
24920 @samp{fitinv(x)} represents @expr{1/x} while the @code{FitRules}
24921 are operating. (The use of @code{fitinv} makes recognition of
24922 linear-looking forms easier.) If you modify @code{FitRules}, you
24923 will probably only need to modify the rules for this phase.
24924
24925 Phase two, whose rules can actually also apply during phases one
24926 and three, first rewrites @code{fitmodel} to a two-argument
24927 form @samp{fitmodel(@var{Y}, @var{model})}, where @var{Y} is
24928 initially zero and @var{model} has been changed from @expr{a=b}
24929 to @expr{a-b} form. It then tries to peel off invertible functions
24930 from the outside of @var{model} and put them into @var{Y} instead,
24931 calling the equation solver to invert the functions. Finally, when
24932 this is no longer possible, the @code{fitmodel} is changed to a
24933 four-argument @code{fitsystem}, where the fourth argument is
24934 @var{model} and the @var{FGH} and @var{abc} vectors are initially
24935 empty. (The last vector is really @var{ABC}, corresponding to
24936 raw parameters, for now.)
24937
24938 Phase three converts a sum of items in the @var{model} to a sum
24939 of @samp{fitpart(@var{a}, @var{b}, @var{c})} terms which represent
24940 terms @samp{@var{a}*@var{b}*@var{c}} of the sum, where @var{a}
24941 is all factors that do not involve any variables, @var{b} is all
24942 factors that involve only parameters, and @var{c} is the factors
24943 that involve only independent variables. (If this decomposition
24944 is not possible, the rule set will not complete and Calc will
24945 complain that the model is too complex.) Then @code{fitpart}s
24946 with equal @var{b} or @var{c} components are merged back together
24947 using the distributive law in order to minimize the number of
24948 raw parameters needed.
24949
24950 Phase four moves the @code{fitpart} terms into the @var{FGH} and
24951 @var{ABC} vectors. Also, some of the algebraic expansions that
24952 were done in phase 1 are undone now to make the formulas more
24953 computationally efficient. Finally, it calls the solver one more
24954 time to convert the @var{ABC} vector to an @var{abc} vector, and
24955 removes the fourth @var{model} argument (which by now will be zero)
24956 to obtain the three-argument @code{fitsystem} that the linear
24957 least-squares solver wants to see.
24958
24959 @ignore
24960 @starindex
24961 @end ignore
24962 @ignore
24963 @mindex hasfit@idots
24964 @end ignore
24965 @tindex hasfitparams
24966 @ignore
24967 @starindex
24968 @end ignore
24969 @ignore
24970 @mindex @null
24971 @end ignore
24972 @tindex hasfitvars
24973 Two functions which are useful in connection with @code{FitRules}
24974 are @samp{hasfitparams(x)} and @samp{hasfitvars(x)}, which check
24975 whether @expr{x} refers to any parameters or independent variables,
24976 respectively. Specifically, these functions return ``true'' if the
24977 argument contains any @code{fitparam} (or @code{fitvar}) function
24978 calls, and ``false'' otherwise. (Recall that ``true'' means a
24979 nonzero number, and ``false'' means zero. The actual nonzero number
24980 returned is the largest @var{n} from all the @samp{fitparam(@var{n})}s
24981 or @samp{fitvar(@var{n})}s, respectively, that appear in the formula.)
24982
24983 @tex
24984 \bigskip
24985 @end tex
24986
24987 The @code{fit} function in algebraic notation normally takes four
24988 arguments, @samp{fit(@var{model}, @var{vars}, @var{params}, @var{data})},
24989 where @var{model} is the model formula as it would be typed after
24990 @kbd{a F '}, @var{vars} is the independent variable or a vector of
24991 independent variables, @var{params} likewise gives the parameter(s),
24992 and @var{data} is the data matrix. Note that the length of @var{vars}
24993 must be equal to the number of rows in @var{data} if @var{model} is
24994 an equation, or one less than the number of rows if @var{model} is
24995 a plain formula. (Actually, a name for the dependent variable is
24996 allowed but will be ignored in the plain-formula case.)
24997
24998 If @var{params} is omitted, the parameters are all variables in
24999 @var{model} except those that appear in @var{vars}. If @var{vars}
25000 is also omitted, Calc sorts all the variables that appear in
25001 @var{model} alphabetically and uses the higher ones for @var{vars}
25002 and the lower ones for @var{params}.
25003
25004 Alternatively, @samp{fit(@var{modelvec}, @var{data})} is allowed
25005 where @var{modelvec} is a 2- or 3-vector describing the model
25006 and variables, as discussed previously.
25007
25008 If Calc is unable to do the fit, the @code{fit} function is left
25009 in symbolic form, ordinarily with an explanatory message. The
25010 message will be ``Model expression is too complex'' if the
25011 linearizer was unable to put the model into the required form.
25012
25013 The @code{efit} (corresponding to @kbd{H a F}) and @code{xfit}
25014 (for @kbd{I a F}) functions are completely analogous.
25015
25016 @node Interpolation, , Curve Fitting Details, Curve Fitting
25017 @subsection Polynomial Interpolation
25018
25019 @kindex a p
25020 @pindex calc-poly-interp
25021 @tindex polint
25022 The @kbd{a p} (@code{calc-poly-interp}) [@code{polint}] command does
25023 a polynomial interpolation at a particular @expr{x} value. It takes
25024 two arguments from the stack: A data matrix of the sort used by
25025 @kbd{a F}, and a single number which represents the desired @expr{x}
25026 value. Calc effectively does an exact polynomial fit as if by @kbd{a F i},
25027 then substitutes the @expr{x} value into the result in order to get an
25028 approximate @expr{y} value based on the fit. (Calc does not actually
25029 use @kbd{a F i}, however; it uses a direct method which is both more
25030 efficient and more numerically stable.)
25031
25032 The result of @kbd{a p} is actually a vector of two values: The @expr{y}
25033 value approximation, and an error measure @expr{dy} that reflects Calc's
25034 estimation of the probable error of the approximation at that value of
25035 @expr{x}. If the input @expr{x} is equal to any of the @expr{x} values
25036 in the data matrix, the output @expr{y} will be the corresponding @expr{y}
25037 value from the matrix, and the output @expr{dy} will be exactly zero.
25038
25039 A prefix argument of 2 causes @kbd{a p} to take separate x- and
25040 y-vectors from the stack instead of one data matrix.
25041
25042 If @expr{x} is a vector of numbers, @kbd{a p} will return a matrix of
25043 interpolated results for each of those @expr{x} values. (The matrix will
25044 have two columns, the @expr{y} values and the @expr{dy} values.)
25045 If @expr{x} is a formula instead of a number, the @code{polint} function
25046 remains in symbolic form; use the @kbd{a "} command to expand it out to
25047 a formula that describes the fit in symbolic terms.
25048
25049 In all cases, the @kbd{a p} command leaves the data vectors or matrix
25050 on the stack. Only the @expr{x} value is replaced by the result.
25051
25052 @kindex H a p
25053 @tindex ratint
25054 The @kbd{H a p} [@code{ratint}] command does a rational function
25055 interpolation. It is used exactly like @kbd{a p}, except that it
25056 uses as its model the quotient of two polynomials. If there are
25057 @expr{N} data points, the numerator and denominator polynomials will
25058 each have degree @expr{N/2} (if @expr{N} is odd, the denominator will
25059 have degree one higher than the numerator).
25060
25061 Rational approximations have the advantage that they can accurately
25062 describe functions that have poles (points at which the function's value
25063 goes to infinity, so that the denominator polynomial of the approximation
25064 goes to zero). If @expr{x} corresponds to a pole of the fitted rational
25065 function, then the result will be a division by zero. If Infinite mode
25066 is enabled, the result will be @samp{[uinf, uinf]}.
25067
25068 There is no way to get the actual coefficients of the rational function
25069 used by @kbd{H a p}. (The algorithm never generates these coefficients
25070 explicitly, and quotients of polynomials are beyond @w{@kbd{a F}}'s
25071 capabilities to fit.)
25072
25073 @node Summations, Logical Operations, Curve Fitting, Algebra
25074 @section Summations
25075
25076 @noindent
25077 @cindex Summation of a series
25078 @kindex a +
25079 @pindex calc-summation
25080 @tindex sum
25081 The @kbd{a +} (@code{calc-summation}) [@code{sum}] command computes
25082 the sum of a formula over a certain range of index values. The formula
25083 is taken from the top of the stack; the command prompts for the
25084 name of the summation index variable, the lower limit of the
25085 sum (any formula), and the upper limit of the sum. If you
25086 enter a blank line at any of these prompts, that prompt and
25087 any later ones are answered by reading additional elements from
25088 the stack. Thus, @kbd{' k^2 @key{RET} ' k @key{RET} 1 @key{RET} 5 @key{RET} a + @key{RET}}
25089 produces the result 55.
25090 @tex
25091 \turnoffactive
25092 $$ \sum_{k=1}^5 k^2 = 55 $$
25093 @end tex
25094
25095 The choice of index variable is arbitrary, but it's best not to
25096 use a variable with a stored value. In particular, while
25097 @code{i} is often a favorite index variable, it should be avoided
25098 in Calc because @code{i} has the imaginary constant @expr{(0, 1)}
25099 as a value. If you pressed @kbd{=} on a sum over @code{i}, it would
25100 be changed to a nonsensical sum over the ``variable'' @expr{(0, 1)}!
25101 If you really want to use @code{i} as an index variable, use
25102 @w{@kbd{s u i @key{RET}}} first to ``unstore'' this variable.
25103 (@xref{Storing Variables}.)
25104
25105 A numeric prefix argument steps the index by that amount rather
25106 than by one. Thus @kbd{' a_k @key{RET} C-u -2 a + k @key{RET} 10 @key{RET} 0 @key{RET}}
25107 yields @samp{a_10 + a_8 + a_6 + a_4 + a_2 + a_0}. A prefix
25108 argument of plain @kbd{C-u} causes @kbd{a +} to prompt for the
25109 step value, in which case you can enter any formula or enter
25110 a blank line to take the step value from the stack. With the
25111 @kbd{C-u} prefix, @kbd{a +} can take up to five arguments from
25112 the stack: The formula, the variable, the lower limit, the
25113 upper limit, and (at the top of the stack), the step value.
25114
25115 Calc knows how to do certain sums in closed form. For example,
25116 @samp{sum(6 k^2, k, 1, n) = @w{2 n^3} + 3 n^2 + n}. In particular,
25117 this is possible if the formula being summed is polynomial or
25118 exponential in the index variable. Sums of logarithms are
25119 transformed into logarithms of products. Sums of trigonometric
25120 and hyperbolic functions are transformed to sums of exponentials
25121 and then done in closed form. Also, of course, sums in which the
25122 lower and upper limits are both numbers can always be evaluated
25123 just by grinding them out, although Calc will use closed forms
25124 whenever it can for the sake of efficiency.
25125
25126 The notation for sums in algebraic formulas is
25127 @samp{sum(@var{expr}, @var{var}, @var{low}, @var{high}, @var{step})}.
25128 If @var{step} is omitted, it defaults to one. If @var{high} is
25129 omitted, @var{low} is actually the upper limit and the lower limit
25130 is one. If @var{low} is also omitted, the limits are @samp{-inf}
25131 and @samp{inf}, respectively.
25132
25133 Infinite sums can sometimes be evaluated: @samp{sum(.5^k, k, 1, inf)}
25134 returns @expr{1}. This is done by evaluating the sum in closed
25135 form (to @samp{1. - 0.5^n} in this case), then evaluating this
25136 formula with @code{n} set to @code{inf}. Calc's usual rules
25137 for ``infinite'' arithmetic can find the answer from there. If
25138 infinite arithmetic yields a @samp{nan}, or if the sum cannot be
25139 solved in closed form, Calc leaves the @code{sum} function in
25140 symbolic form. @xref{Infinities}.
25141
25142 As a special feature, if the limits are infinite (or omitted, as
25143 described above) but the formula includes vectors subscripted by
25144 expressions that involve the iteration variable, Calc narrows
25145 the limits to include only the range of integers which result in
25146 legal subscripts for the vector. For example, the sum
25147 @samp{sum(k [a,b,c,d,e,f,g]_(2k),k)} evaluates to @samp{b + 2 d + 3 f}.
25148
25149 The limits of a sum do not need to be integers. For example,
25150 @samp{sum(a_k, k, 0, 2 n, n)} produces @samp{a_0 + a_n + a_(2 n)}.
25151 Calc computes the number of iterations using the formula
25152 @samp{1 + (@var{high} - @var{low}) / @var{step}}, which must,
25153 after simplification as if by @kbd{a s}, evaluate to an integer.
25154
25155 If the number of iterations according to the above formula does
25156 not come out to an integer, the sum is illegal and will be left
25157 in symbolic form. However, closed forms are still supplied, and
25158 you are on your honor not to misuse the resulting formulas by
25159 substituting mismatched bounds into them. For example,
25160 @samp{sum(k, k, 1, 10, 2)} is invalid, but Calc will go ahead and
25161 evaluate the closed form solution for the limits 1 and 10 to get
25162 the rather dubious answer, 29.25.
25163
25164 If the lower limit is greater than the upper limit (assuming a
25165 positive step size), the result is generally zero. However,
25166 Calc only guarantees a zero result when the upper limit is
25167 exactly one step less than the lower limit, i.e., if the number
25168 of iterations is @mathit{-1}. Thus @samp{sum(f(k), k, n, n-1)} is zero
25169 but the sum from @samp{n} to @samp{n-2} may report a nonzero value
25170 if Calc used a closed form solution.
25171
25172 Calc's logical predicates like @expr{a < b} return 1 for ``true''
25173 and 0 for ``false.'' @xref{Logical Operations}. This can be
25174 used to advantage for building conditional sums. For example,
25175 @samp{sum(prime(k)*k^2, k, 1, 20)} is the sum of the squares of all
25176 prime numbers from 1 to 20; the @code{prime} predicate returns 1 if
25177 its argument is prime and 0 otherwise. You can read this expression
25178 as ``the sum of @expr{k^2}, where @expr{k} is prime.'' Indeed,
25179 @samp{sum(prime(k)*k^2, k)} would represent the sum of @emph{all} primes
25180 squared, since the limits default to plus and minus infinity, but
25181 there are no such sums that Calc's built-in rules can do in
25182 closed form.
25183
25184 As another example, @samp{sum((k != k_0) * f(k), k, 1, n)} is the
25185 sum of @expr{f(k)} for all @expr{k} from 1 to @expr{n}, excluding
25186 one value @expr{k_0}. Slightly more tricky is the summand
25187 @samp{(k != k_0) / (k - k_0)}, which is an attempt to describe
25188 the sum of all @expr{1/(k-k_0)} except at @expr{k = k_0}, where
25189 this would be a division by zero. But at @expr{k = k_0}, this
25190 formula works out to the indeterminate form @expr{0 / 0}, which
25191 Calc will not assume is zero. Better would be to use
25192 @samp{(k != k_0) ? 1/(k-k_0) : 0}; the @samp{? :} operator does
25193 an ``if-then-else'' test: This expression says, ``if
25194 @texline @math{k \ne k_0},
25195 @infoline @expr{k != k_0},
25196 then @expr{1/(k-k_0)}, else zero.'' Now the formula @expr{1/(k-k_0)}
25197 will not even be evaluated by Calc when @expr{k = k_0}.
25198
25199 @cindex Alternating sums
25200 @kindex a -
25201 @pindex calc-alt-summation
25202 @tindex asum
25203 The @kbd{a -} (@code{calc-alt-summation}) [@code{asum}] command
25204 computes an alternating sum. Successive terms of the sequence
25205 are given alternating signs, with the first term (corresponding
25206 to the lower index value) being positive. Alternating sums
25207 are converted to normal sums with an extra term of the form
25208 @samp{(-1)^(k-@var{low})}. This formula is adjusted appropriately
25209 if the step value is other than one. For example, the Taylor
25210 series for the sine function is @samp{asum(x^k / k!, k, 1, inf, 2)}.
25211 (Calc cannot evaluate this infinite series, but it can approximate
25212 it if you replace @code{inf} with any particular odd number.)
25213 Calc converts this series to a regular sum with a step of one,
25214 namely @samp{sum((-1)^k x^(2k+1) / (2k+1)!, k, 0, inf)}.
25215
25216 @cindex Product of a sequence
25217 @kindex a *
25218 @pindex calc-product
25219 @tindex prod
25220 The @kbd{a *} (@code{calc-product}) [@code{prod}] command is
25221 the analogous way to take a product of many terms. Calc also knows
25222 some closed forms for products, such as @samp{prod(k, k, 1, n) = n!}.
25223 Conditional products can be written @samp{prod(k^prime(k), k, 1, n)}
25224 or @samp{prod(prime(k) ? k : 1, k, 1, n)}.
25225
25226 @kindex a T
25227 @pindex calc-tabulate
25228 @tindex table
25229 The @kbd{a T} (@code{calc-tabulate}) [@code{table}] command
25230 evaluates a formula at a series of iterated index values, just
25231 like @code{sum} and @code{prod}, but its result is simply a
25232 vector of the results. For example, @samp{table(a_i, i, 1, 7, 2)}
25233 produces @samp{[a_1, a_3, a_5, a_7]}.
25234
25235 @node Logical Operations, Rewrite Rules, Summations, Algebra
25236 @section Logical Operations
25237
25238 @noindent
25239 The following commands and algebraic functions return true/false values,
25240 where 1 represents ``true'' and 0 represents ``false.'' In cases where
25241 a truth value is required (such as for the condition part of a rewrite
25242 rule, or as the condition for a @w{@kbd{Z [ Z ]}} control structure), any
25243 nonzero value is accepted to mean ``true.'' (Specifically, anything
25244 for which @code{dnonzero} returns 1 is ``true,'' and anything for
25245 which @code{dnonzero} returns 0 or cannot decide is assumed ``false.''
25246 Note that this means that @w{@kbd{Z [ Z ]}} will execute the ``then''
25247 portion if its condition is provably true, but it will execute the
25248 ``else'' portion for any condition like @expr{a = b} that is not
25249 provably true, even if it might be true. Algebraic functions that
25250 have conditions as arguments, like @code{? :} and @code{&&}, remain
25251 unevaluated if the condition is neither provably true nor provably
25252 false. @xref{Declarations}.)
25253
25254 @kindex a =
25255 @pindex calc-equal-to
25256 @tindex eq
25257 @tindex =
25258 @tindex ==
25259 The @kbd{a =} (@code{calc-equal-to}) command, or @samp{eq(a,b)} function
25260 (which can also be written @samp{a = b} or @samp{a == b} in an algebraic
25261 formula) is true if @expr{a} and @expr{b} are equal, either because they
25262 are identical expressions, or because they are numbers which are
25263 numerically equal. (Thus the integer 1 is considered equal to the float
25264 1.0.) If the equality of @expr{a} and @expr{b} cannot be determined,
25265 the comparison is left in symbolic form. Note that as a command, this
25266 operation pops two values from the stack and pushes back either a 1 or
25267 a 0, or a formula @samp{a = b} if the values' equality cannot be determined.
25268
25269 Many Calc commands use @samp{=} formulas to represent @dfn{equations}.
25270 For example, the @kbd{a S} (@code{calc-solve-for}) command rearranges
25271 an equation to solve for a given variable. The @kbd{a M}
25272 (@code{calc-map-equation}) command can be used to apply any
25273 function to both sides of an equation; for example, @kbd{2 a M *}
25274 multiplies both sides of the equation by two. Note that just
25275 @kbd{2 *} would not do the same thing; it would produce the formula
25276 @samp{2 (a = b)} which represents 2 if the equality is true or
25277 zero if not.
25278
25279 The @code{eq} function with more than two arguments (e.g., @kbd{C-u 3 a =}
25280 or @samp{a = b = c}) tests if all of its arguments are equal. In
25281 algebraic notation, the @samp{=} operator is unusual in that it is
25282 neither left- nor right-associative: @samp{a = b = c} is not the
25283 same as @samp{(a = b) = c} or @samp{a = (b = c)} (which each compare
25284 one variable with the 1 or 0 that results from comparing two other
25285 variables).
25286
25287 @kindex a #
25288 @pindex calc-not-equal-to
25289 @tindex neq
25290 @tindex !=
25291 The @kbd{a #} (@code{calc-not-equal-to}) command, or @samp{neq(a,b)} or
25292 @samp{a != b} function, is true if @expr{a} and @expr{b} are not equal.
25293 This also works with more than two arguments; @samp{a != b != c != d}
25294 tests that all four of @expr{a}, @expr{b}, @expr{c}, and @expr{d} are
25295 distinct numbers.
25296
25297 @kindex a <
25298 @tindex lt
25299 @ignore
25300 @mindex @idots
25301 @end ignore
25302 @kindex a >
25303 @ignore
25304 @mindex @null
25305 @end ignore
25306 @kindex a [
25307 @ignore
25308 @mindex @null
25309 @end ignore
25310 @kindex a ]
25311 @pindex calc-less-than
25312 @pindex calc-greater-than
25313 @pindex calc-less-equal
25314 @pindex calc-greater-equal
25315 @ignore
25316 @mindex @null
25317 @end ignore
25318 @tindex gt
25319 @ignore
25320 @mindex @null
25321 @end ignore
25322 @tindex leq
25323 @ignore
25324 @mindex @null
25325 @end ignore
25326 @tindex geq
25327 @ignore
25328 @mindex @null
25329 @end ignore
25330 @tindex <
25331 @ignore
25332 @mindex @null
25333 @end ignore
25334 @tindex >
25335 @ignore
25336 @mindex @null
25337 @end ignore
25338 @tindex <=
25339 @ignore
25340 @mindex @null
25341 @end ignore
25342 @tindex >=
25343 The @kbd{a <} (@code{calc-less-than}) [@samp{lt(a,b)} or @samp{a < b}]
25344 operation is true if @expr{a} is less than @expr{b}. Similar functions
25345 are @kbd{a >} (@code{calc-greater-than}) [@samp{gt(a,b)} or @samp{a > b}],
25346 @kbd{a [} (@code{calc-less-equal}) [@samp{leq(a,b)} or @samp{a <= b}], and
25347 @kbd{a ]} (@code{calc-greater-equal}) [@samp{geq(a,b)} or @samp{a >= b}].
25348
25349 While the inequality functions like @code{lt} do not accept more
25350 than two arguments, the syntax @w{@samp{a <= b < c}} is translated to an
25351 equivalent expression involving intervals: @samp{b in [a .. c)}.
25352 (See the description of @code{in} below.) All four combinations
25353 of @samp{<} and @samp{<=} are allowed, or any of the four combinations
25354 of @samp{>} and @samp{>=}. Four-argument constructions like
25355 @samp{a < b < c < d}, and mixtures like @w{@samp{a < b = c}} that
25356 involve both equalities and inequalities, are not allowed.
25357
25358 @kindex a .
25359 @pindex calc-remove-equal
25360 @tindex rmeq
25361 The @kbd{a .} (@code{calc-remove-equal}) [@code{rmeq}] command extracts
25362 the righthand side of the equation or inequality on the top of the
25363 stack. It also works elementwise on vectors. For example, if
25364 @samp{[x = 2.34, y = z / 2]} is on the stack, then @kbd{a .} produces
25365 @samp{[2.34, z / 2]}. As a special case, if the righthand side is a
25366 variable and the lefthand side is a number (as in @samp{2.34 = x}), then
25367 Calc keeps the lefthand side instead. Finally, this command works with
25368 assignments @samp{x := 2.34} as well as equations, always taking the
25369 the righthand side, and for @samp{=>} (evaluates-to) operators, always
25370 taking the lefthand side.
25371
25372 @kindex a &
25373 @pindex calc-logical-and
25374 @tindex land
25375 @tindex &&
25376 The @kbd{a &} (@code{calc-logical-and}) [@samp{land(a,b)} or @samp{a && b}]
25377 function is true if both of its arguments are true, i.e., are
25378 non-zero numbers. In this case, the result will be either @expr{a} or
25379 @expr{b}, chosen arbitrarily. If either argument is zero, the result is
25380 zero. Otherwise, the formula is left in symbolic form.
25381
25382 @kindex a |
25383 @pindex calc-logical-or
25384 @tindex lor
25385 @tindex ||
25386 The @kbd{a |} (@code{calc-logical-or}) [@samp{lor(a,b)} or @samp{a || b}]
25387 function is true if either or both of its arguments are true (nonzero).
25388 The result is whichever argument was nonzero, choosing arbitrarily if both
25389 are nonzero. If both @expr{a} and @expr{b} are zero, the result is
25390 zero.
25391
25392 @kindex a !
25393 @pindex calc-logical-not
25394 @tindex lnot
25395 @tindex !
25396 The @kbd{a !} (@code{calc-logical-not}) [@samp{lnot(a)} or @samp{!@: a}]
25397 function is true if @expr{a} is false (zero), or false if @expr{a} is
25398 true (nonzero). It is left in symbolic form if @expr{a} is not a
25399 number.
25400
25401 @kindex a :
25402 @pindex calc-logical-if
25403 @tindex if
25404 @ignore
25405 @mindex ? :
25406 @end ignore
25407 @tindex ?
25408 @ignore
25409 @mindex @null
25410 @end ignore
25411 @tindex :
25412 @cindex Arguments, not evaluated
25413 The @kbd{a :} (@code{calc-logical-if}) [@samp{if(a,b,c)} or @samp{a ? b :@: c}]
25414 function is equal to either @expr{b} or @expr{c} if @expr{a} is a nonzero
25415 number or zero, respectively. If @expr{a} is not a number, the test is
25416 left in symbolic form and neither @expr{b} nor @expr{c} is evaluated in
25417 any way. In algebraic formulas, this is one of the few Calc functions
25418 whose arguments are not automatically evaluated when the function itself
25419 is evaluated. The others are @code{lambda}, @code{quote}, and
25420 @code{condition}.
25421
25422 One minor surprise to watch out for is that the formula @samp{a?3:4}
25423 will not work because the @samp{3:4} is parsed as a fraction instead of
25424 as three separate symbols. Type something like @samp{a ? 3 : 4} or
25425 @samp{a?(3):4} instead.
25426
25427 As a special case, if @expr{a} evaluates to a vector, then both @expr{b}
25428 and @expr{c} are evaluated; the result is a vector of the same length
25429 as @expr{a} whose elements are chosen from corresponding elements of
25430 @expr{b} and @expr{c} according to whether each element of @expr{a}
25431 is zero or nonzero. Each of @expr{b} and @expr{c} must be either a
25432 vector of the same length as @expr{a}, or a non-vector which is matched
25433 with all elements of @expr{a}.
25434
25435 @kindex a @{
25436 @pindex calc-in-set
25437 @tindex in
25438 The @kbd{a @{} (@code{calc-in-set}) [@samp{in(a,b)}] function is true if
25439 the number @expr{a} is in the set of numbers represented by @expr{b}.
25440 If @expr{b} is an interval form, @expr{a} must be one of the values
25441 encompassed by the interval. If @expr{b} is a vector, @expr{a} must be
25442 equal to one of the elements of the vector. (If any vector elements are
25443 intervals, @expr{a} must be in any of the intervals.) If @expr{b} is a
25444 plain number, @expr{a} must be numerically equal to @expr{b}.
25445 @xref{Set Operations}, for a group of commands that manipulate sets
25446 of this sort.
25447
25448 @ignore
25449 @starindex
25450 @end ignore
25451 @tindex typeof
25452 The @samp{typeof(a)} function produces an integer or variable which
25453 characterizes @expr{a}. If @expr{a} is a number, vector, or variable,
25454 the result will be one of the following numbers:
25455
25456 @example
25457 1 Integer
25458 2 Fraction
25459 3 Floating-point number
25460 4 HMS form
25461 5 Rectangular complex number
25462 6 Polar complex number
25463 7 Error form
25464 8 Interval form
25465 9 Modulo form
25466 10 Date-only form
25467 11 Date/time form
25468 12 Infinity (inf, uinf, or nan)
25469 100 Variable
25470 101 Vector (but not a matrix)
25471 102 Matrix
25472 @end example
25473
25474 Otherwise, @expr{a} is a formula, and the result is a variable which
25475 represents the name of the top-level function call.
25476
25477 @ignore
25478 @starindex
25479 @end ignore
25480 @tindex integer
25481 @ignore
25482 @starindex
25483 @end ignore
25484 @tindex real
25485 @ignore
25486 @starindex
25487 @end ignore
25488 @tindex constant
25489 The @samp{integer(a)} function returns true if @expr{a} is an integer.
25490 The @samp{real(a)} function
25491 is true if @expr{a} is a real number, either integer, fraction, or
25492 float. The @samp{constant(a)} function returns true if @expr{a} is
25493 any of the objects for which @code{typeof} would produce an integer
25494 code result except for variables, and provided that the components of
25495 an object like a vector or error form are themselves constant.
25496 Note that infinities do not satisfy any of these tests, nor do
25497 special constants like @code{pi} and @code{e}.
25498
25499 @xref{Declarations}, for a set of similar functions that recognize
25500 formulas as well as actual numbers. For example, @samp{dint(floor(x))}
25501 is true because @samp{floor(x)} is provably integer-valued, but
25502 @samp{integer(floor(x))} does not because @samp{floor(x)} is not
25503 literally an integer constant.
25504
25505 @ignore
25506 @starindex
25507 @end ignore
25508 @tindex refers
25509 The @samp{refers(a,b)} function is true if the variable (or sub-expression)
25510 @expr{b} appears in @expr{a}, or false otherwise. Unlike the other
25511 tests described here, this function returns a definite ``no'' answer
25512 even if its arguments are still in symbolic form. The only case where
25513 @code{refers} will be left unevaluated is if @expr{a} is a plain
25514 variable (different from @expr{b}).
25515
25516 @ignore
25517 @starindex
25518 @end ignore
25519 @tindex negative
25520 The @samp{negative(a)} function returns true if @expr{a} ``looks'' negative,
25521 because it is a negative number, because it is of the form @expr{-x},
25522 or because it is a product or quotient with a term that looks negative.
25523 This is most useful in rewrite rules. Beware that @samp{negative(a)}
25524 evaluates to 1 or 0 for @emph{any} argument @expr{a}, so it can only
25525 be stored in a formula if the default simplifications are turned off
25526 first with @kbd{m O} (or if it appears in an unevaluated context such
25527 as a rewrite rule condition).
25528
25529 @ignore
25530 @starindex
25531 @end ignore
25532 @tindex variable
25533 The @samp{variable(a)} function is true if @expr{a} is a variable,
25534 or false if not. If @expr{a} is a function call, this test is left
25535 in symbolic form. Built-in variables like @code{pi} and @code{inf}
25536 are considered variables like any others by this test.
25537
25538 @ignore
25539 @starindex
25540 @end ignore
25541 @tindex nonvar
25542 The @samp{nonvar(a)} function is true if @expr{a} is a non-variable.
25543 If its argument is a variable it is left unsimplified; it never
25544 actually returns zero. However, since Calc's condition-testing
25545 commands consider ``false'' anything not provably true, this is
25546 often good enough.
25547
25548 @ignore
25549 @starindex
25550 @end ignore
25551 @tindex lin
25552 @ignore
25553 @starindex
25554 @end ignore
25555 @tindex linnt
25556 @ignore
25557 @starindex
25558 @end ignore
25559 @tindex islin
25560 @ignore
25561 @starindex
25562 @end ignore
25563 @tindex islinnt
25564 @cindex Linearity testing
25565 The functions @code{lin}, @code{linnt}, @code{islin}, and @code{islinnt}
25566 check if an expression is ``linear,'' i.e., can be written in the form
25567 @expr{a + b x} for some constants @expr{a} and @expr{b}, and some
25568 variable or subformula @expr{x}. The function @samp{islin(f,x)} checks
25569 if formula @expr{f} is linear in @expr{x}, returning 1 if so. For
25570 example, @samp{islin(x,x)}, @samp{islin(-x,x)}, @samp{islin(3,x)}, and
25571 @samp{islin(x y / 3 - 2, x)} all return 1. The @samp{lin(f,x)} function
25572 is similar, except that instead of returning 1 it returns the vector
25573 @expr{[a, b, x]}. For the above examples, this vector would be
25574 @expr{[0, 1, x]}, @expr{[0, -1, x]}, @expr{[3, 0, x]}, and
25575 @expr{[-2, y/3, x]}, respectively. Both @code{lin} and @code{islin}
25576 generally remain unevaluated for expressions which are not linear,
25577 e.g., @samp{lin(2 x^2, x)} and @samp{lin(sin(x), x)}. The second
25578 argument can also be a formula; @samp{islin(2 + 3 sin(x), sin(x))}
25579 returns true.
25580
25581 The @code{linnt} and @code{islinnt} functions perform a similar check,
25582 but require a ``non-trivial'' linear form, which means that the
25583 @expr{b} coefficient must be non-zero. For example, @samp{lin(2,x)}
25584 returns @expr{[2, 0, x]} and @samp{lin(y,x)} returns @expr{[y, 0, x]},
25585 but @samp{linnt(2,x)} and @samp{linnt(y,x)} are left unevaluated
25586 (in other words, these formulas are considered to be only ``trivially''
25587 linear in @expr{x}).
25588
25589 All four linearity-testing functions allow you to omit the second
25590 argument, in which case the input may be linear in any non-constant
25591 formula. Here, the @expr{a=0}, @expr{b=1} case is also considered
25592 trivial, and only constant values for @expr{a} and @expr{b} are
25593 recognized. Thus, @samp{lin(2 x y)} returns @expr{[0, 2, x y]},
25594 @samp{lin(2 - x y)} returns @expr{[2, -1, x y]}, and @samp{lin(x y)}
25595 returns @expr{[0, 1, x y]}. The @code{linnt} function would allow the
25596 first two cases but not the third. Also, neither @code{lin} nor
25597 @code{linnt} accept plain constants as linear in the one-argument
25598 case: @samp{islin(2,x)} is true, but @samp{islin(2)} is false.
25599
25600 @ignore
25601 @starindex
25602 @end ignore
25603 @tindex istrue
25604 The @samp{istrue(a)} function returns 1 if @expr{a} is a nonzero
25605 number or provably nonzero formula, or 0 if @expr{a} is anything else.
25606 Calls to @code{istrue} can only be manipulated if @kbd{m O} mode is
25607 used to make sure they are not evaluated prematurely. (Note that
25608 declarations are used when deciding whether a formula is true;
25609 @code{istrue} returns 1 when @code{dnonzero} would return 1, and
25610 it returns 0 when @code{dnonzero} would return 0 or leave itself
25611 in symbolic form.)
25612
25613 @node Rewrite Rules, , Logical Operations, Algebra
25614 @section Rewrite Rules
25615
25616 @noindent
25617 @cindex Rewrite rules
25618 @cindex Transformations
25619 @cindex Pattern matching
25620 @kindex a r
25621 @pindex calc-rewrite
25622 @tindex rewrite
25623 The @kbd{a r} (@code{calc-rewrite}) [@code{rewrite}] command makes
25624 substitutions in a formula according to a specified pattern or patterns
25625 known as @dfn{rewrite rules}. Whereas @kbd{a b} (@code{calc-substitute})
25626 matches literally, so that substituting @samp{sin(x)} with @samp{cos(x)}
25627 matches only the @code{sin} function applied to the variable @code{x},
25628 rewrite rules match general kinds of formulas; rewriting using the rule
25629 @samp{sin(x) := cos(x)} matches @code{sin} of any argument and replaces
25630 it with @code{cos} of that same argument. The only significance of the
25631 name @code{x} is that the same name is used on both sides of the rule.
25632
25633 Rewrite rules rearrange formulas already in Calc's memory.
25634 @xref{Syntax Tables}, to read about @dfn{syntax rules}, which are
25635 similar to algebraic rewrite rules but operate when new algebraic
25636 entries are being parsed, converting strings of characters into
25637 Calc formulas.
25638
25639 @menu
25640 * Entering Rewrite Rules::
25641 * Basic Rewrite Rules::
25642 * Conditional Rewrite Rules::
25643 * Algebraic Properties of Rewrite Rules::
25644 * Other Features of Rewrite Rules::
25645 * Composing Patterns in Rewrite Rules::
25646 * Nested Formulas with Rewrite Rules::
25647 * Multi-Phase Rewrite Rules::
25648 * Selections with Rewrite Rules::
25649 * Matching Commands::
25650 * Automatic Rewrites::
25651 * Debugging Rewrites::
25652 * Examples of Rewrite Rules::
25653 @end menu
25654
25655 @node Entering Rewrite Rules, Basic Rewrite Rules, Rewrite Rules, Rewrite Rules
25656 @subsection Entering Rewrite Rules
25657
25658 @noindent
25659 Rewrite rules normally use the ``assignment'' operator
25660 @samp{@var{old} := @var{new}}.
25661 This operator is equivalent to the function call @samp{assign(old, new)}.
25662 The @code{assign} function is undefined by itself in Calc, so an
25663 assignment formula such as a rewrite rule will be left alone by ordinary
25664 Calc commands. But certain commands, like the rewrite system, interpret
25665 assignments in special ways.
25666
25667 For example, the rule @samp{sin(x)^2 := 1-cos(x)^2} says to replace
25668 every occurrence of the sine of something, squared, with one minus the
25669 square of the cosine of that same thing. All by itself as a formula
25670 on the stack it does nothing, but when given to the @kbd{a r} command
25671 it turns that command into a sine-squared-to-cosine-squared converter.
25672
25673 To specify a set of rules to be applied all at once, make a vector of
25674 rules.
25675
25676 When @kbd{a r} prompts you to enter the rewrite rules, you can answer
25677 in several ways:
25678
25679 @enumerate
25680 @item
25681 With a rule: @kbd{f(x) := g(x) @key{RET}}.
25682 @item
25683 With a vector of rules: @kbd{[f1(x) := g1(x), f2(x) := g2(x)] @key{RET}}.
25684 (You can omit the enclosing square brackets if you wish.)
25685 @item
25686 With the name of a variable that contains the rule or rules vector:
25687 @kbd{myrules @key{RET}}.
25688 @item
25689 With any formula except a rule, a vector, or a variable name; this
25690 will be interpreted as the @var{old} half of a rewrite rule,
25691 and you will be prompted a second time for the @var{new} half:
25692 @kbd{f(x) @key{RET} g(x) @key{RET}}.
25693 @item
25694 With a blank line, in which case the rule, rules vector, or variable
25695 will be taken from the top of the stack (and the formula to be
25696 rewritten will come from the second-to-top position).
25697 @end enumerate
25698
25699 If you enter the rules directly (as opposed to using rules stored
25700 in a variable), those rules will be put into the Trail so that you
25701 can retrieve them later. @xref{Trail Commands}.
25702
25703 It is most convenient to store rules you use often in a variable and
25704 invoke them by giving the variable name. The @kbd{s e}
25705 (@code{calc-edit-variable}) command is an easy way to create or edit a
25706 rule set stored in a variable. You may also wish to use @kbd{s p}
25707 (@code{calc-permanent-variable}) to save your rules permanently;
25708 @pxref{Operations on Variables}.
25709
25710 Rewrite rules are compiled into a special internal form for faster
25711 matching. If you enter a rule set directly it must be recompiled
25712 every time. If you store the rules in a variable and refer to them
25713 through that variable, they will be compiled once and saved away
25714 along with the variable for later reference. This is another good
25715 reason to store your rules in a variable.
25716
25717 Calc also accepts an obsolete notation for rules, as vectors
25718 @samp{[@var{old}, @var{new}]}. But because it is easily confused with a
25719 vector of two rules, the use of this notation is no longer recommended.
25720
25721 @node Basic Rewrite Rules, Conditional Rewrite Rules, Entering Rewrite Rules, Rewrite Rules
25722 @subsection Basic Rewrite Rules
25723
25724 @noindent
25725 To match a particular formula @expr{x} with a particular rewrite rule
25726 @samp{@var{old} := @var{new}}, Calc compares the structure of @expr{x} with
25727 the structure of @var{old}. Variables that appear in @var{old} are
25728 treated as @dfn{meta-variables}; the corresponding positions in @expr{x}
25729 may contain any sub-formulas. For example, the pattern @samp{f(x,y)}
25730 would match the expression @samp{f(12, a+1)} with the meta-variable
25731 @samp{x} corresponding to 12 and with @samp{y} corresponding to
25732 @samp{a+1}. However, this pattern would not match @samp{f(12)} or
25733 @samp{g(12, a+1)}, since there is no assignment of the meta-variables
25734 that will make the pattern match these expressions. Notice that if
25735 the pattern is a single meta-variable, it will match any expression.
25736
25737 If a given meta-variable appears more than once in @var{old}, the
25738 corresponding sub-formulas of @expr{x} must be identical. Thus
25739 the pattern @samp{f(x,x)} would match @samp{f(12, 12)} and
25740 @samp{f(a+1, a+1)} but not @samp{f(12, a+1)} or @samp{f(a+b, b+a)}.
25741 (@xref{Conditional Rewrite Rules}, for a way to match the latter.)
25742
25743 Things other than variables must match exactly between the pattern
25744 and the target formula. To match a particular variable exactly, use
25745 the pseudo-function @samp{quote(v)} in the pattern. For example, the
25746 pattern @samp{x+quote(y)} matches @samp{x+y}, @samp{2+y}, or
25747 @samp{sin(a)+y}.
25748
25749 The special variable names @samp{e}, @samp{pi}, @samp{i}, @samp{phi},
25750 @samp{gamma}, @samp{inf}, @samp{uinf}, and @samp{nan} always match
25751 literally. Thus the pattern @samp{sin(d + e + f)} acts exactly like
25752 @samp{sin(d + quote(e) + f)}.
25753
25754 If the @var{old} pattern is found to match a given formula, that
25755 formula is replaced by @var{new}, where any occurrences in @var{new}
25756 of meta-variables from the pattern are replaced with the sub-formulas
25757 that they matched. Thus, applying the rule @samp{f(x,y) := g(y+x,x)}
25758 to @samp{f(12, a+1)} would produce @samp{g(a+13, 12)}.
25759
25760 The normal @kbd{a r} command applies rewrite rules over and over
25761 throughout the target formula until no further changes are possible
25762 (up to a limit of 100 times). Use @kbd{C-u 1 a r} to make only one
25763 change at a time.
25764
25765 @node Conditional Rewrite Rules, Algebraic Properties of Rewrite Rules, Basic Rewrite Rules, Rewrite Rules
25766 @subsection Conditional Rewrite Rules
25767
25768 @noindent
25769 A rewrite rule can also be @dfn{conditional}, written in the form
25770 @samp{@var{old} := @var{new} :: @var{cond}}. (There is also the obsolete
25771 form @samp{[@var{old}, @var{new}, @var{cond}]}.) If a @var{cond} part
25772 is present in the
25773 rule, this is an additional condition that must be satisfied before
25774 the rule is accepted. Once @var{old} has been successfully matched
25775 to the target expression, @var{cond} is evaluated (with all the
25776 meta-variables substituted for the values they matched) and simplified
25777 with @kbd{a s} (@code{calc-simplify}). If the result is a nonzero
25778 number or any other object known to be nonzero (@pxref{Declarations}),
25779 the rule is accepted. If the result is zero or if it is a symbolic
25780 formula that is not known to be nonzero, the rule is rejected.
25781 @xref{Logical Operations}, for a number of functions that return
25782 1 or 0 according to the results of various tests.
25783
25784 For example, the formula @samp{n > 0} simplifies to 1 or 0 if @expr{n}
25785 is replaced by a positive or nonpositive number, respectively (or if
25786 @expr{n} has been declared to be positive or nonpositive). Thus,
25787 the rule @samp{f(x,y) := g(y+x,x) :: x+y > 0} would apply to
25788 @samp{f(0, 4)} but not to @samp{f(-3, 2)} or @samp{f(12, a+1)}
25789 (assuming no outstanding declarations for @expr{a}). In the case of
25790 @samp{f(-3, 2)}, the condition can be shown not to be satisfied; in
25791 the case of @samp{f(12, a+1)}, the condition merely cannot be shown
25792 to be satisfied, but that is enough to reject the rule.
25793
25794 While Calc will use declarations to reason about variables in the
25795 formula being rewritten, declarations do not apply to meta-variables.
25796 For example, the rule @samp{f(a) := g(a+1)} will match for any values
25797 of @samp{a}, such as complex numbers, vectors, or formulas, even if
25798 @samp{a} has been declared to be real or scalar. If you want the
25799 meta-variable @samp{a} to match only literal real numbers, use
25800 @samp{f(a) := g(a+1) :: real(a)}. If you want @samp{a} to match only
25801 reals and formulas which are provably real, use @samp{dreal(a)} as
25802 the condition.
25803
25804 The @samp{::} operator is a shorthand for the @code{condition}
25805 function; @samp{@var{old} := @var{new} :: @var{cond}} is equivalent to
25806 the formula @samp{condition(assign(@var{old}, @var{new}), @var{cond})}.
25807
25808 If you have several conditions, you can use @samp{... :: c1 :: c2 :: c3}
25809 or @samp{... :: c1 && c2 && c3}. The two are entirely equivalent.
25810
25811 It is also possible to embed conditions inside the pattern:
25812 @samp{f(x :: x>0, y) := g(y+x, x)}. This is purely a notational
25813 convenience, though; where a condition appears in a rule has no
25814 effect on when it is tested. The rewrite-rule compiler automatically
25815 decides when it is best to test each condition while a rule is being
25816 matched.
25817
25818 Certain conditions are handled as special cases by the rewrite rule
25819 system and are tested very efficiently: Where @expr{x} is any
25820 meta-variable, these conditions are @samp{integer(x)}, @samp{real(x)},
25821 @samp{constant(x)}, @samp{negative(x)}, @samp{x >= y} where @expr{y}
25822 is either a constant or another meta-variable and @samp{>=} may be
25823 replaced by any of the six relational operators, and @samp{x % a = b}
25824 where @expr{a} and @expr{b} are constants. Other conditions, like
25825 @samp{x >= y+1} or @samp{dreal(x)}, will be less efficient to check
25826 since Calc must bring the whole evaluator and simplifier into play.
25827
25828 An interesting property of @samp{::} is that neither of its arguments
25829 will be touched by Calc's default simplifications. This is important
25830 because conditions often are expressions that cannot safely be
25831 evaluated early. For example, the @code{typeof} function never
25832 remains in symbolic form; entering @samp{typeof(a)} will put the
25833 number 100 (the type code for variables like @samp{a}) on the stack.
25834 But putting the condition @samp{... :: typeof(a) = 6} on the stack
25835 is safe since @samp{::} prevents the @code{typeof} from being
25836 evaluated until the condition is actually used by the rewrite system.
25837
25838 Since @samp{::} protects its lefthand side, too, you can use a dummy
25839 condition to protect a rule that must itself not evaluate early.
25840 For example, it's not safe to put @samp{a(f,x) := apply(f, [x])} on
25841 the stack because it will immediately evaluate to @samp{a(f,x) := f(x)},
25842 where the meta-variable-ness of @code{f} on the righthand side has been
25843 lost. But @samp{a(f,x) := apply(f, [x]) :: 1} is safe, and of course
25844 the condition @samp{1} is always true (nonzero) so it has no effect on
25845 the functioning of the rule. (The rewrite compiler will ensure that
25846 it doesn't even impact the speed of matching the rule.)
25847
25848 @node Algebraic Properties of Rewrite Rules, Other Features of Rewrite Rules, Conditional Rewrite Rules, Rewrite Rules
25849 @subsection Algebraic Properties of Rewrite Rules
25850
25851 @noindent
25852 The rewrite mechanism understands the algebraic properties of functions
25853 like @samp{+} and @samp{*}. In particular, pattern matching takes
25854 the associativity and commutativity of the following functions into
25855 account:
25856
25857 @smallexample
25858 + - * = != && || and or xor vint vunion vxor gcd lcm max min beta
25859 @end smallexample
25860
25861 For example, the rewrite rule:
25862
25863 @example
25864 a x + b x := (a + b) x
25865 @end example
25866
25867 @noindent
25868 will match formulas of the form,
25869
25870 @example
25871 a x + b x, x a + x b, a x + x b, x a + b x
25872 @end example
25873
25874 Rewrites also understand the relationship between the @samp{+} and @samp{-}
25875 operators. The above rewrite rule will also match the formulas,
25876
25877 @example
25878 a x - b x, x a - x b, a x - x b, x a - b x
25879 @end example
25880
25881 @noindent
25882 by matching @samp{b} in the pattern to @samp{-b} from the formula.
25883
25884 Applied to a sum of many terms like @samp{r + a x + s + b x + t}, this
25885 pattern will check all pairs of terms for possible matches. The rewrite
25886 will take whichever suitable pair it discovers first.
25887
25888 In general, a pattern using an associative operator like @samp{a + b}
25889 will try @var{2 n} different ways to match a sum of @var{n} terms
25890 like @samp{x + y + z - w}. First, @samp{a} is matched against each
25891 of @samp{x}, @samp{y}, @samp{z}, and @samp{-w} in turn, with @samp{b}
25892 being matched to the remainders @samp{y + z - w}, @samp{x + z - w}, etc.
25893 If none of these succeed, then @samp{b} is matched against each of the
25894 four terms with @samp{a} matching the remainder. Half-and-half matches,
25895 like @samp{(x + y) + (z - w)}, are not tried.
25896
25897 Note that @samp{*} is not commutative when applied to matrices, but
25898 rewrite rules pretend that it is. If you type @kbd{m v} to enable
25899 Matrix mode (@pxref{Matrix Mode}), rewrite rules will match @samp{*}
25900 literally, ignoring its usual commutativity property. (In the
25901 current implementation, the associativity also vanishes---it is as
25902 if the pattern had been enclosed in a @code{plain} marker; see below.)
25903 If you are applying rewrites to formulas with matrices, it's best to
25904 enable Matrix mode first to prevent algebraically incorrect rewrites
25905 from occurring.
25906
25907 The pattern @samp{-x} will actually match any expression. For example,
25908 the rule
25909
25910 @example
25911 f(-x) := -f(x)
25912 @end example
25913
25914 @noindent
25915 will rewrite @samp{f(a)} to @samp{-f(-a)}. To avoid this, either use
25916 a @code{plain} marker as described below, or add a @samp{negative(x)}
25917 condition. The @code{negative} function is true if its argument
25918 ``looks'' negative, for example, because it is a negative number or
25919 because it is a formula like @samp{-x}. The new rule using this
25920 condition is:
25921
25922 @example
25923 f(x) := -f(-x) :: negative(x) @r{or, equivalently,}
25924 f(-x) := -f(x) :: negative(-x)
25925 @end example
25926
25927 In the same way, the pattern @samp{x - y} will match the sum @samp{a + b}
25928 by matching @samp{y} to @samp{-b}.
25929
25930 The pattern @samp{a b} will also match the formula @samp{x/y} if
25931 @samp{y} is a number. Thus the rule @samp{a x + @w{b x} := (a+b) x}
25932 will also convert @samp{a x + x / 2} to @samp{(a + 0.5) x} (or
25933 @samp{(a + 1:2) x}, depending on the current fraction mode).
25934
25935 Calc will @emph{not} take other liberties with @samp{*}, @samp{/}, and
25936 @samp{^}. For example, the pattern @samp{f(a b)} will not match
25937 @samp{f(x^2)}, and @samp{f(a + b)} will not match @samp{f(2 x)}, even
25938 though conceivably these patterns could match with @samp{a = b = x}.
25939 Nor will @samp{f(a b)} match @samp{f(x / y)} if @samp{y} is not a
25940 constant, even though it could be considered to match with @samp{a = x}
25941 and @samp{b = 1/y}. The reasons are partly for efficiency, and partly
25942 because while few mathematical operations are substantively different
25943 for addition and subtraction, often it is preferable to treat the cases
25944 of multiplication, division, and integer powers separately.
25945
25946 Even more subtle is the rule set
25947
25948 @example
25949 [ f(a) + f(b) := f(a + b), -f(a) := f(-a) ]
25950 @end example
25951
25952 @noindent
25953 attempting to match @samp{f(x) - f(y)}. You might think that Calc
25954 will view this subtraction as @samp{f(x) + (-f(y))} and then apply
25955 the above two rules in turn, but actually this will not work because
25956 Calc only does this when considering rules for @samp{+} (like the
25957 first rule in this set). So it will see first that @samp{f(x) + (-f(y))}
25958 does not match @samp{f(a) + f(b)} for any assignments of the
25959 meta-variables, and then it will see that @samp{f(x) - f(y)} does
25960 not match @samp{-f(a)} for any assignment of @samp{a}. Because Calc
25961 tries only one rule at a time, it will not be able to rewrite
25962 @samp{f(x) - f(y)} with this rule set. An explicit @samp{f(a) - f(b)}
25963 rule will have to be added.
25964
25965 Another thing patterns will @emph{not} do is break up complex numbers.
25966 The pattern @samp{myconj(a + @w{b i)} := a - b i} will work for formulas
25967 involving the special constant @samp{i} (such as @samp{3 - 4 i}), but
25968 it will not match actual complex numbers like @samp{(3, -4)}. A version
25969 of the above rule for complex numbers would be
25970
25971 @example
25972 myconj(a) := re(a) - im(a) (0,1) :: im(a) != 0
25973 @end example
25974
25975 @noindent
25976 (Because the @code{re} and @code{im} functions understand the properties
25977 of the special constant @samp{i}, this rule will also work for
25978 @samp{3 - 4 i}. In fact, this particular rule would probably be better
25979 without the @samp{im(a) != 0} condition, since if @samp{im(a) = 0} the
25980 righthand side of the rule will still give the correct answer for the
25981 conjugate of a real number.)
25982
25983 It is also possible to specify optional arguments in patterns. The rule
25984
25985 @example
25986 opt(a) x + opt(b) (x^opt(c) + opt(d)) := f(a, b, c, d)
25987 @end example
25988
25989 @noindent
25990 will match the formula
25991
25992 @example
25993 5 (x^2 - 4) + 3 x
25994 @end example
25995
25996 @noindent
25997 in a fairly straightforward manner, but it will also match reduced
25998 formulas like
25999
26000 @example
26001 x + x^2, 2(x + 1) - x, x + x
26002 @end example
26003
26004 @noindent
26005 producing, respectively,
26006
26007 @example
26008 f(1, 1, 2, 0), f(-1, 2, 1, 1), f(1, 1, 1, 0)
26009 @end example
26010
26011 (The latter two formulas can be entered only if default simplifications
26012 have been turned off with @kbd{m O}.)
26013
26014 The default value for a term of a sum is zero. The default value
26015 for a part of a product, for a power, or for the denominator of a
26016 quotient, is one. Also, @samp{-x} matches the pattern @samp{opt(a) b}
26017 with @samp{a = -1}.
26018
26019 In particular, the distributive-law rule can be refined to
26020
26021 @example
26022 opt(a) x + opt(b) x := (a + b) x
26023 @end example
26024
26025 @noindent
26026 so that it will convert, e.g., @samp{a x - x}, to @samp{(a - 1) x}.
26027
26028 The pattern @samp{opt(a) + opt(b) x} matches almost any formulas which
26029 are linear in @samp{x}. You can also use the @code{lin} and @code{islin}
26030 functions with rewrite conditions to test for this; @pxref{Logical
26031 Operations}. These functions are not as convenient to use in rewrite
26032 rules, but they recognize more kinds of formulas as linear:
26033 @samp{x/z} is considered linear with @expr{b = 1/z} by @code{lin},
26034 but it will not match the above pattern because that pattern calls
26035 for a multiplication, not a division.
26036
26037 As another example, the obvious rule to replace @samp{sin(x)^2 + cos(x)^2}
26038 by 1,
26039
26040 @example
26041 sin(x)^2 + cos(x)^2 := 1
26042 @end example
26043
26044 @noindent
26045 misses many cases because the sine and cosine may both be multiplied by
26046 an equal factor. Here's a more successful rule:
26047
26048 @example
26049 opt(a) sin(x)^2 + opt(a) cos(x)^2 := a
26050 @end example
26051
26052 Note that this rule will @emph{not} match @samp{sin(x)^2 + 6 cos(x)^2}
26053 because one @expr{a} would have ``matched'' 1 while the other matched 6.
26054
26055 Calc automatically converts a rule like
26056
26057 @example
26058 f(x-1, x) := g(x)
26059 @end example
26060
26061 @noindent
26062 into the form
26063
26064 @example
26065 f(temp, x) := g(x) :: temp = x-1
26066 @end example
26067
26068 @noindent
26069 (where @code{temp} stands for a new, invented meta-variable that
26070 doesn't actually have a name). This modified rule will successfully
26071 match @samp{f(6, 7)}, binding @samp{temp} and @samp{x} to 6 and 7,
26072 respectively, then verifying that they differ by one even though
26073 @samp{6} does not superficially look like @samp{x-1}.
26074
26075 However, Calc does not solve equations to interpret a rule. The
26076 following rule,
26077
26078 @example
26079 f(x-1, x+1) := g(x)
26080 @end example
26081
26082 @noindent
26083 will not work. That is, it will match @samp{f(a - 1 + b, a + 1 + b)}
26084 but not @samp{f(6, 8)}. Calc always interprets at least one occurrence
26085 of a variable by literal matching. If the variable appears ``isolated''
26086 then Calc is smart enough to use it for literal matching. But in this
26087 last example, Calc is forced to rewrite the rule to @samp{f(x-1, temp)
26088 := g(x) :: temp = x+1} where the @samp{x-1} term must correspond to an
26089 actual ``something-minus-one'' in the target formula.
26090
26091 A successful way to write this would be @samp{f(x, x+2) := g(x+1)}.
26092 You could make this resemble the original form more closely by using
26093 @code{let} notation, which is described in the next section:
26094
26095 @example
26096 f(xm1, x+1) := g(x) :: let(x := xm1+1)
26097 @end example
26098
26099 Calc does this rewriting or ``conditionalizing'' for any sub-pattern
26100 which involves only the functions in the following list, operating
26101 only on constants and meta-variables which have already been matched
26102 elsewhere in the pattern. When matching a function call, Calc is
26103 careful to match arguments which are plain variables before arguments
26104 which are calls to any of the functions below, so that a pattern like
26105 @samp{f(x-1, x)} can be conditionalized even though the isolated
26106 @samp{x} comes after the @samp{x-1}.
26107
26108 @smallexample
26109 + - * / \ % ^ abs sign round rounde roundu trunc floor ceil
26110 max min re im conj arg
26111 @end smallexample
26112
26113 You can suppress all of the special treatments described in this
26114 section by surrounding a function call with a @code{plain} marker.
26115 This marker causes the function call which is its argument to be
26116 matched literally, without regard to commutativity, associativity,
26117 negation, or conditionalization. When you use @code{plain}, the
26118 ``deep structure'' of the formula being matched can show through.
26119 For example,
26120
26121 @example
26122 plain(a - a b) := f(a, b)
26123 @end example
26124
26125 @noindent
26126 will match only literal subtractions. However, the @code{plain}
26127 marker does not affect its arguments' arguments. In this case,
26128 commutativity and associativity is still considered while matching
26129 the @w{@samp{a b}} sub-pattern, so the whole pattern will match
26130 @samp{x - y x} as well as @samp{x - x y}. We could go still
26131 further and use
26132
26133 @example
26134 plain(a - plain(a b)) := f(a, b)
26135 @end example
26136
26137 @noindent
26138 which would do a completely strict match for the pattern.
26139
26140 By contrast, the @code{quote} marker means that not only the
26141 function name but also the arguments must be literally the same.
26142 The above pattern will match @samp{x - x y} but
26143
26144 @example
26145 quote(a - a b) := f(a, b)
26146 @end example
26147
26148 @noindent
26149 will match only the single formula @samp{a - a b}. Also,
26150
26151 @example
26152 quote(a - quote(a b)) := f(a, b)
26153 @end example
26154
26155 @noindent
26156 will match only @samp{a - quote(a b)}---probably not the desired
26157 effect!
26158
26159 A certain amount of algebra is also done when substituting the
26160 meta-variables on the righthand side of a rule. For example,
26161 in the rule
26162
26163 @example
26164 a + f(b) := f(a + b)
26165 @end example
26166
26167 @noindent
26168 matching @samp{f(x) - y} would produce @samp{f((-y) + x)} if
26169 taken literally, but the rewrite mechanism will simplify the
26170 righthand side to @samp{f(x - y)} automatically. (Of course,
26171 the default simplifications would do this anyway, so this
26172 special simplification is only noticeable if you have turned the
26173 default simplifications off.) This rewriting is done only when
26174 a meta-variable expands to a ``negative-looking'' expression.
26175 If this simplification is not desirable, you can use a @code{plain}
26176 marker on the righthand side:
26177
26178 @example
26179 a + f(b) := f(plain(a + b))
26180 @end example
26181
26182 @noindent
26183 In this example, we are still allowing the pattern-matcher to
26184 use all the algebra it can muster, but the righthand side will
26185 always simplify to a literal addition like @samp{f((-y) + x)}.
26186
26187 @node Other Features of Rewrite Rules, Composing Patterns in Rewrite Rules, Algebraic Properties of Rewrite Rules, Rewrite Rules
26188 @subsection Other Features of Rewrite Rules
26189
26190 @noindent
26191 Certain ``function names'' serve as markers in rewrite rules.
26192 Here is a complete list of these markers. First are listed the
26193 markers that work inside a pattern; then come the markers that
26194 work in the righthand side of a rule.
26195
26196 @ignore
26197 @starindex
26198 @end ignore
26199 @tindex import
26200 One kind of marker, @samp{import(x)}, takes the place of a whole
26201 rule. Here @expr{x} is the name of a variable containing another
26202 rule set; those rules are ``spliced into'' the rule set that
26203 imports them. For example, if @samp{[f(a+b) := f(a) + f(b),
26204 f(a b) := a f(b) :: real(a)]} is stored in variable @samp{linearF},
26205 then the rule set @samp{[f(0) := 0, import(linearF)]} will apply
26206 all three rules. It is possible to modify the imported rules
26207 slightly: @samp{import(x, v1, x1, v2, x2, @dots{})} imports
26208 the rule set @expr{x} with all occurrences of
26209 @texline @math{v_1},
26210 @infoline @expr{v1},
26211 as either a variable name or a function name, replaced with
26212 @texline @math{x_1}
26213 @infoline @expr{x1}
26214 and so on. (If
26215 @texline @math{v_1}
26216 @infoline @expr{v1}
26217 is used as a function name, then
26218 @texline @math{x_1}
26219 @infoline @expr{x1}
26220 must be either a function name itself or a @w{@samp{< >}} nameless
26221 function; @pxref{Specifying Operators}.) For example, @samp{[g(0) := 0,
26222 import(linearF, f, g)]} applies the linearity rules to the function
26223 @samp{g} instead of @samp{f}. Imports can be nested, but the
26224 import-with-renaming feature may fail to rename sub-imports properly.
26225
26226 The special functions allowed in patterns are:
26227
26228 @table @samp
26229 @item quote(x)
26230 @ignore
26231 @starindex
26232 @end ignore
26233 @tindex quote
26234 This pattern matches exactly @expr{x}; variable names in @expr{x} are
26235 not interpreted as meta-variables. The only flexibility is that
26236 numbers are compared for numeric equality, so that the pattern
26237 @samp{f(quote(12))} will match both @samp{f(12)} and @samp{f(12.0)}.
26238 (Numbers are always treated this way by the rewrite mechanism:
26239 The rule @samp{f(x,x) := g(x)} will match @samp{f(12, 12.0)}.
26240 The rewrite may produce either @samp{g(12)} or @samp{g(12.0)}
26241 as a result in this case.)
26242
26243 @item plain(x)
26244 @ignore
26245 @starindex
26246 @end ignore
26247 @tindex plain
26248 Here @expr{x} must be a function call @samp{f(x1,x2,@dots{})}. This
26249 pattern matches a call to function @expr{f} with the specified
26250 argument patterns. No special knowledge of the properties of the
26251 function @expr{f} is used in this case; @samp{+} is not commutative or
26252 associative. Unlike @code{quote}, the arguments @samp{x1,x2,@dots{}}
26253 are treated as patterns. If you wish them to be treated ``plainly''
26254 as well, you must enclose them with more @code{plain} markers:
26255 @samp{plain(plain(@w{-a}) + plain(b c))}.
26256
26257 @item opt(x,def)
26258 @ignore
26259 @starindex
26260 @end ignore
26261 @tindex opt
26262 Here @expr{x} must be a variable name. This must appear as an
26263 argument to a function or an element of a vector; it specifies that
26264 the argument or element is optional.
26265 As an argument to @samp{+}, @samp{-}, @samp{*}, @samp{&&}, or @samp{||},
26266 or as the second argument to @samp{/} or @samp{^}, the value @var{def}
26267 may be omitted. The pattern @samp{x + opt(y)} matches a sum by
26268 binding one summand to @expr{x} and the other to @expr{y}, and it
26269 matches anything else by binding the whole expression to @expr{x} and
26270 zero to @expr{y}. The other operators above work similarly.
26271
26272 For general miscellaneous functions, the default value @code{def}
26273 must be specified. Optional arguments are dropped starting with
26274 the rightmost one during matching. For example, the pattern
26275 @samp{f(opt(a,0), b, opt(c,b))} will match @samp{f(b)}, @samp{f(a,b)},
26276 or @samp{f(a,b,c)}. Default values of zero and @expr{b} are
26277 supplied in this example for the omitted arguments. Note that
26278 the literal variable @expr{b} will be the default in the latter
26279 case, @emph{not} the value that matched the meta-variable @expr{b}.
26280 In other words, the default @var{def} is effectively quoted.
26281
26282 @item condition(x,c)
26283 @ignore
26284 @starindex
26285 @end ignore
26286 @tindex condition
26287 @tindex ::
26288 This matches the pattern @expr{x}, with the attached condition
26289 @expr{c}. It is the same as @samp{x :: c}.
26290
26291 @item pand(x,y)
26292 @ignore
26293 @starindex
26294 @end ignore
26295 @tindex pand
26296 @tindex &&&
26297 This matches anything that matches both pattern @expr{x} and
26298 pattern @expr{y}. It is the same as @samp{x &&& y}.
26299 @pxref{Composing Patterns in Rewrite Rules}.
26300
26301 @item por(x,y)
26302 @ignore
26303 @starindex
26304 @end ignore
26305 @tindex por
26306 @tindex |||
26307 This matches anything that matches either pattern @expr{x} or
26308 pattern @expr{y}. It is the same as @w{@samp{x ||| y}}.
26309
26310 @item pnot(x)
26311 @ignore
26312 @starindex
26313 @end ignore
26314 @tindex pnot
26315 @tindex !!!
26316 This matches anything that does not match pattern @expr{x}.
26317 It is the same as @samp{!!! x}.
26318
26319 @item cons(h,t)
26320 @ignore
26321 @mindex cons
26322 @end ignore
26323 @tindex cons (rewrites)
26324 This matches any vector of one or more elements. The first
26325 element is matched to @expr{h}; a vector of the remaining
26326 elements is matched to @expr{t}. Note that vectors of fixed
26327 length can also be matched as actual vectors: The rule
26328 @samp{cons(a,cons(b,[])) := cons(a+b,[])} is equivalent
26329 to the rule @samp{[a,b] := [a+b]}.
26330
26331 @item rcons(t,h)
26332 @ignore
26333 @mindex rcons
26334 @end ignore
26335 @tindex rcons (rewrites)
26336 This is like @code{cons}, except that the @emph{last} element
26337 is matched to @expr{h}, with the remaining elements matched
26338 to @expr{t}.
26339
26340 @item apply(f,args)
26341 @ignore
26342 @mindex apply
26343 @end ignore
26344 @tindex apply (rewrites)
26345 This matches any function call. The name of the function, in
26346 the form of a variable, is matched to @expr{f}. The arguments
26347 of the function, as a vector of zero or more objects, are
26348 matched to @samp{args}. Constants, variables, and vectors
26349 do @emph{not} match an @code{apply} pattern. For example,
26350 @samp{apply(f,x)} matches any function call, @samp{apply(quote(f),x)}
26351 matches any call to the function @samp{f}, @samp{apply(f,[a,b])}
26352 matches any function call with exactly two arguments, and
26353 @samp{apply(quote(f), cons(a,cons(b,x)))} matches any call
26354 to the function @samp{f} with two or more arguments. Another
26355 way to implement the latter, if the rest of the rule does not
26356 need to refer to the first two arguments of @samp{f} by name,
26357 would be @samp{apply(quote(f), x :: vlen(x) >= 2)}.
26358 Here's a more interesting sample use of @code{apply}:
26359
26360 @example
26361 apply(f,[x+n]) := n + apply(f,[x])
26362 :: in(f, [floor,ceil,round,trunc]) :: integer(n)
26363 @end example
26364
26365 Note, however, that this will be slower to match than a rule
26366 set with four separate rules. The reason is that Calc sorts
26367 the rules of a rule set according to top-level function name;
26368 if the top-level function is @code{apply}, Calc must try the
26369 rule for every single formula and sub-formula. If the top-level
26370 function in the pattern is, say, @code{floor}, then Calc invokes
26371 the rule only for sub-formulas which are calls to @code{floor}.
26372
26373 Formulas normally written with operators like @code{+} are still
26374 considered function calls: @code{apply(f,x)} matches @samp{a+b}
26375 with @samp{f = add}, @samp{x = [a,b]}.
26376
26377 You must use @code{apply} for meta-variables with function names
26378 on both sides of a rewrite rule: @samp{apply(f, [x]) := f(x+1)}
26379 is @emph{not} correct, because it rewrites @samp{spam(6)} into
26380 @samp{f(7)}. The righthand side should be @samp{apply(f, [x+1])}.
26381 Also note that you will have to use No-Simplify mode (@kbd{m O})
26382 when entering this rule so that the @code{apply} isn't
26383 evaluated immediately to get the new rule @samp{f(x) := f(x+1)}.
26384 Or, use @kbd{s e} to enter the rule without going through the stack,
26385 or enter the rule as @samp{apply(f, [x]) := apply(f, [x+1]) @w{:: 1}}.
26386 @xref{Conditional Rewrite Rules}.
26387
26388 @item select(x)
26389 @ignore
26390 @starindex
26391 @end ignore
26392 @tindex select
26393 This is used for applying rules to formulas with selections;
26394 @pxref{Selections with Rewrite Rules}.
26395 @end table
26396
26397 Special functions for the righthand sides of rules are:
26398
26399 @table @samp
26400 @item quote(x)
26401 The notation @samp{quote(x)} is changed to @samp{x} when the
26402 righthand side is used. As far as the rewrite rule is concerned,
26403 @code{quote} is invisible. However, @code{quote} has the special
26404 property in Calc that its argument is not evaluated. Thus,
26405 while it will not work to put the rule @samp{t(a) := typeof(a)}
26406 on the stack because @samp{typeof(a)} is evaluated immediately
26407 to produce @samp{t(a) := 100}, you can use @code{quote} to
26408 protect the righthand side: @samp{t(a) := quote(typeof(a))}.
26409 (@xref{Conditional Rewrite Rules}, for another trick for
26410 protecting rules from evaluation.)
26411
26412 @item plain(x)
26413 Special properties of and simplifications for the function call
26414 @expr{x} are not used. One interesting case where @code{plain}
26415 is useful is the rule, @samp{q(x) := quote(x)}, trying to expand a
26416 shorthand notation for the @code{quote} function. This rule will
26417 not work as shown; instead of replacing @samp{q(foo)} with
26418 @samp{quote(foo)}, it will replace it with @samp{foo}! The correct
26419 rule would be @samp{q(x) := plain(quote(x))}.
26420
26421 @item cons(h,t)
26422 Where @expr{t} is a vector, this is converted into an expanded
26423 vector during rewrite processing. Note that @code{cons} is a regular
26424 Calc function which normally does this anyway; the only way @code{cons}
26425 is treated specially by rewrites is that @code{cons} on the righthand
26426 side of a rule will be evaluated even if default simplifications
26427 have been turned off.
26428
26429 @item rcons(t,h)
26430 Analogous to @code{cons} except putting @expr{h} at the @emph{end} of
26431 the vector @expr{t}.
26432
26433 @item apply(f,args)
26434 Where @expr{f} is a variable and @var{args} is a vector, this
26435 is converted to a function call. Once again, note that @code{apply}
26436 is also a regular Calc function.
26437
26438 @item eval(x)
26439 @ignore
26440 @starindex
26441 @end ignore
26442 @tindex eval
26443 The formula @expr{x} is handled in the usual way, then the
26444 default simplifications are applied to it even if they have
26445 been turned off normally. This allows you to treat any function
26446 similarly to the way @code{cons} and @code{apply} are always
26447 treated. However, there is a slight difference: @samp{cons(2+3, [])}
26448 with default simplifications off will be converted to @samp{[2+3]},
26449 whereas @samp{eval(cons(2+3, []))} will be converted to @samp{[5]}.
26450
26451 @item evalsimp(x)
26452 @ignore
26453 @starindex
26454 @end ignore
26455 @tindex evalsimp
26456 The formula @expr{x} has meta-variables substituted in the usual
26457 way, then algebraically simplified as if by the @kbd{a s} command.
26458
26459 @item evalextsimp(x)
26460 @ignore
26461 @starindex
26462 @end ignore
26463 @tindex evalextsimp
26464 The formula @expr{x} has meta-variables substituted in the normal
26465 way, then ``extendedly'' simplified as if by the @kbd{a e} command.
26466
26467 @item select(x)
26468 @xref{Selections with Rewrite Rules}.
26469 @end table
26470
26471 There are also some special functions you can use in conditions.
26472
26473 @table @samp
26474 @item let(v := x)
26475 @ignore
26476 @starindex
26477 @end ignore
26478 @tindex let
26479 The expression @expr{x} is evaluated with meta-variables substituted.
26480 The @kbd{a s} command's simplifications are @emph{not} applied by
26481 default, but @expr{x} can include calls to @code{evalsimp} or
26482 @code{evalextsimp} as described above to invoke higher levels
26483 of simplification. The
26484 result of @expr{x} is then bound to the meta-variable @expr{v}. As
26485 usual, if this meta-variable has already been matched to something
26486 else the two values must be equal; if the meta-variable is new then
26487 it is bound to the result of the expression. This variable can then
26488 appear in later conditions, and on the righthand side of the rule.
26489 In fact, @expr{v} may be any pattern in which case the result of
26490 evaluating @expr{x} is matched to that pattern, binding any
26491 meta-variables that appear in that pattern. Note that @code{let}
26492 can only appear by itself as a condition, or as one term of an
26493 @samp{&&} which is a whole condition: It cannot be inside
26494 an @samp{||} term or otherwise buried.
26495
26496 The alternate, equivalent form @samp{let(v, x)} is also recognized.
26497 Note that the use of @samp{:=} by @code{let}, while still being
26498 assignment-like in character, is unrelated to the use of @samp{:=}
26499 in the main part of a rewrite rule.
26500
26501 As an example, @samp{f(a) := g(ia) :: let(ia := 1/a) :: constant(ia)}
26502 replaces @samp{f(a)} with @samp{g} of the inverse of @samp{a}, if
26503 that inverse exists and is constant. For example, if @samp{a} is a
26504 singular matrix the operation @samp{1/a} is left unsimplified and
26505 @samp{constant(ia)} fails, but if @samp{a} is an invertible matrix
26506 then the rule succeeds. Without @code{let} there would be no way
26507 to express this rule that didn't have to invert the matrix twice.
26508 Note that, because the meta-variable @samp{ia} is otherwise unbound
26509 in this rule, the @code{let} condition itself always ``succeeds''
26510 because no matter what @samp{1/a} evaluates to, it can successfully
26511 be bound to @code{ia}.
26512
26513 Here's another example, for integrating cosines of linear
26514 terms: @samp{myint(cos(y),x) := sin(y)/b :: let([a,b,x] := lin(y,x))}.
26515 The @code{lin} function returns a 3-vector if its argument is linear,
26516 or leaves itself unevaluated if not. But an unevaluated @code{lin}
26517 call will not match the 3-vector on the lefthand side of the @code{let},
26518 so this @code{let} both verifies that @code{y} is linear, and binds
26519 the coefficients @code{a} and @code{b} for use elsewhere in the rule.
26520 (It would have been possible to use @samp{sin(a x + b)/b} for the
26521 righthand side instead, but using @samp{sin(y)/b} avoids gratuitous
26522 rearrangement of the argument of the sine.)
26523
26524 @ignore
26525 @starindex
26526 @end ignore
26527 @tindex ierf
26528 Similarly, here is a rule that implements an inverse-@code{erf}
26529 function. It uses @code{root} to search for a solution. If
26530 @code{root} succeeds, it will return a vector of two numbers
26531 where the first number is the desired solution. If no solution
26532 is found, @code{root} remains in symbolic form. So we use
26533 @code{let} to check that the result was indeed a vector.
26534
26535 @example
26536 ierf(x) := y :: let([y,z] := root(erf(a) = x, a, .5))
26537 @end example
26538
26539 @item matches(v,p)
26540 The meta-variable @var{v}, which must already have been matched
26541 to something elsewhere in the rule, is compared against pattern
26542 @var{p}. Since @code{matches} is a standard Calc function, it
26543 can appear anywhere in a condition. But if it appears alone or
26544 as a term of a top-level @samp{&&}, then you get the special
26545 extra feature that meta-variables which are bound to things
26546 inside @var{p} can be used elsewhere in the surrounding rewrite
26547 rule.
26548
26549 The only real difference between @samp{let(p := v)} and
26550 @samp{matches(v, p)} is that the former evaluates @samp{v} using
26551 the default simplifications, while the latter does not.
26552
26553 @item remember
26554 @vindex remember
26555 This is actually a variable, not a function. If @code{remember}
26556 appears as a condition in a rule, then when that rule succeeds
26557 the original expression and rewritten expression are added to the
26558 front of the rule set that contained the rule. If the rule set
26559 was not stored in a variable, @code{remember} is ignored. The
26560 lefthand side is enclosed in @code{quote} in the added rule if it
26561 contains any variables.
26562
26563 For example, the rule @samp{f(n) := n f(n-1) :: remember} applied
26564 to @samp{f(7)} will add the rule @samp{f(7) := 7 f(6)} to the front
26565 of the rule set. The rule set @code{EvalRules} works slightly
26566 differently: There, the evaluation of @samp{f(6)} will complete before
26567 the result is added to the rule set, in this case as @samp{f(7) := 5040}.
26568 Thus @code{remember} is most useful inside @code{EvalRules}.
26569
26570 It is up to you to ensure that the optimization performed by
26571 @code{remember} is safe. For example, the rule @samp{foo(n) := n
26572 :: evalv(eatfoo) > 0 :: remember} is a bad idea (@code{evalv} is
26573 the function equivalent of the @kbd{=} command); if the variable
26574 @code{eatfoo} ever contains 1, rules like @samp{foo(7) := 7} will
26575 be added to the rule set and will continue to operate even if
26576 @code{eatfoo} is later changed to 0.
26577
26578 @item remember(c)
26579 @ignore
26580 @starindex
26581 @end ignore
26582 @tindex remember
26583 Remember the match as described above, but only if condition @expr{c}
26584 is true. For example, @samp{remember(n % 4 = 0)} in the above factorial
26585 rule remembers only every fourth result. Note that @samp{remember(1)}
26586 is equivalent to @samp{remember}, and @samp{remember(0)} has no effect.
26587 @end table
26588
26589 @node Composing Patterns in Rewrite Rules, Nested Formulas with Rewrite Rules, Other Features of Rewrite Rules, Rewrite Rules
26590 @subsection Composing Patterns in Rewrite Rules
26591
26592 @noindent
26593 There are three operators, @samp{&&&}, @samp{|||}, and @samp{!!!},
26594 that combine rewrite patterns to make larger patterns. The
26595 combinations are ``and,'' ``or,'' and ``not,'' respectively, and
26596 these operators are the pattern equivalents of @samp{&&}, @samp{||}
26597 and @samp{!} (which operate on zero-or-nonzero logical values).
26598
26599 Note that @samp{&&&}, @samp{|||}, and @samp{!!!} are left in symbolic
26600 form by all regular Calc features; they have special meaning only in
26601 the context of rewrite rule patterns.
26602
26603 The pattern @samp{@var{p1} &&& @var{p2}} matches anything that
26604 matches both @var{p1} and @var{p2}. One especially useful case is
26605 when one of @var{p1} or @var{p2} is a meta-variable. For example,
26606 here is a rule that operates on error forms:
26607
26608 @example
26609 f(x &&& a +/- b, x) := g(x)
26610 @end example
26611
26612 This does the same thing, but is arguably simpler than, the rule
26613
26614 @example
26615 f(a +/- b, a +/- b) := g(a +/- b)
26616 @end example
26617
26618 @ignore
26619 @starindex
26620 @end ignore
26621 @tindex ends
26622 Here's another interesting example:
26623
26624 @example
26625 ends(cons(a, x) &&& rcons(y, b)) := [a, b]
26626 @end example
26627
26628 @noindent
26629 which effectively clips out the middle of a vector leaving just
26630 the first and last elements. This rule will change a one-element
26631 vector @samp{[a]} to @samp{[a, a]}. The similar rule
26632
26633 @example
26634 ends(cons(a, rcons(y, b))) := [a, b]
26635 @end example
26636
26637 @noindent
26638 would do the same thing except that it would fail to match a
26639 one-element vector.
26640
26641 @tex
26642 \bigskip
26643 @end tex
26644
26645 The pattern @samp{@var{p1} ||| @var{p2}} matches anything that
26646 matches either @var{p1} or @var{p2}. Calc first tries matching
26647 against @var{p1}; if that fails, it goes on to try @var{p2}.
26648
26649 @ignore
26650 @starindex
26651 @end ignore
26652 @tindex curve
26653 A simple example of @samp{|||} is
26654
26655 @example
26656 curve(inf ||| -inf) := 0
26657 @end example
26658
26659 @noindent
26660 which converts both @samp{curve(inf)} and @samp{curve(-inf)} to zero.
26661
26662 Here is a larger example:
26663
26664 @example
26665 log(a, b) ||| (ln(a) :: let(b := e)) := mylog(a, b)
26666 @end example
26667
26668 This matches both generalized and natural logarithms in a single rule.
26669 Note that the @samp{::} term must be enclosed in parentheses because
26670 that operator has lower precedence than @samp{|||} or @samp{:=}.
26671
26672 (In practice this rule would probably include a third alternative,
26673 omitted here for brevity, to take care of @code{log10}.)
26674
26675 While Calc generally treats interior conditions exactly the same as
26676 conditions on the outside of a rule, it does guarantee that if all the
26677 variables in the condition are special names like @code{e}, or already
26678 bound in the pattern to which the condition is attached (say, if
26679 @samp{a} had appeared in this condition), then Calc will process this
26680 condition right after matching the pattern to the left of the @samp{::}.
26681 Thus, we know that @samp{b} will be bound to @samp{e} only if the
26682 @code{ln} branch of the @samp{|||} was taken.
26683
26684 Note that this rule was careful to bind the same set of meta-variables
26685 on both sides of the @samp{|||}. Calc does not check this, but if
26686 you bind a certain meta-variable only in one branch and then use that
26687 meta-variable elsewhere in the rule, results are unpredictable:
26688
26689 @example
26690 f(a,b) ||| g(b) := h(a,b)
26691 @end example
26692
26693 Here if the pattern matches @samp{g(17)}, Calc makes no promises about
26694 the value that will be substituted for @samp{a} on the righthand side.
26695
26696 @tex
26697 \bigskip
26698 @end tex
26699
26700 The pattern @samp{!!! @var{pat}} matches anything that does not
26701 match @var{pat}. Any meta-variables that are bound while matching
26702 @var{pat} remain unbound outside of @var{pat}.
26703
26704 For example,
26705
26706 @example
26707 f(x &&& !!! a +/- b, !!![]) := g(x)
26708 @end example
26709
26710 @noindent
26711 converts @code{f} whose first argument is anything @emph{except} an
26712 error form, and whose second argument is not the empty vector, into
26713 a similar call to @code{g} (but without the second argument).
26714
26715 If we know that the second argument will be a vector (empty or not),
26716 then an equivalent rule would be:
26717
26718 @example
26719 f(x, y) := g(x) :: typeof(x) != 7 :: vlen(y) > 0
26720 @end example
26721
26722 @noindent
26723 where of course 7 is the @code{typeof} code for error forms.
26724 Another final condition, that works for any kind of @samp{y},
26725 would be @samp{!istrue(y == [])}. (The @code{istrue} function
26726 returns an explicit 0 if its argument was left in symbolic form;
26727 plain @samp{!(y == [])} or @samp{y != []} would not work to replace
26728 @samp{!!![]} since these would be left unsimplified, and thus cause
26729 the rule to fail, if @samp{y} was something like a variable name.)
26730
26731 It is possible for a @samp{!!!} to refer to meta-variables bound
26732 elsewhere in the pattern. For example,
26733
26734 @example
26735 f(a, !!!a) := g(a)
26736 @end example
26737
26738 @noindent
26739 matches any call to @code{f} with different arguments, changing
26740 this to @code{g} with only the first argument.
26741
26742 If a function call is to be matched and one of the argument patterns
26743 contains a @samp{!!!} somewhere inside it, that argument will be
26744 matched last. Thus
26745
26746 @example
26747 f(!!!a, a) := g(a)
26748 @end example
26749
26750 @noindent
26751 will be careful to bind @samp{a} to the second argument of @code{f}
26752 before testing the first argument. If Calc had tried to match the
26753 first argument of @code{f} first, the results would have been
26754 disastrous: since @code{a} was unbound so far, the pattern @samp{a}
26755 would have matched anything at all, and the pattern @samp{!!!a}
26756 therefore would @emph{not} have matched anything at all!
26757
26758 @node Nested Formulas with Rewrite Rules, Multi-Phase Rewrite Rules, Composing Patterns in Rewrite Rules, Rewrite Rules
26759 @subsection Nested Formulas with Rewrite Rules
26760
26761 @noindent
26762 When @kbd{a r} (@code{calc-rewrite}) is used, it takes an expression from
26763 the top of the stack and attempts to match any of the specified rules
26764 to any part of the expression, starting with the whole expression
26765 and then, if that fails, trying deeper and deeper sub-expressions.
26766 For each part of the expression, the rules are tried in the order
26767 they appear in the rules vector. The first rule to match the first
26768 sub-expression wins; it replaces the matched sub-expression according
26769 to the @var{new} part of the rule.
26770
26771 Often, the rule set will match and change the formula several times.
26772 The top-level formula is first matched and substituted repeatedly until
26773 it no longer matches the pattern; then, sub-formulas are tried, and
26774 so on. Once every part of the formula has gotten its chance, the
26775 rewrite mechanism starts over again with the top-level formula
26776 (in case a substitution of one of its arguments has caused it again
26777 to match). This continues until no further matches can be made
26778 anywhere in the formula.
26779
26780 It is possible for a rule set to get into an infinite loop. The
26781 most obvious case, replacing a formula with itself, is not a problem
26782 because a rule is not considered to ``succeed'' unless the righthand
26783 side actually comes out to something different than the original
26784 formula or sub-formula that was matched. But if you accidentally
26785 had both @samp{ln(a b) := ln(a) + ln(b)} and the reverse
26786 @samp{ln(a) + ln(b) := ln(a b)} in your rule set, Calc would
26787 run forever switching a formula back and forth between the two
26788 forms.
26789
26790 To avoid disaster, Calc normally stops after 100 changes have been
26791 made to the formula. This will be enough for most multiple rewrites,
26792 but it will keep an endless loop of rewrites from locking up the
26793 computer forever. (On most systems, you can also type @kbd{C-g} to
26794 halt any Emacs command prematurely.)
26795
26796 To change this limit, give a positive numeric prefix argument.
26797 In particular, @kbd{M-1 a r} applies only one rewrite at a time,
26798 useful when you are first testing your rule (or just if repeated
26799 rewriting is not what is called for by your application).
26800
26801 @ignore
26802 @starindex
26803 @end ignore
26804 @ignore
26805 @mindex iter@idots
26806 @end ignore
26807 @tindex iterations
26808 You can also put a ``function call'' @samp{iterations(@var{n})}
26809 in place of a rule anywhere in your rules vector (but usually at
26810 the top). Then, @var{n} will be used instead of 100 as the default
26811 number of iterations for this rule set. You can use
26812 @samp{iterations(inf)} if you want no iteration limit by default.
26813 A prefix argument will override the @code{iterations} limit in the
26814 rule set.
26815
26816 @example
26817 [ iterations(1),
26818 f(x) := f(x+1) ]
26819 @end example
26820
26821 More precisely, the limit controls the number of ``iterations,''
26822 where each iteration is a successful matching of a rule pattern whose
26823 righthand side, after substituting meta-variables and applying the
26824 default simplifications, is different from the original sub-formula
26825 that was matched.
26826
26827 A prefix argument of zero sets the limit to infinity. Use with caution!
26828
26829 Given a negative numeric prefix argument, @kbd{a r} will match and
26830 substitute the top-level expression up to that many times, but
26831 will not attempt to match the rules to any sub-expressions.
26832
26833 In a formula, @code{rewrite(@var{expr}, @var{rules}, @var{n})}
26834 does a rewriting operation. Here @var{expr} is the expression
26835 being rewritten, @var{rules} is the rule, vector of rules, or
26836 variable containing the rules, and @var{n} is the optional
26837 iteration limit, which may be a positive integer, a negative
26838 integer, or @samp{inf} or @samp{-inf}. If @var{n} is omitted
26839 the @code{iterations} value from the rule set is used; if both
26840 are omitted, 100 is used.
26841
26842 @node Multi-Phase Rewrite Rules, Selections with Rewrite Rules, Nested Formulas with Rewrite Rules, Rewrite Rules
26843 @subsection Multi-Phase Rewrite Rules
26844
26845 @noindent
26846 It is possible to separate a rewrite rule set into several @dfn{phases}.
26847 During each phase, certain rules will be enabled while certain others
26848 will be disabled. A @dfn{phase schedule} controls the order in which
26849 phases occur during the rewriting process.
26850
26851 @ignore
26852 @starindex
26853 @end ignore
26854 @tindex phase
26855 @vindex all
26856 If a call to the marker function @code{phase} appears in the rules
26857 vector in place of a rule, all rules following that point will be
26858 members of the phase(s) identified in the arguments to @code{phase}.
26859 Phases are given integer numbers. The markers @samp{phase()} and
26860 @samp{phase(all)} both mean the following rules belong to all phases;
26861 this is the default at the start of the rule set.
26862
26863 If you do not explicitly schedule the phases, Calc sorts all phase
26864 numbers that appear in the rule set and executes the phases in
26865 ascending order. For example, the rule set
26866
26867 @example
26868 @group
26869 [ f0(x) := g0(x),
26870 phase(1),
26871 f1(x) := g1(x),
26872 phase(2),
26873 f2(x) := g2(x),
26874 phase(3),
26875 f3(x) := g3(x),
26876 phase(1,2),
26877 f4(x) := g4(x) ]
26878 @end group
26879 @end example
26880
26881 @noindent
26882 has three phases, 1 through 3. Phase 1 consists of the @code{f0},
26883 @code{f1}, and @code{f4} rules (in that order). Phase 2 consists of
26884 @code{f0}, @code{f2}, and @code{f4}. Phase 3 consists of @code{f0}
26885 and @code{f3}.
26886
26887 When Calc rewrites a formula using this rule set, it first rewrites
26888 the formula using only the phase 1 rules until no further changes are
26889 possible. Then it switches to the phase 2 rule set and continues
26890 until no further changes occur, then finally rewrites with phase 3.
26891 When no more phase 3 rules apply, rewriting finishes. (This is
26892 assuming @kbd{a r} with a large enough prefix argument to allow the
26893 rewriting to run to completion; the sequence just described stops
26894 early if the number of iterations specified in the prefix argument,
26895 100 by default, is reached.)
26896
26897 During each phase, Calc descends through the nested levels of the
26898 formula as described previously. (@xref{Nested Formulas with Rewrite
26899 Rules}.) Rewriting starts at the top of the formula, then works its
26900 way down to the parts, then goes back to the top and works down again.
26901 The phase 2 rules do not begin until no phase 1 rules apply anywhere
26902 in the formula.
26903
26904 @ignore
26905 @starindex
26906 @end ignore
26907 @tindex schedule
26908 A @code{schedule} marker appearing in the rule set (anywhere, but
26909 conventionally at the top) changes the default schedule of phases.
26910 In the simplest case, @code{schedule} has a sequence of phase numbers
26911 for arguments; each phase number is invoked in turn until the
26912 arguments to @code{schedule} are exhausted. Thus adding
26913 @samp{schedule(3,2,1)} at the top of the above rule set would
26914 reverse the order of the phases; @samp{schedule(1,2,3)} would have
26915 no effect since this is the default schedule; and @samp{schedule(1,2,1,3)}
26916 would give phase 1 a second chance after phase 2 has completed, before
26917 moving on to phase 3.
26918
26919 Any argument to @code{schedule} can instead be a vector of phase
26920 numbers (or even of sub-vectors). Then the sub-sequence of phases
26921 described by the vector are tried repeatedly until no change occurs
26922 in any phase in the sequence. For example, @samp{schedule([1, 2], 3)}
26923 tries phase 1, then phase 2, then, if either phase made any changes
26924 to the formula, repeats these two phases until they can make no
26925 further progress. Finally, it goes on to phase 3 for finishing
26926 touches.
26927
26928 Also, items in @code{schedule} can be variable names as well as
26929 numbers. A variable name is interpreted as the name of a function
26930 to call on the whole formula. For example, @samp{schedule(1, simplify)}
26931 says to apply the phase-1 rules (presumably, all of them), then to
26932 call @code{simplify} which is the function name equivalent of @kbd{a s}.
26933 Likewise, @samp{schedule([1, simplify])} says to alternate between
26934 phase 1 and @kbd{a s} until no further changes occur.
26935
26936 Phases can be used purely to improve efficiency; if it is known that
26937 a certain group of rules will apply only at the beginning of rewriting,
26938 and a certain other group will apply only at the end, then rewriting
26939 will be faster if these groups are identified as separate phases.
26940 Once the phase 1 rules are done, Calc can put them aside and no longer
26941 spend any time on them while it works on phase 2.
26942
26943 There are also some problems that can only be solved with several
26944 rewrite phases. For a real-world example of a multi-phase rule set,
26945 examine the set @code{FitRules}, which is used by the curve-fitting
26946 command to convert a model expression to linear form.
26947 @xref{Curve Fitting Details}. This set is divided into four phases.
26948 The first phase rewrites certain kinds of expressions to be more
26949 easily linearizable, but less computationally efficient. After the
26950 linear components have been picked out, the final phase includes the
26951 opposite rewrites to put each component back into an efficient form.
26952 If both sets of rules were included in one big phase, Calc could get
26953 into an infinite loop going back and forth between the two forms.
26954
26955 Elsewhere in @code{FitRules}, the components are first isolated,
26956 then recombined where possible to reduce the complexity of the linear
26957 fit, then finally packaged one component at a time into vectors.
26958 If the packaging rules were allowed to begin before the recombining
26959 rules were finished, some components might be put away into vectors
26960 before they had a chance to recombine. By putting these rules in
26961 two separate phases, this problem is neatly avoided.
26962
26963 @node Selections with Rewrite Rules, Matching Commands, Multi-Phase Rewrite Rules, Rewrite Rules
26964 @subsection Selections with Rewrite Rules
26965
26966 @noindent
26967 If a sub-formula of the current formula is selected (as by @kbd{j s};
26968 @pxref{Selecting Subformulas}), the @kbd{a r} (@code{calc-rewrite})
26969 command applies only to that sub-formula. Together with a negative
26970 prefix argument, you can use this fact to apply a rewrite to one
26971 specific part of a formula without affecting any other parts.
26972
26973 @kindex j r
26974 @pindex calc-rewrite-selection
26975 The @kbd{j r} (@code{calc-rewrite-selection}) command allows more
26976 sophisticated operations on selections. This command prompts for
26977 the rules in the same way as @kbd{a r}, but it then applies those
26978 rules to the whole formula in question even though a sub-formula
26979 of it has been selected. However, the selected sub-formula will
26980 first have been surrounded by a @samp{select( )} function call.
26981 (Calc's evaluator does not understand the function name @code{select};
26982 this is only a tag used by the @kbd{j r} command.)
26983
26984 For example, suppose the formula on the stack is @samp{2 (a + b)^2}
26985 and the sub-formula @samp{a + b} is selected. This formula will
26986 be rewritten to @samp{2 select(a + b)^2} and then the rewrite
26987 rules will be applied in the usual way. The rewrite rules can
26988 include references to @code{select} to tell where in the pattern
26989 the selected sub-formula should appear.
26990
26991 If there is still exactly one @samp{select( )} function call in
26992 the formula after rewriting is done, it indicates which part of
26993 the formula should be selected afterwards. Otherwise, the
26994 formula will be unselected.
26995
26996 You can make @kbd{j r} act much like @kbd{a r} by enclosing both parts
26997 of the rewrite rule with @samp{select()}. However, @kbd{j r}
26998 allows you to use the current selection in more flexible ways.
26999 Suppose you wished to make a rule which removed the exponent from
27000 the selected term; the rule @samp{select(a)^x := select(a)} would
27001 work. In the above example, it would rewrite @samp{2 select(a + b)^2}
27002 to @samp{2 select(a + b)}. This would then be returned to the
27003 stack as @samp{2 (a + b)} with the @samp{a + b} selected.
27004
27005 The @kbd{j r} command uses one iteration by default, unlike
27006 @kbd{a r} which defaults to 100 iterations. A numeric prefix
27007 argument affects @kbd{j r} in the same way as @kbd{a r}.
27008 @xref{Nested Formulas with Rewrite Rules}.
27009
27010 As with other selection commands, @kbd{j r} operates on the stack
27011 entry that contains the cursor. (If the cursor is on the top-of-stack
27012 @samp{.} marker, it works as if the cursor were on the formula
27013 at stack level 1.)
27014
27015 If you don't specify a set of rules, the rules are taken from the
27016 top of the stack, just as with @kbd{a r}. In this case, the
27017 cursor must indicate stack entry 2 or above as the formula to be
27018 rewritten (otherwise the same formula would be used as both the
27019 target and the rewrite rules).
27020
27021 If the indicated formula has no selection, the cursor position within
27022 the formula temporarily selects a sub-formula for the purposes of this
27023 command. If the cursor is not on any sub-formula (e.g., it is in
27024 the line-number area to the left of the formula), the @samp{select( )}
27025 markers are ignored by the rewrite mechanism and the rules are allowed
27026 to apply anywhere in the formula.
27027
27028 As a special feature, the normal @kbd{a r} command also ignores
27029 @samp{select( )} calls in rewrite rules. For example, if you used the
27030 above rule @samp{select(a)^x := select(a)} with @kbd{a r}, it would apply
27031 the rule as if it were @samp{a^x := a}. Thus, you can write general
27032 purpose rules with @samp{select( )} hints inside them so that they
27033 will ``do the right thing'' in both @kbd{a r} and @kbd{j r},
27034 both with and without selections.
27035
27036 @node Matching Commands, Automatic Rewrites, Selections with Rewrite Rules, Rewrite Rules
27037 @subsection Matching Commands
27038
27039 @noindent
27040 @kindex a m
27041 @pindex calc-match
27042 @tindex match
27043 The @kbd{a m} (@code{calc-match}) [@code{match}] function takes a
27044 vector of formulas and a rewrite-rule-style pattern, and produces
27045 a vector of all formulas which match the pattern. The command
27046 prompts you to enter the pattern; as for @kbd{a r}, you can enter
27047 a single pattern (i.e., a formula with meta-variables), or a
27048 vector of patterns, or a variable which contains patterns, or
27049 you can give a blank response in which case the patterns are taken
27050 from the top of the stack. The pattern set will be compiled once
27051 and saved if it is stored in a variable. If there are several
27052 patterns in the set, vector elements are kept if they match any
27053 of the patterns.
27054
27055 For example, @samp{match(a+b, [x, x+y, x-y, 7, x+y+z])}
27056 will return @samp{[x+y, x-y, x+y+z]}.
27057
27058 The @code{import} mechanism is not available for pattern sets.
27059
27060 The @kbd{a m} command can also be used to extract all vector elements
27061 which satisfy any condition: The pattern @samp{x :: x>0} will select
27062 all the positive vector elements.
27063
27064 @kindex I a m
27065 @tindex matchnot
27066 With the Inverse flag [@code{matchnot}], this command extracts all
27067 vector elements which do @emph{not} match the given pattern.
27068
27069 @ignore
27070 @starindex
27071 @end ignore
27072 @tindex matches
27073 There is also a function @samp{matches(@var{x}, @var{p})} which
27074 evaluates to 1 if expression @var{x} matches pattern @var{p}, or
27075 to 0 otherwise. This is sometimes useful for including into the
27076 conditional clauses of other rewrite rules.
27077
27078 @ignore
27079 @starindex
27080 @end ignore
27081 @tindex vmatches
27082 The function @code{vmatches} is just like @code{matches}, except
27083 that if the match succeeds it returns a vector of assignments to
27084 the meta-variables instead of the number 1. For example,
27085 @samp{vmatches(f(1,2), f(a,b))} returns @samp{[a := 1, b := 2]}.
27086 If the match fails, the function returns the number 0.
27087
27088 @node Automatic Rewrites, Debugging Rewrites, Matching Commands, Rewrite Rules
27089 @subsection Automatic Rewrites
27090
27091 @noindent
27092 @cindex @code{EvalRules} variable
27093 @vindex EvalRules
27094 It is possible to get Calc to apply a set of rewrite rules on all
27095 results, effectively adding to the built-in set of default
27096 simplifications. To do this, simply store your rule set in the
27097 variable @code{EvalRules}. There is a convenient @kbd{s E} command
27098 for editing @code{EvalRules}; @pxref{Operations on Variables}.
27099
27100 For example, suppose you want @samp{sin(a + b)} to be expanded out
27101 to @samp{sin(b) cos(a) + cos(b) sin(a)} wherever it appears, and
27102 similarly for @samp{cos(a + b)}. The corresponding rewrite rule
27103 set would be,
27104
27105 @smallexample
27106 @group
27107 [ sin(a + b) := cos(a) sin(b) + sin(a) cos(b),
27108 cos(a + b) := cos(a) cos(b) - sin(a) sin(b) ]
27109 @end group
27110 @end smallexample
27111
27112 To apply these manually, you could put them in a variable called
27113 @code{trigexp} and then use @kbd{a r trigexp} every time you wanted
27114 to expand trig functions. But if instead you store them in the
27115 variable @code{EvalRules}, they will automatically be applied to all
27116 sines and cosines of sums. Then, with @samp{2 x} and @samp{45} on
27117 the stack, typing @kbd{+ S} will (assuming Degrees mode) result in
27118 @samp{0.7071 sin(2 x) + 0.7071 cos(2 x)} automatically.
27119
27120 As each level of a formula is evaluated, the rules from
27121 @code{EvalRules} are applied before the default simplifications.
27122 Rewriting continues until no further @code{EvalRules} apply.
27123 Note that this is different from the usual order of application of
27124 rewrite rules: @code{EvalRules} works from the bottom up, simplifying
27125 the arguments to a function before the function itself, while @kbd{a r}
27126 applies rules from the top down.
27127
27128 Because the @code{EvalRules} are tried first, you can use them to
27129 override the normal behavior of any built-in Calc function.
27130
27131 It is important not to write a rule that will get into an infinite
27132 loop. For example, the rule set @samp{[f(0) := 1, f(n) := n f(n-1)]}
27133 appears to be a good definition of a factorial function, but it is
27134 unsafe. Imagine what happens if @samp{f(2.5)} is simplified. Calc
27135 will continue to subtract 1 from this argument forever without reaching
27136 zero. A safer second rule would be @samp{f(n) := n f(n-1) :: n>0}.
27137 Another dangerous rule is @samp{g(x, y) := g(y, x)}. Rewriting
27138 @samp{g(2, 4)}, this would bounce back and forth between that and
27139 @samp{g(4, 2)} forever. If an infinite loop in @code{EvalRules}
27140 occurs, Emacs will eventually stop with a ``Computation got stuck
27141 or ran too long'' message.
27142
27143 Another subtle difference between @code{EvalRules} and regular rewrites
27144 concerns rules that rewrite a formula into an identical formula. For
27145 example, @samp{f(n) := f(floor(n))} ``fails to match'' when @expr{n} is
27146 already an integer. But in @code{EvalRules} this case is detected only
27147 if the righthand side literally becomes the original formula before any
27148 further simplification. This means that @samp{f(n) := f(floor(n))} will
27149 get into an infinite loop if it occurs in @code{EvalRules}. Calc will
27150 replace @samp{f(6)} with @samp{f(floor(6))}, which is different from
27151 @samp{f(6)}, so it will consider the rule to have matched and will
27152 continue simplifying that formula; first the argument is simplified
27153 to get @samp{f(6)}, then the rule matches again to get @samp{f(floor(6))}
27154 again, ad infinitum. A much safer rule would check its argument first,
27155 say, with @samp{f(n) := f(floor(n)) :: !dint(n)}.
27156
27157 (What really happens is that the rewrite mechanism substitutes the
27158 meta-variables in the righthand side of a rule, compares to see if the
27159 result is the same as the original formula and fails if so, then uses
27160 the default simplifications to simplify the result and compares again
27161 (and again fails if the formula has simplified back to its original
27162 form). The only special wrinkle for the @code{EvalRules} is that the
27163 same rules will come back into play when the default simplifications
27164 are used. What Calc wants to do is build @samp{f(floor(6))}, see that
27165 this is different from the original formula, simplify to @samp{f(6)},
27166 see that this is the same as the original formula, and thus halt the
27167 rewriting. But while simplifying, @samp{f(6)} will again trigger
27168 the same @code{EvalRules} rule and Calc will get into a loop inside
27169 the rewrite mechanism itself.)
27170
27171 The @code{phase}, @code{schedule}, and @code{iterations} markers do
27172 not work in @code{EvalRules}. If the rule set is divided into phases,
27173 only the phase 1 rules are applied, and the schedule is ignored.
27174 The rules are always repeated as many times as possible.
27175
27176 The @code{EvalRules} are applied to all function calls in a formula,
27177 but not to numbers (and other number-like objects like error forms),
27178 nor to vectors or individual variable names. (Though they will apply
27179 to @emph{components} of vectors and error forms when appropriate.) You
27180 might try to make a variable @code{phihat} which automatically expands
27181 to its definition without the need to press @kbd{=} by writing the
27182 rule @samp{quote(phihat) := (1-sqrt(5))/2}, but unfortunately this rule
27183 will not work as part of @code{EvalRules}.
27184
27185 Finally, another limitation is that Calc sometimes calls its built-in
27186 functions directly rather than going through the default simplifications.
27187 When it does this, @code{EvalRules} will not be able to override those
27188 functions. For example, when you take the absolute value of the complex
27189 number @expr{(2, 3)}, Calc computes @samp{sqrt(2*2 + 3*3)} by calling
27190 the multiplication, addition, and square root functions directly rather
27191 than applying the default simplifications to this formula. So an
27192 @code{EvalRules} rule that (perversely) rewrites @samp{sqrt(13) := 6}
27193 would not apply. (However, if you put Calc into Symbolic mode so that
27194 @samp{sqrt(13)} will be left in symbolic form by the built-in square
27195 root function, your rule will be able to apply. But if the complex
27196 number were @expr{(3,4)}, so that @samp{sqrt(25)} must be calculated,
27197 then Symbolic mode will not help because @samp{sqrt(25)} can be
27198 evaluated exactly to 5.)
27199
27200 One subtle restriction that normally only manifests itself with
27201 @code{EvalRules} is that while a given rewrite rule is in the process
27202 of being checked, that same rule cannot be recursively applied. Calc
27203 effectively removes the rule from its rule set while checking the rule,
27204 then puts it back once the match succeeds or fails. (The technical
27205 reason for this is that compiled pattern programs are not reentrant.)
27206 For example, consider the rule @samp{foo(x) := x :: foo(x/2) > 0}
27207 attempting to match @samp{foo(8)}. This rule will be inactive while
27208 the condition @samp{foo(4) > 0} is checked, even though it might be
27209 an integral part of evaluating that condition. Note that this is not
27210 a problem for the more usual recursive type of rule, such as
27211 @samp{foo(x) := foo(x/2)}, because there the rule has succeeded and
27212 been reactivated by the time the righthand side is evaluated.
27213
27214 If @code{EvalRules} has no stored value (its default state), or if
27215 anything but a vector is stored in it, then it is ignored.
27216
27217 Even though Calc's rewrite mechanism is designed to compare rewrite
27218 rules to formulas as quickly as possible, storing rules in
27219 @code{EvalRules} may make Calc run substantially slower. This is
27220 particularly true of rules where the top-level call is a commonly used
27221 function, or is not fixed. The rule @samp{f(n) := n f(n-1) :: n>0} will
27222 only activate the rewrite mechanism for calls to the function @code{f},
27223 but @samp{lg(n) + lg(m) := lg(n m)} will check every @samp{+} operator.
27224
27225 @smallexample
27226 apply(f, [a*b]) := apply(f, [a]) + apply(f, [b]) :: in(f, [ln, log10])
27227 @end smallexample
27228
27229 @noindent
27230 may seem more ``efficient'' than two separate rules for @code{ln} and
27231 @code{log10}, but actually it is vastly less efficient because rules
27232 with @code{apply} as the top-level pattern must be tested against
27233 @emph{every} function call that is simplified.
27234
27235 @cindex @code{AlgSimpRules} variable
27236 @vindex AlgSimpRules
27237 Suppose you want @samp{sin(a + b)} to be expanded out not all the time,
27238 but only when @kbd{a s} is used to simplify the formula. The variable
27239 @code{AlgSimpRules} holds rules for this purpose. The @kbd{a s} command
27240 will apply @code{EvalRules} and @code{AlgSimpRules} to the formula, as
27241 well as all of its built-in simplifications.
27242
27243 Most of the special limitations for @code{EvalRules} don't apply to
27244 @code{AlgSimpRules}. Calc simply does an @kbd{a r AlgSimpRules}
27245 command with an infinite repeat count as the first step of @kbd{a s}.
27246 It then applies its own built-in simplifications throughout the
27247 formula, and then repeats these two steps (along with applying the
27248 default simplifications) until no further changes are possible.
27249
27250 @cindex @code{ExtSimpRules} variable
27251 @cindex @code{UnitSimpRules} variable
27252 @vindex ExtSimpRules
27253 @vindex UnitSimpRules
27254 There are also @code{ExtSimpRules} and @code{UnitSimpRules} variables
27255 that are used by @kbd{a e} and @kbd{u s}, respectively; these commands
27256 also apply @code{EvalRules} and @code{AlgSimpRules}. The variable
27257 @code{IntegSimpRules} contains simplification rules that are used
27258 only during integration by @kbd{a i}.
27259
27260 @node Debugging Rewrites, Examples of Rewrite Rules, Automatic Rewrites, Rewrite Rules
27261 @subsection Debugging Rewrites
27262
27263 @noindent
27264 If a buffer named @samp{*Trace*} exists, the rewrite mechanism will
27265 record some useful information there as it operates. The original
27266 formula is written there, as is the result of each successful rewrite,
27267 and the final result of the rewriting. All phase changes are also
27268 noted.
27269
27270 Calc always appends to @samp{*Trace*}. You must empty this buffer
27271 yourself periodically if it is in danger of growing unwieldy.
27272
27273 Note that the rewriting mechanism is substantially slower when the
27274 @samp{*Trace*} buffer exists, even if the buffer is not visible on
27275 the screen. Once you are done, you will probably want to kill this
27276 buffer (with @kbd{C-x k *Trace* @key{RET}}). If you leave it in
27277 existence and forget about it, all your future rewrite commands will
27278 be needlessly slow.
27279
27280 @node Examples of Rewrite Rules, , Debugging Rewrites, Rewrite Rules
27281 @subsection Examples of Rewrite Rules
27282
27283 @noindent
27284 Returning to the example of substituting the pattern
27285 @samp{sin(x)^2 + cos(x)^2} with 1, we saw that the rule
27286 @samp{opt(a) sin(x)^2 + opt(a) cos(x)^2 := a} does a good job of
27287 finding suitable cases. Another solution would be to use the rule
27288 @samp{cos(x)^2 := 1 - sin(x)^2}, followed by algebraic simplification
27289 if necessary. This rule will be the most effective way to do the job,
27290 but at the expense of making some changes that you might not desire.
27291
27292 Another algebraic rewrite rule is @samp{exp(x+y) := exp(x) exp(y)}.
27293 To make this work with the @w{@kbd{j r}} command so that it can be
27294 easily targeted to a particular exponential in a large formula,
27295 you might wish to write the rule as @samp{select(exp(x+y)) :=
27296 select(exp(x) exp(y))}. The @samp{select} markers will be
27297 ignored by the regular @kbd{a r} command
27298 (@pxref{Selections with Rewrite Rules}).
27299
27300 A surprisingly useful rewrite rule is @samp{a/(b-c) := a*(b+c)/(b^2-c^2)}.
27301 This will simplify the formula whenever @expr{b} and/or @expr{c} can
27302 be made simpler by squaring. For example, applying this rule to
27303 @samp{2 / (sqrt(2) + 3)} yields @samp{6:7 - 2:7 sqrt(2)} (assuming
27304 Symbolic mode has been enabled to keep the square root from being
27305 evaluated to a floating-point approximation). This rule is also
27306 useful when working with symbolic complex numbers, e.g.,
27307 @samp{(a + b i) / (c + d i)}.
27308
27309 As another example, we could define our own ``triangular numbers'' function
27310 with the rules @samp{[tri(0) := 0, tri(n) := n + tri(n-1) :: n>0]}. Enter
27311 this vector and store it in a variable: @kbd{@w{s t} trirules}. Now, given
27312 a suitable formula like @samp{tri(5)} on the stack, type @samp{a r trirules}
27313 to apply these rules repeatedly. After six applications, @kbd{a r} will
27314 stop with 15 on the stack. Once these rules are debugged, it would probably
27315 be most useful to add them to @code{EvalRules} so that Calc will evaluate
27316 the new @code{tri} function automatically. We could then use @kbd{Z K} on
27317 the keyboard macro @kbd{' tri($) @key{RET}} to make a command that applies
27318 @code{tri} to the value on the top of the stack. @xref{Programming}.
27319
27320 @cindex Quaternions
27321 The following rule set, contributed by
27322 @texline Fran\c cois
27323 @infoline Francois
27324 Pinard, implements @dfn{quaternions}, a generalization of the concept of
27325 complex numbers. Quaternions have four components, and are here
27326 represented by function calls @samp{quat(@var{w}, [@var{x}, @var{y},
27327 @var{z}])} with ``real part'' @var{w} and the three ``imaginary'' parts
27328 collected into a vector. Various arithmetical operations on quaternions
27329 are supported. To use these rules, either add them to @code{EvalRules},
27330 or create a command based on @kbd{a r} for simplifying quaternion
27331 formulas. A convenient way to enter quaternions would be a command
27332 defined by a keyboard macro containing: @kbd{' quat($$$$, [$$$, $$, $])
27333 @key{RET}}.
27334
27335 @smallexample
27336 [ quat(w, x, y, z) := quat(w, [x, y, z]),
27337 quat(w, [0, 0, 0]) := w,
27338 abs(quat(w, v)) := hypot(w, v),
27339 -quat(w, v) := quat(-w, -v),
27340 r + quat(w, v) := quat(r + w, v) :: real(r),
27341 r - quat(w, v) := quat(r - w, -v) :: real(r),
27342 quat(w1, v1) + quat(w2, v2) := quat(w1 + w2, v1 + v2),
27343 r * quat(w, v) := quat(r * w, r * v) :: real(r),
27344 plain(quat(w1, v1) * quat(w2, v2))
27345 := quat(w1 * w2 - v1 * v2, w1 * v2 + w2 * v1 + cross(v1, v2)),
27346 quat(w1, v1) / r := quat(w1 / r, v1 / r) :: real(r),
27347 z / quat(w, v) := z * quatinv(quat(w, v)),
27348 quatinv(quat(w, v)) := quat(w, -v) / (w^2 + v^2),
27349 quatsqr(quat(w, v)) := quat(w^2 - v^2, 2 * w * v),
27350 quat(w, v)^k := quatsqr(quat(w, v)^(k / 2))
27351 :: integer(k) :: k > 0 :: k % 2 = 0,
27352 quat(w, v)^k := quatsqr(quat(w, v)^((k - 1) / 2)) * quat(w, v)
27353 :: integer(k) :: k > 2,
27354 quat(w, v)^-k := quatinv(quat(w, v)^k) :: integer(k) :: k > 0 ]
27355 @end smallexample
27356
27357 Quaternions, like matrices, have non-commutative multiplication.
27358 In other words, @expr{q1 * q2 = q2 * q1} is not necessarily true if
27359 @expr{q1} and @expr{q2} are @code{quat} forms. The @samp{quat*quat}
27360 rule above uses @code{plain} to prevent Calc from rearranging the
27361 product. It may also be wise to add the line @samp{[quat(), matrix]}
27362 to the @code{Decls} matrix, to ensure that Calc's other algebraic
27363 operations will not rearrange a quaternion product. @xref{Declarations}.
27364
27365 These rules also accept a four-argument @code{quat} form, converting
27366 it to the preferred form in the first rule. If you would rather see
27367 results in the four-argument form, just append the two items
27368 @samp{phase(2), quat(w, [x, y, z]) := quat(w, x, y, z)} to the end
27369 of the rule set. (But remember that multi-phase rule sets don't work
27370 in @code{EvalRules}.)
27371
27372 @node Units, Store and Recall, Algebra, Top
27373 @chapter Operating on Units
27374
27375 @noindent
27376 One special interpretation of algebraic formulas is as numbers with units.
27377 For example, the formula @samp{5 m / s^2} can be read ``five meters
27378 per second squared.'' The commands in this chapter help you
27379 manipulate units expressions in this form. Units-related commands
27380 begin with the @kbd{u} prefix key.
27381
27382 @menu
27383 * Basic Operations on Units::
27384 * The Units Table::
27385 * Predefined Units::
27386 * User-Defined Units::
27387 @end menu
27388
27389 @node Basic Operations on Units, The Units Table, Units, Units
27390 @section Basic Operations on Units
27391
27392 @noindent
27393 A @dfn{units expression} is a formula which is basically a number
27394 multiplied and/or divided by one or more @dfn{unit names}, which may
27395 optionally be raised to integer powers. Actually, the value part need not
27396 be a number; any product or quotient involving unit names is a units
27397 expression. Many of the units commands will also accept any formula,
27398 where the command applies to all units expressions which appear in the
27399 formula.
27400
27401 A unit name is a variable whose name appears in the @dfn{unit table},
27402 or a variable whose name is a prefix character like @samp{k} (for ``kilo'')
27403 or @samp{u} (for ``micro'') followed by a name in the unit table.
27404 A substantial table of built-in units is provided with Calc;
27405 @pxref{Predefined Units}. You can also define your own unit names;
27406 @pxref{User-Defined Units}.
27407
27408 Note that if the value part of a units expression is exactly @samp{1},
27409 it will be removed by the Calculator's automatic algebra routines: The
27410 formula @samp{1 mm} is ``simplified'' to @samp{mm}. This is only a
27411 display anomaly, however; @samp{mm} will work just fine as a
27412 representation of one millimeter.
27413
27414 You may find that Algebraic mode (@pxref{Algebraic Entry}) makes working
27415 with units expressions easier. Otherwise, you will have to remember
27416 to hit the apostrophe key every time you wish to enter units.
27417
27418 @kindex u s
27419 @pindex calc-simplify-units
27420 @ignore
27421 @mindex usimpl@idots
27422 @end ignore
27423 @tindex usimplify
27424 The @kbd{u s} (@code{calc-simplify-units}) [@code{usimplify}] command
27425 simplifies a units
27426 expression. It uses @kbd{a s} (@code{calc-simplify}) to simplify the
27427 expression first as a regular algebraic formula; it then looks for
27428 features that can be further simplified by converting one object's units
27429 to be compatible with another's. For example, @samp{5 m + 23 mm} will
27430 simplify to @samp{5.023 m}. When different but compatible units are
27431 added, the righthand term's units are converted to match those of the
27432 lefthand term. @xref{Simplification Modes}, for a way to have this done
27433 automatically at all times.
27434
27435 Units simplification also handles quotients of two units with the same
27436 dimensionality, as in @w{@samp{2 in s/L cm}} to @samp{5.08 s/L}; fractional
27437 powers of unit expressions, as in @samp{sqrt(9 mm^2)} to @samp{3 mm} and
27438 @samp{sqrt(9 acre)} to a quantity in meters; and @code{floor},
27439 @code{ceil}, @code{round}, @code{rounde}, @code{roundu}, @code{trunc},
27440 @code{float}, @code{frac}, @code{abs}, and @code{clean}
27441 applied to units expressions, in which case
27442 the operation in question is applied only to the numeric part of the
27443 expression. Finally, trigonometric functions of quantities with units
27444 of angle are evaluated, regardless of the current angular mode.
27445
27446 @kindex u c
27447 @pindex calc-convert-units
27448 The @kbd{u c} (@code{calc-convert-units}) command converts a units
27449 expression to new, compatible units. For example, given the units
27450 expression @samp{55 mph}, typing @kbd{u c m/s @key{RET}} produces
27451 @samp{24.5872 m/s}. If the units you request are inconsistent with
27452 the original units, the number will be converted into your units
27453 times whatever ``remainder'' units are left over. For example,
27454 converting @samp{55 mph} into acres produces @samp{6.08e-3 acre / m s}.
27455 (Recall that multiplication binds more strongly than division in Calc
27456 formulas, so the units here are acres per meter-second.) Remainder
27457 units are expressed in terms of ``fundamental'' units like @samp{m} and
27458 @samp{s}, regardless of the input units.
27459
27460 One special exception is that if you specify a single unit name, and
27461 a compatible unit appears somewhere in the units expression, then
27462 that compatible unit will be converted to the new unit and the
27463 remaining units in the expression will be left alone. For example,
27464 given the input @samp{980 cm/s^2}, the command @kbd{u c ms} will
27465 change the @samp{s} to @samp{ms} to get @samp{9.8e-4 cm/ms^2}.
27466 The ``remainder unit'' @samp{cm} is left alone rather than being
27467 changed to the base unit @samp{m}.
27468
27469 You can use explicit unit conversion instead of the @kbd{u s} command
27470 to gain more control over the units of the result of an expression.
27471 For example, given @samp{5 m + 23 mm}, you can type @kbd{u c m} or
27472 @kbd{u c mm} to express the result in either meters or millimeters.
27473 (For that matter, you could type @kbd{u c fath} to express the result
27474 in fathoms, if you preferred!)
27475
27476 In place of a specific set of units, you can also enter one of the
27477 units system names @code{si}, @code{mks} (equivalent), or @code{cgs}.
27478 For example, @kbd{u c si @key{RET}} converts the expression into
27479 International System of Units (SI) base units. Also, @kbd{u c base}
27480 converts to Calc's base units, which are the same as @code{si} units
27481 except that @code{base} uses @samp{g} as the fundamental unit of mass
27482 whereas @code{si} uses @samp{kg}.
27483
27484 @cindex Composite units
27485 The @kbd{u c} command also accepts @dfn{composite units}, which
27486 are expressed as the sum of several compatible unit names. For
27487 example, converting @samp{30.5 in} to units @samp{mi+ft+in} (miles,
27488 feet, and inches) produces @samp{2 ft + 6.5 in}. Calc first
27489 sorts the unit names into order of decreasing relative size.
27490 It then accounts for as much of the input quantity as it can
27491 using an integer number times the largest unit, then moves on
27492 to the next smaller unit, and so on. Only the smallest unit
27493 may have a non-integer amount attached in the result. A few
27494 standard unit names exist for common combinations, such as
27495 @code{mfi} for @samp{mi+ft+in}, and @code{tpo} for @samp{ton+lb+oz}.
27496 Composite units are expanded as if by @kbd{a x}, so that
27497 @samp{(ft+in)/hr} is first converted to @samp{ft/hr+in/hr}.
27498
27499 If the value on the stack does not contain any units, @kbd{u c} will
27500 prompt first for the old units which this value should be considered
27501 to have, then for the new units. Assuming the old and new units you
27502 give are consistent with each other, the result also will not contain
27503 any units. For example, @kbd{@w{u c} cm @key{RET} in @key{RET}} converts the number
27504 2 on the stack to 5.08.
27505
27506 @kindex u b
27507 @pindex calc-base-units
27508 The @kbd{u b} (@code{calc-base-units}) command is shorthand for
27509 @kbd{u c base}; it converts the units expression on the top of the
27510 stack into @code{base} units. If @kbd{u s} does not simplify a
27511 units expression as far as you would like, try @kbd{u b}.
27512
27513 The @kbd{u c} and @kbd{u b} commands treat temperature units (like
27514 @samp{degC} and @samp{K}) as relative temperatures. For example,
27515 @kbd{u c} converts @samp{10 degC} to @samp{18 degF}: A change of 10
27516 degrees Celsius corresponds to a change of 18 degrees Fahrenheit.
27517
27518 @kindex u t
27519 @pindex calc-convert-temperature
27520 @cindex Temperature conversion
27521 The @kbd{u t} (@code{calc-convert-temperature}) command converts
27522 absolute temperatures. The value on the stack must be a simple units
27523 expression with units of temperature only. This command would convert
27524 @samp{10 degC} to @samp{50 degF}, the equivalent temperature on the
27525 Fahrenheit scale.
27526
27527 @kindex u r
27528 @pindex calc-remove-units
27529 @kindex u x
27530 @pindex calc-extract-units
27531 The @kbd{u r} (@code{calc-remove-units}) command removes units from the
27532 formula at the top of the stack. The @kbd{u x}
27533 (@code{calc-extract-units}) command extracts only the units portion of a
27534 formula. These commands essentially replace every term of the formula
27535 that does or doesn't (respectively) look like a unit name by the
27536 constant 1, then resimplify the formula.
27537
27538 @kindex u a
27539 @pindex calc-autorange-units
27540 The @kbd{u a} (@code{calc-autorange-units}) command turns on and off a
27541 mode in which unit prefixes like @code{k} (``kilo'') are automatically
27542 applied to keep the numeric part of a units expression in a reasonable
27543 range. This mode affects @kbd{u s} and all units conversion commands
27544 except @kbd{u b}. For example, with autoranging on, @samp{12345 Hz}
27545 will be simplified to @samp{12.345 kHz}. Autoranging is useful for
27546 some kinds of units (like @code{Hz} and @code{m}), but is probably
27547 undesirable for non-metric units like @code{ft} and @code{tbsp}.
27548 (Composite units are more appropriate for those; see above.)
27549
27550 Autoranging always applies the prefix to the leftmost unit name.
27551 Calc chooses the largest prefix that causes the number to be greater
27552 than or equal to 1.0. Thus an increasing sequence of adjusted times
27553 would be @samp{1 ms, 10 ms, 100 ms, 1 s, 10 s, 100 s, 1 ks}.
27554 Generally the rule of thumb is that the number will be adjusted
27555 to be in the interval @samp{[1 .. 1000)}, although there are several
27556 exceptions to this rule. First, if the unit has a power then this
27557 is not possible; @samp{0.1 s^2} simplifies to @samp{100000 ms^2}.
27558 Second, the ``centi-'' prefix is allowed to form @code{cm} (centimeters),
27559 but will not apply to other units. The ``deci-,'' ``deka-,'' and
27560 ``hecto-'' prefixes are never used. Thus the allowable interval is
27561 @samp{[1 .. 10)} for millimeters and @samp{[1 .. 100)} for centimeters.
27562 Finally, a prefix will not be added to a unit if the resulting name
27563 is also the actual name of another unit; @samp{1e-15 t} would normally
27564 be considered a ``femto-ton,'' but it is written as @samp{1000 at}
27565 (1000 atto-tons) instead because @code{ft} would be confused with feet.
27566
27567 @node The Units Table, Predefined Units, Basic Operations on Units, Units
27568 @section The Units Table
27569
27570 @noindent
27571 @kindex u v
27572 @pindex calc-enter-units-table
27573 The @kbd{u v} (@code{calc-enter-units-table}) command displays the units table
27574 in another buffer called @code{*Units Table*}. Each entry in this table
27575 gives the unit name as it would appear in an expression, the definition
27576 of the unit in terms of simpler units, and a full name or description of
27577 the unit. Fundamental units are defined as themselves; these are the
27578 units produced by the @kbd{u b} command. The fundamental units are
27579 meters, seconds, grams, kelvins, amperes, candelas, moles, radians,
27580 and steradians.
27581
27582 The Units Table buffer also displays the Unit Prefix Table. Note that
27583 two prefixes, ``kilo'' and ``hecto,'' accept either upper- or lower-case
27584 prefix letters. @samp{Meg} is also accepted as a synonym for the @samp{M}
27585 prefix. Whenever a unit name can be interpreted as either a built-in name
27586 or a prefix followed by another built-in name, the former interpretation
27587 wins. For example, @samp{2 pt} means two pints, not two pico-tons.
27588
27589 The Units Table buffer, once created, is not rebuilt unless you define
27590 new units. To force the buffer to be rebuilt, give any numeric prefix
27591 argument to @kbd{u v}.
27592
27593 @kindex u V
27594 @pindex calc-view-units-table
27595 The @kbd{u V} (@code{calc-view-units-table}) command is like @kbd{u v} except
27596 that the cursor is not moved into the Units Table buffer. You can
27597 type @kbd{u V} again to remove the Units Table from the display. To
27598 return from the Units Table buffer after a @kbd{u v}, type @kbd{M-# c}
27599 again or use the regular Emacs @w{@kbd{C-x o}} (@code{other-window})
27600 command. You can also kill the buffer with @kbd{C-x k} if you wish;
27601 the actual units table is safely stored inside the Calculator.
27602
27603 @kindex u g
27604 @pindex calc-get-unit-definition
27605 The @kbd{u g} (@code{calc-get-unit-definition}) command retrieves a unit's
27606 defining expression and pushes it onto the Calculator stack. For example,
27607 @kbd{u g in} will produce the expression @samp{2.54 cm}. This is the
27608 same definition for the unit that would appear in the Units Table buffer.
27609 Note that this command works only for actual unit names; @kbd{u g km}
27610 will report that no such unit exists, for example, because @code{km} is
27611 really the unit @code{m} with a @code{k} (``kilo'') prefix. To see a
27612 definition of a unit in terms of base units, it is easier to push the
27613 unit name on the stack and then reduce it to base units with @kbd{u b}.
27614
27615 @kindex u e
27616 @pindex calc-explain-units
27617 The @kbd{u e} (@code{calc-explain-units}) command displays an English
27618 description of the units of the expression on the stack. For example,
27619 for the expression @samp{62 km^2 g / s^2 mol K}, the description is
27620 ``Square-Kilometer Gram per (Second-squared Mole Degree-Kelvin).'' This
27621 command uses the English descriptions that appear in the righthand
27622 column of the Units Table.
27623
27624 @node Predefined Units, User-Defined Units, The Units Table, Units
27625 @section Predefined Units
27626
27627 @noindent
27628 Since the exact definitions of many kinds of units have evolved over the
27629 years, and since certain countries sometimes have local differences in
27630 their definitions, it is a good idea to examine Calc's definition of a
27631 unit before depending on its exact value. For example, there are three
27632 different units for gallons, corresponding to the US (@code{gal}),
27633 Canadian (@code{galC}), and British (@code{galUK}) definitions. Also,
27634 note that @code{oz} is a standard ounce of mass, @code{ozt} is a Troy
27635 ounce, and @code{ozfl} is a fluid ounce.
27636
27637 The temperature units corresponding to degrees Kelvin and Centigrade
27638 (Celsius) are the same in this table, since most units commands treat
27639 temperatures as being relative. The @code{calc-convert-temperature}
27640 command has special rules for handling the different absolute magnitudes
27641 of the various temperature scales.
27642
27643 The unit of volume ``liters'' can be referred to by either the lower-case
27644 @code{l} or the upper-case @code{L}.
27645
27646 The unit @code{A} stands for Amperes; the name @code{Ang} is used
27647 @tex
27648 for \AA ngstroms.
27649 @end tex
27650 @ifinfo
27651 for Angstroms.
27652 @end ifinfo
27653
27654 The unit @code{pt} stands for pints; the name @code{point} stands for
27655 a typographical point, defined by @samp{72 point = 1 in}. There is
27656 also @code{tpt}, which stands for a printer's point as defined by the
27657 @TeX{} typesetting system: @samp{72.27 tpt = 1 in}.
27658
27659 The unit @code{e} stands for the elementary (electron) unit of charge;
27660 because algebra command could mistake this for the special constant
27661 @expr{e}, Calc provides the alternate unit name @code{ech} which is
27662 preferable to @code{e}.
27663
27664 The name @code{g} stands for one gram of mass; there is also @code{gf},
27665 one gram of force. (Likewise for @kbd{lb}, pounds, and @kbd{lbf}.)
27666 Meanwhile, one ``@expr{g}'' of acceleration is denoted @code{ga}.
27667
27668 The unit @code{ton} is a U.S. ton of @samp{2000 lb}, and @code{t} is
27669 a metric ton of @samp{1000 kg}.
27670
27671 The names @code{s} (or @code{sec}) and @code{min} refer to units of
27672 time; @code{arcsec} and @code{arcmin} are units of angle.
27673
27674 Some ``units'' are really physical constants; for example, @code{c}
27675 represents the speed of light, and @code{h} represents Planck's
27676 constant. You can use these just like other units: converting
27677 @samp{.5 c} to @samp{m/s} expresses one-half the speed of light in
27678 meters per second. You can also use this merely as a handy reference;
27679 the @kbd{u g} command gets the definition of one of these constants
27680 in its normal terms, and @kbd{u b} expresses the definition in base
27681 units.
27682
27683 Two units, @code{pi} and @code{fsc} (the fine structure constant,
27684 approximately @mathit{1/137}) are dimensionless. The units simplification
27685 commands simply treat these names as equivalent to their corresponding
27686 values. However you can, for example, use @kbd{u c} to convert a pure
27687 number into multiples of the fine structure constant, or @kbd{u b} to
27688 convert this back into a pure number. (When @kbd{u c} prompts for the
27689 ``old units,'' just enter a blank line to signify that the value
27690 really is unitless.)
27691
27692 @c Describe angular units, luminosity vs. steradians problem.
27693
27694 @node User-Defined Units, , Predefined Units, Units
27695 @section User-Defined Units
27696
27697 @noindent
27698 Calc provides ways to get quick access to your selected ``favorite''
27699 units, as well as ways to define your own new units.
27700
27701 @kindex u 0-9
27702 @pindex calc-quick-units
27703 @vindex Units
27704 @cindex @code{Units} variable
27705 @cindex Quick units
27706 To select your favorite units, store a vector of unit names or
27707 expressions in the Calc variable @code{Units}. The @kbd{u 1}
27708 through @kbd{u 9} commands (@code{calc-quick-units}) provide access
27709 to these units. If the value on the top of the stack is a plain
27710 number (with no units attached), then @kbd{u 1} gives it the
27711 specified units. (Basically, it multiplies the number by the
27712 first item in the @code{Units} vector.) If the number on the
27713 stack @emph{does} have units, then @kbd{u 1} converts that number
27714 to the new units. For example, suppose the vector @samp{[in, ft]}
27715 is stored in @code{Units}. Then @kbd{30 u 1} will create the
27716 expression @samp{30 in}, and @kbd{u 2} will convert that expression
27717 to @samp{2.5 ft}.
27718
27719 The @kbd{u 0} command accesses the tenth element of @code{Units}.
27720 Only ten quick units may be defined at a time. If the @code{Units}
27721 variable has no stored value (the default), or if its value is not
27722 a vector, then the quick-units commands will not function. The
27723 @kbd{s U} command is a convenient way to edit the @code{Units}
27724 variable; @pxref{Operations on Variables}.
27725
27726 @kindex u d
27727 @pindex calc-define-unit
27728 @cindex User-defined units
27729 The @kbd{u d} (@code{calc-define-unit}) command records the units
27730 expression on the top of the stack as the definition for a new,
27731 user-defined unit. For example, putting @samp{16.5 ft} on the stack and
27732 typing @kbd{u d rod} defines the new unit @samp{rod} to be equivalent to
27733 16.5 feet. The unit conversion and simplification commands will now
27734 treat @code{rod} just like any other unit of length. You will also be
27735 prompted for an optional English description of the unit, which will
27736 appear in the Units Table.
27737
27738 @kindex u u
27739 @pindex calc-undefine-unit
27740 The @kbd{u u} (@code{calc-undefine-unit}) command removes a user-defined
27741 unit. It is not possible to remove one of the predefined units,
27742 however.
27743
27744 If you define a unit with an existing unit name, your new definition
27745 will replace the original definition of that unit. If the unit was a
27746 predefined unit, the old definition will not be replaced, only
27747 ``shadowed.'' The built-in definition will reappear if you later use
27748 @kbd{u u} to remove the shadowing definition.
27749
27750 To create a new fundamental unit, use either 1 or the unit name itself
27751 as the defining expression. Otherwise the expression can involve any
27752 other units that you like (except for composite units like @samp{mfi}).
27753 You can create a new composite unit with a sum of other units as the
27754 defining expression. The next unit operation like @kbd{u c} or @kbd{u v}
27755 will rebuild the internal unit table incorporating your modifications.
27756 Note that erroneous definitions (such as two units defined in terms of
27757 each other) will not be detected until the unit table is next rebuilt;
27758 @kbd{u v} is a convenient way to force this to happen.
27759
27760 Temperature units are treated specially inside the Calculator; it is not
27761 possible to create user-defined temperature units.
27762
27763 @kindex u p
27764 @pindex calc-permanent-units
27765 @cindex @file{.emacs} file, user-defined units
27766 The @kbd{u p} (@code{calc-permanent-units}) command stores the user-defined
27767 units in your @file{.emacs} file, so that the units will still be
27768 available in subsequent Emacs sessions. If there was already a set of
27769 user-defined units in your @file{.emacs} file, it is replaced by the
27770 new set. (@xref{General Mode Commands}, for a way to tell Calc to use
27771 a different file instead of @file{.emacs}.)
27772
27773 @node Store and Recall, Graphics, Units, Top
27774 @chapter Storing and Recalling
27775
27776 @noindent
27777 Calculator variables are really just Lisp variables that contain numbers
27778 or formulas in a form that Calc can understand. The commands in this
27779 section allow you to manipulate variables conveniently. Commands related
27780 to variables use the @kbd{s} prefix key.
27781
27782 @menu
27783 * Storing Variables::
27784 * Recalling Variables::
27785 * Operations on Variables::
27786 * Let Command::
27787 * Evaluates-To Operator::
27788 @end menu
27789
27790 @node Storing Variables, Recalling Variables, Store and Recall, Store and Recall
27791 @section Storing Variables
27792
27793 @noindent
27794 @kindex s s
27795 @pindex calc-store
27796 @cindex Storing variables
27797 @cindex Quick variables
27798 @vindex q0
27799 @vindex q9
27800 The @kbd{s s} (@code{calc-store}) command stores the value at the top of
27801 the stack into a specified variable. It prompts you to enter the
27802 name of the variable. If you press a single digit, the value is stored
27803 immediately in one of the ``quick'' variables @code{q0} through
27804 @code{q9}. Or you can enter any variable name.
27805
27806 @kindex s t
27807 @pindex calc-store-into
27808 The @kbd{s s} command leaves the stored value on the stack. There is
27809 also an @kbd{s t} (@code{calc-store-into}) command, which removes a
27810 value from the stack and stores it in a variable.
27811
27812 If the top of stack value is an equation @samp{a = 7} or assignment
27813 @samp{a := 7} with a variable on the lefthand side, then Calc will
27814 assign that variable with that value by default, i.e., if you type
27815 @kbd{s s @key{RET}} or @kbd{s t @key{RET}}. In this example, the
27816 value 7 would be stored in the variable @samp{a}. (If you do type
27817 a variable name at the prompt, the top-of-stack value is stored in
27818 its entirety, even if it is an equation: @samp{s s b @key{RET}}
27819 with @samp{a := 7} on the stack stores @samp{a := 7} in @code{b}.)
27820
27821 In fact, the top of stack value can be a vector of equations or
27822 assignments with different variables on their lefthand sides; the
27823 default will be to store all the variables with their corresponding
27824 righthand sides simultaneously.
27825
27826 It is also possible to type an equation or assignment directly at
27827 the prompt for the @kbd{s s} or @kbd{s t} command: @kbd{s s foo = 7}.
27828 In this case the expression to the right of the @kbd{=} or @kbd{:=}
27829 symbol is evaluated as if by the @kbd{=} command, and that value is
27830 stored in the variable. No value is taken from the stack; @kbd{s s}
27831 and @kbd{s t} are equivalent when used in this way.
27832
27833 @kindex s 0-9
27834 @kindex t 0-9
27835 The prefix keys @kbd{s} and @kbd{t} may be followed immediately by a
27836 digit; @kbd{s 9} is equivalent to @kbd{s s 9}, and @kbd{t 9} is
27837 equivalent to @kbd{s t 9}. (The @kbd{t} prefix is otherwise used
27838 for trail and time/date commands.)
27839
27840 @kindex s +
27841 @kindex s -
27842 @ignore
27843 @mindex @idots
27844 @end ignore
27845 @kindex s *
27846 @ignore
27847 @mindex @null
27848 @end ignore
27849 @kindex s /
27850 @ignore
27851 @mindex @null
27852 @end ignore
27853 @kindex s ^
27854 @ignore
27855 @mindex @null
27856 @end ignore
27857 @kindex s |
27858 @ignore
27859 @mindex @null
27860 @end ignore
27861 @kindex s n
27862 @ignore
27863 @mindex @null
27864 @end ignore
27865 @kindex s &
27866 @ignore
27867 @mindex @null
27868 @end ignore
27869 @kindex s [
27870 @ignore
27871 @mindex @null
27872 @end ignore
27873 @kindex s ]
27874 @pindex calc-store-plus
27875 @pindex calc-store-minus
27876 @pindex calc-store-times
27877 @pindex calc-store-div
27878 @pindex calc-store-power
27879 @pindex calc-store-concat
27880 @pindex calc-store-neg
27881 @pindex calc-store-inv
27882 @pindex calc-store-decr
27883 @pindex calc-store-incr
27884 There are also several ``arithmetic store'' commands. For example,
27885 @kbd{s +} removes a value from the stack and adds it to the specified
27886 variable. The other arithmetic stores are @kbd{s -}, @kbd{s *}, @kbd{s /},
27887 @kbd{s ^}, and @w{@kbd{s |}} (vector concatenation), plus @kbd{s n} and
27888 @kbd{s &} which negate or invert the value in a variable, and @w{@kbd{s [}}
27889 and @kbd{s ]} which decrease or increase a variable by one.
27890
27891 All the arithmetic stores accept the Inverse prefix to reverse the
27892 order of the operands. If @expr{v} represents the contents of the
27893 variable, and @expr{a} is the value drawn from the stack, then regular
27894 @w{@kbd{s -}} assigns
27895 @texline @math{v \coloneq v - a},
27896 @infoline @expr{v := v - a},
27897 but @kbd{I s -} assigns
27898 @texline @math{v \coloneq a - v}.
27899 @infoline @expr{v := a - v}.
27900 While @kbd{I s *} might seem pointless, it is
27901 useful if matrix multiplication is involved. Actually, all the
27902 arithmetic stores use formulas designed to behave usefully both
27903 forwards and backwards:
27904
27905 @example
27906 @group
27907 s + v := v + a v := a + v
27908 s - v := v - a v := a - v
27909 s * v := v * a v := a * v
27910 s / v := v / a v := a / v
27911 s ^ v := v ^ a v := a ^ v
27912 s | v := v | a v := a | v
27913 s n v := v / (-1) v := (-1) / v
27914 s & v := v ^ (-1) v := (-1) ^ v
27915 s [ v := v - 1 v := 1 - v
27916 s ] v := v - (-1) v := (-1) - v
27917 @end group
27918 @end example
27919
27920 In the last four cases, a numeric prefix argument will be used in
27921 place of the number one. (For example, @kbd{M-2 s ]} increases
27922 a variable by 2, and @kbd{M-2 I s ]} replaces a variable by
27923 minus-two minus the variable.
27924
27925 The first six arithmetic stores can also be typed @kbd{s t +}, @kbd{s t -},
27926 etc. The commands @kbd{s s +}, @kbd{s s -}, and so on are analogous
27927 arithmetic stores that don't remove the value @expr{a} from the stack.
27928
27929 All arithmetic stores report the new value of the variable in the
27930 Trail for your information. They signal an error if the variable
27931 previously had no stored value. If default simplifications have been
27932 turned off, the arithmetic stores temporarily turn them on for numeric
27933 arguments only (i.e., they temporarily do an @kbd{m N} command).
27934 @xref{Simplification Modes}. Large vectors put in the trail by
27935 these commands always use abbreviated (@kbd{t .}) mode.
27936
27937 @kindex s m
27938 @pindex calc-store-map
27939 The @kbd{s m} command is a general way to adjust a variable's value
27940 using any Calc function. It is a ``mapping'' command analogous to
27941 @kbd{V M}, @kbd{V R}, etc. @xref{Reducing and Mapping}, to see
27942 how to specify a function for a mapping command. Basically,
27943 all you do is type the Calc command key that would invoke that
27944 function normally. For example, @kbd{s m n} applies the @kbd{n}
27945 key to negate the contents of the variable, so @kbd{s m n} is
27946 equivalent to @kbd{s n}. Also, @kbd{s m Q} takes the square root
27947 of the value stored in a variable, @kbd{s m v v} uses @kbd{v v} to
27948 reverse the vector stored in the variable, and @kbd{s m H I S}
27949 takes the hyperbolic arcsine of the variable contents.
27950
27951 If the mapping function takes two or more arguments, the additional
27952 arguments are taken from the stack; the old value of the variable
27953 is provided as the first argument. Thus @kbd{s m -} with @expr{a}
27954 on the stack computes @expr{v - a}, just like @kbd{s -}. With the
27955 Inverse prefix, the variable's original value becomes the @emph{last}
27956 argument instead of the first. Thus @kbd{I s m -} is also
27957 equivalent to @kbd{I s -}.
27958
27959 @kindex s x
27960 @pindex calc-store-exchange
27961 The @kbd{s x} (@code{calc-store-exchange}) command exchanges the value
27962 of a variable with the value on the top of the stack. Naturally, the
27963 variable must already have a stored value for this to work.
27964
27965 You can type an equation or assignment at the @kbd{s x} prompt. The
27966 command @kbd{s x a=6} takes no values from the stack; instead, it
27967 pushes the old value of @samp{a} on the stack and stores @samp{a = 6}.
27968
27969 @kindex s u
27970 @pindex calc-unstore
27971 @cindex Void variables
27972 @cindex Un-storing variables
27973 Until you store something in them, variables are ``void,'' that is, they
27974 contain no value at all. If they appear in an algebraic formula they
27975 will be left alone even if you press @kbd{=} (@code{calc-evaluate}).
27976 The @kbd{s u} (@code{calc-unstore}) command returns a variable to the
27977 void state.
27978
27979 The only variables with predefined values are the ``special constants''
27980 @code{pi}, @code{e}, @code{i}, @code{phi}, and @code{gamma}. You are free
27981 to unstore these variables or to store new values into them if you like,
27982 although some of the algebraic-manipulation functions may assume these
27983 variables represent their standard values. Calc displays a warning if
27984 you change the value of one of these variables, or of one of the other
27985 special variables @code{inf}, @code{uinf}, and @code{nan} (which are
27986 normally void).
27987
27988 Note that @code{pi} doesn't actually have 3.14159265359 stored
27989 in it, but rather a special magic value that evaluates to @cpi{}
27990 at the current precision. Likewise @code{e}, @code{i}, and
27991 @code{phi} evaluate according to the current precision or polar mode.
27992 If you recall a value from @code{pi} and store it back, this magic
27993 property will be lost.
27994
27995 @kindex s c
27996 @pindex calc-copy-variable
27997 The @kbd{s c} (@code{calc-copy-variable}) command copies the stored
27998 value of one variable to another. It differs from a simple @kbd{s r}
27999 followed by an @kbd{s t} in two important ways. First, the value never
28000 goes on the stack and thus is never rounded, evaluated, or simplified
28001 in any way; it is not even rounded down to the current precision.
28002 Second, the ``magic'' contents of a variable like @code{e} can
28003 be copied into another variable with this command, perhaps because
28004 you need to unstore @code{e} right now but you wish to put it
28005 back when you're done. The @kbd{s c} command is the only way to
28006 manipulate these magic values intact.
28007
28008 @node Recalling Variables, Operations on Variables, Storing Variables, Store and Recall
28009 @section Recalling Variables
28010
28011 @noindent
28012 @kindex s r
28013 @pindex calc-recall
28014 @cindex Recalling variables
28015 The most straightforward way to extract the stored value from a variable
28016 is to use the @kbd{s r} (@code{calc-recall}) command. This command prompts
28017 for a variable name (similarly to @code{calc-store}), looks up the value
28018 of the specified variable, and pushes that value onto the stack. It is
28019 an error to try to recall a void variable.
28020
28021 It is also possible to recall the value from a variable by evaluating a
28022 formula containing that variable. For example, @kbd{' a @key{RET} =} is
28023 the same as @kbd{s r a @key{RET}} except that if the variable is void, the
28024 former will simply leave the formula @samp{a} on the stack whereas the
28025 latter will produce an error message.
28026
28027 @kindex r 0-9
28028 The @kbd{r} prefix may be followed by a digit, so that @kbd{r 9} is
28029 equivalent to @kbd{s r 9}. (The @kbd{r} prefix is otherwise unused
28030 in the current version of Calc.)
28031
28032 @node Operations on Variables, Let Command, Recalling Variables, Store and Recall
28033 @section Other Operations on Variables
28034
28035 @noindent
28036 @kindex s e
28037 @pindex calc-edit-variable
28038 The @kbd{s e} (@code{calc-edit-variable}) command edits the stored
28039 value of a variable without ever putting that value on the stack
28040 or simplifying or evaluating the value. It prompts for the name of
28041 the variable to edit. If the variable has no stored value, the
28042 editing buffer will start out empty. If the editing buffer is
28043 empty when you press @kbd{C-c C-c} to finish, the variable will
28044 be made void. @xref{Editing Stack Entries}, for a general
28045 description of editing.
28046
28047 The @kbd{s e} command is especially useful for creating and editing
28048 rewrite rules which are stored in variables. Sometimes these rules
28049 contain formulas which must not be evaluated until the rules are
28050 actually used. (For example, they may refer to @samp{deriv(x,y)},
28051 where @code{x} will someday become some expression involving @code{y};
28052 if you let Calc evaluate the rule while you are defining it, Calc will
28053 replace @samp{deriv(x,y)} with 0 because the formula @code{x} does
28054 not itself refer to @code{y}.) By contrast, recalling the variable,
28055 editing with @kbd{`}, and storing will evaluate the variable's value
28056 as a side effect of putting the value on the stack.
28057
28058 @kindex s A
28059 @kindex s D
28060 @ignore
28061 @mindex @idots
28062 @end ignore
28063 @kindex s E
28064 @ignore
28065 @mindex @null
28066 @end ignore
28067 @kindex s F
28068 @ignore
28069 @mindex @null
28070 @end ignore
28071 @kindex s G
28072 @ignore
28073 @mindex @null
28074 @end ignore
28075 @kindex s H
28076 @ignore
28077 @mindex @null
28078 @end ignore
28079 @kindex s I
28080 @ignore
28081 @mindex @null
28082 @end ignore
28083 @kindex s L
28084 @ignore
28085 @mindex @null
28086 @end ignore
28087 @kindex s P
28088 @ignore
28089 @mindex @null
28090 @end ignore
28091 @kindex s R
28092 @ignore
28093 @mindex @null
28094 @end ignore
28095 @kindex s T
28096 @ignore
28097 @mindex @null
28098 @end ignore
28099 @kindex s U
28100 @ignore
28101 @mindex @null
28102 @end ignore
28103 @kindex s X
28104 @pindex calc-store-AlgSimpRules
28105 @pindex calc-store-Decls
28106 @pindex calc-store-EvalRules
28107 @pindex calc-store-FitRules
28108 @pindex calc-store-GenCount
28109 @pindex calc-store-Holidays
28110 @pindex calc-store-IntegLimit
28111 @pindex calc-store-LineStyles
28112 @pindex calc-store-PointStyles
28113 @pindex calc-store-PlotRejects
28114 @pindex calc-store-TimeZone
28115 @pindex calc-store-Units
28116 @pindex calc-store-ExtSimpRules
28117 There are several special-purpose variable-editing commands that
28118 use the @kbd{s} prefix followed by a shifted letter:
28119
28120 @table @kbd
28121 @item s A
28122 Edit @code{AlgSimpRules}. @xref{Algebraic Simplifications}.
28123 @item s D
28124 Edit @code{Decls}. @xref{Declarations}.
28125 @item s E
28126 Edit @code{EvalRules}. @xref{Default Simplifications}.
28127 @item s F
28128 Edit @code{FitRules}. @xref{Curve Fitting}.
28129 @item s G
28130 Edit @code{GenCount}. @xref{Solving Equations}.
28131 @item s H
28132 Edit @code{Holidays}. @xref{Business Days}.
28133 @item s I
28134 Edit @code{IntegLimit}. @xref{Calculus}.
28135 @item s L
28136 Edit @code{LineStyles}. @xref{Graphics}.
28137 @item s P
28138 Edit @code{PointStyles}. @xref{Graphics}.
28139 @item s R
28140 Edit @code{PlotRejects}. @xref{Graphics}.
28141 @item s T
28142 Edit @code{TimeZone}. @xref{Time Zones}.
28143 @item s U
28144 Edit @code{Units}. @xref{User-Defined Units}.
28145 @item s X
28146 Edit @code{ExtSimpRules}. @xref{Unsafe Simplifications}.
28147 @end table
28148
28149 These commands are just versions of @kbd{s e} that use fixed variable
28150 names rather than prompting for the variable name.
28151
28152 @kindex s p
28153 @pindex calc-permanent-variable
28154 @cindex Storing variables
28155 @cindex Permanent variables
28156 @cindex @file{.emacs} file, variables
28157 The @kbd{s p} (@code{calc-permanent-variable}) command saves a
28158 variable's value permanently in your @file{.emacs} file, so that its
28159 value will still be available in future Emacs sessions. You can
28160 re-execute @w{@kbd{s p}} later on to update the saved value, but the
28161 only way to remove a saved variable is to edit your @file{.emacs} file
28162 by hand. (@xref{General Mode Commands}, for a way to tell Calc to
28163 use a different file instead of @file{.emacs}.)
28164
28165 If you do not specify the name of a variable to save (i.e.,
28166 @kbd{s p @key{RET}}), all Calc variables with defined values
28167 are saved except for the special constants @code{pi}, @code{e},
28168 @code{i}, @code{phi}, and @code{gamma}; the variables @code{TimeZone}
28169 and @code{PlotRejects};
28170 @code{FitRules}, @code{DistribRules}, and other built-in rewrite
28171 rules; and @code{PlotData@var{n}} variables generated
28172 by the graphics commands. (You can still save these variables by
28173 explicitly naming them in an @kbd{s p} command.)
28174
28175 @kindex s i
28176 @pindex calc-insert-variables
28177 The @kbd{s i} (@code{calc-insert-variables}) command writes
28178 the values of all Calc variables into a specified buffer.
28179 The variables are written with the prefix @code{var-} in the form of
28180 Lisp @code{setq} commands
28181 which store the values in string form. You can place these commands
28182 in your @file{.emacs} buffer if you wish, though in this case it
28183 would be easier to use @kbd{s p @key{RET}}. (Note that @kbd{s i}
28184 omits the same set of variables as @w{@kbd{s p @key{RET}}}; the difference
28185 is that @kbd{s i} will store the variables in any buffer, and it also
28186 stores in a more human-readable format.)
28187
28188 @node Let Command, Evaluates-To Operator, Operations on Variables, Store and Recall
28189 @section The Let Command
28190
28191 @noindent
28192 @kindex s l
28193 @pindex calc-let
28194 @cindex Variables, temporary assignment
28195 @cindex Temporary assignment to variables
28196 If you have an expression like @samp{a+b^2} on the stack and you wish to
28197 compute its value where @expr{b=3}, you can simply store 3 in @expr{b} and
28198 then press @kbd{=} to reevaluate the formula. This has the side-effect
28199 of leaving the stored value of 3 in @expr{b} for future operations.
28200
28201 The @kbd{s l} (@code{calc-let}) command evaluates a formula under a
28202 @emph{temporary} assignment of a variable. It stores the value on the
28203 top of the stack into the specified variable, then evaluates the
28204 second-to-top stack entry, then restores the original value (or lack of one)
28205 in the variable. Thus after @kbd{'@w{ }a+b^2 @key{RET} 3 s l b @key{RET}},
28206 the stack will contain the formula @samp{a + 9}. The subsequent command
28207 @kbd{@w{5 s l a} @key{RET}} will replace this formula with the number 14.
28208 The variables @samp{a} and @samp{b} are not permanently affected in any way
28209 by these commands.
28210
28211 The value on the top of the stack may be an equation or assignment, or
28212 a vector of equations or assignments, in which case the default will be
28213 analogous to the case of @kbd{s t @key{RET}}. @xref{Storing Variables}.
28214
28215 Also, you can answer the variable-name prompt with an equation or
28216 assignment: @kbd{s l b=3 @key{RET}} is the same as storing 3 on the stack
28217 and typing @kbd{s l b @key{RET}}.
28218
28219 The @kbd{a b} (@code{calc-substitute}) command is another way to substitute
28220 a variable with a value in a formula. It does an actual substitution
28221 rather than temporarily assigning the variable and evaluating. For
28222 example, letting @expr{n=2} in @samp{f(n pi)} with @kbd{a b} will
28223 produce @samp{f(2 pi)}, whereas @kbd{s l} would give @samp{f(6.28)}
28224 since the evaluation step will also evaluate @code{pi}.
28225
28226 @node Evaluates-To Operator, , Let Command, Store and Recall
28227 @section The Evaluates-To Operator
28228
28229 @noindent
28230 @tindex evalto
28231 @tindex =>
28232 @cindex Evaluates-to operator
28233 @cindex @samp{=>} operator
28234 The special algebraic symbol @samp{=>} is known as the @dfn{evaluates-to
28235 operator}. (It will show up as an @code{evalto} function call in
28236 other language modes like Pascal and @TeX{}.) This is a binary
28237 operator, that is, it has a lefthand and a righthand argument,
28238 although it can be entered with the righthand argument omitted.
28239
28240 A formula like @samp{@var{a} => @var{b}} is evaluated by Calc as
28241 follows: First, @var{a} is not simplified or modified in any
28242 way. The previous value of argument @var{b} is thrown away; the
28243 formula @var{a} is then copied and evaluated as if by the @kbd{=}
28244 command according to all current modes and stored variable values,
28245 and the result is installed as the new value of @var{b}.
28246
28247 For example, suppose you enter the algebraic formula @samp{2 + 3 => 17}.
28248 The number 17 is ignored, and the lefthand argument is left in its
28249 unevaluated form; the result is the formula @samp{2 + 3 => 5}.
28250
28251 @kindex s =
28252 @pindex calc-evalto
28253 You can enter an @samp{=>} formula either directly using algebraic
28254 entry (in which case the righthand side may be omitted since it is
28255 going to be replaced right away anyhow), or by using the @kbd{s =}
28256 (@code{calc-evalto}) command, which takes @var{a} from the stack
28257 and replaces it with @samp{@var{a} => @var{b}}.
28258
28259 Calc keeps track of all @samp{=>} operators on the stack, and
28260 recomputes them whenever anything changes that might affect their
28261 values, i.e., a mode setting or variable value. This occurs only
28262 if the @samp{=>} operator is at the top level of the formula, or
28263 if it is part of a top-level vector. In other words, pushing
28264 @samp{2 + (a => 17)} will change the 17 to the actual value of
28265 @samp{a} when you enter the formula, but the result will not be
28266 dynamically updated when @samp{a} is changed later because the
28267 @samp{=>} operator is buried inside a sum. However, a vector
28268 of @samp{=>} operators will be recomputed, since it is convenient
28269 to push a vector like @samp{[a =>, b =>, c =>]} on the stack to
28270 make a concise display of all the variables in your problem.
28271 (Another way to do this would be to use @samp{[a, b, c] =>},
28272 which provides a slightly different format of display. You
28273 can use whichever you find easiest to read.)
28274
28275 @kindex m C
28276 @pindex calc-auto-recompute
28277 The @kbd{m C} (@code{calc-auto-recompute}) command allows you to
28278 turn this automatic recomputation on or off. If you turn
28279 recomputation off, you must explicitly recompute an @samp{=>}
28280 operator on the stack in one of the usual ways, such as by
28281 pressing @kbd{=}. Turning recomputation off temporarily can save
28282 a lot of time if you will be changing several modes or variables
28283 before you look at the @samp{=>} entries again.
28284
28285 Most commands are not especially useful with @samp{=>} operators
28286 as arguments. For example, given @samp{x + 2 => 17}, it won't
28287 work to type @kbd{1 +} to get @samp{x + 3 => 18}. If you want
28288 to operate on the lefthand side of the @samp{=>} operator on
28289 the top of the stack, type @kbd{j 1} (that's the digit ``one'')
28290 to select the lefthand side, execute your commands, then type
28291 @kbd{j u} to unselect.
28292
28293 All current modes apply when an @samp{=>} operator is computed,
28294 including the current simplification mode. Recall that the
28295 formula @samp{x + y + x} is not handled by Calc's default
28296 simplifications, but the @kbd{a s} command will reduce it to
28297 the simpler form @samp{y + 2 x}. You can also type @kbd{m A}
28298 to enable an Algebraic Simplification mode in which the
28299 equivalent of @kbd{a s} is used on all of Calc's results.
28300 If you enter @samp{x + y + x =>} normally, the result will
28301 be @samp{x + y + x => x + y + x}. If you change to
28302 Algebraic Simplification mode, the result will be
28303 @samp{x + y + x => y + 2 x}. However, just pressing @kbd{a s}
28304 once will have no effect on @samp{x + y + x => x + y + x},
28305 because the righthand side depends only on the lefthand side
28306 and the current mode settings, and the lefthand side is not
28307 affected by commands like @kbd{a s}.
28308
28309 The ``let'' command (@kbd{s l}) has an interesting interaction
28310 with the @samp{=>} operator. The @kbd{s l} command evaluates the
28311 second-to-top stack entry with the top stack entry supplying
28312 a temporary value for a given variable. As you might expect,
28313 if that stack entry is an @samp{=>} operator its righthand
28314 side will temporarily show this value for the variable. In
28315 fact, all @samp{=>}s on the stack will be updated if they refer
28316 to that variable. But this change is temporary in the sense
28317 that the next command that causes Calc to look at those stack
28318 entries will make them revert to the old variable value.
28319
28320 @smallexample
28321 @group
28322 2: a => a 2: a => 17 2: a => a
28323 1: a + 1 => a + 1 1: a + 1 => 18 1: a + 1 => a + 1
28324 . . .
28325
28326 17 s l a @key{RET} p 8 @key{RET}
28327 @end group
28328 @end smallexample
28329
28330 Here the @kbd{p 8} command changes the current precision,
28331 thus causing the @samp{=>} forms to be recomputed after the
28332 influence of the ``let'' is gone. The @kbd{d @key{SPC}} command
28333 (@code{calc-refresh}) is a handy way to force the @samp{=>}
28334 operators on the stack to be recomputed without any other
28335 side effects.
28336
28337 @kindex s :
28338 @pindex calc-assign
28339 @tindex assign
28340 @tindex :=
28341 Embedded mode also uses @samp{=>} operators. In Embedded mode,
28342 the lefthand side of an @samp{=>} operator can refer to variables
28343 assigned elsewhere in the file by @samp{:=} operators. The
28344 assignment operator @samp{a := 17} does not actually do anything
28345 by itself. But Embedded mode recognizes it and marks it as a sort
28346 of file-local definition of the variable. You can enter @samp{:=}
28347 operators in Algebraic mode, or by using the @kbd{s :}
28348 (@code{calc-assign}) [@code{assign}] command which takes a variable
28349 and value from the stack and replaces them with an assignment.
28350
28351 @xref{TeX Language Mode}, for the way @samp{=>} appears in
28352 @TeX{} language output. The @dfn{eqn} mode gives similar
28353 treatment to @samp{=>}.
28354
28355 @node Graphics, Kill and Yank, Store and Recall, Top
28356 @chapter Graphics
28357
28358 @noindent
28359 The commands for graphing data begin with the @kbd{g} prefix key. Calc
28360 uses GNUPLOT 2.0 or 3.0 to do graphics. These commands will only work
28361 if GNUPLOT is available on your system. (While GNUPLOT sounds like
28362 a relative of GNU Emacs, it is actually completely unrelated.
28363 However, it is free software and can be obtained from the Free
28364 Software Foundation's machine @samp{prep.ai.mit.edu}.)
28365
28366 @vindex calc-gnuplot-name
28367 If you have GNUPLOT installed on your system but Calc is unable to
28368 find it, you may need to set the @code{calc-gnuplot-name} variable
28369 in your @file{.emacs} file. You may also need to set some Lisp
28370 variables to show Calc how to run GNUPLOT on your system; these
28371 are described under @kbd{g D} and @kbd{g O} below. If you are
28372 using the X window system, Calc will configure GNUPLOT for you
28373 automatically. If you have GNUPLOT 3.0 and you are not using X,
28374 Calc will configure GNUPLOT to display graphs using simple character
28375 graphics that will work on any terminal.
28376
28377 @menu
28378 * Basic Graphics::
28379 * Three Dimensional Graphics::
28380 * Managing Curves::
28381 * Graphics Options::
28382 * Devices::
28383 @end menu
28384
28385 @node Basic Graphics, Three Dimensional Graphics, Graphics, Graphics
28386 @section Basic Graphics
28387
28388 @noindent
28389 @kindex g f
28390 @pindex calc-graph-fast
28391 The easiest graphics command is @kbd{g f} (@code{calc-graph-fast}).
28392 This command takes two vectors of equal length from the stack.
28393 The vector at the top of the stack represents the ``y'' values of
28394 the various data points. The vector in the second-to-top position
28395 represents the corresponding ``x'' values. This command runs
28396 GNUPLOT (if it has not already been started by previous graphing
28397 commands) and displays the set of data points. The points will
28398 be connected by lines, and there will also be some kind of symbol
28399 to indicate the points themselves.
28400
28401 The ``x'' entry may instead be an interval form, in which case suitable
28402 ``x'' values are interpolated between the minimum and maximum values of
28403 the interval (whether the interval is open or closed is ignored).
28404
28405 The ``x'' entry may also be a number, in which case Calc uses the
28406 sequence of ``x'' values @expr{x}, @expr{x+1}, @expr{x+2}, etc.
28407 (Generally the number 0 or 1 would be used for @expr{x} in this case.)
28408
28409 The ``y'' entry may be any formula instead of a vector. Calc effectively
28410 uses @kbd{N} (@code{calc-eval-num}) to evaluate variables in the formula;
28411 the result of this must be a formula in a single (unassigned) variable.
28412 The formula is plotted with this variable taking on the various ``x''
28413 values. Graphs of formulas by default use lines without symbols at the
28414 computed data points. Note that if neither ``x'' nor ``y'' is a vector,
28415 Calc guesses at a reasonable number of data points to use. See the
28416 @kbd{g N} command below. (The ``x'' values must be either a vector
28417 or an interval if ``y'' is a formula.)
28418
28419 @ignore
28420 @starindex
28421 @end ignore
28422 @tindex xy
28423 If ``y'' is (or evaluates to) a formula of the form
28424 @samp{xy(@var{x}, @var{y})} then the result is a
28425 parametric plot. The two arguments of the fictitious @code{xy} function
28426 are used as the ``x'' and ``y'' coordinates of the curve, respectively.
28427 In this case the ``x'' vector or interval you specified is not directly
28428 visible in the graph. For example, if ``x'' is the interval @samp{[0..360]}
28429 and ``y'' is the formula @samp{xy(sin(t), cos(t))}, the resulting graph
28430 will be a circle.
28431
28432 Also, ``x'' and ``y'' may each be variable names, in which case Calc
28433 looks for suitable vectors, intervals, or formulas stored in those
28434 variables.
28435
28436 The ``x'' and ``y'' values for the data points (as pulled from the vectors,
28437 calculated from the formulas, or interpolated from the intervals) should
28438 be real numbers (integers, fractions, or floats). If either the ``x''
28439 value or the ``y'' value of a given data point is not a real number, that
28440 data point will be omitted from the graph. The points on either side
28441 of the invalid point will @emph{not} be connected by a line.
28442
28443 See the documentation for @kbd{g a} below for a description of the way
28444 numeric prefix arguments affect @kbd{g f}.
28445
28446 @cindex @code{PlotRejects} variable
28447 @vindex PlotRejects
28448 If you store an empty vector in the variable @code{PlotRejects}
28449 (i.e., @kbd{[ ] s t PlotRejects}), Calc will append information to
28450 this vector for every data point which was rejected because its
28451 ``x'' or ``y'' values were not real numbers. The result will be
28452 a matrix where each row holds the curve number, data point number,
28453 ``x'' value, and ``y'' value for a rejected data point.
28454 @xref{Evaluates-To Operator}, for a handy way to keep tabs on the
28455 current value of @code{PlotRejects}. @xref{Operations on Variables},
28456 for the @kbd{s R} command which is another easy way to examine
28457 @code{PlotRejects}.
28458
28459 @kindex g c
28460 @pindex calc-graph-clear
28461 To clear the graphics display, type @kbd{g c} (@code{calc-graph-clear}).
28462 If the GNUPLOT output device is an X window, the window will go away.
28463 Effects on other kinds of output devices will vary. You don't need
28464 to use @kbd{g c} if you don't want to---if you give another @kbd{g f}
28465 or @kbd{g p} command later on, it will reuse the existing graphics
28466 window if there is one.
28467
28468 @node Three Dimensional Graphics, Managing Curves, Basic Graphics, Graphics
28469 @section Three-Dimensional Graphics
28470
28471 @kindex g F
28472 @pindex calc-graph-fast-3d
28473 The @kbd{g F} (@code{calc-graph-fast-3d}) command makes a three-dimensional
28474 graph. It works only if you have GNUPLOT 3.0 or later; with GNUPLOT 2.0,
28475 you will see a GNUPLOT error message if you try this command.
28476
28477 The @kbd{g F} command takes three values from the stack, called ``x'',
28478 ``y'', and ``z'', respectively. As was the case for 2D graphs, there
28479 are several options for these values.
28480
28481 In the first case, ``x'' and ``y'' are each vectors (not necessarily of
28482 the same length); either or both may instead be interval forms. The
28483 ``z'' value must be a matrix with the same number of rows as elements
28484 in ``x'', and the same number of columns as elements in ``y''. The
28485 result is a surface plot where
28486 @texline @math{z_{ij}}
28487 @infoline @expr{z_ij}
28488 is the height of the point
28489 at coordinate @expr{(x_i, y_j)} on the surface. The 3D graph will
28490 be displayed from a certain default viewpoint; you can change this
28491 viewpoint by adding a @samp{set view} to the @samp{*Gnuplot Commands*}
28492 buffer as described later. See the GNUPLOT 3.0 documentation for a
28493 description of the @samp{set view} command.
28494
28495 Each point in the matrix will be displayed as a dot in the graph,
28496 and these points will be connected by a grid of lines (@dfn{isolines}).
28497
28498 In the second case, ``x'', ``y'', and ``z'' are all vectors of equal
28499 length. The resulting graph displays a 3D line instead of a surface,
28500 where the coordinates of points along the line are successive triplets
28501 of values from the input vectors.
28502
28503 In the third case, ``x'' and ``y'' are vectors or interval forms, and
28504 ``z'' is any formula involving two variables (not counting variables
28505 with assigned values). These variables are sorted into alphabetical
28506 order; the first takes on values from ``x'' and the second takes on
28507 values from ``y'' to form a matrix of results that are graphed as a
28508 3D surface.
28509
28510 @ignore
28511 @starindex
28512 @end ignore
28513 @tindex xyz
28514 If the ``z'' formula evaluates to a call to the fictitious function
28515 @samp{xyz(@var{x}, @var{y}, @var{z})}, then the result is a
28516 ``parametric surface.'' In this case, the axes of the graph are
28517 taken from the @var{x} and @var{y} values in these calls, and the
28518 ``x'' and ``y'' values from the input vectors or intervals are used only
28519 to specify the range of inputs to the formula. For example, plotting
28520 @samp{[0..360], [0..180], xyz(sin(x)*sin(y), cos(x)*sin(y), cos(y))}
28521 will draw a sphere. (Since the default resolution for 3D plots is
28522 5 steps in each of ``x'' and ``y'', this will draw a very crude
28523 sphere. You could use the @kbd{g N} command, described below, to
28524 increase this resolution, or specify the ``x'' and ``y'' values as
28525 vectors with more than 5 elements.
28526
28527 It is also possible to have a function in a regular @kbd{g f} plot
28528 evaluate to an @code{xyz} call. Since @kbd{g f} plots a line, not
28529 a surface, the result will be a 3D parametric line. For example,
28530 @samp{[[0..720], xyz(sin(x), cos(x), x)]} will plot two turns of a
28531 helix (a three-dimensional spiral).
28532
28533 As for @kbd{g f}, each of ``x'', ``y'', and ``z'' may instead be
28534 variables containing the relevant data.
28535
28536 @node Managing Curves, Graphics Options, Three Dimensional Graphics, Graphics
28537 @section Managing Curves
28538
28539 @noindent
28540 The @kbd{g f} command is really shorthand for the following commands:
28541 @kbd{C-u g d g a g p}. Likewise, @w{@kbd{g F}} is shorthand for
28542 @kbd{C-u g d g A g p}. You can gain more control over your graph
28543 by using these commands directly.
28544
28545 @kindex g a
28546 @pindex calc-graph-add
28547 The @kbd{g a} (@code{calc-graph-add}) command adds the ``curve''
28548 represented by the two values on the top of the stack to the current
28549 graph. You can have any number of curves in the same graph. When
28550 you give the @kbd{g p} command, all the curves will be drawn superimposed
28551 on the same axes.
28552
28553 The @kbd{g a} command (and many others that affect the current graph)
28554 will cause a special buffer, @samp{*Gnuplot Commands*}, to be displayed
28555 in another window. This buffer is a template of the commands that will
28556 be sent to GNUPLOT when it is time to draw the graph. The first
28557 @kbd{g a} command adds a @code{plot} command to this buffer. Succeeding
28558 @kbd{g a} commands add extra curves onto that @code{plot} command.
28559 Other graph-related commands put other GNUPLOT commands into this
28560 buffer. In normal usage you never need to work with this buffer
28561 directly, but you can if you wish. The only constraint is that there
28562 must be only one @code{plot} command, and it must be the last command
28563 in the buffer. If you want to save and later restore a complete graph
28564 configuration, you can use regular Emacs commands to save and restore
28565 the contents of the @samp{*Gnuplot Commands*} buffer.
28566
28567 @vindex PlotData1
28568 @vindex PlotData2
28569 If the values on the stack are not variable names, @kbd{g a} will invent
28570 variable names for them (of the form @samp{PlotData@var{n}}) and store
28571 the values in those variables. The ``x'' and ``y'' variables are what
28572 go into the @code{plot} command in the template. If you add a curve
28573 that uses a certain variable and then later change that variable, you
28574 can replot the graph without having to delete and re-add the curve.
28575 That's because the variable name, not the vector, interval or formula
28576 itself, is what was added by @kbd{g a}.
28577
28578 A numeric prefix argument on @kbd{g a} or @kbd{g f} changes the way
28579 stack entries are interpreted as curves. With a positive prefix
28580 argument @expr{n}, the top @expr{n} stack entries are ``y'' values
28581 for @expr{n} different curves which share a common ``x'' value in
28582 the @expr{n+1}st stack entry. (Thus @kbd{g a} with no prefix
28583 argument is equivalent to @kbd{C-u 1 g a}.)
28584
28585 A prefix of zero or plain @kbd{C-u} means to take two stack entries,
28586 ``x'' and ``y'' as usual, but to interpret ``y'' as a vector of
28587 ``y'' values for several curves that share a common ``x''.
28588
28589 A negative prefix argument tells Calc to read @expr{n} vectors from
28590 the stack; each vector @expr{[x, y]} describes an independent curve.
28591 This is the only form of @kbd{g a} that creates several curves at once
28592 that don't have common ``x'' values. (Of course, the range of ``x''
28593 values covered by all the curves ought to be roughly the same if
28594 they are to look nice on the same graph.)
28595
28596 For example, to plot
28597 @texline @math{\sin n x}
28598 @infoline @expr{sin(n x)}
28599 for integers @expr{n}
28600 from 1 to 5, you could use @kbd{v x} to create a vector of integers
28601 (@expr{n}), then @kbd{V M '} or @kbd{V M $} to map @samp{sin(n x)}
28602 across this vector. The resulting vector of formulas is suitable
28603 for use as the ``y'' argument to a @kbd{C-u g a} or @kbd{C-u g f}
28604 command.
28605
28606 @kindex g A
28607 @pindex calc-graph-add-3d
28608 The @kbd{g A} (@code{calc-graph-add-3d}) command adds a 3D curve
28609 to the graph. It is not legal to intermix 2D and 3D curves in a
28610 single graph. This command takes three arguments, ``x'', ``y'',
28611 and ``z'', from the stack. With a positive prefix @expr{n}, it
28612 takes @expr{n+2} arguments (common ``x'' and ``y'', plus @expr{n}
28613 separate ``z''s). With a zero prefix, it takes three stack entries
28614 but the ``z'' entry is a vector of curve values. With a negative
28615 prefix @expr{-n}, it takes @expr{n} vectors of the form @expr{[x, y, z]}.
28616 The @kbd{g A} command works by adding a @code{splot} (surface-plot)
28617 command to the @samp{*Gnuplot Commands*} buffer.
28618
28619 (Although @kbd{g a} adds a 2D @code{plot} command to the
28620 @samp{*Gnuplot Commands*} buffer, Calc changes this to @code{splot}
28621 before sending it to GNUPLOT if it notices that the data points are
28622 evaluating to @code{xyz} calls. It will not work to mix 2D and 3D
28623 @kbd{g a} curves in a single graph, although Calc does not currently
28624 check for this.)
28625
28626 @kindex g d
28627 @pindex calc-graph-delete
28628 The @kbd{g d} (@code{calc-graph-delete}) command deletes the most
28629 recently added curve from the graph. It has no effect if there are
28630 no curves in the graph. With a numeric prefix argument of any kind,
28631 it deletes all of the curves from the graph.
28632
28633 @kindex g H
28634 @pindex calc-graph-hide
28635 The @kbd{g H} (@code{calc-graph-hide}) command ``hides'' or ``unhides''
28636 the most recently added curve. A hidden curve will not appear in
28637 the actual plot, but information about it such as its name and line and
28638 point styles will be retained.
28639
28640 @kindex g j
28641 @pindex calc-graph-juggle
28642 The @kbd{g j} (@code{calc-graph-juggle}) command moves the curve
28643 at the end of the list (the ``most recently added curve'') to the
28644 front of the list. The next-most-recent curve is thus exposed for
28645 @w{@kbd{g d}} or similar commands to use. With @kbd{g j} you can work
28646 with any curve in the graph even though curve-related commands only
28647 affect the last curve in the list.
28648
28649 @kindex g p
28650 @pindex calc-graph-plot
28651 The @kbd{g p} (@code{calc-graph-plot}) command uses GNUPLOT to draw
28652 the graph described in the @samp{*Gnuplot Commands*} buffer. Any
28653 GNUPLOT parameters which are not defined by commands in this buffer
28654 are reset to their default values. The variables named in the @code{plot}
28655 command are written to a temporary data file and the variable names
28656 are then replaced by the file name in the template. The resulting
28657 plotting commands are fed to the GNUPLOT program. See the documentation
28658 for the GNUPLOT program for more specific information. All temporary
28659 files are removed when Emacs or GNUPLOT exits.
28660
28661 If you give a formula for ``y'', Calc will remember all the values that
28662 it calculates for the formula so that later plots can reuse these values.
28663 Calc throws out these saved values when you change any circumstances
28664 that may affect the data, such as switching from Degrees to Radians
28665 mode, or changing the value of a parameter in the formula. You can
28666 force Calc to recompute the data from scratch by giving a negative
28667 numeric prefix argument to @kbd{g p}.
28668
28669 Calc uses a fairly rough step size when graphing formulas over intervals.
28670 This is to ensure quick response. You can ``refine'' a plot by giving
28671 a positive numeric prefix argument to @kbd{g p}. Calc goes through
28672 the data points it has computed and saved from previous plots of the
28673 function, and computes and inserts a new data point midway between
28674 each of the existing points. You can refine a plot any number of times,
28675 but beware that the amount of calculation involved doubles each time.
28676
28677 Calc does not remember computed values for 3D graphs. This means the
28678 numerix prefix argument, if any, to @kbd{g p} is effectively ignored if
28679 the current graph is three-dimensional.
28680
28681 @kindex g P
28682 @pindex calc-graph-print
28683 The @kbd{g P} (@code{calc-graph-print}) command is like @kbd{g p},
28684 except that it sends the output to a printer instead of to the
28685 screen. More precisely, @kbd{g p} looks for @samp{set terminal}
28686 or @samp{set output} commands in the @samp{*Gnuplot Commands*} buffer;
28687 lacking these it uses the default settings. However, @kbd{g P}
28688 ignores @samp{set terminal} and @samp{set output} commands and
28689 uses a different set of default values. All of these values are
28690 controlled by the @kbd{g D} and @kbd{g O} commands discussed below.
28691 Provided everything is set up properly, @kbd{g p} will plot to
28692 the screen unless you have specified otherwise and @kbd{g P} will
28693 always plot to the printer.
28694
28695 @node Graphics Options, Devices, Managing Curves, Graphics
28696 @section Graphics Options
28697
28698 @noindent
28699 @kindex g g
28700 @pindex calc-graph-grid
28701 The @kbd{g g} (@code{calc-graph-grid}) command turns the ``grid''
28702 on and off. It is off by default; tick marks appear only at the
28703 edges of the graph. With the grid turned on, dotted lines appear
28704 across the graph at each tick mark. Note that this command only
28705 changes the setting in @samp{*Gnuplot Commands*}; to see the effects
28706 of the change you must give another @kbd{g p} command.
28707
28708 @kindex g b
28709 @pindex calc-graph-border
28710 The @kbd{g b} (@code{calc-graph-border}) command turns the border
28711 (the box that surrounds the graph) on and off. It is on by default.
28712 This command will only work with GNUPLOT 3.0 and later versions.
28713
28714 @kindex g k
28715 @pindex calc-graph-key
28716 The @kbd{g k} (@code{calc-graph-key}) command turns the ``key''
28717 on and off. The key is a chart in the corner of the graph that
28718 shows the correspondence between curves and line styles. It is
28719 off by default, and is only really useful if you have several
28720 curves on the same graph.
28721
28722 @kindex g N
28723 @pindex calc-graph-num-points
28724 The @kbd{g N} (@code{calc-graph-num-points}) command allows you
28725 to select the number of data points in the graph. This only affects
28726 curves where neither ``x'' nor ``y'' is specified as a vector.
28727 Enter a blank line to revert to the default value (initially 15).
28728 With no prefix argument, this command affects only the current graph.
28729 With a positive prefix argument this command changes or, if you enter
28730 a blank line, displays the default number of points used for all
28731 graphs created by @kbd{g a} that don't specify the resolution explicitly.
28732 With a negative prefix argument, this command changes or displays
28733 the default value (initially 5) used for 3D graphs created by @kbd{g A}.
28734 Note that a 3D setting of 5 means that a total of @expr{5^2 = 25} points
28735 will be computed for the surface.
28736
28737 Data values in the graph of a function are normally computed to a
28738 precision of five digits, regardless of the current precision at the
28739 time. This is usually more than adequate, but there are cases where
28740 it will not be. For example, plotting @expr{1 + x} with @expr{x} in the
28741 interval @samp{[0 ..@: 1e-6]} will round all the data points down
28742 to 1.0! Putting the command @samp{set precision @var{n}} in the
28743 @samp{*Gnuplot Commands*} buffer will cause the data to be computed
28744 at precision @var{n} instead of 5. Since this is such a rare case,
28745 there is no keystroke-based command to set the precision.
28746
28747 @kindex g h
28748 @pindex calc-graph-header
28749 The @kbd{g h} (@code{calc-graph-header}) command sets the title
28750 for the graph. This will show up centered above the graph.
28751 The default title is blank (no title).
28752
28753 @kindex g n
28754 @pindex calc-graph-name
28755 The @kbd{g n} (@code{calc-graph-name}) command sets the title of an
28756 individual curve. Like the other curve-manipulating commands, it
28757 affects the most recently added curve, i.e., the last curve on the
28758 list in the @samp{*Gnuplot Commands*} buffer. To set the title of
28759 the other curves you must first juggle them to the end of the list
28760 with @kbd{g j}, or edit the @samp{*Gnuplot Commands*} buffer by hand.
28761 Curve titles appear in the key; if the key is turned off they are
28762 not used.
28763
28764 @kindex g t
28765 @kindex g T
28766 @pindex calc-graph-title-x
28767 @pindex calc-graph-title-y
28768 The @kbd{g t} (@code{calc-graph-title-x}) and @kbd{g T}
28769 (@code{calc-graph-title-y}) commands set the titles on the ``x''
28770 and ``y'' axes, respectively. These titles appear next to the
28771 tick marks on the left and bottom edges of the graph, respectively.
28772 Calc does not have commands to control the tick marks themselves,
28773 but you can edit them into the @samp{*Gnuplot Commands*} buffer if
28774 you wish. See the GNUPLOT documentation for details.
28775
28776 @kindex g r
28777 @kindex g R
28778 @pindex calc-graph-range-x
28779 @pindex calc-graph-range-y
28780 The @kbd{g r} (@code{calc-graph-range-x}) and @kbd{g R}
28781 (@code{calc-graph-range-y}) commands set the range of values on the
28782 ``x'' and ``y'' axes, respectively. You are prompted to enter a
28783 suitable range. This should be either a pair of numbers of the
28784 form, @samp{@var{min}:@var{max}}, or a blank line to revert to the
28785 default behavior of setting the range based on the range of values
28786 in the data, or @samp{$} to take the range from the top of the stack.
28787 Ranges on the stack can be represented as either interval forms or
28788 vectors: @samp{[@var{min} ..@: @var{max}]} or @samp{[@var{min}, @var{max}]}.
28789
28790 @kindex g l
28791 @kindex g L
28792 @pindex calc-graph-log-x
28793 @pindex calc-graph-log-y
28794 The @kbd{g l} (@code{calc-graph-log-x}) and @kbd{g L} (@code{calc-graph-log-y})
28795 commands allow you to set either or both of the axes of the graph to
28796 be logarithmic instead of linear.
28797
28798 @kindex g C-l
28799 @kindex g C-r
28800 @kindex g C-t
28801 @pindex calc-graph-log-z
28802 @pindex calc-graph-range-z
28803 @pindex calc-graph-title-z
28804 For 3D plots, @kbd{g C-t}, @kbd{g C-r}, and @kbd{g C-l} (those are
28805 letters with the Control key held down) are the corresponding commands
28806 for the ``z'' axis.
28807
28808 @kindex g z
28809 @kindex g Z
28810 @pindex calc-graph-zero-x
28811 @pindex calc-graph-zero-y
28812 The @kbd{g z} (@code{calc-graph-zero-x}) and @kbd{g Z}
28813 (@code{calc-graph-zero-y}) commands control whether a dotted line is
28814 drawn to indicate the ``x'' and/or ``y'' zero axes. (These are the same
28815 dotted lines that would be drawn there anyway if you used @kbd{g g} to
28816 turn the ``grid'' feature on.) Zero-axis lines are on by default, and
28817 may be turned off only in GNUPLOT 3.0 and later versions. They are
28818 not available for 3D plots.
28819
28820 @kindex g s
28821 @pindex calc-graph-line-style
28822 The @kbd{g s} (@code{calc-graph-line-style}) command turns the connecting
28823 lines on or off for the most recently added curve, and optionally selects
28824 the style of lines to be used for that curve. Plain @kbd{g s} simply
28825 toggles the lines on and off. With a numeric prefix argument, @kbd{g s}
28826 turns lines on and sets a particular line style. Line style numbers
28827 start at one and their meanings vary depending on the output device.
28828 GNUPLOT guarantees that there will be at least six different line styles
28829 available for any device.
28830
28831 @kindex g S
28832 @pindex calc-graph-point-style
28833 The @kbd{g S} (@code{calc-graph-point-style}) command similarly turns
28834 the symbols at the data points on or off, or sets the point style.
28835 If you turn both lines and points off, the data points will show as
28836 tiny dots.
28837
28838 @cindex @code{LineStyles} variable
28839 @cindex @code{PointStyles} variable
28840 @vindex LineStyles
28841 @vindex PointStyles
28842 Another way to specify curve styles is with the @code{LineStyles} and
28843 @code{PointStyles} variables. These variables initially have no stored
28844 values, but if you store a vector of integers in one of these variables,
28845 the @kbd{g a} and @kbd{g f} commands will use those style numbers
28846 instead of the defaults for new curves that are added to the graph.
28847 An entry should be a positive integer for a specific style, or 0 to let
28848 the style be chosen automatically, or @mathit{-1} to turn off lines or points
28849 altogether. If there are more curves than elements in the vector, the
28850 last few curves will continue to have the default styles. Of course,
28851 you can later use @kbd{g s} and @kbd{g S} to change any of these styles.
28852
28853 For example, @kbd{'[2 -1 3] @key{RET} s t LineStyles} causes the first curve
28854 to have lines in style number 2, the second curve to have no connecting
28855 lines, and the third curve to have lines in style 3. Point styles will
28856 still be assigned automatically, but you could store another vector in
28857 @code{PointStyles} to define them, too.
28858
28859 @node Devices, , Graphics Options, Graphics
28860 @section Graphical Devices
28861
28862 @noindent
28863 @kindex g D
28864 @pindex calc-graph-device
28865 The @kbd{g D} (@code{calc-graph-device}) command sets the device name
28866 (or ``terminal name'' in GNUPLOT lingo) to be used by @kbd{g p} commands
28867 on this graph. It does not affect the permanent default device name.
28868 If you enter a blank name, the device name reverts to the default.
28869 Enter @samp{?} to see a list of supported devices.
28870
28871 With a positive numeric prefix argument, @kbd{g D} instead sets
28872 the default device name, used by all plots in the future which do
28873 not override it with a plain @kbd{g D} command. If you enter a
28874 blank line this command shows you the current default. The special
28875 name @code{default} signifies that Calc should choose @code{x11} if
28876 the X window system is in use (as indicated by the presence of a
28877 @code{DISPLAY} environment variable), or otherwise @code{dumb} under
28878 GNUPLOT 3.0 and later, or @code{postscript} under GNUPLOT 2.0.
28879 This is the initial default value.
28880
28881 The @code{dumb} device is an interface to ``dumb terminals,'' i.e.,
28882 terminals with no special graphics facilities. It writes a crude
28883 picture of the graph composed of characters like @code{-} and @code{|}
28884 to a buffer called @samp{*Gnuplot Trail*}, which Calc then displays.
28885 The graph is made the same size as the Emacs screen, which on most
28886 dumb terminals will be
28887 @texline @math{80\times24}
28888 @infoline 80x24
28889 characters. The graph is displayed in
28890 an Emacs ``recursive edit''; type @kbd{q} or @kbd{C-c C-c} to exit
28891 the recursive edit and return to Calc. Note that the @code{dumb}
28892 device is present only in GNUPLOT 3.0 and later versions.
28893
28894 The word @code{dumb} may be followed by two numbers separated by
28895 spaces. These are the desired width and height of the graph in
28896 characters. Also, the device name @code{big} is like @code{dumb}
28897 but creates a graph four times the width and height of the Emacs
28898 screen. You will then have to scroll around to view the entire
28899 graph. In the @samp{*Gnuplot Trail*} buffer, @key{SPC}, @key{DEL},
28900 @kbd{<}, and @kbd{>} are defined to scroll by one screenful in each
28901 of the four directions.
28902
28903 With a negative numeric prefix argument, @kbd{g D} sets or displays
28904 the device name used by @kbd{g P} (@code{calc-graph-print}). This
28905 is initially @code{postscript}. If you don't have a PostScript
28906 printer, you may decide once again to use @code{dumb} to create a
28907 plot on any text-only printer.
28908
28909 @kindex g O
28910 @pindex calc-graph-output
28911 The @kbd{g O} (@code{calc-graph-output}) command sets the name of
28912 the output file used by GNUPLOT. For some devices, notably @code{x11},
28913 there is no output file and this information is not used. Many other
28914 ``devices'' are really file formats like @code{postscript}; in these
28915 cases the output in the desired format goes into the file you name
28916 with @kbd{g O}. Type @kbd{g O stdout @key{RET}} to set GNUPLOT to write
28917 to its standard output stream, i.e., to @samp{*Gnuplot Trail*}.
28918 This is the default setting.
28919
28920 Another special output name is @code{tty}, which means that GNUPLOT
28921 is going to write graphics commands directly to its standard output,
28922 which you wish Emacs to pass through to your terminal. Tektronix
28923 graphics terminals, among other devices, operate this way. Calc does
28924 this by telling GNUPLOT to write to a temporary file, then running a
28925 sub-shell executing the command @samp{cat tempfile >/dev/tty}. On
28926 typical Unix systems, this will copy the temporary file directly to
28927 the terminal, bypassing Emacs entirely. You will have to type @kbd{C-l}
28928 to Emacs afterwards to refresh the screen.
28929
28930 Once again, @kbd{g O} with a positive or negative prefix argument
28931 sets the default or printer output file names, respectively. In each
28932 case you can specify @code{auto}, which causes Calc to invent a temporary
28933 file name for each @kbd{g p} (or @kbd{g P}) command. This temporary file
28934 will be deleted once it has been displayed or printed. If the output file
28935 name is not @code{auto}, the file is not automatically deleted.
28936
28937 The default and printer devices and output files can be saved
28938 permanently by the @kbd{m m} (@code{calc-save-modes}) command. The
28939 default number of data points (see @kbd{g N}) and the X geometry
28940 (see @kbd{g X}) are also saved. Other graph information is @emph{not}
28941 saved; you can save a graph's configuration simply by saving the contents
28942 of the @samp{*Gnuplot Commands*} buffer.
28943
28944 @vindex calc-gnuplot-plot-command
28945 @vindex calc-gnuplot-default-device
28946 @vindex calc-gnuplot-default-output
28947 @vindex calc-gnuplot-print-command
28948 @vindex calc-gnuplot-print-device
28949 @vindex calc-gnuplot-print-output
28950 If you are installing Calc you may wish to configure the default and
28951 printer devices and output files for the whole system. The relevant
28952 Lisp variables are @code{calc-gnuplot-default-device} and @code{-output},
28953 and @code{calc-gnuplot-print-device} and @code{-output}. The output
28954 file names must be either strings as described above, or Lisp
28955 expressions which are evaluated on the fly to get the output file names.
28956
28957 Other important Lisp variables are @code{calc-gnuplot-plot-command} and
28958 @code{calc-gnuplot-print-command}, which give the system commands to
28959 display or print the output of GNUPLOT, respectively. These may be
28960 @code{nil} if no command is necessary, or strings which can include
28961 @samp{%s} to signify the name of the file to be displayed or printed.
28962 Or, these variables may contain Lisp expressions which are evaluated
28963 to display or print the output.
28964
28965 @kindex g x
28966 @pindex calc-graph-display
28967 The @kbd{g x} (@code{calc-graph-display}) command lets you specify
28968 on which X window system display your graphs should be drawn. Enter
28969 a blank line to see the current display name. This command has no
28970 effect unless the current device is @code{x11}.
28971
28972 @kindex g X
28973 @pindex calc-graph-geometry
28974 The @kbd{g X} (@code{calc-graph-geometry}) command is a similar
28975 command for specifying the position and size of the X window.
28976 The normal value is @code{default}, which generally means your
28977 window manager will let you place the window interactively.
28978 Entering @samp{800x500+0+0} would create an 800-by-500 pixel
28979 window in the upper-left corner of the screen.
28980
28981 The buffer called @samp{*Gnuplot Trail*} holds a transcript of the
28982 session with GNUPLOT. This shows the commands Calc has ``typed'' to
28983 GNUPLOT and the responses it has received. Calc tries to notice when an
28984 error message has appeared here and display the buffer for you when
28985 this happens. You can check this buffer yourself if you suspect
28986 something has gone wrong.
28987
28988 @kindex g C
28989 @pindex calc-graph-command
28990 The @kbd{g C} (@code{calc-graph-command}) command prompts you to
28991 enter any line of text, then simply sends that line to the current
28992 GNUPLOT process. The @samp{*Gnuplot Trail*} buffer looks deceptively
28993 like a Shell buffer but you can't type commands in it yourself.
28994 Instead, you must use @kbd{g C} for this purpose.
28995
28996 @kindex g v
28997 @kindex g V
28998 @pindex calc-graph-view-commands
28999 @pindex calc-graph-view-trail
29000 The @kbd{g v} (@code{calc-graph-view-commands}) and @kbd{g V}
29001 (@code{calc-graph-view-trail}) commands display the @samp{*Gnuplot Commands*}
29002 and @samp{*Gnuplot Trail*} buffers, respectively, in another window.
29003 This happens automatically when Calc thinks there is something you
29004 will want to see in either of these buffers. If you type @kbd{g v}
29005 or @kbd{g V} when the relevant buffer is already displayed, the
29006 buffer is hidden again.
29007
29008 One reason to use @kbd{g v} is to add your own commands to the
29009 @samp{*Gnuplot Commands*} buffer. Press @kbd{g v}, then use
29010 @kbd{C-x o} to switch into that window. For example, GNUPLOT has
29011 @samp{set label} and @samp{set arrow} commands that allow you to
29012 annotate your plots. Since Calc doesn't understand these commands,
29013 you have to add them to the @samp{*Gnuplot Commands*} buffer
29014 yourself, then use @w{@kbd{g p}} to replot using these new commands. Note
29015 that your commands must appear @emph{before} the @code{plot} command.
29016 To get help on any GNUPLOT feature, type, e.g., @kbd{g C help set label}.
29017 You may have to type @kbd{g C @key{RET}} a few times to clear the
29018 ``press return for more'' or ``subtopic of @dots{}'' requests.
29019 Note that Calc always sends commands (like @samp{set nolabel}) to
29020 reset all plotting parameters to the defaults before each plot, so
29021 to delete a label all you need to do is delete the @samp{set label}
29022 line you added (or comment it out with @samp{#}) and then replot
29023 with @kbd{g p}.
29024
29025 @kindex g q
29026 @pindex calc-graph-quit
29027 You can use @kbd{g q} (@code{calc-graph-quit}) to kill the GNUPLOT
29028 process that is running. The next graphing command you give will
29029 start a fresh GNUPLOT process. The word @samp{Graph} appears in
29030 the Calc window's mode line whenever a GNUPLOT process is currently
29031 running. The GNUPLOT process is automatically killed when you
29032 exit Emacs if you haven't killed it manually by then.
29033
29034 @kindex g K
29035 @pindex calc-graph-kill
29036 The @kbd{g K} (@code{calc-graph-kill}) command is like @kbd{g q}
29037 except that it also views the @samp{*Gnuplot Trail*} buffer so that
29038 you can see the process being killed. This is better if you are
29039 killing GNUPLOT because you think it has gotten stuck.
29040
29041 @node Kill and Yank, Keypad Mode, Graphics, Top
29042 @chapter Kill and Yank Functions
29043
29044 @noindent
29045 The commands in this chapter move information between the Calculator and
29046 other Emacs editing buffers.
29047
29048 In many cases Embedded mode is an easier and more natural way to
29049 work with Calc from a regular editing buffer. @xref{Embedded Mode}.
29050
29051 @menu
29052 * Killing From Stack::
29053 * Yanking Into Stack::
29054 * Grabbing From Buffers::
29055 * Yanking Into Buffers::
29056 * X Cut and Paste::
29057 @end menu
29058
29059 @node Killing From Stack, Yanking Into Stack, Kill and Yank, Kill and Yank
29060 @section Killing from the Stack
29061
29062 @noindent
29063 @kindex C-k
29064 @pindex calc-kill
29065 @kindex M-k
29066 @pindex calc-copy-as-kill
29067 @kindex C-w
29068 @pindex calc-kill-region
29069 @kindex M-w
29070 @pindex calc-copy-region-as-kill
29071 @cindex Kill ring
29072 @dfn{Kill} commands are Emacs commands that insert text into the
29073 ``kill ring,'' from which it can later be ``yanked'' by a @kbd{C-y}
29074 command. Three common kill commands in normal Emacs are @kbd{C-k}, which
29075 kills one line, @kbd{C-w}, which kills the region between mark and point,
29076 and @kbd{M-w}, which puts the region into the kill ring without actually
29077 deleting it. All of these commands work in the Calculator, too. Also,
29078 @kbd{M-k} has been provided to complete the set; it puts the current line
29079 into the kill ring without deleting anything.
29080
29081 The kill commands are unusual in that they pay attention to the location
29082 of the cursor in the Calculator buffer. If the cursor is on or below the
29083 bottom line, the kill commands operate on the top of the stack. Otherwise,
29084 they operate on whatever stack element the cursor is on. Calc's kill
29085 commands always operate on whole stack entries. (They act the same as their
29086 standard Emacs cousins except they ``round up'' the specified region to
29087 encompass full lines.) The text is copied into the kill ring exactly as
29088 it appears on the screen, including line numbers if they are enabled.
29089
29090 A numeric prefix argument to @kbd{C-k} or @kbd{M-k} affects the number
29091 of lines killed. A positive argument kills the current line and @expr{n-1}
29092 lines below it. A negative argument kills the @expr{-n} lines above the
29093 current line. Again this mirrors the behavior of the standard Emacs
29094 @kbd{C-k} command. Although a whole line is always deleted, @kbd{C-k}
29095 with no argument copies only the number itself into the kill ring, whereas
29096 @kbd{C-k} with a prefix argument of 1 copies the number with its trailing
29097 newline.
29098
29099 @node Yanking Into Stack, Grabbing From Buffers, Killing From Stack, Kill and Yank
29100 @section Yanking into the Stack
29101
29102 @noindent
29103 @kindex C-y
29104 @pindex calc-yank
29105 The @kbd{C-y} command yanks the most recently killed text back into the
29106 Calculator. It pushes this value onto the top of the stack regardless of
29107 the cursor position. In general it re-parses the killed text as a number
29108 or formula (or a list of these separated by commas or newlines). However if
29109 the thing being yanked is something that was just killed from the Calculator
29110 itself, its full internal structure is yanked. For example, if you have
29111 set the floating-point display mode to show only four significant digits,
29112 then killing and re-yanking 3.14159 (which displays as 3.142) will yank the
29113 full 3.14159, even though yanking it into any other buffer would yank the
29114 number in its displayed form, 3.142. (Since the default display modes
29115 show all objects to their full precision, this feature normally makes no
29116 difference.)
29117
29118 @node Grabbing From Buffers, Yanking Into Buffers, Yanking Into Stack, Kill and Yank
29119 @section Grabbing from Other Buffers
29120
29121 @noindent
29122 @kindex M-# g
29123 @pindex calc-grab-region
29124 The @kbd{M-# g} (@code{calc-grab-region}) command takes the text between
29125 point and mark in the current buffer and attempts to parse it as a
29126 vector of values. Basically, it wraps the text in vector brackets
29127 @samp{[ ]} unless the text already is enclosed in vector brackets,
29128 then reads the text as if it were an algebraic entry. The contents
29129 of the vector may be numbers, formulas, or any other Calc objects.
29130 If the @kbd{M-# g} command works successfully, it does an automatic
29131 @kbd{M-# c} to enter the Calculator buffer.
29132
29133 A numeric prefix argument grabs the specified number of lines around
29134 point, ignoring the mark. A positive prefix grabs from point to the
29135 @expr{n}th following newline (so that @kbd{M-1 M-# g} grabs from point
29136 to the end of the current line); a negative prefix grabs from point
29137 back to the @expr{n+1}st preceding newline. In these cases the text
29138 that is grabbed is exactly the same as the text that @kbd{C-k} would
29139 delete given that prefix argument.
29140
29141 A prefix of zero grabs the current line; point may be anywhere on the
29142 line.
29143
29144 A plain @kbd{C-u} prefix interprets the region between point and mark
29145 as a single number or formula rather than a vector. For example,
29146 @kbd{M-# g} on the text @samp{2 a b} produces the vector of three
29147 values @samp{[2, a, b]}, but @kbd{C-u M-# g} on the same region
29148 reads a formula which is a product of three things: @samp{2 a b}.
29149 (The text @samp{a + b}, on the other hand, will be grabbed as a
29150 vector of one element by plain @kbd{M-# g} because the interpretation
29151 @samp{[a, +, b]} would be a syntax error.)
29152
29153 If a different language has been specified (@pxref{Language Modes}),
29154 the grabbed text will be interpreted according to that language.
29155
29156 @kindex M-# r
29157 @pindex calc-grab-rectangle
29158 The @kbd{M-# r} (@code{calc-grab-rectangle}) command takes the text between
29159 point and mark and attempts to parse it as a matrix. If point and mark
29160 are both in the leftmost column, the lines in between are parsed in their
29161 entirety. Otherwise, point and mark define the corners of a rectangle
29162 whose contents are parsed.
29163
29164 Each line of the grabbed area becomes a row of the matrix. The result
29165 will actually be a vector of vectors, which Calc will treat as a matrix
29166 only if every row contains the same number of values.
29167
29168 If a line contains a portion surrounded by square brackets (or curly
29169 braces), that portion is interpreted as a vector which becomes a row
29170 of the matrix. Any text surrounding the bracketed portion on the line
29171 is ignored.
29172
29173 Otherwise, the entire line is interpreted as a row vector as if it
29174 were surrounded by square brackets. Leading line numbers (in the
29175 format used in the Calc stack buffer) are ignored. If you wish to
29176 force this interpretation (even if the line contains bracketed
29177 portions), give a negative numeric prefix argument to the
29178 @kbd{M-# r} command.
29179
29180 If you give a numeric prefix argument of zero or plain @kbd{C-u}, each
29181 line is instead interpreted as a single formula which is converted into
29182 a one-element vector. Thus the result of @kbd{C-u M-# r} will be a
29183 one-column matrix. For example, suppose one line of the data is the
29184 expression @samp{2 a}. A plain @w{@kbd{M-# r}} will interpret this as
29185 @samp{[2 a]}, which in turn is read as a two-element vector that forms
29186 one row of the matrix. But a @kbd{C-u M-# r} will interpret this row
29187 as @samp{[2*a]}.
29188
29189 If you give a positive numeric prefix argument @var{n}, then each line
29190 will be split up into columns of width @var{n}; each column is parsed
29191 separately as a matrix element. If a line contained
29192 @w{@samp{2 +/- 3 4 +/- 5}}, then grabbing with a prefix argument of 8
29193 would correctly split the line into two error forms.
29194
29195 @xref{Matrix Functions}, to see how to pull the matrix apart into its
29196 constituent rows and columns. (If it is a
29197 @texline @math{1\times1}
29198 @infoline 1x1
29199 matrix, just hit @kbd{v u} (@code{calc-unpack}) twice.)
29200
29201 @kindex M-# :
29202 @kindex M-# _
29203 @pindex calc-grab-sum-across
29204 @pindex calc-grab-sum-down
29205 @cindex Summing rows and columns of data
29206 The @kbd{M-# :} (@code{calc-grab-sum-down}) command is a handy way to
29207 grab a rectangle of data and sum its columns. It is equivalent to
29208 typing @kbd{M-# r}, followed by @kbd{V R : +} (the vector reduction
29209 command that sums the columns of a matrix; @pxref{Reducing}). The
29210 result of the command will be a vector of numbers, one for each column
29211 in the input data. The @kbd{M-# _} (@code{calc-grab-sum-across}) command
29212 similarly grabs a rectangle and sums its rows by executing @w{@kbd{V R _ +}}.
29213
29214 As well as being more convenient, @kbd{M-# :} and @kbd{M-# _} are also
29215 much faster because they don't actually place the grabbed vector on
29216 the stack. In a @kbd{M-# r V R : +} sequence, formatting the vector
29217 for display on the stack takes a large fraction of the total time
29218 (unless you have planned ahead and used @kbd{v .} and @kbd{t .} modes).
29219
29220 For example, suppose we have a column of numbers in a file which we
29221 wish to sum. Go to one corner of the column and press @kbd{C-@@} to
29222 set the mark; go to the other corner and type @kbd{M-# :}. Since there
29223 is only one column, the result will be a vector of one number, the sum.
29224 (You can type @kbd{v u} to unpack this vector into a plain number if
29225 you want to do further arithmetic with it.)
29226
29227 To compute the product of the column of numbers, we would have to do
29228 it ``by hand'' since there's no special grab-and-multiply command.
29229 Use @kbd{M-# r} to grab the column of numbers into the calculator in
29230 the form of a column matrix. The statistics command @kbd{u *} is a
29231 handy way to find the product of a vector or matrix of numbers.
29232 @xref{Statistical Operations}. Another approach would be to use
29233 an explicit column reduction command, @kbd{V R : *}.
29234
29235 @node Yanking Into Buffers, X Cut and Paste, Grabbing From Buffers, Kill and Yank
29236 @section Yanking into Other Buffers
29237
29238 @noindent
29239 @kindex y
29240 @pindex calc-copy-to-buffer
29241 The plain @kbd{y} (@code{calc-copy-to-buffer}) command inserts the number
29242 at the top of the stack into the most recently used normal editing buffer.
29243 (More specifically, this is the most recently used buffer which is displayed
29244 in a window and whose name does not begin with @samp{*}. If there is no
29245 such buffer, this is the most recently used buffer except for Calculator
29246 and Calc Trail buffers.) The number is inserted exactly as it appears and
29247 without a newline. (If line-numbering is enabled, the line number is
29248 normally not included.) The number is @emph{not} removed from the stack.
29249
29250 With a prefix argument, @kbd{y} inserts several numbers, one per line.
29251 A positive argument inserts the specified number of values from the top
29252 of the stack. A negative argument inserts the @expr{n}th value from the
29253 top of the stack. An argument of zero inserts the entire stack. Note
29254 that @kbd{y} with an argument of 1 is slightly different from @kbd{y}
29255 with no argument; the former always copies full lines, whereas the
29256 latter strips off the trailing newline.
29257
29258 With a lone @kbd{C-u} as a prefix argument, @kbd{y} @emph{replaces} the
29259 region in the other buffer with the yanked text, then quits the
29260 Calculator, leaving you in that buffer. A typical use would be to use
29261 @kbd{M-# g} to read a region of data into the Calculator, operate on the
29262 data to produce a new matrix, then type @kbd{C-u y} to replace the
29263 original data with the new data. One might wish to alter the matrix
29264 display style (@pxref{Vector and Matrix Formats}) or change the current
29265 display language (@pxref{Language Modes}) before doing this. Also, note
29266 that this command replaces a linear region of text (as grabbed by
29267 @kbd{M-# g}), not a rectangle (as grabbed by @kbd{M-# r}).
29268
29269 If the editing buffer is in overwrite (as opposed to insert) mode,
29270 and the @kbd{C-u} prefix was not used, then the yanked number will
29271 overwrite the characters following point rather than being inserted
29272 before those characters. The usual conventions of overwrite mode
29273 are observed; for example, characters will be inserted at the end of
29274 a line rather than overflowing onto the next line. Yanking a multi-line
29275 object such as a matrix in overwrite mode overwrites the next @var{n}
29276 lines in the buffer, lengthening or shortening each line as necessary.
29277 Finally, if the thing being yanked is a simple integer or floating-point
29278 number (like @samp{-1.2345e-3}) and the characters following point also
29279 make up such a number, then Calc will replace that number with the new
29280 number, lengthening or shortening as necessary. The concept of
29281 ``overwrite mode'' has thus been generalized from overwriting characters
29282 to overwriting one complete number with another.
29283
29284 @kindex M-# y
29285 The @kbd{M-# y} key sequence is equivalent to @kbd{y} except that
29286 it can be typed anywhere, not just in Calc. This provides an easy
29287 way to guarantee that Calc knows which editing buffer you want to use!
29288
29289 @node X Cut and Paste, , Yanking Into Buffers, Kill and Yank
29290 @section X Cut and Paste
29291
29292 @noindent
29293 If you are using Emacs with the X window system, there is an easier
29294 way to move small amounts of data into and out of the calculator:
29295 Use the mouse-oriented cut and paste facilities of X.
29296
29297 The default bindings for a three-button mouse cause the left button
29298 to move the Emacs cursor to the given place, the right button to
29299 select the text between the cursor and the clicked location, and
29300 the middle button to yank the selection into the buffer at the
29301 clicked location. So, if you have a Calc window and an editing
29302 window on your Emacs screen, you can use left-click/right-click
29303 to select a number, vector, or formula from one window, then
29304 middle-click to paste that value into the other window. When you
29305 paste text into the Calc window, Calc interprets it as an algebraic
29306 entry. It doesn't matter where you click in the Calc window; the
29307 new value is always pushed onto the top of the stack.
29308
29309 The @code{xterm} program that is typically used for general-purpose
29310 shell windows in X interprets the mouse buttons in the same way.
29311 So you can use the mouse to move data between Calc and any other
29312 Unix program. One nice feature of @code{xterm} is that a double
29313 left-click selects one word, and a triple left-click selects a
29314 whole line. So you can usually transfer a single number into Calc
29315 just by double-clicking on it in the shell, then middle-clicking
29316 in the Calc window.
29317
29318 @node Keypad Mode, Embedded Mode, Kill and Yank, Introduction
29319 @chapter Keypad Mode
29320
29321 @noindent
29322 @kindex M-# k
29323 @pindex calc-keypad
29324 The @kbd{M-# k} (@code{calc-keypad}) command starts the Calculator
29325 and displays a picture of a calculator-style keypad. If you are using
29326 the X window system, you can click on any of the ``keys'' in the
29327 keypad using the left mouse button to operate the calculator.
29328 The original window remains the selected window; in Keypad mode
29329 you can type in your file while simultaneously performing
29330 calculations with the mouse.
29331
29332 @pindex full-calc-keypad
29333 If you have used @kbd{M-# b} first, @kbd{M-# k} instead invokes
29334 the @code{full-calc-keypad} command, which takes over the whole
29335 Emacs screen and displays the keypad, the Calc stack, and the Calc
29336 trail all at once. This mode would normally be used when running
29337 Calc standalone (@pxref{Standalone Operation}).
29338
29339 If you aren't using the X window system, you must switch into
29340 the @samp{*Calc Keypad*} window, place the cursor on the desired
29341 ``key,'' and type @key{SPC} or @key{RET}. If you think this
29342 is easier than using Calc normally, go right ahead.
29343
29344 Calc commands are more or less the same in Keypad mode. Certain
29345 keypad keys differ slightly from the corresponding normal Calc
29346 keystrokes; all such deviations are described below.
29347
29348 Keypad mode includes many more commands than will fit on the keypad
29349 at once. Click the right mouse button [@code{calc-keypad-menu}]
29350 to switch to the next menu. The bottom five rows of the keypad
29351 stay the same; the top three rows change to a new set of commands.
29352 To return to earlier menus, click the middle mouse button
29353 [@code{calc-keypad-menu-back}] or simply advance through the menus
29354 until you wrap around. Typing @key{TAB} inside the keypad window
29355 is equivalent to clicking the right mouse button there.
29356
29357 You can always click the @key{EXEC} button and type any normal
29358 Calc key sequence. This is equivalent to switching into the
29359 Calc buffer, typing the keys, then switching back to your
29360 original buffer.
29361
29362 @menu
29363 * Keypad Main Menu::
29364 * Keypad Functions Menu::
29365 * Keypad Binary Menu::
29366 * Keypad Vectors Menu::
29367 * Keypad Modes Menu::
29368 @end menu
29369
29370 @node Keypad Main Menu, Keypad Functions Menu, Keypad Mode, Keypad Mode
29371 @section Main Menu
29372
29373 @smallexample
29374 @group
29375 |----+-----Calc 2.00-----+----1
29376 |FLR |CEIL|RND |TRNC|CLN2|FLT |
29377 |----+----+----+----+----+----|
29378 | LN |EXP | |ABS |IDIV|MOD |
29379 |----+----+----+----+----+----|
29380 |SIN |COS |TAN |SQRT|y^x |1/x |
29381 |----+----+----+----+----+----|
29382 | ENTER |+/- |EEX |UNDO| <- |
29383 |-----+---+-+--+--+-+---++----|
29384 | INV | 7 | 8 | 9 | / |
29385 |-----+-----+-----+-----+-----|
29386 | HYP | 4 | 5 | 6 | * |
29387 |-----+-----+-----+-----+-----|
29388 |EXEC | 1 | 2 | 3 | - |
29389 |-----+-----+-----+-----+-----|
29390 | OFF | 0 | . | PI | + |
29391 |-----+-----+-----+-----+-----+
29392 @end group
29393 @end smallexample
29394
29395 @noindent
29396 This is the menu that appears the first time you start Keypad mode.
29397 It will show up in a vertical window on the right side of your screen.
29398 Above this menu is the traditional Calc stack display. On a 24-line
29399 screen you will be able to see the top three stack entries.
29400
29401 The ten digit keys, decimal point, and @key{EEX} key are used for
29402 entering numbers in the obvious way. @key{EEX} begins entry of an
29403 exponent in scientific notation. Just as with regular Calc, the
29404 number is pushed onto the stack as soon as you press @key{ENTER}
29405 or any other function key.
29406
29407 The @key{+/-} key corresponds to normal Calc's @kbd{n} key. During
29408 numeric entry it changes the sign of the number or of the exponent.
29409 At other times it changes the sign of the number on the top of the
29410 stack.
29411
29412 The @key{INV} and @key{HYP} keys modify other keys. As well as
29413 having the effects described elsewhere in this manual, Keypad mode
29414 defines several other ``inverse'' operations. These are described
29415 below and in the following sections.
29416
29417 The @key{ENTER} key finishes the current numeric entry, or otherwise
29418 duplicates the top entry on the stack.
29419
29420 The @key{UNDO} key undoes the most recent Calc operation.
29421 @kbd{INV UNDO} is the ``redo'' command, and @kbd{HYP UNDO} is
29422 ``last arguments'' (@kbd{M-@key{RET}}).
29423
29424 The @key{<-} key acts as a ``backspace'' during numeric entry.
29425 At other times it removes the top stack entry. @kbd{INV <-}
29426 clears the entire stack. @kbd{HYP <-} takes an integer from
29427 the stack, then removes that many additional stack elements.
29428
29429 The @key{EXEC} key prompts you to enter any keystroke sequence
29430 that would normally work in Calc mode. This can include a
29431 numeric prefix if you wish. It is also possible simply to
29432 switch into the Calc window and type commands in it; there is
29433 nothing ``magic'' about this window when Keypad mode is active.
29434
29435 The other keys in this display perform their obvious calculator
29436 functions. @key{CLN2} rounds the top-of-stack by temporarily
29437 reducing the precision by 2 digits. @key{FLT} converts an
29438 integer or fraction on the top of the stack to floating-point.
29439
29440 The @key{INV} and @key{HYP} keys combined with several of these keys
29441 give you access to some common functions even if the appropriate menu
29442 is not displayed. Obviously you don't need to learn these keys
29443 unless you find yourself wasting time switching among the menus.
29444
29445 @table @kbd
29446 @item INV +/-
29447 is the same as @key{1/x}.
29448 @item INV +
29449 is the same as @key{SQRT}.
29450 @item INV -
29451 is the same as @key{CONJ}.
29452 @item INV *
29453 is the same as @key{y^x}.
29454 @item INV /
29455 is the same as @key{INV y^x} (the @expr{x}th root of @expr{y}).
29456 @item HYP/INV 1
29457 are the same as @key{SIN} / @kbd{INV SIN}.
29458 @item HYP/INV 2
29459 are the same as @key{COS} / @kbd{INV COS}.
29460 @item HYP/INV 3
29461 are the same as @key{TAN} / @kbd{INV TAN}.
29462 @item INV/HYP 4
29463 are the same as @key{LN} / @kbd{HYP LN}.
29464 @item INV/HYP 5
29465 are the same as @key{EXP} / @kbd{HYP EXP}.
29466 @item INV 6
29467 is the same as @key{ABS}.
29468 @item INV 7
29469 is the same as @key{RND} (@code{calc-round}).
29470 @item INV 8
29471 is the same as @key{CLN2}.
29472 @item INV 9
29473 is the same as @key{FLT} (@code{calc-float}).
29474 @item INV 0
29475 is the same as @key{IMAG}.
29476 @item INV .
29477 is the same as @key{PREC}.
29478 @item INV ENTER
29479 is the same as @key{SWAP}.
29480 @item HYP ENTER
29481 is the same as @key{RLL3}.
29482 @item INV HYP ENTER
29483 is the same as @key{OVER}.
29484 @item HYP +/-
29485 packs the top two stack entries as an error form.
29486 @item HYP EEX
29487 packs the top two stack entries as a modulo form.
29488 @item INV EEX
29489 creates an interval form; this removes an integer which is one
29490 of 0 @samp{[]}, 1 @samp{[)}, 2 @samp{(]} or 3 @samp{()}, followed
29491 by the two limits of the interval.
29492 @end table
29493
29494 The @kbd{OFF} key turns Calc off; typing @kbd{M-# k} or @kbd{M-# M-#}
29495 again has the same effect. This is analogous to typing @kbd{q} or
29496 hitting @kbd{M-# c} again in the normal calculator. If Calc is
29497 running standalone (the @code{full-calc-keypad} command appeared in the
29498 command line that started Emacs), then @kbd{OFF} is replaced with
29499 @kbd{EXIT}; clicking on this actually exits Emacs itself.
29500
29501 @node Keypad Functions Menu, Keypad Binary Menu, Keypad Main Menu, Keypad Mode
29502 @section Functions Menu
29503
29504 @smallexample
29505 @group
29506 |----+----+----+----+----+----2
29507 |IGAM|BETA|IBET|ERF |BESJ|BESY|
29508 |----+----+----+----+----+----|
29509 |IMAG|CONJ| RE |ATN2|RAND|RAGN|
29510 |----+----+----+----+----+----|
29511 |GCD |FACT|DFCT|BNOM|PERM|NXTP|
29512 |----+----+----+----+----+----|
29513 @end group
29514 @end smallexample
29515
29516 @noindent
29517 This menu provides various operations from the @kbd{f} and @kbd{k}
29518 prefix keys.
29519
29520 @key{IMAG} multiplies the number on the stack by the imaginary
29521 number @expr{i = (0, 1)}.
29522
29523 @key{RE} extracts the real part a complex number. @kbd{INV RE}
29524 extracts the imaginary part.
29525
29526 @key{RAND} takes a number from the top of the stack and computes
29527 a random number greater than or equal to zero but less than that
29528 number. (@xref{Random Numbers}.) @key{RAGN} is the ``random
29529 again'' command; it computes another random number using the
29530 same limit as last time.
29531
29532 @key{INV GCD} computes the LCM (least common multiple) function.
29533
29534 @key{INV FACT} is the gamma function.
29535 @texline @math{\Gamma(x) = (x-1)!}.
29536 @infoline @expr{gamma(x) = (x-1)!}.
29537
29538 @key{PERM} is the number-of-permutations function, which is on the
29539 @kbd{H k c} key in normal Calc.
29540
29541 @key{NXTP} finds the next prime after a number. @kbd{INV NXTP}
29542 finds the previous prime.
29543
29544 @node Keypad Binary Menu, Keypad Vectors Menu, Keypad Functions Menu, Keypad Mode
29545 @section Binary Menu
29546
29547 @smallexample
29548 @group
29549 |----+----+----+----+----+----3
29550 |AND | OR |XOR |NOT |LSH |RSH |
29551 |----+----+----+----+----+----|
29552 |DEC |HEX |OCT |BIN |WSIZ|ARSH|
29553 |----+----+----+----+----+----|
29554 | A | B | C | D | E | F |
29555 |----+----+----+----+----+----|
29556 @end group
29557 @end smallexample
29558
29559 @noindent
29560 The keys in this menu perform operations on binary integers.
29561 Note that both logical and arithmetic right-shifts are provided.
29562 @key{INV LSH} rotates one bit to the left.
29563
29564 The ``difference'' function (normally on @kbd{b d}) is on @key{INV AND}.
29565 The ``clip'' function (normally on @w{@kbd{b c}}) is on @key{INV NOT}.
29566
29567 The @key{DEC}, @key{HEX}, @key{OCT}, and @key{BIN} keys select the
29568 current radix for display and entry of numbers: Decimal, hexadecimal,
29569 octal, or binary. The six letter keys @key{A} through @key{F} are used
29570 for entering hexadecimal numbers.
29571
29572 The @key{WSIZ} key displays the current word size for binary operations
29573 and allows you to enter a new word size. You can respond to the prompt
29574 using either the keyboard or the digits and @key{ENTER} from the keypad.
29575 The initial word size is 32 bits.
29576
29577 @node Keypad Vectors Menu, Keypad Modes Menu, Keypad Binary Menu, Keypad Mode
29578 @section Vectors Menu
29579
29580 @smallexample
29581 @group
29582 |----+----+----+----+----+----4
29583 |SUM |PROD|MAX |MAP*|MAP^|MAP$|
29584 |----+----+----+----+----+----|
29585 |MINV|MDET|MTRN|IDNT|CRSS|"x" |
29586 |----+----+----+----+----+----|
29587 |PACK|UNPK|INDX|BLD |LEN |... |
29588 |----+----+----+----+----+----|
29589 @end group
29590 @end smallexample
29591
29592 @noindent
29593 The keys in this menu operate on vectors and matrices.
29594
29595 @key{PACK} removes an integer @var{n} from the top of the stack;
29596 the next @var{n} stack elements are removed and packed into a vector,
29597 which is replaced onto the stack. Thus the sequence
29598 @kbd{1 ENTER 3 ENTER 5 ENTER 3 PACK} enters the vector
29599 @samp{[1, 3, 5]} onto the stack. To enter a matrix, build each row
29600 on the stack as a vector, then use a final @key{PACK} to collect the
29601 rows into a matrix.
29602
29603 @key{UNPK} unpacks the vector on the stack, pushing each of its
29604 components separately.
29605
29606 @key{INDX} removes an integer @var{n}, then builds a vector of
29607 integers from 1 to @var{n}. @kbd{INV INDX} takes three numbers
29608 from the stack: The vector size @var{n}, the starting number,
29609 and the increment. @kbd{BLD} takes an integer @var{n} and any
29610 value @var{x} and builds a vector of @var{n} copies of @var{x}.
29611
29612 @key{IDNT} removes an integer @var{n}, then builds an @var{n}-by-@var{n}
29613 identity matrix.
29614
29615 @key{LEN} replaces a vector by its length, an integer.
29616
29617 @key{...} turns on or off ``abbreviated'' display mode for large vectors.
29618
29619 @key{MINV}, @key{MDET}, @key{MTRN}, and @key{CROSS} are the matrix
29620 inverse, determinant, and transpose, and vector cross product.
29621
29622 @key{SUM} replaces a vector by the sum of its elements. It is
29623 equivalent to @kbd{u +} in normal Calc (@pxref{Statistical Operations}).
29624 @key{PROD} computes the product of the elements of a vector, and
29625 @key{MAX} computes the maximum of all the elements of a vector.
29626
29627 @key{INV SUM} computes the alternating sum of the first element
29628 minus the second, plus the third, minus the fourth, and so on.
29629 @key{INV MAX} computes the minimum of the vector elements.
29630
29631 @key{HYP SUM} computes the mean of the vector elements.
29632 @key{HYP PROD} computes the sample standard deviation.
29633 @key{HYP MAX} computes the median.
29634
29635 @key{MAP*} multiplies two vectors elementwise. It is equivalent
29636 to the @kbd{V M *} command. @key{MAP^} computes powers elementwise.
29637 The arguments must be vectors of equal length, or one must be a vector
29638 and the other must be a plain number. For example, @kbd{2 MAP^} squares
29639 all the elements of a vector.
29640
29641 @key{MAP$} maps the formula on the top of the stack across the
29642 vector in the second-to-top position. If the formula contains
29643 several variables, Calc takes that many vectors starting at the
29644 second-to-top position and matches them to the variables in
29645 alphabetical order. The result is a vector of the same size as
29646 the input vectors, whose elements are the formula evaluated with
29647 the variables set to the various sets of numbers in those vectors.
29648 For example, you could simulate @key{MAP^} using @key{MAP$} with
29649 the formula @samp{x^y}.
29650
29651 The @kbd{"x"} key pushes the variable name @expr{x} onto the
29652 stack. To build the formula @expr{x^2 + 6}, you would use the
29653 key sequence @kbd{"x" 2 y^x 6 +}. This formula would then be
29654 suitable for use with the @key{MAP$} key described above.
29655 With @key{INV}, @key{HYP}, or @key{INV} and @key{HYP}, the
29656 @kbd{"x"} key pushes the variable names @expr{y}, @expr{z}, and
29657 @expr{t}, respectively.
29658
29659 @node Keypad Modes Menu, , Keypad Vectors Menu, Keypad Mode
29660 @section Modes Menu
29661
29662 @smallexample
29663 @group
29664 |----+----+----+----+----+----5
29665 |FLT |FIX |SCI |ENG |GRP | |
29666 |----+----+----+----+----+----|
29667 |RAD |DEG |FRAC|POLR|SYMB|PREC|
29668 |----+----+----+----+----+----|
29669 |SWAP|RLL3|RLL4|OVER|STO |RCL |
29670 |----+----+----+----+----+----|
29671 @end group
29672 @end smallexample
29673
29674 @noindent
29675 The keys in this menu manipulate modes, variables, and the stack.
29676
29677 The @key{FLT}, @key{FIX}, @key{SCI}, and @key{ENG} keys select
29678 floating-point, fixed-point, scientific, or engineering notation.
29679 @key{FIX} displays two digits after the decimal by default; the
29680 others display full precision. With the @key{INV} prefix, these
29681 keys pop a number-of-digits argument from the stack.
29682
29683 The @key{GRP} key turns grouping of digits with commas on or off.
29684 @kbd{INV GRP} enables grouping to the right of the decimal point as
29685 well as to the left.
29686
29687 The @key{RAD} and @key{DEG} keys switch between radians and degrees
29688 for trigonometric functions.
29689
29690 The @key{FRAC} key turns Fraction mode on or off. This affects
29691 whether commands like @kbd{/} with integer arguments produce
29692 fractional or floating-point results.
29693
29694 The @key{POLR} key turns Polar mode on or off, determining whether
29695 polar or rectangular complex numbers are used by default.
29696
29697 The @key{SYMB} key turns Symbolic mode on or off, in which
29698 operations that would produce inexact floating-point results
29699 are left unevaluated as algebraic formulas.
29700
29701 The @key{PREC} key selects the current precision. Answer with
29702 the keyboard or with the keypad digit and @key{ENTER} keys.
29703
29704 The @key{SWAP} key exchanges the top two stack elements.
29705 The @key{RLL3} key rotates the top three stack elements upwards.
29706 The @key{RLL4} key rotates the top four stack elements upwards.
29707 The @key{OVER} key duplicates the second-to-top stack element.
29708
29709 The @key{STO} and @key{RCL} keys are analogous to @kbd{s t} and
29710 @kbd{s r} in regular Calc. @xref{Store and Recall}. Click the
29711 @key{STO} or @key{RCL} key, then one of the ten digits. (Named
29712 variables are not available in Keypad mode.) You can also use,
29713 for example, @kbd{STO + 3} to add to register 3.
29714
29715 @node Embedded Mode, Programming, Keypad Mode, Top
29716 @chapter Embedded Mode
29717
29718 @noindent
29719 Embedded mode in Calc provides an alternative to copying numbers
29720 and formulas back and forth between editing buffers and the Calc
29721 stack. In Embedded mode, your editing buffer becomes temporarily
29722 linked to the stack and this copying is taken care of automatically.
29723
29724 @menu
29725 * Basic Embedded Mode::
29726 * More About Embedded Mode::
29727 * Assignments in Embedded Mode::
29728 * Mode Settings in Embedded Mode::
29729 * Customizing Embedded Mode::
29730 @end menu
29731
29732 @node Basic Embedded Mode, More About Embedded Mode, Embedded Mode, Embedded Mode
29733 @section Basic Embedded Mode
29734
29735 @noindent
29736 @kindex M-# e
29737 @pindex calc-embedded
29738 To enter Embedded mode, position the Emacs point (cursor) on a
29739 formula in any buffer and press @kbd{M-# e} (@code{calc-embedded}).
29740 Note that @kbd{M-# e} is not to be used in the Calc stack buffer
29741 like most Calc commands, but rather in regular editing buffers that
29742 are visiting your own files.
29743
29744 Calc normally scans backward and forward in the buffer for the
29745 nearest opening and closing @dfn{formula delimiters}. The simplest
29746 delimiters are blank lines. Other delimiters that Embedded mode
29747 understands are:
29748
29749 @enumerate
29750 @item
29751 The @TeX{} and La@TeX{} math delimiters @samp{$ $}, @samp{$$ $$},
29752 @samp{\[ \]}, and @samp{\( \)};
29753 @item
29754 Lines beginning with @samp{\begin} and @samp{\end};
29755 @item
29756 Lines beginning with @samp{@@} (Texinfo delimiters).
29757 @item
29758 Lines beginning with @samp{.EQ} and @samp{.EN} (@dfn{eqn} delimiters);
29759 @item
29760 Lines containing a single @samp{%} or @samp{.\"} symbol and nothing else.
29761 @end enumerate
29762
29763 @xref{Customizing Embedded Mode}, to see how to make Calc recognize
29764 your own favorite delimiters. Delimiters like @samp{$ $} can appear
29765 on their own separate lines or in-line with the formula.
29766
29767 If you give a positive or negative numeric prefix argument, Calc
29768 instead uses the current point as one end of the formula, and moves
29769 forward or backward (respectively) by that many lines to find the
29770 other end. Explicit delimiters are not necessary in this case.
29771
29772 With a prefix argument of zero, Calc uses the current region
29773 (delimited by point and mark) instead of formula delimiters.
29774
29775 @kindex M-# w
29776 @pindex calc-embedded-word
29777 With a prefix argument of @kbd{C-u} only, Calc scans for the first
29778 non-numeric character (i.e., the first character that is not a
29779 digit, sign, decimal point, or upper- or lower-case @samp{e})
29780 forward and backward to delimit the formula. @kbd{M-# w}
29781 (@code{calc-embedded-word}) is equivalent to @kbd{C-u M-# e}.
29782
29783 When you enable Embedded mode for a formula, Calc reads the text
29784 between the delimiters and tries to interpret it as a Calc formula.
29785 It's best if the current Calc language mode is correct for the
29786 formula, but Calc can generally identify @TeX{} formulas and
29787 Big-style formulas even if the language mode is wrong. If Calc
29788 can't make sense of the formula, it beeps and refuses to enter
29789 Embedded mode. But if the current language is wrong, Calc can
29790 sometimes parse the formula successfully (but incorrectly);
29791 for example, the C expression @samp{atan(a[1])} can be parsed
29792 in Normal language mode, but the @code{atan} won't correspond to
29793 the built-in @code{arctan} function, and the @samp{a[1]} will be
29794 interpreted as @samp{a} times the vector @samp{[1]}!
29795
29796 If you press @kbd{M-# e} or @kbd{M-# w} to activate an embedded
29797 formula which is blank, say with the cursor on the space between
29798 the two delimiters @samp{$ $}, Calc will immediately prompt for
29799 an algebraic entry.
29800
29801 Only one formula in one buffer can be enabled at a time. If you
29802 move to another area of the current buffer and give Calc commands,
29803 Calc turns Embedded mode off for the old formula and then tries
29804 to restart Embedded mode at the new position. Other buffers are
29805 not affected by Embedded mode.
29806
29807 When Embedded mode begins, Calc pushes the current formula onto
29808 the stack. No Calc stack window is created; however, Calc copies
29809 the top-of-stack position into the original buffer at all times.
29810 You can create a Calc window by hand with @kbd{M-# o} if you
29811 find you need to see the entire stack.
29812
29813 For example, typing @kbd{M-# e} while somewhere in the formula
29814 @samp{n>2} in the following line enables Embedded mode on that
29815 inequality:
29816
29817 @example
29818 We define $F_n = F_(n-1)+F_(n-2)$ for all $n>2$.
29819 @end example
29820
29821 @noindent
29822 The formula @expr{n>2} will be pushed onto the Calc stack, and
29823 the top of stack will be copied back into the editing buffer.
29824 This means that spaces will appear around the @samp{>} symbol
29825 to match Calc's usual display style:
29826
29827 @example
29828 We define $F_n = F_(n-1)+F_(n-2)$ for all $n > 2$.
29829 @end example
29830
29831 @noindent
29832 No spaces have appeared around the @samp{+} sign because it's
29833 in a different formula, one which we have not yet touched with
29834 Embedded mode.
29835
29836 Now that Embedded mode is enabled, keys you type in this buffer
29837 are interpreted as Calc commands. At this point we might use
29838 the ``commute'' command @kbd{j C} to reverse the inequality.
29839 This is a selection-based command for which we first need to
29840 move the cursor onto the operator (@samp{>} in this case) that
29841 needs to be commuted.
29842
29843 @example
29844 We define $F_n = F_(n-1)+F_(n-2)$ for all $2 < n$.
29845 @end example
29846
29847 The @kbd{M-# o} command is a useful way to open a Calc window
29848 without actually selecting that window. Giving this command
29849 verifies that @samp{2 < n} is also on the Calc stack. Typing
29850 @kbd{17 @key{RET}} would produce:
29851
29852 @example
29853 We define $F_n = F_(n-1)+F_(n-2)$ for all $17$.
29854 @end example
29855
29856 @noindent
29857 with @samp{2 < n} and @samp{17} on the stack; typing @key{TAB}
29858 at this point will exchange the two stack values and restore
29859 @samp{2 < n} to the embedded formula. Even though you can't
29860 normally see the stack in Embedded mode, it is still there and
29861 it still operates in the same way. But, as with old-fashioned
29862 RPN calculators, you can only see the value at the top of the
29863 stack at any given time (unless you use @kbd{M-# o}).
29864
29865 Typing @kbd{M-# e} again turns Embedded mode off. The Calc
29866 window reveals that the formula @w{@samp{2 < n}} is automatically
29867 removed from the stack, but the @samp{17} is not. Entering
29868 Embedded mode always pushes one thing onto the stack, and
29869 leaving Embedded mode always removes one thing. Anything else
29870 that happens on the stack is entirely your business as far as
29871 Embedded mode is concerned.
29872
29873 If you press @kbd{M-# e} in the wrong place by accident, it is
29874 possible that Calc will be able to parse the nearby text as a
29875 formula and will mangle that text in an attempt to redisplay it
29876 ``properly'' in the current language mode. If this happens,
29877 press @kbd{M-# e} again to exit Embedded mode, then give the
29878 regular Emacs ``undo'' command (@kbd{C-_} or @kbd{C-x u}) to put
29879 the text back the way it was before Calc edited it. Note that Calc's
29880 own Undo command (typed before you turn Embedded mode back off)
29881 will not do you any good, because as far as Calc is concerned
29882 you haven't done anything with this formula yet.
29883
29884 @node More About Embedded Mode, Assignments in Embedded Mode, Basic Embedded Mode, Embedded Mode
29885 @section More About Embedded Mode
29886
29887 @noindent
29888 When Embedded mode ``activates'' a formula, i.e., when it examines
29889 the formula for the first time since the buffer was created or
29890 loaded, Calc tries to sense the language in which the formula was
29891 written. If the formula contains any @TeX{}-like @samp{\} sequences,
29892 it is parsed (i.e., read) in @TeX{} mode. If the formula appears to
29893 be written in multi-line Big mode, it is parsed in Big mode. Otherwise,
29894 it is parsed according to the current language mode.
29895
29896 Note that Calc does not change the current language mode according
29897 to what it finds. Even though it can read a @TeX{} formula when
29898 not in @TeX{} mode, it will immediately rewrite this formula using
29899 whatever language mode is in effect. You must then type @kbd{d T}
29900 to switch Calc permanently into @TeX{} mode if that is what you
29901 desire.
29902
29903 @tex
29904 \bigskip
29905 @end tex
29906
29907 @kindex d p
29908 @pindex calc-show-plain
29909 Calc's parser is unable to read certain kinds of formulas. For
29910 example, with @kbd{v ]} (@code{calc-matrix-brackets}) you can
29911 specify matrix display styles which the parser is unable to
29912 recognize as matrices. The @kbd{d p} (@code{calc-show-plain})
29913 command turns on a mode in which a ``plain'' version of a
29914 formula is placed in front of the fully-formatted version.
29915 When Calc reads a formula that has such a plain version in
29916 front, it reads the plain version and ignores the formatted
29917 version.
29918
29919 Plain formulas are preceded and followed by @samp{%%%} signs
29920 by default. This notation has the advantage that the @samp{%}
29921 character begins a comment in @TeX{}, so if your formula is
29922 embedded in a @TeX{} document its plain version will be
29923 invisible in the final printed copy. @xref{Customizing
29924 Embedded Mode}, to see how to change the ``plain'' formula
29925 delimiters, say to something that @dfn{eqn} or some other
29926 formatter will treat as a comment.
29927
29928 There are several notations which Calc's parser for ``big''
29929 formatted formulas can't yet recognize. In particular, it can't
29930 read the large symbols for @code{sum}, @code{prod}, and @code{integ},
29931 and it can't handle @samp{=>} with the righthand argument omitted.
29932 Also, Calc won't recognize special formats you have defined with
29933 the @kbd{Z C} command (@pxref{User-Defined Compositions}). In
29934 these cases it is important to use ``plain'' mode to make sure
29935 Calc will be able to read your formula later.
29936
29937 Another example where ``plain'' mode is important is if you have
29938 specified a float mode with few digits of precision. Normally
29939 any digits that are computed but not displayed will simply be
29940 lost when you save and re-load your embedded buffer, but ``plain''
29941 mode allows you to make sure that the complete number is present
29942 in the file as well as the rounded-down number.
29943
29944 @tex
29945 \bigskip
29946 @end tex
29947
29948 Embedded buffers remember active formulas for as long as they
29949 exist in Emacs memory. Suppose you have an embedded formula
29950 which is @cpi{} to the normal 12 decimal places, and then
29951 type @w{@kbd{C-u 5 d n}} to display only five decimal places.
29952 If you then type @kbd{d n}, all 12 places reappear because the
29953 full number is still there on the Calc stack. More surprisingly,
29954 even if you exit Embedded mode and later re-enter it for that
29955 formula, typing @kbd{d n} will restore all 12 places because
29956 each buffer remembers all its active formulas. However, if you
29957 save the buffer in a file and reload it in a new Emacs session,
29958 all non-displayed digits will have been lost unless you used
29959 ``plain'' mode.
29960
29961 @tex
29962 \bigskip
29963 @end tex
29964
29965 In some applications of Embedded mode, you will want to have a
29966 sequence of copies of a formula that show its evolution as you
29967 work on it. For example, you might want to have a sequence
29968 like this in your file (elaborating here on the example from
29969 the ``Getting Started'' chapter):
29970
29971 @smallexample
29972 The derivative of
29973
29974 ln(ln(x))
29975
29976 is
29977
29978 @r{(the derivative of }ln(ln(x))@r{)}
29979
29980 whose value at x = 2 is
29981
29982 @r{(the value)}
29983
29984 and at x = 3 is
29985
29986 @r{(the value)}
29987 @end smallexample
29988
29989 @kindex M-# d
29990 @pindex calc-embedded-duplicate
29991 The @kbd{M-# d} (@code{calc-embedded-duplicate}) command is a
29992 handy way to make sequences like this. If you type @kbd{M-# d},
29993 the formula under the cursor (which may or may not have Embedded
29994 mode enabled for it at the time) is copied immediately below and
29995 Embedded mode is then enabled for that copy.
29996
29997 For this example, you would start with just
29998
29999 @smallexample
30000 The derivative of
30001
30002 ln(ln(x))
30003 @end smallexample
30004
30005 @noindent
30006 and press @kbd{M-# d} with the cursor on this formula. The result
30007 is
30008
30009 @smallexample
30010 The derivative of
30011
30012 ln(ln(x))
30013
30014
30015 ln(ln(x))
30016 @end smallexample
30017
30018 @noindent
30019 with the second copy of the formula enabled in Embedded mode.
30020 You can now press @kbd{a d x @key{RET}} to take the derivative, and
30021 @kbd{M-# d M-# d} to make two more copies of the derivative.
30022 To complete the computations, type @kbd{3 s l x @key{RET}} to evaluate
30023 the last formula, then move up to the second-to-last formula
30024 and type @kbd{2 s l x @key{RET}}.
30025
30026 Finally, you would want to press @kbd{M-# e} to exit Embedded
30027 mode, then go up and insert the necessary text in between the
30028 various formulas and numbers.
30029
30030 @tex
30031 \bigskip
30032 @end tex
30033
30034 @kindex M-# f
30035 @kindex M-# '
30036 @pindex calc-embedded-new-formula
30037 The @kbd{M-# f} (@code{calc-embedded-new-formula}) command
30038 creates a new embedded formula at the current point. It inserts
30039 some default delimiters, which are usually just blank lines,
30040 and then does an algebraic entry to get the formula (which is
30041 then enabled for Embedded mode). This is just shorthand for
30042 typing the delimiters yourself, positioning the cursor between
30043 the new delimiters, and pressing @kbd{M-# e}. The key sequence
30044 @kbd{M-# '} is equivalent to @kbd{M-# f}.
30045
30046 @kindex M-# n
30047 @kindex M-# p
30048 @pindex calc-embedded-next
30049 @pindex calc-embedded-previous
30050 The @kbd{M-# n} (@code{calc-embedded-next}) and @kbd{M-# p}
30051 (@code{calc-embedded-previous}) commands move the cursor to the
30052 next or previous active embedded formula in the buffer. They
30053 can take positive or negative prefix arguments to move by several
30054 formulas. Note that these commands do not actually examine the
30055 text of the buffer looking for formulas; they only see formulas
30056 which have previously been activated in Embedded mode. In fact,
30057 @kbd{M-# n} and @kbd{M-# p} are a useful way to tell which
30058 embedded formulas are currently active. Also, note that these
30059 commands do not enable Embedded mode on the next or previous
30060 formula, they just move the cursor. (By the way, @kbd{M-# n} is
30061 not as awkward to type as it may seem, because @kbd{M-#} ignores
30062 Shift and Meta on the second keystroke: @kbd{M-# M-N} can be typed
30063 by holding down Shift and Meta and alternately typing two keys.)
30064
30065 @kindex M-# `
30066 @pindex calc-embedded-edit
30067 The @kbd{M-# `} (@code{calc-embedded-edit}) command edits the
30068 embedded formula at the current point as if by @kbd{`} (@code{calc-edit}).
30069 Embedded mode does not have to be enabled for this to work. Press
30070 @kbd{C-c C-c} to finish the edit, or @kbd{C-x k} to cancel.
30071
30072 @node Assignments in Embedded Mode, Mode Settings in Embedded Mode, More About Embedded Mode, Embedded Mode
30073 @section Assignments in Embedded Mode
30074
30075 @noindent
30076 The @samp{:=} (assignment) and @samp{=>} (``evaluates-to'') operators
30077 are especially useful in Embedded mode. They allow you to make
30078 a definition in one formula, then refer to that definition in
30079 other formulas embedded in the same buffer.
30080
30081 An embedded formula which is an assignment to a variable, as in
30082
30083 @example
30084 foo := 5
30085 @end example
30086
30087 @noindent
30088 records @expr{5} as the stored value of @code{foo} for the
30089 purposes of Embedded mode operations in the current buffer. It
30090 does @emph{not} actually store @expr{5} as the ``global'' value
30091 of @code{foo}, however. Regular Calc operations, and Embedded
30092 formulas in other buffers, will not see this assignment.
30093
30094 One way to use this assigned value is simply to create an
30095 Embedded formula elsewhere that refers to @code{foo}, and to press
30096 @kbd{=} in that formula. However, this permanently replaces the
30097 @code{foo} in the formula with its current value. More interesting
30098 is to use @samp{=>} elsewhere:
30099
30100 @example
30101 foo + 7 => 12
30102 @end example
30103
30104 @xref{Evaluates-To Operator}, for a general discussion of @samp{=>}.
30105
30106 If you move back and change the assignment to @code{foo}, any
30107 @samp{=>} formulas which refer to it are automatically updated.
30108
30109 @example
30110 foo := 17
30111
30112 foo + 7 => 24
30113 @end example
30114
30115 The obvious question then is, @emph{how} can one easily change the
30116 assignment to @code{foo}? If you simply select the formula in
30117 Embedded mode and type 17, the assignment itself will be replaced
30118 by the 17. The effect on the other formula will be that the
30119 variable @code{foo} becomes unassigned:
30120
30121 @example
30122 17
30123
30124 foo + 7 => foo + 7
30125 @end example
30126
30127 The right thing to do is first to use a selection command (@kbd{j 2}
30128 will do the trick) to select the righthand side of the assignment.
30129 Then, @kbd{17 @key{TAB} @key{DEL}} will swap the 17 into place (@pxref{Selecting
30130 Subformulas}, to see how this works).
30131
30132 @kindex M-# j
30133 @pindex calc-embedded-select
30134 The @kbd{M-# j} (@code{calc-embedded-select}) command provides an
30135 easy way to operate on assignments. It is just like @kbd{M-# e},
30136 except that if the enabled formula is an assignment, it uses
30137 @kbd{j 2} to select the righthand side. If the enabled formula
30138 is an evaluates-to, it uses @kbd{j 1} to select the lefthand side.
30139 A formula can also be a combination of both:
30140
30141 @example
30142 bar := foo + 3 => 20
30143 @end example
30144
30145 @noindent
30146 in which case @kbd{M-# j} will select the middle part (@samp{foo + 3}).
30147
30148 The formula is automatically deselected when you leave Embedded
30149 mode.
30150
30151 @kindex M-# u
30152 @kindex M-# =
30153 @pindex calc-embedded-update
30154 Another way to change the assignment to @code{foo} would simply be
30155 to edit the number using regular Emacs editing rather than Embedded
30156 mode. Then, we have to find a way to get Embedded mode to notice
30157 the change. The @kbd{M-# u} or @kbd{M-# =}
30158 (@code{calc-embedded-update-formula}) command is a convenient way
30159 to do this.
30160
30161 @example
30162 foo := 6
30163
30164 foo + 7 => 13
30165 @end example
30166
30167 Pressing @kbd{M-# u} is much like pressing @kbd{M-# e = M-# e}, that
30168 is, temporarily enabling Embedded mode for the formula under the
30169 cursor and then evaluating it with @kbd{=}. But @kbd{M-# u} does
30170 not actually use @kbd{M-# e}, and in fact another formula somewhere
30171 else can be enabled in Embedded mode while you use @kbd{M-# u} and
30172 that formula will not be disturbed.
30173
30174 With a numeric prefix argument, @kbd{M-# u} updates all active
30175 @samp{=>} formulas in the buffer. Formulas which have not yet
30176 been activated in Embedded mode, and formulas which do not have
30177 @samp{=>} as their top-level operator, are not affected by this.
30178 (This is useful only if you have used @kbd{m C}; see below.)
30179
30180 With a plain @kbd{C-u} prefix, @kbd{C-u M-# u} updates only in the
30181 region between mark and point rather than in the whole buffer.
30182
30183 @kbd{M-# u} is also a handy way to activate a formula, such as an
30184 @samp{=>} formula that has freshly been typed in or loaded from a
30185 file.
30186
30187 @kindex M-# a
30188 @pindex calc-embedded-activate
30189 The @kbd{M-# a} (@code{calc-embedded-activate}) command scans
30190 through the current buffer and activates all embedded formulas
30191 that contain @samp{:=} or @samp{=>} symbols. This does not mean
30192 that Embedded mode is actually turned on, but only that the
30193 formulas' positions are registered with Embedded mode so that
30194 the @samp{=>} values can be properly updated as assignments are
30195 changed.
30196
30197 It is a good idea to type @kbd{M-# a} right after loading a file
30198 that uses embedded @samp{=>} operators. Emacs includes a nifty
30199 ``buffer-local variables'' feature that you can use to do this
30200 automatically. The idea is to place near the end of your file
30201 a few lines that look like this:
30202
30203 @example
30204 --- Local Variables: ---
30205 --- eval:(calc-embedded-activate) ---
30206 --- End: ---
30207 @end example
30208
30209 @noindent
30210 where the leading and trailing @samp{---} can be replaced by
30211 any suitable strings (which must be the same on all three lines)
30212 or omitted altogether; in a @TeX{} file, @samp{%} would be a good
30213 leading string and no trailing string would be necessary. In a
30214 C program, @samp{/*} and @samp{*/} would be good leading and
30215 trailing strings.
30216
30217 When Emacs loads a file into memory, it checks for a Local Variables
30218 section like this one at the end of the file. If it finds this
30219 section, it does the specified things (in this case, running
30220 @kbd{M-# a} automatically) before editing of the file begins.
30221 The Local Variables section must be within 3000 characters of the
30222 end of the file for Emacs to find it, and it must be in the last
30223 page of the file if the file has any page separators.
30224 @xref{File Variables, , Local Variables in Files, emacs, the
30225 Emacs manual}.
30226
30227 Note that @kbd{M-# a} does not update the formulas it finds.
30228 To do this, type, say, @kbd{M-1 M-# u} after @w{@kbd{M-# a}}.
30229 Generally this should not be a problem, though, because the
30230 formulas will have been up-to-date already when the file was
30231 saved.
30232
30233 Normally, @kbd{M-# a} activates all the formulas it finds, but
30234 any previous active formulas remain active as well. With a
30235 positive numeric prefix argument, @kbd{M-# a} first deactivates
30236 all current active formulas, then actives the ones it finds in
30237 its scan of the buffer. With a negative prefix argument,
30238 @kbd{M-# a} simply deactivates all formulas.
30239
30240 Embedded mode has two symbols, @samp{Active} and @samp{~Active},
30241 which it puts next to the major mode name in a buffer's mode line.
30242 It puts @samp{Active} if it has reason to believe that all
30243 formulas in the buffer are active, because you have typed @kbd{M-# a}
30244 and Calc has not since had to deactivate any formulas (which can
30245 happen if Calc goes to update an @samp{=>} formula somewhere because
30246 a variable changed, and finds that the formula is no longer there
30247 due to some kind of editing outside of Embedded mode). Calc puts
30248 @samp{~Active} in the mode line if some, but probably not all,
30249 formulas in the buffer are active. This happens if you activate
30250 a few formulas one at a time but never use @kbd{M-# a}, or if you
30251 used @kbd{M-# a} but then Calc had to deactivate a formula
30252 because it lost track of it. If neither of these symbols appears
30253 in the mode line, no embedded formulas are active in the buffer
30254 (e.g., before Embedded mode has been used, or after a @kbd{M-- M-# a}).
30255
30256 Embedded formulas can refer to assignments both before and after them
30257 in the buffer. If there are several assignments to a variable, the
30258 nearest preceding assignment is used if there is one, otherwise the
30259 following assignment is used.
30260
30261 @example
30262 x => 1
30263
30264 x := 1
30265
30266 x => 1
30267
30268 x := 2
30269
30270 x => 2
30271 @end example
30272
30273 As well as simple variables, you can also assign to subscript
30274 expressions of the form @samp{@var{var}_@var{number}} (as in
30275 @code{x_0}), or @samp{@var{var}_@var{var}} (as in @code{x_max}).
30276 Assignments to other kinds of objects can be represented by Calc,
30277 but the automatic linkage between assignments and references works
30278 only for plain variables and these two kinds of subscript expressions.
30279
30280 If there are no assignments to a given variable, the global
30281 stored value for the variable is used (@pxref{Storing Variables}),
30282 or, if no value is stored, the variable is left in symbolic form.
30283 Note that global stored values will be lost when the file is saved
30284 and loaded in a later Emacs session, unless you have used the
30285 @kbd{s p} (@code{calc-permanent-variable}) command to save them;
30286 @pxref{Operations on Variables}.
30287
30288 The @kbd{m C} (@code{calc-auto-recompute}) command turns automatic
30289 recomputation of @samp{=>} forms on and off. If you turn automatic
30290 recomputation off, you will have to use @kbd{M-# u} to update these
30291 formulas manually after an assignment has been changed. If you
30292 plan to change several assignments at once, it may be more efficient
30293 to type @kbd{m C}, change all the assignments, then use @kbd{M-1 M-# u}
30294 to update the entire buffer afterwards. The @kbd{m C} command also
30295 controls @samp{=>} formulas on the stack; @pxref{Evaluates-To
30296 Operator}. When you turn automatic recomputation back on, the
30297 stack will be updated but the Embedded buffer will not; you must
30298 use @kbd{M-# u} to update the buffer by hand.
30299
30300 @node Mode Settings in Embedded Mode, Customizing Embedded Mode, Assignments in Embedded Mode, Embedded Mode
30301 @section Mode Settings in Embedded Mode
30302
30303 @noindent
30304 Embedded mode has a rather complicated mechanism for handling mode
30305 settings in Embedded formulas. It is possible to put annotations
30306 in the file that specify mode settings either global to the entire
30307 file or local to a particular formula or formulas. In the latter
30308 case, different modes can be specified for use when a formula
30309 is the enabled Embedded mode formula.
30310
30311 When you give any mode-setting command, like @kbd{m f} (for Fraction
30312 mode) or @kbd{d s} (for scientific notation), Embedded mode adds
30313 a line like the following one to the file just before the opening
30314 delimiter of the formula.
30315
30316 @example
30317 % [calc-mode: fractions: t]
30318 % [calc-mode: float-format: (sci 0)]
30319 @end example
30320
30321 When Calc interprets an embedded formula, it scans the text before
30322 the formula for mode-setting annotations like these and sets the
30323 Calc buffer to match these modes. Modes not explicitly described
30324 in the file are not changed. Calc scans all the way to the top of
30325 the file, or up to a line of the form
30326
30327 @example
30328 % [calc-defaults]
30329 @end example
30330
30331 @noindent
30332 which you can insert at strategic places in the file if this backward
30333 scan is getting too slow, or just to provide a barrier between one
30334 ``zone'' of mode settings and another.
30335
30336 If the file contains several annotations for the same mode, the
30337 closest one before the formula is used. Annotations after the
30338 formula are never used (except for global annotations, described
30339 below).
30340
30341 The scan does not look for the leading @samp{% }, only for the
30342 square brackets and the text they enclose. You can edit the mode
30343 annotations to a style that works better in context if you wish.
30344 @xref{Customizing Embedded Mode}, to see how to change the style
30345 that Calc uses when it generates the annotations. You can write
30346 mode annotations into the file yourself if you know the syntax;
30347 the easiest way to find the syntax for a given mode is to let
30348 Calc write the annotation for it once and see what it does.
30349
30350 If you give a mode-changing command for a mode that already has
30351 a suitable annotation just above the current formula, Calc will
30352 modify that annotation rather than generating a new, conflicting
30353 one.
30354
30355 Mode annotations have three parts, separated by colons. (Spaces
30356 after the colons are optional.) The first identifies the kind
30357 of mode setting, the second is a name for the mode itself, and
30358 the third is the value in the form of a Lisp symbol, number,
30359 or list. Annotations with unrecognizable text in the first or
30360 second parts are ignored. The third part is not checked to make
30361 sure the value is of a legal type or range; if you write an
30362 annotation by hand, be sure to give a proper value or results
30363 will be unpredictable. Mode-setting annotations are case-sensitive.
30364
30365 While Embedded mode is enabled, the word @code{Local} appears in
30366 the mode line. This is to show that mode setting commands generate
30367 annotations that are ``local'' to the current formula or set of
30368 formulas. The @kbd{m R} (@code{calc-mode-record-mode}) command
30369 causes Calc to generate different kinds of annotations. Pressing
30370 @kbd{m R} repeatedly cycles through the possible modes.
30371
30372 @code{LocEdit} and @code{LocPerm} modes generate annotations
30373 that look like this, respectively:
30374
30375 @example
30376 % [calc-edit-mode: float-format: (sci 0)]
30377 % [calc-perm-mode: float-format: (sci 5)]
30378 @end example
30379
30380 The first kind of annotation will be used only while a formula
30381 is enabled in Embedded mode. The second kind will be used only
30382 when the formula is @emph{not} enabled. (Whether the formula
30383 is ``active'' or not, i.e., whether Calc has seen this formula
30384 yet, is not relevant here.)
30385
30386 @code{Global} mode generates an annotation like this at the end
30387 of the file:
30388
30389 @example
30390 % [calc-global-mode: fractions t]
30391 @end example
30392
30393 Global mode annotations affect all formulas throughout the file,
30394 and may appear anywhere in the file. This allows you to tuck your
30395 mode annotations somewhere out of the way, say, on a new page of
30396 the file, as long as those mode settings are suitable for all
30397 formulas in the file.
30398
30399 Enabling a formula with @kbd{M-# e} causes a fresh scan for local
30400 mode annotations; you will have to use this after adding annotations
30401 above a formula by hand to get the formula to notice them. Updating
30402 a formula with @kbd{M-# u} will also re-scan the local modes, but
30403 global modes are only re-scanned by @kbd{M-# a}.
30404
30405 Another way that modes can get out of date is if you add a local
30406 mode annotation to a formula that has another formula after it.
30407 In this example, we have used the @kbd{d s} command while the
30408 first of the two embedded formulas is active. But the second
30409 formula has not changed its style to match, even though by the
30410 rules of reading annotations the @samp{(sci 0)} applies to it, too.
30411
30412 @example
30413 % [calc-mode: float-format: (sci 0)]
30414 1.23e2
30415
30416 456.
30417 @end example
30418
30419 We would have to go down to the other formula and press @kbd{M-# u}
30420 on it in order to get it to notice the new annotation.
30421
30422 Two more mode-recording modes selectable by @kbd{m R} are @code{Save}
30423 (which works even outside of Embedded mode), in which mode settings
30424 are recorded permanently in your Emacs startup file @file{~/.emacs}
30425 rather than by annotating the current document, and no-recording
30426 mode (where there is no symbol like @code{Save} or @code{Local} in
30427 the mode line), in which mode-changing commands do not leave any
30428 annotations at all.
30429
30430 When Embedded mode is not enabled, mode-recording modes except
30431 for @code{Save} have no effect.
30432
30433 @node Customizing Embedded Mode, , Mode Settings in Embedded Mode, Embedded Mode
30434 @section Customizing Embedded Mode
30435
30436 @noindent
30437 You can modify Embedded mode's behavior by setting various Lisp
30438 variables described here. Use @kbd{M-x set-variable} or
30439 @kbd{M-x edit-options} to adjust a variable on the fly, or
30440 put a suitable @code{setq} statement in your @file{~/.emacs}
30441 file to set a variable permanently. (Another possibility would
30442 be to use a file-local variable annotation at the end of the
30443 file; @pxref{File Variables, , Local Variables in Files, emacs, the
30444 Emacs manual}.)
30445
30446 While none of these variables will be buffer-local by default, you
30447 can make any of them local to any Embedded mode buffer. (Their
30448 values in the @samp{*Calculator*} buffer are never used.)
30449
30450 @vindex calc-embedded-open-formula
30451 The @code{calc-embedded-open-formula} variable holds a regular
30452 expression for the opening delimiter of a formula. @xref{Regexp Search,
30453 , Regular Expression Search, emacs, the Emacs manual}, to see
30454 how regular expressions work. Basically, a regular expression is a
30455 pattern that Calc can search for. A regular expression that considers
30456 blank lines, @samp{$}, and @samp{$$} to be opening delimiters is
30457 @code{"\\`\\|^\n\\|\\$\\$?"}. Just in case the meaning of this
30458 regular expression is not completely plain, let's go through it
30459 in detail.
30460
30461 The surrounding @samp{" "} marks quote the text between them as a
30462 Lisp string. If you left them off, @code{set-variable} or
30463 @code{edit-options} would try to read the regular expression as a
30464 Lisp program.
30465
30466 The most obvious property of this regular expression is that it
30467 contains indecently many backslashes. There are actually two levels
30468 of backslash usage going on here. First, when Lisp reads a quoted
30469 string, all pairs of characters beginning with a backslash are
30470 interpreted as special characters. Here, @code{\n} changes to a
30471 new-line character, and @code{\\} changes to a single backslash.
30472 So the actual regular expression seen by Calc is
30473 @samp{\`\|^ @r{(newline)} \|\$\$?}.
30474
30475 Regular expressions also consider pairs beginning with backslash
30476 to have special meanings. Sometimes the backslash is used to quote
30477 a character that otherwise would have a special meaning in a regular
30478 expression, like @samp{$}, which normally means ``end-of-line,''
30479 or @samp{?}, which means that the preceding item is optional. So
30480 @samp{\$\$?} matches either one or two dollar signs.
30481
30482 The other codes in this regular expression are @samp{^}, which matches
30483 ``beginning-of-line,'' @samp{\|}, which means ``or,'' and @samp{\`},
30484 which matches ``beginning-of-buffer.'' So the whole pattern means
30485 that a formula begins at the beginning of the buffer, or on a newline
30486 that occurs at the beginning of a line (i.e., a blank line), or at
30487 one or two dollar signs.
30488
30489 The default value of @code{calc-embedded-open-formula} looks just
30490 like this example, with several more alternatives added on to
30491 recognize various other common kinds of delimiters.
30492
30493 By the way, the reason to use @samp{^\n} rather than @samp{^$}
30494 or @samp{\n\n}, which also would appear to match blank lines,
30495 is that the former expression actually ``consumes'' only one
30496 newline character as @emph{part of} the delimiter, whereas the
30497 latter expressions consume zero or two newlines, respectively.
30498 The former choice gives the most natural behavior when Calc
30499 must operate on a whole formula including its delimiters.
30500
30501 See the Emacs manual for complete details on regular expressions.
30502 But just for your convenience, here is a list of all characters
30503 which must be quoted with backslash (like @samp{\$}) to avoid
30504 some special interpretation: @samp{. * + ? [ ] ^ $ \}. (Note
30505 the backslash in this list; for example, to match @samp{\[} you
30506 must use @code{"\\\\\\["}. An exercise for the reader is to
30507 account for each of these six backslashes!)
30508
30509 @vindex calc-embedded-close-formula
30510 The @code{calc-embedded-close-formula} variable holds a regular
30511 expression for the closing delimiter of a formula. A closing
30512 regular expression to match the above example would be
30513 @code{"\\'\\|\n$\\|\\$\\$?"}. This is almost the same as the
30514 other one, except it now uses @samp{\'} (``end-of-buffer'') and
30515 @samp{\n$} (newline occurring at end of line, yet another way
30516 of describing a blank line that is more appropriate for this
30517 case).
30518
30519 @vindex calc-embedded-open-word
30520 @vindex calc-embedded-close-word
30521 The @code{calc-embedded-open-word} and @code{calc-embedded-close-word}
30522 variables are similar expressions used when you type @kbd{M-# w}
30523 instead of @kbd{M-# e} to enable Embedded mode.
30524
30525 @vindex calc-embedded-open-plain
30526 The @code{calc-embedded-open-plain} variable is a string which
30527 begins a ``plain'' formula written in front of the formatted
30528 formula when @kbd{d p} mode is turned on. Note that this is an
30529 actual string, not a regular expression, because Calc must be able
30530 to write this string into a buffer as well as to recognize it.
30531 The default string is @code{"%%% "} (note the trailing space).
30532
30533 @vindex calc-embedded-close-plain
30534 The @code{calc-embedded-close-plain} variable is a string which
30535 ends a ``plain'' formula. The default is @code{" %%%\n"}. Without
30536 the trailing newline here, the first line of a Big mode formula
30537 that followed might be shifted over with respect to the other lines.
30538
30539 @vindex calc-embedded-open-new-formula
30540 The @code{calc-embedded-open-new-formula} variable is a string
30541 which is inserted at the front of a new formula when you type
30542 @kbd{M-# f}. Its default value is @code{"\n\n"}. If this
30543 string begins with a newline character and the @kbd{M-# f} is
30544 typed at the beginning of a line, @kbd{M-# f} will skip this
30545 first newline to avoid introducing unnecessary blank lines in
30546 the file.
30547
30548 @vindex calc-embedded-close-new-formula
30549 The @code{calc-embedded-close-new-formula} variable is the corresponding
30550 string which is inserted at the end of a new formula. Its default
30551 value is also @code{"\n\n"}. The final newline is omitted by
30552 @w{@kbd{M-# f}} if typed at the end of a line. (It follows that if
30553 @kbd{M-# f} is typed on a blank line, both a leading opening
30554 newline and a trailing closing newline are omitted.)
30555
30556 @vindex calc-embedded-announce-formula
30557 The @code{calc-embedded-announce-formula} variable is a regular
30558 expression which is sure to be followed by an embedded formula.
30559 The @kbd{M-# a} command searches for this pattern as well as for
30560 @samp{=>} and @samp{:=} operators. Note that @kbd{M-# a} will
30561 not activate just anything surrounded by formula delimiters; after
30562 all, blank lines are considered formula delimiters by default!
30563 But if your language includes a delimiter which can only occur
30564 actually in front of a formula, you can take advantage of it here.
30565 The default pattern is @code{"%Embed\n\\(% .*\n\\)*"}, which
30566 checks for @samp{%Embed} followed by any number of lines beginning
30567 with @samp{%} and a space. This last is important to make Calc
30568 consider mode annotations part of the pattern, so that the formula's
30569 opening delimiter really is sure to follow the pattern.
30570
30571 @vindex calc-embedded-open-mode
30572 The @code{calc-embedded-open-mode} variable is a string (not a
30573 regular expression) which should precede a mode annotation.
30574 Calc never scans for this string; Calc always looks for the
30575 annotation itself. But this is the string that is inserted before
30576 the opening bracket when Calc adds an annotation on its own.
30577 The default is @code{"% "}.
30578
30579 @vindex calc-embedded-close-mode
30580 The @code{calc-embedded-close-mode} variable is a string which
30581 follows a mode annotation written by Calc. Its default value
30582 is simply a newline, @code{"\n"}. If you change this, it is a
30583 good idea still to end with a newline so that mode annotations
30584 will appear on lines by themselves.
30585
30586 @node Programming, Installation, Embedded Mode, Top
30587 @chapter Programming
30588
30589 @noindent
30590 There are several ways to ``program'' the Emacs Calculator, depending
30591 on the nature of the problem you need to solve.
30592
30593 @enumerate
30594 @item
30595 @dfn{Keyboard macros} allow you to record a sequence of keystrokes
30596 and play them back at a later time. This is just the standard Emacs
30597 keyboard macro mechanism, dressed up with a few more features such
30598 as loops and conditionals.
30599
30600 @item
30601 @dfn{Algebraic definitions} allow you to use any formula to define a
30602 new function. This function can then be used in algebraic formulas or
30603 as an interactive command.
30604
30605 @item
30606 @dfn{Rewrite rules} are discussed in the section on algebra commands.
30607 @xref{Rewrite Rules}. If you put your rewrite rules in the variable
30608 @code{EvalRules}, they will be applied automatically to all Calc
30609 results in just the same way as an internal ``rule'' is applied to
30610 evaluate @samp{sqrt(9)} to 3 and so on. @xref{Automatic Rewrites}.
30611
30612 @item
30613 @dfn{Lisp} is the programming language that Calc (and most of Emacs)
30614 is written in. If the above techniques aren't powerful enough, you
30615 can write Lisp functions to do anything that built-in Calc commands
30616 can do. Lisp code is also somewhat faster than keyboard macros or
30617 rewrite rules.
30618 @end enumerate
30619
30620 @kindex z
30621 Programming features are available through the @kbd{z} and @kbd{Z}
30622 prefix keys. New commands that you define are two-key sequences
30623 beginning with @kbd{z}. Commands for managing these definitions
30624 use the shift-@kbd{Z} prefix. (The @kbd{Z T} (@code{calc-timing})
30625 command is described elsewhere; @pxref{Troubleshooting Commands}.
30626 The @kbd{Z C} (@code{calc-user-define-composition}) command is also
30627 described elsewhere; @pxref{User-Defined Compositions}.)
30628
30629 @menu
30630 * Creating User Keys::
30631 * Keyboard Macros::
30632 * Invocation Macros::
30633 * Algebraic Definitions::
30634 * Lisp Definitions::
30635 @end menu
30636
30637 @node Creating User Keys, Keyboard Macros, Programming, Programming
30638 @section Creating User Keys
30639
30640 @noindent
30641 @kindex Z D
30642 @pindex calc-user-define
30643 Any Calculator command may be bound to a key using the @kbd{Z D}
30644 (@code{calc-user-define}) command. Actually, it is bound to a two-key
30645 sequence beginning with the lower-case @kbd{z} prefix.
30646
30647 The @kbd{Z D} command first prompts for the key to define. For example,
30648 press @kbd{Z D a} to define the new key sequence @kbd{z a}. You are then
30649 prompted for the name of the Calculator command that this key should
30650 run. For example, the @code{calc-sincos} command is not normally
30651 available on a key. Typing @kbd{Z D s sincos @key{RET}} programs the
30652 @kbd{z s} key sequence to run @code{calc-sincos}. This definition will remain
30653 in effect for the rest of this Emacs session, or until you redefine
30654 @kbd{z s} to be something else.
30655
30656 You can actually bind any Emacs command to a @kbd{z} key sequence by
30657 backspacing over the @samp{calc-} when you are prompted for the command name.
30658
30659 As with any other prefix key, you can type @kbd{z ?} to see a list of
30660 all the two-key sequences you have defined that start with @kbd{z}.
30661 Initially, no @kbd{z} sequences (except @kbd{z ?} itself) are defined.
30662
30663 User keys are typically letters, but may in fact be any key.
30664 (@key{META}-keys are not permitted, nor are a terminal's special
30665 function keys which generate multi-character sequences when pressed.)
30666 You can define different commands on the shifted and unshifted versions
30667 of a letter if you wish.
30668
30669 @kindex Z U
30670 @pindex calc-user-undefine
30671 The @kbd{Z U} (@code{calc-user-undefine}) command unbinds a user key.
30672 For example, the key sequence @kbd{Z U s} will undefine the @code{sincos}
30673 key we defined above.
30674
30675 @kindex Z P
30676 @pindex calc-user-define-permanent
30677 @cindex Storing user definitions
30678 @cindex Permanent user definitions
30679 @cindex @file{.emacs} file, user-defined commands
30680 The @kbd{Z P} (@code{calc-user-define-permanent}) command makes a key
30681 binding permanent so that it will remain in effect even in future Emacs
30682 sessions. (It does this by adding a suitable bit of Lisp code into
30683 your @file{.emacs} file.) For example, @kbd{Z P s} would register
30684 our @code{sincos} command permanently. If you later wish to unregister
30685 this command you must edit your @file{.emacs} file by hand.
30686 (@xref{General Mode Commands}, for a way to tell Calc to use a
30687 different file instead of @file{.emacs}.)
30688
30689 The @kbd{Z P} command also saves the user definition, if any, for the
30690 command bound to the key. After @kbd{Z F} and @kbd{Z C}, a given user
30691 key could invoke a command, which in turn calls an algebraic function,
30692 which might have one or more special display formats. A single @kbd{Z P}
30693 command will save all of these definitions.
30694 To save an algebraic function, type @kbd{'} (the apostrophe)
30695 when prompted for a key, and type the function name. To save a command
30696 without its key binding, type @kbd{M-x} and enter a function name. (The
30697 @samp{calc-} prefix will automatically be inserted for you.)
30698 (If the command you give implies a function, the function will be saved,
30699 and if the function has any display formats, those will be saved, but
30700 not the other way around: Saving a function will not save any commands
30701 or key bindings associated with the function.)
30702
30703 @kindex Z E
30704 @pindex calc-user-define-edit
30705 @cindex Editing user definitions
30706 The @kbd{Z E} (@code{calc-user-define-edit}) command edits the definition
30707 of a user key. This works for keys that have been defined by either
30708 keyboard macros or formulas; further details are contained in the relevant
30709 following sections.
30710
30711 @node Keyboard Macros, Invocation Macros, Creating User Keys, Programming
30712 @section Programming with Keyboard Macros
30713
30714 @noindent
30715 @kindex X
30716 @cindex Programming with keyboard macros
30717 @cindex Keyboard macros
30718 The easiest way to ``program'' the Emacs Calculator is to use standard
30719 keyboard macros. Press @w{@kbd{C-x (}} to begin recording a macro. From
30720 this point on, keystrokes you type will be saved away as well as
30721 performing their usual functions. Press @kbd{C-x )} to end recording.
30722 Press shift-@kbd{X} (or the standard Emacs key sequence @kbd{C-x e}) to
30723 execute your keyboard macro by replaying the recorded keystrokes.
30724 @xref{Keyboard Macros, , , emacs, the Emacs Manual}, for further
30725 information.
30726
30727 When you use @kbd{X} to invoke a keyboard macro, the entire macro is
30728 treated as a single command by the undo and trail features. The stack
30729 display buffer is not updated during macro execution, but is instead
30730 fixed up once the macro completes. Thus, commands defined with keyboard
30731 macros are convenient and efficient. The @kbd{C-x e} command, on the
30732 other hand, invokes the keyboard macro with no special treatment: Each
30733 command in the macro will record its own undo information and trail entry,
30734 and update the stack buffer accordingly. If your macro uses features
30735 outside of Calc's control to operate on the contents of the Calc stack
30736 buffer, or if it includes Undo, Redo, or last-arguments commands, you
30737 must use @kbd{C-x e} to make sure the buffer and undo list are up-to-date
30738 at all times. You could also consider using @kbd{K} (@code{calc-keep-args})
30739 instead of @kbd{M-@key{RET}} (@code{calc-last-args}).
30740
30741 Calc extends the standard Emacs keyboard macros in several ways.
30742 Keyboard macros can be used to create user-defined commands. Keyboard
30743 macros can include conditional and iteration structures, somewhat
30744 analogous to those provided by a traditional programmable calculator.
30745
30746 @menu
30747 * Naming Keyboard Macros::
30748 * Conditionals in Macros::
30749 * Loops in Macros::
30750 * Local Values in Macros::
30751 * Queries in Macros::
30752 @end menu
30753
30754 @node Naming Keyboard Macros, Conditionals in Macros, Keyboard Macros, Keyboard Macros
30755 @subsection Naming Keyboard Macros
30756
30757 @noindent
30758 @kindex Z K
30759 @pindex calc-user-define-kbd-macro
30760 Once you have defined a keyboard macro, you can bind it to a @kbd{z}
30761 key sequence with the @kbd{Z K} (@code{calc-user-define-kbd-macro}) command.
30762 This command prompts first for a key, then for a command name. For
30763 example, if you type @kbd{C-x ( n @key{TAB} n @key{TAB} C-x )} you will
30764 define a keyboard macro which negates the top two numbers on the stack
30765 (@key{TAB} swaps the top two stack elements). Now you can type
30766 @kbd{Z K n @key{RET}} to define this keyboard macro onto the @kbd{z n} key
30767 sequence. The default command name (if you answer the second prompt with
30768 just the @key{RET} key as in this example) will be something like
30769 @samp{calc-User-n}. The keyboard macro will now be available as both
30770 @kbd{z n} and @kbd{M-x calc-User-n}. You can backspace and enter a more
30771 descriptive command name if you wish.
30772
30773 Macros defined by @kbd{Z K} act like single commands; they are executed
30774 in the same way as by the @kbd{X} key. If you wish to define the macro
30775 as a standard no-frills Emacs macro (to be executed as if by @kbd{C-x e}),
30776 give a negative prefix argument to @kbd{Z K}.
30777
30778 Once you have bound your keyboard macro to a key, you can use
30779 @kbd{Z P} to register it permanently with Emacs. @xref{Creating User Keys}.
30780
30781 @cindex Keyboard macros, editing
30782 The @kbd{Z E} (@code{calc-user-define-edit}) command on a key that has
30783 been defined by a keyboard macro tries to use the @code{edmacro} package
30784 edit the macro. Type @kbd{C-c C-c} to finish editing and update
30785 the definition stored on the key, or, to cancel the edit, kill the
30786 buffer with @kbd{C-x k}.
30787 The special characters @code{RET}, @code{LFD}, @code{TAB}, @code{SPC},
30788 @code{DEL}, and @code{NUL} must be entered as these three character
30789 sequences, written in all uppercase, as must the prefixes @code{C-} and
30790 @code{M-}. Spaces and line breaks are ignored. Other characters are
30791 copied verbatim into the keyboard macro. Basically, the notation is the
30792 same as is used in all of this manual's examples, except that the manual
30793 takes some liberties with spaces: When we say @kbd{' [1 2 3] @key{RET}},
30794 we take it for granted that it is clear we really mean
30795 @kbd{' [1 @key{SPC} 2 @key{SPC} 3] @key{RET}}.
30796
30797 @kindex M-# m
30798 @pindex read-kbd-macro
30799 The @kbd{M-# m} (@code{read-kbd-macro}) command reads an Emacs ``region''
30800 of spelled-out keystrokes and defines it as the current keyboard macro.
30801 It is a convenient way to define a keyboard macro that has been stored
30802 in a file, or to define a macro without executing it at the same time.
30803
30804 @node Conditionals in Macros, Loops in Macros, Naming Keyboard Macros, Keyboard Macros
30805 @subsection Conditionals in Keyboard Macros
30806
30807 @noindent
30808 @kindex Z [
30809 @kindex Z ]
30810 @pindex calc-kbd-if
30811 @pindex calc-kbd-else
30812 @pindex calc-kbd-else-if
30813 @pindex calc-kbd-end-if
30814 @cindex Conditional structures
30815 The @kbd{Z [} (@code{calc-kbd-if}) and @kbd{Z ]} (@code{calc-kbd-end-if})
30816 commands allow you to put simple tests in a keyboard macro. When Calc
30817 sees the @kbd{Z [}, it pops an object from the stack and, if the object is
30818 a non-zero value, continues executing keystrokes. But if the object is
30819 zero, or if it is not provably nonzero, Calc skips ahead to the matching
30820 @kbd{Z ]} keystroke. @xref{Logical Operations}, for a set of commands for
30821 performing tests which conveniently produce 1 for true and 0 for false.
30822
30823 For example, @kbd{@key{RET} 0 a < Z [ n Z ]} implements an absolute-value
30824 function in the form of a keyboard macro. This macro duplicates the
30825 number on the top of the stack, pushes zero and compares using @kbd{a <}
30826 (@code{calc-less-than}), then, if the number was less than zero,
30827 executes @kbd{n} (@code{calc-change-sign}). Otherwise, the change-sign
30828 command is skipped.
30829
30830 To program this macro, type @kbd{C-x (}, type the above sequence of
30831 keystrokes, then type @kbd{C-x )}. Note that the keystrokes will be
30832 executed while you are making the definition as well as when you later
30833 re-execute the macro by typing @kbd{X}. Thus you should make sure a
30834 suitable number is on the stack before defining the macro so that you
30835 don't get a stack-underflow error during the definition process.
30836
30837 Conditionals can be nested arbitrarily. However, there should be exactly
30838 one @kbd{Z ]} for each @kbd{Z [} in a keyboard macro.
30839
30840 @kindex Z :
30841 The @kbd{Z :} (@code{calc-kbd-else}) command allows you to choose between
30842 two keystroke sequences. The general format is @kbd{@var{cond} Z [
30843 @var{then-part} Z : @var{else-part} Z ]}. If @var{cond} is true
30844 (i.e., if the top of stack contains a non-zero number after @var{cond}
30845 has been executed), the @var{then-part} will be executed and the
30846 @var{else-part} will be skipped. Otherwise, the @var{then-part} will
30847 be skipped and the @var{else-part} will be executed.
30848
30849 @kindex Z |
30850 The @kbd{Z |} (@code{calc-kbd-else-if}) command allows you to choose
30851 between any number of alternatives. For example,
30852 @kbd{@var{cond1} Z [ @var{part1} Z : @var{cond2} Z | @var{part2} Z :
30853 @var{part3} Z ]} will execute @var{part1} if @var{cond1} is true,
30854 otherwise it will execute @var{part2} if @var{cond2} is true, otherwise
30855 it will execute @var{part3}.
30856
30857 More precisely, @kbd{Z [} pops a number and conditionally skips to the
30858 next matching @kbd{Z :} or @kbd{Z ]} key. @w{@kbd{Z ]}} has no effect when
30859 actually executed. @kbd{Z :} skips to the next matching @kbd{Z ]}.
30860 @kbd{Z |} pops a number and conditionally skips to the next matching
30861 @kbd{Z :} or @kbd{Z ]}; thus, @kbd{Z [} and @kbd{Z |} are functionally
30862 equivalent except that @kbd{Z [} participates in nesting but @kbd{Z |}
30863 does not.
30864
30865 Calc's conditional and looping constructs work by scanning the
30866 keyboard macro for occurrences of character sequences like @samp{Z:}
30867 and @samp{Z]}. One side-effect of this is that if you use these
30868 constructs you must be careful that these character pairs do not
30869 occur by accident in other parts of the macros. Since Calc rarely
30870 uses shift-@kbd{Z} for any purpose except as a prefix character, this
30871 is not likely to be a problem. Another side-effect is that it will
30872 not work to define your own custom key bindings for these commands.
30873 Only the standard shift-@kbd{Z} bindings will work correctly.
30874
30875 @kindex Z C-g
30876 If Calc gets stuck while skipping characters during the definition of a
30877 macro, type @kbd{Z C-g} to cancel the definition. (Typing plain @kbd{C-g}
30878 actually adds a @kbd{C-g} keystroke to the macro.)
30879
30880 @node Loops in Macros, Local Values in Macros, Conditionals in Macros, Keyboard Macros
30881 @subsection Loops in Keyboard Macros
30882
30883 @noindent
30884 @kindex Z <
30885 @kindex Z >
30886 @pindex calc-kbd-repeat
30887 @pindex calc-kbd-end-repeat
30888 @cindex Looping structures
30889 @cindex Iterative structures
30890 The @kbd{Z <} (@code{calc-kbd-repeat}) and @kbd{Z >}
30891 (@code{calc-kbd-end-repeat}) commands pop a number from the stack,
30892 which must be an integer, then repeat the keystrokes between the brackets
30893 the specified number of times. If the integer is zero or negative, the
30894 body is skipped altogether. For example, @kbd{1 @key{TAB} Z < 2 * Z >}
30895 computes two to a nonnegative integer power. First, we push 1 on the
30896 stack and then swap the integer argument back to the top. The @kbd{Z <}
30897 pops that argument leaving the 1 back on top of the stack. Then, we
30898 repeat a multiply-by-two step however many times.
30899
30900 Once again, the keyboard macro is executed as it is being entered.
30901 In this case it is especially important to set up reasonable initial
30902 conditions before making the definition: Suppose the integer 1000 just
30903 happened to be sitting on the stack before we typed the above definition!
30904 Another approach is to enter a harmless dummy definition for the macro,
30905 then go back and edit in the real one with a @kbd{Z E} command. Yet
30906 another approach is to type the macro as written-out keystroke names
30907 in a buffer, then use @kbd{M-# m} (@code{read-kbd-macro}) to read the
30908 macro.
30909
30910 @kindex Z /
30911 @pindex calc-break
30912 The @kbd{Z /} (@code{calc-kbd-break}) command allows you to break out
30913 of a keyboard macro loop prematurely. It pops an object from the stack;
30914 if that object is true (a non-zero number), control jumps out of the
30915 innermost enclosing @kbd{Z <} @dots{} @kbd{Z >} loop and continues
30916 after the @kbd{Z >}. If the object is false, the @kbd{Z /} has no
30917 effect. Thus @kbd{@var{cond} Z /} is similar to @samp{if (@var{cond}) break;}
30918 in the C language.
30919
30920 @kindex Z (
30921 @kindex Z )
30922 @pindex calc-kbd-for
30923 @pindex calc-kbd-end-for
30924 The @kbd{Z (} (@code{calc-kbd-for}) and @kbd{Z )} (@code{calc-kbd-end-for})
30925 commands are similar to @kbd{Z <} and @kbd{Z >}, except that they make the
30926 value of the counter available inside the loop. The general layout is
30927 @kbd{@var{init} @var{final} Z ( @var{body} @var{step} Z )}. The @kbd{Z (}
30928 command pops initial and final values from the stack. It then creates
30929 a temporary internal counter and initializes it with the value @var{init}.
30930 The @kbd{Z (} command then repeatedly pushes the counter value onto the
30931 stack and executes @var{body} and @var{step}, adding @var{step} to the
30932 counter each time until the loop finishes.
30933
30934 @cindex Summations (by keyboard macros)
30935 By default, the loop finishes when the counter becomes greater than (or
30936 less than) @var{final}, assuming @var{initial} is less than (greater
30937 than) @var{final}. If @var{initial} is equal to @var{final}, the body
30938 executes exactly once. The body of the loop always executes at least
30939 once. For example, @kbd{0 1 10 Z ( 2 ^ + 1 Z )} computes the sum of the
30940 squares of the integers from 1 to 10, in steps of 1.
30941
30942 If you give a numeric prefix argument of 1 to @kbd{Z (}, the loop is
30943 forced to use upward-counting conventions. In this case, if @var{initial}
30944 is greater than @var{final} the body will not be executed at all.
30945 Note that @var{step} may still be negative in this loop; the prefix
30946 argument merely constrains the loop-finished test. Likewise, a prefix
30947 argument of @mathit{-1} forces downward-counting conventions.
30948
30949 @kindex Z @{
30950 @kindex Z @}
30951 @pindex calc-kbd-loop
30952 @pindex calc-kbd-end-loop
30953 The @kbd{Z @{} (@code{calc-kbd-loop}) and @kbd{Z @}}
30954 (@code{calc-kbd-end-loop}) commands are similar to @kbd{Z <} and
30955 @kbd{Z >}, except that they do not pop a count from the stack---they
30956 effectively create an infinite loop. Every @kbd{Z @{} @dots{} @kbd{Z @}}
30957 loop ought to include at least one @kbd{Z /} to make sure the loop
30958 doesn't run forever. (If any error message occurs which causes Emacs
30959 to beep, the keyboard macro will also be halted; this is a standard
30960 feature of Emacs. You can also generally press @kbd{C-g} to halt a
30961 running keyboard macro, although not all versions of Unix support
30962 this feature.)
30963
30964 The conditional and looping constructs are not actually tied to
30965 keyboard macros, but they are most often used in that context.
30966 For example, the keystrokes @kbd{10 Z < 23 @key{RET} Z >} push
30967 ten copies of 23 onto the stack. This can be typed ``live'' just
30968 as easily as in a macro definition.
30969
30970 @xref{Conditionals in Macros}, for some additional notes about
30971 conditional and looping commands.
30972
30973 @node Local Values in Macros, Queries in Macros, Loops in Macros, Keyboard Macros
30974 @subsection Local Values in Macros
30975
30976 @noindent
30977 @cindex Local variables
30978 @cindex Restoring saved modes
30979 Keyboard macros sometimes want to operate under known conditions
30980 without affecting surrounding conditions. For example, a keyboard
30981 macro may wish to turn on Fraction mode, or set a particular
30982 precision, independent of the user's normal setting for those
30983 modes.
30984
30985 @kindex Z `
30986 @kindex Z '
30987 @pindex calc-kbd-push
30988 @pindex calc-kbd-pop
30989 Macros also sometimes need to use local variables. Assignments to
30990 local variables inside the macro should not affect any variables
30991 outside the macro. The @kbd{Z `} (@code{calc-kbd-push}) and @kbd{Z '}
30992 (@code{calc-kbd-pop}) commands give you both of these capabilities.
30993
30994 When you type @kbd{Z `} (with a backquote or accent grave character),
30995 the values of various mode settings are saved away. The ten ``quick''
30996 variables @code{q0} through @code{q9} are also saved. When
30997 you type @w{@kbd{Z '}} (with an apostrophe), these values are restored.
30998 Pairs of @kbd{Z `} and @kbd{Z '} commands may be nested.
30999
31000 If a keyboard macro halts due to an error in between a @kbd{Z `} and
31001 a @kbd{Z '}, the saved values will be restored correctly even though
31002 the macro never reaches the @kbd{Z '} command. Thus you can use
31003 @kbd{Z `} and @kbd{Z '} without having to worry about what happens
31004 in exceptional conditions.
31005
31006 If you type @kbd{Z `} ``live'' (not in a keyboard macro), Calc puts
31007 you into a ``recursive edit.'' You can tell you are in a recursive
31008 edit because there will be extra square brackets in the mode line,
31009 as in @samp{[(Calculator)]}. These brackets will go away when you
31010 type the matching @kbd{Z '} command. The modes and quick variables
31011 will be saved and restored in just the same way as if actual keyboard
31012 macros were involved.
31013
31014 The modes saved by @kbd{Z `} and @kbd{Z '} are the current precision
31015 and binary word size, the angular mode (Deg, Rad, or HMS), the
31016 simplification mode, Algebraic mode, Symbolic mode, Infinite mode,
31017 Matrix or Scalar mode, Fraction mode, and the current complex mode
31018 (Polar or Rectangular). The ten ``quick'' variables' values (or lack
31019 thereof) are also saved.
31020
31021 Most mode-setting commands act as toggles, but with a numeric prefix
31022 they force the mode either on (positive prefix) or off (negative
31023 or zero prefix). Since you don't know what the environment might
31024 be when you invoke your macro, it's best to use prefix arguments
31025 for all mode-setting commands inside the macro.
31026
31027 In fact, @kbd{C-u Z `} is like @kbd{Z `} except that it sets the modes
31028 listed above to their default values. As usual, the matching @kbd{Z '}
31029 will restore the modes to their settings from before the @kbd{C-u Z `}.
31030 Also, @w{@kbd{Z `}} with a negative prefix argument resets the algebraic mode
31031 to its default (off) but leaves the other modes the same as they were
31032 outside the construct.
31033
31034 The contents of the stack and trail, values of non-quick variables, and
31035 other settings such as the language mode and the various display modes,
31036 are @emph{not} affected by @kbd{Z `} and @kbd{Z '}.
31037
31038 @node Queries in Macros, , Local Values in Macros, Keyboard Macros
31039 @subsection Queries in Keyboard Macros
31040
31041 @noindent
31042 @kindex Z =
31043 @pindex calc-kbd-report
31044 The @kbd{Z =} (@code{calc-kbd-report}) command displays an informative
31045 message including the value on the top of the stack. You are prompted
31046 to enter a string. That string, along with the top-of-stack value,
31047 is displayed unless @kbd{m w} (@code{calc-working}) has been used
31048 to turn such messages off.
31049
31050 @kindex Z #
31051 @pindex calc-kbd-query
31052 The @kbd{Z #} (@code{calc-kbd-query}) command displays a prompt message
31053 (which you enter during macro definition), then does an algebraic entry
31054 which takes its input from the keyboard, even during macro execution.
31055 This command allows your keyboard macros to accept numbers or formulas
31056 as interactive input. All the normal conventions of algebraic input,
31057 including the use of @kbd{$} characters, are supported.
31058
31059 @xref{Keyboard Macro Query, , , emacs, the Emacs Manual}, for a description of
31060 @kbd{C-x q} (@code{kbd-macro-query}), the standard Emacs way to accept
31061 keyboard input during a keyboard macro. In particular, you can use
31062 @kbd{C-x q} to enter a recursive edit, which allows the user to perform
31063 any Calculator operations interactively before pressing @kbd{C-M-c} to
31064 return control to the keyboard macro.
31065
31066 @node Invocation Macros, Algebraic Definitions, Keyboard Macros, Programming
31067 @section Invocation Macros
31068
31069 @kindex M-# z
31070 @kindex Z I
31071 @pindex calc-user-invocation
31072 @pindex calc-user-define-invocation
31073 Calc provides one special keyboard macro, called up by @kbd{M-# z}
31074 (@code{calc-user-invocation}), that is intended to allow you to define
31075 your own special way of starting Calc. To define this ``invocation
31076 macro,'' create the macro in the usual way with @kbd{C-x (} and
31077 @kbd{C-x )}, then type @kbd{Z I} (@code{calc-user-define-invocation}).
31078 There is only one invocation macro, so you don't need to type any
31079 additional letters after @kbd{Z I}. From now on, you can type
31080 @kbd{M-# z} at any time to execute your invocation macro.
31081
31082 For example, suppose you find yourself often grabbing rectangles of
31083 numbers into Calc and multiplying their columns. You can do this
31084 by typing @kbd{M-# r} to grab, and @kbd{V R : *} to multiply columns.
31085 To make this into an invocation macro, just type @kbd{C-x ( M-# r
31086 V R : * C-x )}, then @kbd{Z I}. Then, to multiply a rectangle of data,
31087 just mark the data in its buffer in the usual way and type @kbd{M-# z}.
31088
31089 Invocation macros are treated like regular Emacs keyboard macros;
31090 all the special features described above for @kbd{Z K}-style macros
31091 do not apply. @kbd{M-# z} is just like @kbd{C-x e}, except that it
31092 uses the macro that was last stored by @kbd{Z I}. (In fact, the
31093 macro does not even have to have anything to do with Calc!)
31094
31095 The @kbd{m m} command saves the last invocation macro defined by
31096 @kbd{Z I} along with all the other Calc mode settings.
31097 @xref{General Mode Commands}.
31098
31099 @node Algebraic Definitions, Lisp Definitions, Invocation Macros, Programming
31100 @section Programming with Formulas
31101
31102 @noindent
31103 @kindex Z F
31104 @pindex calc-user-define-formula
31105 @cindex Programming with algebraic formulas
31106 Another way to create a new Calculator command uses algebraic formulas.
31107 The @kbd{Z F} (@code{calc-user-define-formula}) command stores the
31108 formula at the top of the stack as the definition for a key. This
31109 command prompts for five things: The key, the command name, the function
31110 name, the argument list, and the behavior of the command when given
31111 non-numeric arguments.
31112
31113 For example, suppose we type @kbd{' a+2b @key{RET}} to push the formula
31114 @samp{a + 2*b} onto the stack. We now type @kbd{Z F m} to define this
31115 formula on the @kbd{z m} key sequence. The next prompt is for a command
31116 name, beginning with @samp{calc-}, which should be the long (@kbd{M-x}) form
31117 for the new command. If you simply press @key{RET}, a default name like
31118 @code{calc-User-m} will be constructed. In our example, suppose we enter
31119 @kbd{spam @key{RET}} to define the new command as @code{calc-spam}.
31120
31121 If you want to give the formula a long-style name only, you can press
31122 @key{SPC} or @key{RET} when asked which single key to use. For example
31123 @kbd{Z F @key{RET} spam @key{RET}} defines the new command as
31124 @kbd{M-x calc-spam}, with no keyboard equivalent.
31125
31126 The third prompt is for an algebraic function name. The default is to
31127 use the same name as the command name but without the @samp{calc-}
31128 prefix. (If this is of the form @samp{User-m}, the hyphen is removed so
31129 it won't be taken for a minus sign in algebraic formulas.)
31130 This is the name you will use if you want to enter your
31131 new function in an algebraic formula. Suppose we enter @kbd{yow @key{RET}}.
31132 Then the new function can be invoked by pushing two numbers on the
31133 stack and typing @kbd{z m} or @kbd{x spam}, or by entering the algebraic
31134 formula @samp{yow(x,y)}.
31135
31136 The fourth prompt is for the function's argument list. This is used to
31137 associate values on the stack with the variables that appear in the formula.
31138 The default is a list of all variables which appear in the formula, sorted
31139 into alphabetical order. In our case, the default would be @samp{(a b)}.
31140 This means that, when the user types @kbd{z m}, the Calculator will remove
31141 two numbers from the stack, substitute these numbers for @samp{a} and
31142 @samp{b} (respectively) in the formula, then simplify the formula and
31143 push the result on the stack. In other words, @kbd{10 @key{RET} 100 z m}
31144 would replace the 10 and 100 on the stack with the number 210, which is
31145 @expr{a + 2 b} with @expr{a=10} and @expr{b=100}. Likewise, the formula
31146 @samp{yow(10, 100)} will be evaluated by substituting @expr{a=10} and
31147 @expr{b=100} in the definition.
31148
31149 You can rearrange the order of the names before pressing @key{RET} to
31150 control which stack positions go to which variables in the formula. If
31151 you remove a variable from the argument list, that variable will be left
31152 in symbolic form by the command. Thus using an argument list of @samp{(b)}
31153 for our function would cause @kbd{10 z m} to replace the 10 on the stack
31154 with the formula @samp{a + 20}. If we had used an argument list of
31155 @samp{(b a)}, the result with inputs 10 and 100 would have been 120.
31156
31157 You can also put a nameless function on the stack instead of just a
31158 formula, as in @samp{<a, b : a + 2 b>}. @xref{Specifying Operators}.
31159 In this example, the command will be defined by the formula @samp{a + 2 b}
31160 using the argument list @samp{(a b)}.
31161
31162 The final prompt is a y-or-n question concerning what to do if symbolic
31163 arguments are given to your function. If you answer @kbd{y}, then
31164 executing @kbd{z m} (using the original argument list @samp{(a b)}) with
31165 arguments @expr{10} and @expr{x} will leave the function in symbolic
31166 form, i.e., @samp{yow(10,x)}. On the other hand, if you answer @kbd{n},
31167 then the formula will always be expanded, even for non-constant
31168 arguments: @samp{10 + 2 x}. If you never plan to feed algebraic
31169 formulas to your new function, it doesn't matter how you answer this
31170 question.
31171
31172 If you answered @kbd{y} to this question you can still cause a function
31173 call to be expanded by typing @kbd{a "} (@code{calc-expand-formula}).
31174 Also, Calc will expand the function if necessary when you take a
31175 derivative or integral or solve an equation involving the function.
31176
31177 @kindex Z G
31178 @pindex calc-get-user-defn
31179 Once you have defined a formula on a key, you can retrieve this formula
31180 with the @kbd{Z G} (@code{calc-user-define-get-defn}) command. Press a
31181 key, and this command pushes the formula that was used to define that
31182 key onto the stack. Actually, it pushes a nameless function that
31183 specifies both the argument list and the defining formula. You will get
31184 an error message if the key is undefined, or if the key was not defined
31185 by a @kbd{Z F} command.
31186
31187 The @kbd{Z E} (@code{calc-user-define-edit}) command on a key that has
31188 been defined by a formula uses a variant of the @code{calc-edit} command
31189 to edit the defining formula. Press @kbd{C-c C-c} to finish editing and
31190 store the new formula back in the definition, or kill the buffer with
31191 @kbd{C-x k} to
31192 cancel the edit. (The argument list and other properties of the
31193 definition are unchanged; to adjust the argument list, you can use
31194 @kbd{Z G} to grab the function onto the stack, edit with @kbd{`}, and
31195 then re-execute the @kbd{Z F} command.)
31196
31197 As usual, the @kbd{Z P} command records your definition permanently.
31198 In this case it will permanently record all three of the relevant
31199 definitions: the key, the command, and the function.
31200
31201 You may find it useful to turn off the default simplifications with
31202 @kbd{m O} (@code{calc-no-simplify-mode}) when entering a formula to be
31203 used as a function definition. For example, the formula @samp{deriv(a^2,v)}
31204 which might be used to define a new function @samp{dsqr(a,v)} will be
31205 ``simplified'' to 0 immediately upon entry since @code{deriv} considers
31206 @expr{a} to be constant with respect to @expr{v}. Turning off
31207 default simplifications cures this problem: The definition will be stored
31208 in symbolic form without ever activating the @code{deriv} function. Press
31209 @kbd{m D} to turn the default simplifications back on afterwards.
31210
31211 @node Lisp Definitions, , Algebraic Definitions, Programming
31212 @section Programming with Lisp
31213
31214 @noindent
31215 The Calculator can be programmed quite extensively in Lisp. All you
31216 do is write a normal Lisp function definition, but with @code{defmath}
31217 in place of @code{defun}. This has the same form as @code{defun}, but it
31218 automagically replaces calls to standard Lisp functions like @code{+} and
31219 @code{zerop} with calls to the corresponding functions in Calc's own library.
31220 Thus you can write natural-looking Lisp code which operates on all of the
31221 standard Calculator data types. You can then use @kbd{Z D} if you wish to
31222 bind your new command to a @kbd{z}-prefix key sequence. The @kbd{Z E} command
31223 will not edit a Lisp-based definition.
31224
31225 Emacs Lisp is described in the GNU Emacs Lisp Reference Manual. This section
31226 assumes a familiarity with Lisp programming concepts; if you do not know
31227 Lisp, you may find keyboard macros or rewrite rules to be an easier way
31228 to program the Calculator.
31229
31230 This section first discusses ways to write commands, functions, or
31231 small programs to be executed inside of Calc. Then it discusses how
31232 your own separate programs are able to call Calc from the outside.
31233 Finally, there is a list of internal Calc functions and data structures
31234 for the true Lisp enthusiast.
31235
31236 @menu
31237 * Defining Functions::
31238 * Defining Simple Commands::
31239 * Defining Stack Commands::
31240 * Argument Qualifiers::
31241 * Example Definitions::
31242
31243 * Calling Calc from Your Programs::
31244 * Internals::
31245 @end menu
31246
31247 @node Defining Functions, Defining Simple Commands, Lisp Definitions, Lisp Definitions
31248 @subsection Defining New Functions
31249
31250 @noindent
31251 @findex defmath
31252 The @code{defmath} function (actually a Lisp macro) is like @code{defun}
31253 except that code in the body of the definition can make use of the full
31254 range of Calculator data types. The prefix @samp{calcFunc-} is added
31255 to the specified name to get the actual Lisp function name. As a simple
31256 example,
31257
31258 @example
31259 (defmath myfact (n)
31260 (if (> n 0)
31261 (* n (myfact (1- n)))
31262 1))
31263 @end example
31264
31265 @noindent
31266 This actually expands to the code,
31267
31268 @example
31269 (defun calcFunc-myfact (n)
31270 (if (math-posp n)
31271 (math-mul n (calcFunc-myfact (math-add n -1)))
31272 1))
31273 @end example
31274
31275 @noindent
31276 This function can be used in algebraic expressions, e.g., @samp{myfact(5)}.
31277
31278 The @samp{myfact} function as it is defined above has the bug that an
31279 expression @samp{myfact(a+b)} will be simplified to 1 because the
31280 formula @samp{a+b} is not considered to be @code{posp}. A robust
31281 factorial function would be written along the following lines:
31282
31283 @smallexample
31284 (defmath myfact (n)
31285 (if (> n 0)
31286 (* n (myfact (1- n)))
31287 (if (= n 0)
31288 1
31289 nil))) ; this could be simplified as: (and (= n 0) 1)
31290 @end smallexample
31291
31292 If a function returns @code{nil}, it is left unsimplified by the Calculator
31293 (except that its arguments will be simplified). Thus, @samp{myfact(a+1+2)}
31294 will be simplified to @samp{myfact(a+3)} but no further. Beware that every
31295 time the Calculator reexamines this formula it will attempt to resimplify
31296 it, so your function ought to detect the returning-@code{nil} case as
31297 efficiently as possible.
31298
31299 The following standard Lisp functions are treated by @code{defmath}:
31300 @code{+}, @code{-}, @code{*}, @code{/}, @code{%}, @code{^} or
31301 @code{expt}, @code{=}, @code{<}, @code{>}, @code{<=}, @code{>=},
31302 @code{/=}, @code{1+}, @code{1-}, @code{logand}, @code{logior}, @code{logxor},
31303 @code{logandc2}, @code{lognot}. Also, @code{~=} is an abbreviation for
31304 @code{math-nearly-equal}, which is useful in implementing Taylor series.
31305
31306 For other functions @var{func}, if a function by the name
31307 @samp{calcFunc-@var{func}} exists it is used, otherwise if a function by the
31308 name @samp{math-@var{func}} exists it is used, otherwise if @var{func} itself
31309 is defined as a function it is used, otherwise @samp{calcFunc-@var{func}} is
31310 used on the assumption that this is a to-be-defined math function. Also, if
31311 the function name is quoted as in @samp{('integerp a)} the function name is
31312 always used exactly as written (but not quoted).
31313
31314 Variable names have @samp{var-} prepended to them unless they appear in
31315 the function's argument list or in an enclosing @code{let}, @code{let*},
31316 @code{for}, or @code{foreach} form,
31317 or their names already contain a @samp{-} character. Thus a reference to
31318 @samp{foo} is the same as a reference to @samp{var-foo}.
31319
31320 A few other Lisp extensions are available in @code{defmath} definitions:
31321
31322 @itemize @bullet
31323 @item
31324 The @code{elt} function accepts any number of index variables.
31325 Note that Calc vectors are stored as Lisp lists whose first
31326 element is the symbol @code{vec}; thus, @samp{(elt v 2)} yields
31327 the second element of vector @code{v}, and @samp{(elt m i j)}
31328 yields one element of a Calc matrix.
31329
31330 @item
31331 The @code{setq} function has been extended to act like the Common
31332 Lisp @code{setf} function. (The name @code{setf} is recognized as
31333 a synonym of @code{setq}.) Specifically, the first argument of
31334 @code{setq} can be an @code{nth}, @code{elt}, @code{car}, or @code{cdr} form,
31335 in which case the effect is to store into the specified
31336 element of a list. Thus, @samp{(setq (elt m i j) x)} stores @expr{x}
31337 into one element of a matrix.
31338
31339 @item
31340 A @code{for} looping construct is available. For example,
31341 @samp{(for ((i 0 10)) body)} executes @code{body} once for each
31342 binding of @expr{i} from zero to 10. This is like a @code{let}
31343 form in that @expr{i} is temporarily bound to the loop count
31344 without disturbing its value outside the @code{for} construct.
31345 Nested loops, as in @samp{(for ((i 0 10) (j 0 (1- i) 2)) body)},
31346 are also available. For each value of @expr{i} from zero to 10,
31347 @expr{j} counts from 0 to @expr{i-1} in steps of two. Note that
31348 @code{for} has the same general outline as @code{let*}, except
31349 that each element of the header is a list of three or four
31350 things, not just two.
31351
31352 @item
31353 The @code{foreach} construct loops over elements of a list.
31354 For example, @samp{(foreach ((x (cdr v))) body)} executes
31355 @code{body} with @expr{x} bound to each element of Calc vector
31356 @expr{v} in turn. The purpose of @code{cdr} here is to skip over
31357 the initial @code{vec} symbol in the vector.
31358
31359 @item
31360 The @code{break} function breaks out of the innermost enclosing
31361 @code{while}, @code{for}, or @code{foreach} loop. If given a
31362 value, as in @samp{(break x)}, this value is returned by the
31363 loop. (Lisp loops otherwise always return @code{nil}.)
31364
31365 @item
31366 The @code{return} function prematurely returns from the enclosing
31367 function. For example, @samp{(return (+ x y))} returns @expr{x+y}
31368 as the value of a function. You can use @code{return} anywhere
31369 inside the body of the function.
31370 @end itemize
31371
31372 Non-integer numbers (and extremely large integers) cannot be included
31373 directly into a @code{defmath} definition. This is because the Lisp
31374 reader will fail to parse them long before @code{defmath} ever gets control.
31375 Instead, use the notation, @samp{:"3.1415"}. In fact, any algebraic
31376 formula can go between the quotes. For example,
31377
31378 @smallexample
31379 (defmath sqexp (x) ; sqexp(x) == sqrt(exp(x)) == exp(x*0.5)
31380 (and (numberp x)
31381 (exp :"x * 0.5")))
31382 @end smallexample
31383
31384 expands to
31385
31386 @smallexample
31387 (defun calcFunc-sqexp (x)
31388 (and (math-numberp x)
31389 (calcFunc-exp (math-mul x '(float 5 -1)))))
31390 @end smallexample
31391
31392 Note the use of @code{numberp} as a guard to ensure that the argument is
31393 a number first, returning @code{nil} if not. The exponential function
31394 could itself have been included in the expression, if we had preferred:
31395 @samp{:"exp(x * 0.5)"}. As another example, the multiplication-and-recursion
31396 step of @code{myfact} could have been written
31397
31398 @example
31399 :"n * myfact(n-1)"
31400 @end example
31401
31402 If a file named @file{.emacs} exists in your home directory, Emacs reads
31403 and executes the Lisp forms in this file as it starts up. While it may
31404 seem like a good idea to put your favorite @code{defmath} commands here,
31405 this has the unfortunate side-effect that parts of the Calculator must be
31406 loaded in to process the @code{defmath} commands whether or not you will
31407 actually use the Calculator! A better effect can be had by writing
31408
31409 @example
31410 (put 'calc-define 'thing '(progn
31411 (defmath ... )
31412 (defmath ... )
31413 ))
31414 @end example
31415
31416 @noindent
31417 @vindex calc-define
31418 The @code{put} function adds a @dfn{property} to a symbol. Each Lisp
31419 symbol has a list of properties associated with it. Here we add a
31420 property with a name of @code{thing} and a @samp{(progn ...)} form as
31421 its value. When Calc starts up, and at the start of every Calc command,
31422 the property list for the symbol @code{calc-define} is checked and the
31423 values of any properties found are evaluated as Lisp forms. The
31424 properties are removed as they are evaluated. The property names
31425 (like @code{thing}) are not used; you should choose something like the
31426 name of your project so as not to conflict with other properties.
31427
31428 The net effect is that you can put the above code in your @file{.emacs}
31429 file and it will not be executed until Calc is loaded. Or, you can put
31430 that same code in another file which you load by hand either before or
31431 after Calc itself is loaded.
31432
31433 The properties of @code{calc-define} are evaluated in the same order
31434 that they were added. They can assume that the Calc modules @file{calc.el},
31435 @file{calc-ext.el}, and @file{calc-macs.el} have been fully loaded, and
31436 that the @samp{*Calculator*} buffer will be the current buffer.
31437
31438 If your @code{calc-define} property only defines algebraic functions,
31439 you can be sure that it will have been evaluated before Calc tries to
31440 call your function, even if the file defining the property is loaded
31441 after Calc is loaded. But if the property defines commands or key
31442 sequences, it may not be evaluated soon enough. (Suppose it defines the
31443 new command @code{tweak-calc}; the user can load your file, then type
31444 @kbd{M-x tweak-calc} before Calc has had chance to do anything.) To
31445 protect against this situation, you can put
31446
31447 @example
31448 (run-hooks 'calc-check-defines)
31449 @end example
31450
31451 @findex calc-check-defines
31452 @noindent
31453 at the end of your file. The @code{calc-check-defines} function is what
31454 looks for and evaluates properties on @code{calc-define}; @code{run-hooks}
31455 has the advantage that it is quietly ignored if @code{calc-check-defines}
31456 is not yet defined because Calc has not yet been loaded.
31457
31458 Examples of things that ought to be enclosed in a @code{calc-define}
31459 property are @code{defmath} calls, @code{define-key} calls that modify
31460 the Calc key map, and any calls that redefine things defined inside Calc.
31461 Ordinary @code{defun}s need not be enclosed with @code{calc-define}.
31462
31463 @node Defining Simple Commands, Defining Stack Commands, Defining Functions, Lisp Definitions
31464 @subsection Defining New Simple Commands
31465
31466 @noindent
31467 @findex interactive
31468 If a @code{defmath} form contains an @code{interactive} clause, it defines
31469 a Calculator command. Actually such a @code{defmath} results in @emph{two}
31470 function definitions: One, a @samp{calcFunc-} function as was just described,
31471 with the @code{interactive} clause removed. Two, a @samp{calc-} function
31472 with a suitable @code{interactive} clause and some sort of wrapper to make
31473 the command work in the Calc environment.
31474
31475 In the simple case, the @code{interactive} clause has the same form as
31476 for normal Emacs Lisp commands:
31477
31478 @smallexample
31479 (defmath increase-precision (delta)
31480 "Increase precision by DELTA." ; This is the "documentation string"
31481 (interactive "p") ; Register this as a M-x-able command
31482 (setq calc-internal-prec (+ calc-internal-prec delta)))
31483 @end smallexample
31484
31485 This expands to the pair of definitions,
31486
31487 @smallexample
31488 (defun calc-increase-precision (delta)
31489 "Increase precision by DELTA."
31490 (interactive "p")
31491 (calc-wrapper
31492 (setq calc-internal-prec (math-add calc-internal-prec delta))))
31493
31494 (defun calcFunc-increase-precision (delta)
31495 "Increase precision by DELTA."
31496 (setq calc-internal-prec (math-add calc-internal-prec delta)))
31497 @end smallexample
31498
31499 @noindent
31500 where in this case the latter function would never really be used! Note
31501 that since the Calculator stores small integers as plain Lisp integers,
31502 the @code{math-add} function will work just as well as the native
31503 @code{+} even when the intent is to operate on native Lisp integers.
31504
31505 @findex calc-wrapper
31506 The @samp{calc-wrapper} call invokes a macro which surrounds the body of
31507 the function with code that looks roughly like this:
31508
31509 @smallexample
31510 (let ((calc-command-flags nil))
31511 (unwind-protect
31512 (save-excursion
31513 (calc-select-buffer)
31514 @emph{body of function}
31515 @emph{renumber stack}
31516 @emph{clear} Working @emph{message})
31517 @emph{realign cursor and window}
31518 @emph{clear Inverse, Hyperbolic, and Keep Args flags}
31519 @emph{update Emacs mode line}))
31520 @end smallexample
31521
31522 @findex calc-select-buffer
31523 The @code{calc-select-buffer} function selects the @samp{*Calculator*}
31524 buffer if necessary, say, because the command was invoked from inside
31525 the @samp{*Calc Trail*} window.
31526
31527 @findex calc-set-command-flag
31528 You can call, for example, @code{(calc-set-command-flag 'no-align)} to
31529 set the above-mentioned command flags. Calc routines recognize the
31530 following command flags:
31531
31532 @table @code
31533 @item renum-stack
31534 Stack line numbers @samp{1:}, @samp{2:}, and so on must be renumbered
31535 after this command completes. This is set by routines like
31536 @code{calc-push}.
31537
31538 @item clear-message
31539 Calc should call @samp{(message "")} if this command completes normally
31540 (to clear a ``Working@dots{}'' message out of the echo area).
31541
31542 @item no-align
31543 Do not move the cursor back to the @samp{.} top-of-stack marker.
31544
31545 @item position-point
31546 Use the variables @code{calc-position-point-line} and
31547 @code{calc-position-point-column} to position the cursor after
31548 this command finishes.
31549
31550 @item keep-flags
31551 Do not clear @code{calc-inverse-flag}, @code{calc-hyperbolic-flag},
31552 and @code{calc-keep-args-flag} at the end of this command.
31553
31554 @item do-edit
31555 Switch to buffer @samp{*Calc Edit*} after this command.
31556
31557 @item hold-trail
31558 Do not move trail pointer to end of trail when something is recorded
31559 there.
31560 @end table
31561
31562 @kindex Y
31563 @kindex Y ?
31564 @vindex calc-Y-help-msgs
31565 Calc reserves a special prefix key, shift-@kbd{Y}, for user-written
31566 extensions to Calc. There are no built-in commands that work with
31567 this prefix key; you must call @code{define-key} from Lisp (probably
31568 from inside a @code{calc-define} property) to add to it. Initially only
31569 @kbd{Y ?} is defined; it takes help messages from a list of strings
31570 (initially @code{nil}) in the variable @code{calc-Y-help-msgs}. All
31571 other undefined keys except for @kbd{Y} are reserved for use by
31572 future versions of Calc.
31573
31574 If you are writing a Calc enhancement which you expect to give to
31575 others, it is best to minimize the number of @kbd{Y}-key sequences
31576 you use. In fact, if you have more than one key sequence you should
31577 consider defining three-key sequences with a @kbd{Y}, then a key that
31578 stands for your package, then a third key for the particular command
31579 within your package.
31580
31581 Users may wish to install several Calc enhancements, and it is possible
31582 that several enhancements will choose to use the same key. In the
31583 example below, a variable @code{inc-prec-base-key} has been defined
31584 to contain the key that identifies the @code{inc-prec} package. Its
31585 value is initially @code{"P"}, but a user can change this variable
31586 if necessary without having to modify the file.
31587
31588 Here is a complete file, @file{inc-prec.el}, which makes a @kbd{Y P I}
31589 command that increases the precision, and a @kbd{Y P D} command that
31590 decreases the precision.
31591
31592 @smallexample
31593 ;;; Increase and decrease Calc precision. Dave Gillespie, 5/31/91.
31594 ;;; (Include copyright or copyleft stuff here.)
31595
31596 (defvar inc-prec-base-key "P"
31597 "Base key for inc-prec.el commands.")
31598
31599 (put 'calc-define 'inc-prec '(progn
31600
31601 (define-key calc-mode-map (format "Y%sI" inc-prec-base-key)
31602 'increase-precision)
31603 (define-key calc-mode-map (format "Y%sD" inc-prec-base-key)
31604 'decrease-precision)
31605
31606 (setq calc-Y-help-msgs
31607 (cons (format "%s + Inc-prec, Dec-prec" inc-prec-base-key)
31608 calc-Y-help-msgs))
31609
31610 (defmath increase-precision (delta)
31611 "Increase precision by DELTA."
31612 (interactive "p")
31613 (setq calc-internal-prec (+ calc-internal-prec delta)))
31614
31615 (defmath decrease-precision (delta)
31616 "Decrease precision by DELTA."
31617 (interactive "p")
31618 (setq calc-internal-prec (- calc-internal-prec delta)))
31619
31620 )) ; end of calc-define property
31621
31622 (run-hooks 'calc-check-defines)
31623 @end smallexample
31624
31625 @node Defining Stack Commands, Argument Qualifiers, Defining Simple Commands, Lisp Definitions
31626 @subsection Defining New Stack-Based Commands
31627
31628 @noindent
31629 To define a new computational command which takes and/or leaves arguments
31630 on the stack, a special form of @code{interactive} clause is used.
31631
31632 @example
31633 (interactive @var{num} @var{tag})
31634 @end example
31635
31636 @noindent
31637 where @var{num} is an integer, and @var{tag} is a string. The effect is
31638 to pop @var{num} values off the stack, resimplify them by calling
31639 @code{calc-normalize}, and hand them to your function according to the
31640 function's argument list. Your function may include @code{&optional} and
31641 @code{&rest} parameters, so long as calling the function with @var{num}
31642 parameters is legal.
31643
31644 Your function must return either a number or a formula in a form
31645 acceptable to Calc, or a list of such numbers or formulas. These value(s)
31646 are pushed onto the stack when the function completes. They are also
31647 recorded in the Calc Trail buffer on a line beginning with @var{tag},
31648 a string of (normally) four characters or less. If you omit @var{tag}
31649 or use @code{nil} as a tag, the result is not recorded in the trail.
31650
31651 As an example, the definition
31652
31653 @smallexample
31654 (defmath myfact (n)
31655 "Compute the factorial of the integer at the top of the stack."
31656 (interactive 1 "fact")
31657 (if (> n 0)
31658 (* n (myfact (1- n)))
31659 (and (= n 0) 1)))
31660 @end smallexample
31661
31662 @noindent
31663 is a version of the factorial function shown previously which can be used
31664 as a command as well as an algebraic function. It expands to
31665
31666 @smallexample
31667 (defun calc-myfact ()
31668 "Compute the factorial of the integer at the top of the stack."
31669 (interactive)
31670 (calc-slow-wrapper
31671 (calc-enter-result 1 "fact"
31672 (cons 'calcFunc-myfact (calc-top-list-n 1)))))
31673
31674 (defun calcFunc-myfact (n)
31675 "Compute the factorial of the integer at the top of the stack."
31676 (if (math-posp n)
31677 (math-mul n (calcFunc-myfact (math-add n -1)))
31678 (and (math-zerop n) 1)))
31679 @end smallexample
31680
31681 @findex calc-slow-wrapper
31682 The @code{calc-slow-wrapper} function is a version of @code{calc-wrapper}
31683 that automatically puts up a @samp{Working...} message before the
31684 computation begins. (This message can be turned off by the user
31685 with an @kbd{m w} (@code{calc-working}) command.)
31686
31687 @findex calc-top-list-n
31688 The @code{calc-top-list-n} function returns a list of the specified number
31689 of values from the top of the stack. It resimplifies each value by
31690 calling @code{calc-normalize}. If its argument is zero it returns an
31691 empty list. It does not actually remove these values from the stack.
31692
31693 @findex calc-enter-result
31694 The @code{calc-enter-result} function takes an integer @var{num} and string
31695 @var{tag} as described above, plus a third argument which is either a
31696 Calculator data object or a list of such objects. These objects are
31697 resimplified and pushed onto the stack after popping the specified number
31698 of values from the stack. If @var{tag} is non-@code{nil}, the values
31699 being pushed are also recorded in the trail.
31700
31701 Note that if @code{calcFunc-myfact} returns @code{nil} this represents
31702 ``leave the function in symbolic form.'' To return an actual empty list,
31703 in the sense that @code{calc-enter-result} will push zero elements back
31704 onto the stack, you should return the special value @samp{'(nil)}, a list
31705 containing the single symbol @code{nil}.
31706
31707 The @code{interactive} declaration can actually contain a limited
31708 Emacs-style code string as well which comes just before @var{num} and
31709 @var{tag}. Currently the only Emacs code supported is @samp{"p"}, as in
31710
31711 @example
31712 (defmath foo (a b &optional c)
31713 (interactive "p" 2 "foo")
31714 @var{body})
31715 @end example
31716
31717 In this example, the command @code{calc-foo} will evaluate the expression
31718 @samp{foo(a,b)} if executed with no argument, or @samp{foo(a,b,n)} if
31719 executed with a numeric prefix argument of @expr{n}.
31720
31721 The other code string allowed is @samp{"m"} (unrelated to the usual @samp{"m"}
31722 code as used with @code{defun}). It uses the numeric prefix argument as the
31723 number of objects to remove from the stack and pass to the function.
31724 In this case, the integer @var{num} serves as a default number of
31725 arguments to be used when no prefix is supplied.
31726
31727 @node Argument Qualifiers, Example Definitions, Defining Stack Commands, Lisp Definitions
31728 @subsection Argument Qualifiers
31729
31730 @noindent
31731 Anywhere a parameter name can appear in the parameter list you can also use
31732 an @dfn{argument qualifier}. Thus the general form of a definition is:
31733
31734 @example
31735 (defmath @var{name} (@var{param} @var{param...}
31736 &optional @var{param} @var{param...}
31737 &rest @var{param})
31738 @var{body})
31739 @end example
31740
31741 @noindent
31742 where each @var{param} is either a symbol or a list of the form
31743
31744 @example
31745 (@var{qual} @var{param})
31746 @end example
31747
31748 The following qualifiers are recognized:
31749
31750 @table @samp
31751 @item complete
31752 @findex complete
31753 The argument must not be an incomplete vector, interval, or complex number.
31754 (This is rarely needed since the Calculator itself will never call your
31755 function with an incomplete argument. But there is nothing stopping your
31756 own Lisp code from calling your function with an incomplete argument.)
31757
31758 @item integer
31759 @findex integer
31760 The argument must be an integer. If it is an integer-valued float
31761 it will be accepted but converted to integer form. Non-integers and
31762 formulas are rejected.
31763
31764 @item natnum
31765 @findex natnum
31766 Like @samp{integer}, but the argument must be non-negative.
31767
31768 @item fixnum
31769 @findex fixnum
31770 Like @samp{integer}, but the argument must fit into a native Lisp integer,
31771 which on most systems means less than 2^23 in absolute value. The
31772 argument is converted into Lisp-integer form if necessary.
31773
31774 @item float
31775 @findex float
31776 The argument is converted to floating-point format if it is a number or
31777 vector. If it is a formula it is left alone. (The argument is never
31778 actually rejected by this qualifier.)
31779
31780 @item @var{pred}
31781 The argument must satisfy predicate @var{pred}, which is one of the
31782 standard Calculator predicates. @xref{Predicates}.
31783
31784 @item not-@var{pred}
31785 The argument must @emph{not} satisfy predicate @var{pred}.
31786 @end table
31787
31788 For example,
31789
31790 @example
31791 (defmath foo (a (constp (not-matrixp b)) &optional (float c)
31792 &rest (integer d))
31793 @var{body})
31794 @end example
31795
31796 @noindent
31797 expands to
31798
31799 @example
31800 (defun calcFunc-foo (a b &optional c &rest d)
31801 (and (math-matrixp b)
31802 (math-reject-arg b 'not-matrixp))
31803 (or (math-constp b)
31804 (math-reject-arg b 'constp))
31805 (and c (setq c (math-check-float c)))
31806 (setq d (mapcar 'math-check-integer d))
31807 @var{body})
31808 @end example
31809
31810 @noindent
31811 which performs the necessary checks and conversions before executing the
31812 body of the function.
31813
31814 @node Example Definitions, Calling Calc from Your Programs, Argument Qualifiers, Lisp Definitions
31815 @subsection Example Definitions
31816
31817 @noindent
31818 This section includes some Lisp programming examples on a larger scale.
31819 These programs make use of some of the Calculator's internal functions;
31820 @pxref{Internals}.
31821
31822 @menu
31823 * Bit Counting Example::
31824 * Sine Example::
31825 @end menu
31826
31827 @node Bit Counting Example, Sine Example, Example Definitions, Example Definitions
31828 @subsubsection Bit-Counting
31829
31830 @noindent
31831 @ignore
31832 @starindex
31833 @end ignore
31834 @tindex bcount
31835 Calc does not include a built-in function for counting the number of
31836 ``one'' bits in a binary integer. It's easy to invent one using @kbd{b u}
31837 to convert the integer to a set, and @kbd{V #} to count the elements of
31838 that set; let's write a function that counts the bits without having to
31839 create an intermediate set.
31840
31841 @smallexample
31842 (defmath bcount ((natnum n))
31843 (interactive 1 "bcnt")
31844 (let ((count 0))
31845 (while (> n 0)
31846 (if (oddp n)
31847 (setq count (1+ count)))
31848 (setq n (lsh n -1)))
31849 count))
31850 @end smallexample
31851
31852 @noindent
31853 When this is expanded by @code{defmath}, it will become the following
31854 Emacs Lisp function:
31855
31856 @smallexample
31857 (defun calcFunc-bcount (n)
31858 (setq n (math-check-natnum n))
31859 (let ((count 0))
31860 (while (math-posp n)
31861 (if (math-oddp n)
31862 (setq count (math-add count 1)))
31863 (setq n (calcFunc-lsh n -1)))
31864 count))
31865 @end smallexample
31866
31867 If the input numbers are large, this function involves a fair amount
31868 of arithmetic. A binary right shift is essentially a division by two;
31869 recall that Calc stores integers in decimal form so bit shifts must
31870 involve actual division.
31871
31872 To gain a bit more efficiency, we could divide the integer into
31873 @var{n}-bit chunks, each of which can be handled quickly because
31874 they fit into Lisp integers. It turns out that Calc's arithmetic
31875 routines are especially fast when dividing by an integer less than
31876 1000, so we can set @var{n = 9} bits and use repeated division by 512:
31877
31878 @smallexample
31879 (defmath bcount ((natnum n))
31880 (interactive 1 "bcnt")
31881 (let ((count 0))
31882 (while (not (fixnump n))
31883 (let ((qr (idivmod n 512)))
31884 (setq count (+ count (bcount-fixnum (cdr qr)))
31885 n (car qr))))
31886 (+ count (bcount-fixnum n))))
31887
31888 (defun bcount-fixnum (n)
31889 (let ((count 0))
31890 (while (> n 0)
31891 (setq count (+ count (logand n 1))
31892 n (lsh n -1)))
31893 count))
31894 @end smallexample
31895
31896 @noindent
31897 Note that the second function uses @code{defun}, not @code{defmath}.
31898 Because this function deals only with native Lisp integers (``fixnums''),
31899 it can use the actual Emacs @code{+} and related functions rather
31900 than the slower but more general Calc equivalents which @code{defmath}
31901 uses.
31902
31903 The @code{idivmod} function does an integer division, returning both
31904 the quotient and the remainder at once. Again, note that while it
31905 might seem that @samp{(logand n 511)} and @samp{(lsh n -9)} are
31906 more efficient ways to split off the bottom nine bits of @code{n},
31907 actually they are less efficient because each operation is really
31908 a division by 512 in disguise; @code{idivmod} allows us to do the
31909 same thing with a single division by 512.
31910
31911 @node Sine Example, , Bit Counting Example, Example Definitions
31912 @subsubsection The Sine Function
31913
31914 @noindent
31915 @ignore
31916 @starindex
31917 @end ignore
31918 @tindex mysin
31919 A somewhat limited sine function could be defined as follows, using the
31920 well-known Taylor series expansion for
31921 @texline @math{\sin x}:
31922 @infoline @samp{sin(x)}:
31923
31924 @smallexample
31925 (defmath mysin ((float (anglep x)))
31926 (interactive 1 "mysn")
31927 (setq x (to-radians x)) ; Convert from current angular mode.
31928 (let ((sum x) ; Initial term of Taylor expansion of sin.
31929 newsum
31930 (nfact 1) ; "nfact" equals "n" factorial at all times.
31931 (xnegsqr :"-(x^2)")) ; "xnegsqr" equals -x^2.
31932 (for ((n 3 100 2)) ; Upper limit of 100 is a good precaution.
31933 (working "mysin" sum) ; Display "Working" message, if enabled.
31934 (setq nfact (* nfact (1- n) n)
31935 x (* x xnegsqr)
31936 newsum (+ sum (/ x nfact)))
31937 (if (~= newsum sum) ; If newsum is "nearly equal to" sum,
31938 (break)) ; then we are done.
31939 (setq sum newsum))
31940 sum))
31941 @end smallexample
31942
31943 The actual @code{sin} function in Calc works by first reducing the problem
31944 to a sine or cosine of a nonnegative number less than @cpiover{4}. This
31945 ensures that the Taylor series will converge quickly. Also, the calculation
31946 is carried out with two extra digits of precision to guard against cumulative
31947 round-off in @samp{sum}. Finally, complex arguments are allowed and handled
31948 by a separate algorithm.
31949
31950 @smallexample
31951 (defmath mysin ((float (scalarp x)))
31952 (interactive 1 "mysn")
31953 (setq x (to-radians x)) ; Convert from current angular mode.
31954 (with-extra-prec 2 ; Evaluate with extra precision.
31955 (cond ((complexp x)
31956 (mysin-complex x))
31957 ((< x 0)
31958 (- (mysin-raw (- x))) ; Always call mysin-raw with x >= 0.
31959 (t (mysin-raw x))))))
31960
31961 (defmath mysin-raw (x)
31962 (cond ((>= x 7)
31963 (mysin-raw (% x (two-pi)))) ; Now x < 7.
31964 ((> x (pi-over-2))
31965 (- (mysin-raw (- x (pi))))) ; Now -pi/2 <= x <= pi/2.
31966 ((> x (pi-over-4))
31967 (mycos-raw (- x (pi-over-2)))) ; Now -pi/2 <= x <= pi/4.
31968 ((< x (- (pi-over-4)))
31969 (- (mycos-raw (+ x (pi-over-2))))) ; Now -pi/4 <= x <= pi/4,
31970 (t (mysin-series x)))) ; so the series will be efficient.
31971 @end smallexample
31972
31973 @noindent
31974 where @code{mysin-complex} is an appropriate function to handle complex
31975 numbers, @code{mysin-series} is the routine to compute the sine Taylor
31976 series as before, and @code{mycos-raw} is a function analogous to
31977 @code{mysin-raw} for cosines.
31978
31979 The strategy is to ensure that @expr{x} is nonnegative before calling
31980 @code{mysin-raw}. This function then recursively reduces its argument
31981 to a suitable range, namely, plus-or-minus @cpiover{4}. Note that each
31982 test, and particularly the first comparison against 7, is designed so
31983 that small roundoff errors cannot produce an infinite loop. (Suppose
31984 we compared with @samp{(two-pi)} instead; if due to roundoff problems
31985 the modulo operator ever returned @samp{(two-pi)} exactly, an infinite
31986 recursion could result!) We use modulo only for arguments that will
31987 clearly get reduced, knowing that the next rule will catch any reductions
31988 that this rule misses.
31989
31990 If a program is being written for general use, it is important to code
31991 it carefully as shown in this second example. For quick-and-dirty programs,
31992 when you know that your own use of the sine function will never encounter
31993 a large argument, a simpler program like the first one shown is fine.
31994
31995 @node Calling Calc from Your Programs, Internals, Example Definitions, Lisp Definitions
31996 @subsection Calling Calc from Your Lisp Programs
31997
31998 @noindent
31999 A later section (@pxref{Internals}) gives a full description of
32000 Calc's internal Lisp functions. It's not hard to call Calc from
32001 inside your programs, but the number of these functions can be daunting.
32002 So Calc provides one special ``programmer-friendly'' function called
32003 @code{calc-eval} that can be made to do just about everything you
32004 need. It's not as fast as the low-level Calc functions, but it's
32005 much simpler to use!
32006
32007 It may seem that @code{calc-eval} itself has a daunting number of
32008 options, but they all stem from one simple operation.
32009
32010 In its simplest manifestation, @samp{(calc-eval "1+2")} parses the
32011 string @code{"1+2"} as if it were a Calc algebraic entry and returns
32012 the result formatted as a string: @code{"3"}.
32013
32014 Since @code{calc-eval} is on the list of recommended @code{autoload}
32015 functions, you don't need to make any special preparations to load
32016 Calc before calling @code{calc-eval} the first time. Calc will be
32017 loaded and initialized for you.
32018
32019 All the Calc modes that are currently in effect will be used when
32020 evaluating the expression and formatting the result.
32021
32022 @ifinfo
32023 @example
32024
32025 @end example
32026 @end ifinfo
32027 @subsubsection Additional Arguments to @code{calc-eval}
32028
32029 @noindent
32030 If the input string parses to a list of expressions, Calc returns
32031 the results separated by @code{", "}. You can specify a different
32032 separator by giving a second string argument to @code{calc-eval}:
32033 @samp{(calc-eval "1+2,3+4" ";")} returns @code{"3;7"}.
32034
32035 The ``separator'' can also be any of several Lisp symbols which
32036 request other behaviors from @code{calc-eval}. These are discussed
32037 one by one below.
32038
32039 You can give additional arguments to be substituted for
32040 @samp{$}, @samp{$$}, and so on in the main expression. For
32041 example, @samp{(calc-eval "$/$$" nil "7" "1+1")} evaluates the
32042 expression @code{"7/(1+1)"} to yield the result @code{"3.5"}
32043 (assuming Fraction mode is not in effect). Note the @code{nil}
32044 used as a placeholder for the item-separator argument.
32045
32046 @ifinfo
32047 @example
32048
32049 @end example
32050 @end ifinfo
32051 @subsubsection Error Handling
32052
32053 @noindent
32054 If @code{calc-eval} encounters an error, it returns a list containing
32055 the character position of the error, plus a suitable message as a
32056 string. Note that @samp{1 / 0} is @emph{not} an error by Calc's
32057 standards; it simply returns the string @code{"1 / 0"} which is the
32058 division left in symbolic form. But @samp{(calc-eval "1/")} will
32059 return the list @samp{(2 "Expected a number")}.
32060
32061 If you bind the variable @code{calc-eval-error} to @code{t}
32062 using a @code{let} form surrounding the call to @code{calc-eval},
32063 errors instead call the Emacs @code{error} function which aborts
32064 to the Emacs command loop with a beep and an error message.
32065
32066 If you bind this variable to the symbol @code{string}, error messages
32067 are returned as strings instead of lists. The character position is
32068 ignored.
32069
32070 As a courtesy to other Lisp code which may be using Calc, be sure
32071 to bind @code{calc-eval-error} using @code{let} rather than changing
32072 it permanently with @code{setq}.
32073
32074 @ifinfo
32075 @example
32076
32077 @end example
32078 @end ifinfo
32079 @subsubsection Numbers Only
32080
32081 @noindent
32082 Sometimes it is preferable to treat @samp{1 / 0} as an error
32083 rather than returning a symbolic result. If you pass the symbol
32084 @code{num} as the second argument to @code{calc-eval}, results
32085 that are not constants are treated as errors. The error message
32086 reported is the first @code{calc-why} message if there is one,
32087 or otherwise ``Number expected.''
32088
32089 A result is ``constant'' if it is a number, vector, or other
32090 object that does not include variables or function calls. If it
32091 is a vector, the components must themselves be constants.
32092
32093 @ifinfo
32094 @example
32095
32096 @end example
32097 @end ifinfo
32098 @subsubsection Default Modes
32099
32100 @noindent
32101 If the first argument to @code{calc-eval} is a list whose first
32102 element is a formula string, then @code{calc-eval} sets all the
32103 various Calc modes to their default values while the formula is
32104 evaluated and formatted. For example, the precision is set to 12
32105 digits, digit grouping is turned off, and the Normal language
32106 mode is used.
32107
32108 This same principle applies to the other options discussed below.
32109 If the first argument would normally be @var{x}, then it can also
32110 be the list @samp{(@var{x})} to use the default mode settings.
32111
32112 If there are other elements in the list, they are taken as
32113 variable-name/value pairs which override the default mode
32114 settings. Look at the documentation at the front of the
32115 @file{calc.el} file to find the names of the Lisp variables for
32116 the various modes. The mode settings are restored to their
32117 original values when @code{calc-eval} is done.
32118
32119 For example, @samp{(calc-eval '("$+$$" calc-internal-prec 8) 'num a b)}
32120 computes the sum of two numbers, requiring a numeric result, and
32121 using default mode settings except that the precision is 8 instead
32122 of the default of 12.
32123
32124 It's usually best to use this form of @code{calc-eval} unless your
32125 program actually considers the interaction with Calc's mode settings
32126 to be a feature. This will avoid all sorts of potential ``gotchas'';
32127 consider what happens with @samp{(calc-eval "sqrt(2)" 'num)}
32128 when the user has left Calc in Symbolic mode or No-Simplify mode.
32129
32130 As another example, @samp{(equal (calc-eval '("$<$$") nil a b) "1")}
32131 checks if the number in string @expr{a} is less than the one in
32132 string @expr{b}. Without using a list, the integer 1 might
32133 come out in a variety of formats which would be hard to test for
32134 conveniently: @code{"1"}, @code{"8#1"}, @code{"00001"}. (But
32135 see ``Predicates'' mode, below.)
32136
32137 @ifinfo
32138 @example
32139
32140 @end example
32141 @end ifinfo
32142 @subsubsection Raw Numbers
32143
32144 @noindent
32145 Normally all input and output for @code{calc-eval} is done with strings.
32146 You can do arithmetic with, say, @samp{(calc-eval "$+$$" nil a b)}
32147 in place of @samp{(+ a b)}, but this is very inefficient since the
32148 numbers must be converted to and from string format as they are passed
32149 from one @code{calc-eval} to the next.
32150
32151 If the separator is the symbol @code{raw}, the result will be returned
32152 as a raw Calc data structure rather than a string. You can read about
32153 how these objects look in the following sections, but usually you can
32154 treat them as ``black box'' objects with no important internal
32155 structure.
32156
32157 There is also a @code{rawnum} symbol, which is a combination of
32158 @code{raw} (returning a raw Calc object) and @code{num} (signaling
32159 an error if that object is not a constant).
32160
32161 You can pass a raw Calc object to @code{calc-eval} in place of a
32162 string, either as the formula itself or as one of the @samp{$}
32163 arguments. Thus @samp{(calc-eval "$+$$" 'raw a b)} is an
32164 addition function that operates on raw Calc objects. Of course
32165 in this case it would be easier to call the low-level @code{math-add}
32166 function in Calc, if you can remember its name.
32167
32168 In particular, note that a plain Lisp integer is acceptable to Calc
32169 as a raw object. (All Lisp integers are accepted on input, but
32170 integers of more than six decimal digits are converted to ``big-integer''
32171 form for output. @xref{Data Type Formats}.)
32172
32173 When it comes time to display the object, just use @samp{(calc-eval a)}
32174 to format it as a string.
32175
32176 It is an error if the input expression evaluates to a list of
32177 values. The separator symbol @code{list} is like @code{raw}
32178 except that it returns a list of one or more raw Calc objects.
32179
32180 Note that a Lisp string is not a valid Calc object, nor is a list
32181 containing a string. Thus you can still safely distinguish all the
32182 various kinds of error returns discussed above.
32183
32184 @ifinfo
32185 @example
32186
32187 @end example
32188 @end ifinfo
32189 @subsubsection Predicates
32190
32191 @noindent
32192 If the separator symbol is @code{pred}, the result of the formula is
32193 treated as a true/false value; @code{calc-eval} returns @code{t} or
32194 @code{nil}, respectively. A value is considered ``true'' if it is a
32195 non-zero number, or false if it is zero or if it is not a number.
32196
32197 For example, @samp{(calc-eval "$<$$" 'pred a b)} tests whether
32198 one value is less than another.
32199
32200 As usual, it is also possible for @code{calc-eval} to return one of
32201 the error indicators described above. Lisp will interpret such an
32202 indicator as ``true'' if you don't check for it explicitly. If you
32203 wish to have an error register as ``false'', use something like
32204 @samp{(eq (calc-eval ...) t)}.
32205
32206 @ifinfo
32207 @example
32208
32209 @end example
32210 @end ifinfo
32211 @subsubsection Variable Values
32212
32213 @noindent
32214 Variables in the formula passed to @code{calc-eval} are not normally
32215 replaced by their values. If you wish this, you can use the
32216 @code{evalv} function (@pxref{Algebraic Manipulation}). For example,
32217 if 4 is stored in Calc variable @code{a} (i.e., in Lisp variable
32218 @code{var-a}), then @samp{(calc-eval "a+pi")} will return the
32219 formula @code{"a + pi"}, but @samp{(calc-eval "evalv(a+pi)")}
32220 will return @code{"7.14159265359"}.
32221
32222 To store in a Calc variable, just use @code{setq} to store in the
32223 corresponding Lisp variable. (This is obtained by prepending
32224 @samp{var-} to the Calc variable name.) Calc routines will
32225 understand either string or raw form values stored in variables,
32226 although raw data objects are much more efficient. For example,
32227 to increment the Calc variable @code{a}:
32228
32229 @example
32230 (setq var-a (calc-eval "evalv(a+1)" 'raw))
32231 @end example
32232
32233 @ifinfo
32234 @example
32235
32236 @end example
32237 @end ifinfo
32238 @subsubsection Stack Access
32239
32240 @noindent
32241 If the separator symbol is @code{push}, the formula argument is
32242 evaluated (with possible @samp{$} expansions, as usual). The
32243 result is pushed onto the Calc stack. The return value is @code{nil}
32244 (unless there is an error from evaluating the formula, in which
32245 case the return value depends on @code{calc-eval-error} in the
32246 usual way).
32247
32248 If the separator symbol is @code{pop}, the first argument to
32249 @code{calc-eval} must be an integer instead of a string. That
32250 many values are popped from the stack and thrown away. A negative
32251 argument deletes the entry at that stack level. The return value
32252 is the number of elements remaining in the stack after popping;
32253 @samp{(calc-eval 0 'pop)} is a good way to measure the size of
32254 the stack.
32255
32256 If the separator symbol is @code{top}, the first argument to
32257 @code{calc-eval} must again be an integer. The value at that
32258 stack level is formatted as a string and returned. Thus
32259 @samp{(calc-eval 1 'top)} returns the top-of-stack value. If the
32260 integer is out of range, @code{nil} is returned.
32261
32262 The separator symbol @code{rawtop} is just like @code{top} except
32263 that the stack entry is returned as a raw Calc object instead of
32264 as a string.
32265
32266 In all of these cases the first argument can be made a list in
32267 order to force the default mode settings, as described above.
32268 Thus @samp{(calc-eval '(2 calc-number-radix 16) 'top)} returns the
32269 second-to-top stack entry, formatted as a string using the default
32270 instead of current display modes, except that the radix is
32271 hexadecimal instead of decimal.
32272
32273 It is, of course, polite to put the Calc stack back the way you
32274 found it when you are done, unless the user of your program is
32275 actually expecting it to affect the stack.
32276
32277 Note that you do not actually have to switch into the @samp{*Calculator*}
32278 buffer in order to use @code{calc-eval}; it temporarily switches into
32279 the stack buffer if necessary.
32280
32281 @ifinfo
32282 @example
32283
32284 @end example
32285 @end ifinfo
32286 @subsubsection Keyboard Macros
32287
32288 @noindent
32289 If the separator symbol is @code{macro}, the first argument must be a
32290 string of characters which Calc can execute as a sequence of keystrokes.
32291 This switches into the Calc buffer for the duration of the macro.
32292 For example, @samp{(calc-eval "vx5\rVR+" 'macro)} pushes the
32293 vector @samp{[1,2,3,4,5]} on the stack and then replaces it
32294 with the sum of those numbers. Note that @samp{\r} is the Lisp
32295 notation for the carriage-return, @key{RET}, character.
32296
32297 If your keyboard macro wishes to pop the stack, @samp{\C-d} is
32298 safer than @samp{\177} (the @key{DEL} character) because some
32299 installations may have switched the meanings of @key{DEL} and
32300 @kbd{C-h}. Calc always interprets @kbd{C-d} as a synonym for
32301 ``pop-stack'' regardless of key mapping.
32302
32303 If you provide a third argument to @code{calc-eval}, evaluation
32304 of the keyboard macro will leave a record in the Trail using
32305 that argument as a tag string. Normally the Trail is unaffected.
32306
32307 The return value in this case is always @code{nil}.
32308
32309 @ifinfo
32310 @example
32311
32312 @end example
32313 @end ifinfo
32314 @subsubsection Lisp Evaluation
32315
32316 @noindent
32317 Finally, if the separator symbol is @code{eval}, then the Lisp
32318 @code{eval} function is called on the first argument, which must
32319 be a Lisp expression rather than a Calc formula. Remember to
32320 quote the expression so that it is not evaluated until inside
32321 @code{calc-eval}.
32322
32323 The difference from plain @code{eval} is that @code{calc-eval}
32324 switches to the Calc buffer before evaluating the expression.
32325 For example, @samp{(calc-eval '(setq calc-internal-prec 17) 'eval)}
32326 will correctly affect the buffer-local Calc precision variable.
32327
32328 An alternative would be @samp{(calc-eval '(calc-precision 17) 'eval)}.
32329 This is evaluating a call to the function that is normally invoked
32330 by the @kbd{p} key, giving it 17 as its ``numeric prefix argument.''
32331 Note that this function will leave a message in the echo area as
32332 a side effect. Also, all Calc functions switch to the Calc buffer
32333 automatically if not invoked from there, so the above call is
32334 also equivalent to @samp{(calc-precision 17)} by itself.
32335 In all cases, Calc uses @code{save-excursion} to switch back to
32336 your original buffer when it is done.
32337
32338 As usual the first argument can be a list that begins with a Lisp
32339 expression to use default instead of current mode settings.
32340
32341 The result of @code{calc-eval} in this usage is just the result
32342 returned by the evaluated Lisp expression.
32343
32344 @ifinfo
32345 @example
32346
32347 @end example
32348 @end ifinfo
32349 @subsubsection Example
32350
32351 @noindent
32352 @findex convert-temp
32353 Here is a sample Emacs command that uses @code{calc-eval}. Suppose
32354 you have a document with lots of references to temperatures on the
32355 Fahrenheit scale, say ``98.6 F'', and you wish to convert these
32356 references to Centigrade. The following command does this conversion.
32357 Place the Emacs cursor right after the letter ``F'' and invoke the
32358 command to change ``98.6 F'' to ``37 C''. Or, if the temperature is
32359 already in Centigrade form, the command changes it back to Fahrenheit.
32360
32361 @example
32362 (defun convert-temp ()
32363 (interactive)
32364 (save-excursion
32365 (re-search-backward "[^-.0-9]\\([-.0-9]+\\) *\\([FC]\\)")
32366 (let* ((top1 (match-beginning 1))
32367 (bot1 (match-end 1))
32368 (number (buffer-substring top1 bot1))
32369 (top2 (match-beginning 2))
32370 (bot2 (match-end 2))
32371 (type (buffer-substring top2 bot2)))
32372 (if (equal type "F")
32373 (setq type "C"
32374 number (calc-eval "($ - 32)*5/9" nil number))
32375 (setq type "F"
32376 number (calc-eval "$*9/5 + 32" nil number)))
32377 (goto-char top2)
32378 (delete-region top2 bot2)
32379 (insert-before-markers type)
32380 (goto-char top1)
32381 (delete-region top1 bot1)
32382 (if (string-match "\\.$" number) ; change "37." to "37"
32383 (setq number (substring number 0 -1)))
32384 (insert number))))
32385 @end example
32386
32387 Note the use of @code{insert-before-markers} when changing between
32388 ``F'' and ``C'', so that the character winds up before the cursor
32389 instead of after it.
32390
32391 @node Internals, , Calling Calc from Your Programs, Lisp Definitions
32392 @subsection Calculator Internals
32393
32394 @noindent
32395 This section describes the Lisp functions defined by the Calculator that
32396 may be of use to user-written Calculator programs (as described in the
32397 rest of this chapter). These functions are shown by their names as they
32398 conventionally appear in @code{defmath}. Their full Lisp names are
32399 generally gotten by prepending @samp{calcFunc-} or @samp{math-} to their
32400 apparent names. (Names that begin with @samp{calc-} are already in
32401 their full Lisp form.) You can use the actual full names instead if you
32402 prefer them, or if you are calling these functions from regular Lisp.
32403
32404 The functions described here are scattered throughout the various
32405 Calc component files. Note that @file{calc.el} includes @code{autoload}s
32406 for only a few component files; when Calc wants to call an advanced
32407 function it calls @samp{(calc-extensions)} first; this function
32408 autoloads @file{calc-ext.el}, which in turn autoloads all the functions
32409 in the remaining component files.
32410
32411 Because @code{defmath} itself uses the extensions, user-written code
32412 generally always executes with the extensions already loaded, so
32413 normally you can use any Calc function and be confident that it will
32414 be autoloaded for you when necessary. If you are doing something
32415 special, check carefully to make sure each function you are using is
32416 from @file{calc.el} or its components, and call @samp{(calc-extensions)}
32417 before using any function based in @file{calc-ext.el} if you can't
32418 prove this file will already be loaded.
32419
32420 @menu
32421 * Data Type Formats::
32422 * Interactive Lisp Functions::
32423 * Stack Lisp Functions::
32424 * Predicates::
32425 * Computational Lisp Functions::
32426 * Vector Lisp Functions::
32427 * Symbolic Lisp Functions::
32428 * Formatting Lisp Functions::
32429 * Hooks::
32430 @end menu
32431
32432 @node Data Type Formats, Interactive Lisp Functions, Internals, Internals
32433 @subsubsection Data Type Formats
32434
32435 @noindent
32436 Integers are stored in either of two ways, depending on their magnitude.
32437 Integers less than one million in absolute value are stored as standard
32438 Lisp integers. This is the only storage format for Calc data objects
32439 which is not a Lisp list.
32440
32441 Large integers are stored as lists of the form @samp{(bigpos @var{d0}
32442 @var{d1} @var{d2} @dots{})} for positive integers 1000000 or more, or
32443 @samp{(bigneg @var{d0} @var{d1} @var{d2} @dots{})} for negative integers
32444 @mathit{-1000000} or less. Each @var{d} is a base-1000 ``digit,'' a Lisp integer
32445 from 0 to 999. The least significant digit is @var{d0}; the last digit,
32446 @var{dn}, which is always nonzero, is the most significant digit. For
32447 example, the integer @mathit{-12345678} is stored as @samp{(bigneg 678 345 12)}.
32448
32449 The distinction between small and large integers is entirely hidden from
32450 the user. In @code{defmath} definitions, the Lisp predicate @code{integerp}
32451 returns true for either kind of integer, and in general both big and small
32452 integers are accepted anywhere the word ``integer'' is used in this manual.
32453 If the distinction must be made, native Lisp integers are called @dfn{fixnums}
32454 and large integers are called @dfn{bignums}.
32455
32456 Fractions are stored as a list of the form, @samp{(frac @var{n} @var{d})}
32457 where @var{n} is an integer (big or small) numerator, @var{d} is an
32458 integer denominator greater than one, and @var{n} and @var{d} are relatively
32459 prime. Note that fractions where @var{d} is one are automatically converted
32460 to plain integers by all math routines; fractions where @var{d} is negative
32461 are normalized by negating the numerator and denominator.
32462
32463 Floating-point numbers are stored in the form, @samp{(float @var{mant}
32464 @var{exp})}, where @var{mant} (the ``mantissa'') is an integer less than
32465 @samp{10^@var{p}} in absolute value (@var{p} represents the current
32466 precision), and @var{exp} (the ``exponent'') is a fixnum. The value of
32467 the float is @samp{@var{mant} * 10^@var{exp}}. For example, the number
32468 @mathit{-3.14} is stored as @samp{(float -314 -2) = -314*10^-2}. Other constraints
32469 are that the number 0.0 is always stored as @samp{(float 0 0)}, and,
32470 except for the 0.0 case, the rightmost base-10 digit of @var{mant} is
32471 always nonzero. (If the rightmost digit is zero, the number is
32472 rearranged by dividing @var{mant} by ten and incrementing @var{exp}.)
32473
32474 Rectangular complex numbers are stored in the form @samp{(cplx @var{re}
32475 @var{im})}, where @var{re} and @var{im} are each real numbers, either
32476 integers, fractions, or floats. The value is @samp{@var{re} + @var{im}i}.
32477 The @var{im} part is nonzero; complex numbers with zero imaginary
32478 components are converted to real numbers automatically.
32479
32480 Polar complex numbers are stored in the form @samp{(polar @var{r}
32481 @var{theta})}, where @var{r} is a positive real value and @var{theta}
32482 is a real value or HMS form representing an angle. This angle is
32483 usually normalized to lie in the interval @samp{(-180 ..@: 180)} degrees,
32484 or @samp{(-pi ..@: pi)} radians, according to the current angular mode.
32485 If the angle is 0 the value is converted to a real number automatically.
32486 (If the angle is 180 degrees, the value is usually also converted to a
32487 negative real number.)
32488
32489 Hours-minutes-seconds forms are stored as @samp{(hms @var{h} @var{m}
32490 @var{s})}, where @var{h} is an integer or an integer-valued float (i.e.,
32491 a float with @samp{@var{exp} >= 0}), @var{m} is an integer or integer-valued
32492 float in the range @w{@samp{[0 ..@: 60)}}, and @var{s} is any real number
32493 in the range @samp{[0 ..@: 60)}.
32494
32495 Date forms are stored as @samp{(date @var{n})}, where @var{n} is
32496 a real number that counts days since midnight on the morning of
32497 January 1, 1 AD. If @var{n} is an integer, this is a pure date
32498 form. If @var{n} is a fraction or float, this is a date/time form.
32499
32500 Modulo forms are stored as @samp{(mod @var{n} @var{m})}, where @var{m} is a
32501 positive real number or HMS form, and @var{n} is a real number or HMS
32502 form in the range @samp{[0 ..@: @var{m})}.
32503
32504 Error forms are stored as @samp{(sdev @var{x} @var{sigma})}, where @var{x}
32505 is the mean value and @var{sigma} is the standard deviation. Each
32506 component is either a number, an HMS form, or a symbolic object
32507 (a variable or function call). If @var{sigma} is zero, the value is
32508 converted to a plain real number. If @var{sigma} is negative or
32509 complex, it is automatically normalized to be a positive real.
32510
32511 Interval forms are stored as @samp{(intv @var{mask} @var{lo} @var{hi})},
32512 where @var{mask} is one of the integers 0, 1, 2, or 3, and @var{lo} and
32513 @var{hi} are real numbers, HMS forms, or symbolic objects. The @var{mask}
32514 is a binary integer where 1 represents the fact that the interval is
32515 closed on the high end, and 2 represents the fact that it is closed on
32516 the low end. (Thus 3 represents a fully closed interval.) The interval
32517 @w{@samp{(intv 3 @var{x} @var{x})}} is converted to the plain number @var{x};
32518 intervals @samp{(intv @var{mask} @var{x} @var{x})} for any other @var{mask}
32519 represent empty intervals. If @var{hi} is less than @var{lo}, the interval
32520 is converted to a standard empty interval by replacing @var{hi} with @var{lo}.
32521
32522 Vectors are stored as @samp{(vec @var{v1} @var{v2} @dots{})}, where @var{v1}
32523 is the first element of the vector, @var{v2} is the second, and so on.
32524 An empty vector is stored as @samp{(vec)}. A matrix is simply a vector
32525 where all @var{v}'s are themselves vectors of equal lengths. Note that
32526 Calc vectors are unrelated to the Emacs Lisp ``vector'' type, which is
32527 generally unused by Calc data structures.
32528
32529 Variables are stored as @samp{(var @var{name} @var{sym})}, where
32530 @var{name} is a Lisp symbol whose print name is used as the visible name
32531 of the variable, and @var{sym} is a Lisp symbol in which the variable's
32532 value is actually stored. Thus, @samp{(var pi var-pi)} represents the
32533 special constant @samp{pi}. Almost always, the form is @samp{(var
32534 @var{v} var-@var{v})}. If the variable name was entered with @code{#}
32535 signs (which are converted to hyphens internally), the form is
32536 @samp{(var @var{u} @var{v})}, where @var{u} is a symbol whose name
32537 contains @code{#} characters, and @var{v} is a symbol that contains
32538 @code{-} characters instead. The value of a variable is the Calc
32539 object stored in its @var{sym} symbol's value cell. If the symbol's
32540 value cell is void or if it contains @code{nil}, the variable has no
32541 value. Special constants have the form @samp{(special-const
32542 @var{value})} stored in their value cell, where @var{value} is a formula
32543 which is evaluated when the constant's value is requested. Variables
32544 which represent units are not stored in any special way; they are units
32545 only because their names appear in the units table. If the value
32546 cell contains a string, it is parsed to get the variable's value when
32547 the variable is used.
32548
32549 A Lisp list with any other symbol as the first element is a function call.
32550 The symbols @code{+}, @code{-}, @code{*}, @code{/}, @code{%}, @code{^},
32551 and @code{|} represent special binary operators; these lists are always
32552 of the form @samp{(@var{op} @var{lhs} @var{rhs})} where @var{lhs} is the
32553 sub-formula on the lefthand side and @var{rhs} is the sub-formula on the
32554 right. The symbol @code{neg} represents unary negation; this list is always
32555 of the form @samp{(neg @var{arg})}. Any other symbol @var{func} represents a
32556 function that would be displayed in function-call notation; the symbol
32557 @var{func} is in general always of the form @samp{calcFunc-@var{name}}.
32558 The function cell of the symbol @var{func} should contain a Lisp function
32559 for evaluating a call to @var{func}. This function is passed the remaining
32560 elements of the list (themselves already evaluated) as arguments; such
32561 functions should return @code{nil} or call @code{reject-arg} to signify
32562 that they should be left in symbolic form, or they should return a Calc
32563 object which represents their value, or a list of such objects if they
32564 wish to return multiple values. (The latter case is allowed only for
32565 functions which are the outer-level call in an expression whose value is
32566 about to be pushed on the stack; this feature is considered obsolete
32567 and is not used by any built-in Calc functions.)
32568
32569 @node Interactive Lisp Functions, Stack Lisp Functions, Data Type Formats, Internals
32570 @subsubsection Interactive Functions
32571
32572 @noindent
32573 The functions described here are used in implementing interactive Calc
32574 commands. Note that this list is not exhaustive! If there is an
32575 existing command that behaves similarly to the one you want to define,
32576 you may find helpful tricks by checking the source code for that command.
32577
32578 @defun calc-set-command-flag flag
32579 Set the command flag @var{flag}. This is generally a Lisp symbol, but
32580 may in fact be anything. The effect is to add @var{flag} to the list
32581 stored in the variable @code{calc-command-flags}, unless it is already
32582 there. @xref{Defining Simple Commands}.
32583 @end defun
32584
32585 @defun calc-clear-command-flag flag
32586 If @var{flag} appears among the list of currently-set command flags,
32587 remove it from that list.
32588 @end defun
32589
32590 @defun calc-record-undo rec
32591 Add the ``undo record'' @var{rec} to the list of steps to take if the
32592 current operation should need to be undone. Stack push and pop functions
32593 automatically call @code{calc-record-undo}, so the kinds of undo records
32594 you might need to create take the form @samp{(set @var{sym} @var{value})},
32595 which says that the Lisp variable @var{sym} was changed and had previously
32596 contained @var{value}; @samp{(store @var{var} @var{value})} which says that
32597 the Calc variable @var{var} (a string which is the name of the symbol that
32598 contains the variable's value) was stored and its previous value was
32599 @var{value} (either a Calc data object, or @code{nil} if the variable was
32600 previously void); or @samp{(eval @var{undo} @var{redo} @var{args} @dots{})},
32601 which means that to undo requires calling the function @samp{(@var{undo}
32602 @var{args} @dots{})} and, if the undo is later redone, calling
32603 @samp{(@var{redo} @var{args} @dots{})}.
32604 @end defun
32605
32606 @defun calc-record-why msg args
32607 Record the error or warning message @var{msg}, which is normally a string.
32608 This message will be replayed if the user types @kbd{w} (@code{calc-why});
32609 if the message string begins with a @samp{*}, it is considered important
32610 enough to display even if the user doesn't type @kbd{w}. If one or more
32611 @var{args} are present, the displayed message will be of the form,
32612 @samp{@var{msg}: @var{arg1}, @var{arg2}, @dots{}}, where the arguments are
32613 formatted on the assumption that they are either strings or Calc objects of
32614 some sort. If @var{msg} is a symbol, it is the name of a Calc predicate
32615 (such as @code{integerp} or @code{numvecp}) which the arguments did not
32616 satisfy; it is expanded to a suitable string such as ``Expected an
32617 integer.'' The @code{reject-arg} function calls @code{calc-record-why}
32618 automatically; @pxref{Predicates}.
32619 @end defun
32620
32621 @defun calc-is-inverse
32622 This predicate returns true if the current command is inverse,
32623 i.e., if the Inverse (@kbd{I} key) flag was set.
32624 @end defun
32625
32626 @defun calc-is-hyperbolic
32627 This predicate is the analogous function for the @kbd{H} key.
32628 @end defun
32629
32630 @node Stack Lisp Functions, Predicates, Interactive Lisp Functions, Internals
32631 @subsubsection Stack-Oriented Functions
32632
32633 @noindent
32634 The functions described here perform various operations on the Calc
32635 stack and trail. They are to be used in interactive Calc commands.
32636
32637 @defun calc-push-list vals n
32638 Push the Calc objects in list @var{vals} onto the stack at stack level
32639 @var{n}. If @var{n} is omitted it defaults to 1, so that the elements
32640 are pushed at the top of the stack. If @var{n} is greater than 1, the
32641 elements will be inserted into the stack so that the last element will
32642 end up at level @var{n}, the next-to-last at level @var{n}+1, etc.
32643 The elements of @var{vals} are assumed to be valid Calc objects, and
32644 are not evaluated, rounded, or renormalized in any way. If @var{vals}
32645 is an empty list, nothing happens.
32646
32647 The stack elements are pushed without any sub-formula selections.
32648 You can give an optional third argument to this function, which must
32649 be a list the same size as @var{vals} of selections. Each selection
32650 must be @code{eq} to some sub-formula of the corresponding formula
32651 in @var{vals}, or @code{nil} if that formula should have no selection.
32652 @end defun
32653
32654 @defun calc-top-list n m
32655 Return a list of the @var{n} objects starting at level @var{m} of the
32656 stack. If @var{m} is omitted it defaults to 1, so that the elements are
32657 taken from the top of the stack. If @var{n} is omitted, it also
32658 defaults to 1, so that the top stack element (in the form of a
32659 one-element list) is returned. If @var{m} is greater than 1, the
32660 @var{m}th stack element will be at the end of the list, the @var{m}+1st
32661 element will be next-to-last, etc. If @var{n} or @var{m} are out of
32662 range, the command is aborted with a suitable error message. If @var{n}
32663 is zero, the function returns an empty list. The stack elements are not
32664 evaluated, rounded, or renormalized.
32665
32666 If any stack elements contain selections, and selections have not
32667 been disabled by the @kbd{j e} (@code{calc-enable-selections}) command,
32668 this function returns the selected portions rather than the entire
32669 stack elements. It can be given a third ``selection-mode'' argument
32670 which selects other behaviors. If it is the symbol @code{t}, then
32671 a selection in any of the requested stack elements produces an
32672 ``illegal operation on selections'' error. If it is the symbol @code{full},
32673 the whole stack entry is always returned regardless of selections.
32674 If it is the symbol @code{sel}, the selected portion is always returned,
32675 or @code{nil} if there is no selection. (This mode ignores the @kbd{j e}
32676 command.) If the symbol is @code{entry}, the complete stack entry in
32677 list form is returned; the first element of this list will be the whole
32678 formula, and the third element will be the selection (or @code{nil}).
32679 @end defun
32680
32681 @defun calc-pop-stack n m
32682 Remove the specified elements from the stack. The parameters @var{n}
32683 and @var{m} are defined the same as for @code{calc-top-list}. The return
32684 value of @code{calc-pop-stack} is uninteresting.
32685
32686 If there are any selected sub-formulas among the popped elements, and
32687 @kbd{j e} has not been used to disable selections, this produces an
32688 error without changing the stack. If you supply an optional third
32689 argument of @code{t}, the stack elements are popped even if they
32690 contain selections.
32691 @end defun
32692
32693 @defun calc-record-list vals tag
32694 This function records one or more results in the trail. The @var{vals}
32695 are a list of strings or Calc objects. The @var{tag} is the four-character
32696 tag string to identify the values. If @var{tag} is omitted, a blank tag
32697 will be used.
32698 @end defun
32699
32700 @defun calc-normalize n
32701 This function takes a Calc object and ``normalizes'' it. At the very
32702 least this involves re-rounding floating-point values according to the
32703 current precision and other similar jobs. Also, unless the user has
32704 selected No-Simplify mode (@pxref{Simplification Modes}), this involves
32705 actually evaluating a formula object by executing the function calls
32706 it contains, and possibly also doing algebraic simplification, etc.
32707 @end defun
32708
32709 @defun calc-top-list-n n m
32710 This function is identical to @code{calc-top-list}, except that it calls
32711 @code{calc-normalize} on the values that it takes from the stack. They
32712 are also passed through @code{check-complete}, so that incomplete
32713 objects will be rejected with an error message. All computational
32714 commands should use this in preference to @code{calc-top-list}; the only
32715 standard Calc commands that operate on the stack without normalizing
32716 are stack management commands like @code{calc-enter} and @code{calc-roll-up}.
32717 This function accepts the same optional selection-mode argument as
32718 @code{calc-top-list}.
32719 @end defun
32720
32721 @defun calc-top-n m
32722 This function is a convenient form of @code{calc-top-list-n} in which only
32723 a single element of the stack is taken and returned, rather than a list
32724 of elements. This also accepts an optional selection-mode argument.
32725 @end defun
32726
32727 @defun calc-enter-result n tag vals
32728 This function is a convenient interface to most of the above functions.
32729 The @var{vals} argument should be either a single Calc object, or a list
32730 of Calc objects; the object or objects are normalized, and the top @var{n}
32731 stack entries are replaced by the normalized objects. If @var{tag} is
32732 non-@code{nil}, the normalized objects are also recorded in the trail.
32733 A typical stack-based computational command would take the form,
32734
32735 @smallexample
32736 (calc-enter-result @var{n} @var{tag} (cons 'calcFunc-@var{func}
32737 (calc-top-list-n @var{n})))
32738 @end smallexample
32739
32740 If any of the @var{n} stack elements replaced contain sub-formula
32741 selections, and selections have not been disabled by @kbd{j e},
32742 this function takes one of two courses of action. If @var{n} is
32743 equal to the number of elements in @var{vals}, then each element of
32744 @var{vals} is spliced into the corresponding selection; this is what
32745 happens when you use the @key{TAB} key, or when you use a unary
32746 arithmetic operation like @code{sqrt}. If @var{vals} has only one
32747 element but @var{n} is greater than one, there must be only one
32748 selection among the top @var{n} stack elements; the element from
32749 @var{vals} is spliced into that selection. This is what happens when
32750 you use a binary arithmetic operation like @kbd{+}. Any other
32751 combination of @var{n} and @var{vals} is an error when selections
32752 are present.
32753 @end defun
32754
32755 @defun calc-unary-op tag func arg
32756 This function implements a unary operator that allows a numeric prefix
32757 argument to apply the operator over many stack entries. If the prefix
32758 argument @var{arg} is @code{nil}, this uses @code{calc-enter-result}
32759 as outlined above. Otherwise, it maps the function over several stack
32760 elements; @pxref{Prefix Arguments}. For example,
32761
32762 @smallexample
32763 (defun calc-zeta (arg)
32764 (interactive "P")
32765 (calc-unary-op "zeta" 'calcFunc-zeta arg))
32766 @end smallexample
32767 @end defun
32768
32769 @defun calc-binary-op tag func arg ident unary
32770 This function implements a binary operator, analogously to
32771 @code{calc-unary-op}. The optional @var{ident} and @var{unary}
32772 arguments specify the behavior when the prefix argument is zero or
32773 one, respectively. If the prefix is zero, the value @var{ident}
32774 is pushed onto the stack, if specified, otherwise an error message
32775 is displayed. If the prefix is one, the unary function @var{unary}
32776 is applied to the top stack element, or, if @var{unary} is not
32777 specified, nothing happens. When the argument is two or more,
32778 the binary function @var{func} is reduced across the top @var{arg}
32779 stack elements; when the argument is negative, the function is
32780 mapped between the next-to-top @mathit{-@var{arg}} stack elements and the
32781 top element.
32782 @end defun
32783
32784 @defun calc-stack-size
32785 Return the number of elements on the stack as an integer. This count
32786 does not include elements that have been temporarily hidden by stack
32787 truncation; @pxref{Truncating the Stack}.
32788 @end defun
32789
32790 @defun calc-cursor-stack-index n
32791 Move the point to the @var{n}th stack entry. If @var{n} is zero, this
32792 will be the @samp{.} line. If @var{n} is from 1 to the current stack size,
32793 this will be the beginning of the first line of that stack entry's display.
32794 If line numbers are enabled, this will move to the first character of the
32795 line number, not the stack entry itself.
32796 @end defun
32797
32798 @defun calc-substack-height n
32799 Return the number of lines between the beginning of the @var{n}th stack
32800 entry and the bottom of the buffer. If @var{n} is zero, this
32801 will be one (assuming no stack truncation). If all stack entries are
32802 one line long (i.e., no matrices are displayed), the return value will
32803 be equal @var{n}+1 as long as @var{n} is in range. (Note that in Big
32804 mode, the return value includes the blank lines that separate stack
32805 entries.)
32806 @end defun
32807
32808 @defun calc-refresh
32809 Erase the @code{*Calculator*} buffer and reformat its contents from memory.
32810 This must be called after changing any parameter, such as the current
32811 display radix, which might change the appearance of existing stack
32812 entries. (During a keyboard macro invoked by the @kbd{X} key, refreshing
32813 is suppressed, but a flag is set so that the entire stack will be refreshed
32814 rather than just the top few elements when the macro finishes.)
32815 @end defun
32816
32817 @node Predicates, Computational Lisp Functions, Stack Lisp Functions, Internals
32818 @subsubsection Predicates
32819
32820 @noindent
32821 The functions described here are predicates, that is, they return a
32822 true/false value where @code{nil} means false and anything else means
32823 true. These predicates are expanded by @code{defmath}, for example,
32824 from @code{zerop} to @code{math-zerop}. In many cases they correspond
32825 to native Lisp functions by the same name, but are extended to cover
32826 the full range of Calc data types.
32827
32828 @defun zerop x
32829 Returns true if @var{x} is numerically zero, in any of the Calc data
32830 types. (Note that for some types, such as error forms and intervals,
32831 it never makes sense to return true.) In @code{defmath}, the expression
32832 @samp{(= x 0)} will automatically be converted to @samp{(math-zerop x)},
32833 and @samp{(/= x 0)} will be converted to @samp{(not (math-zerop x))}.
32834 @end defun
32835
32836 @defun negp x
32837 Returns true if @var{x} is negative. This accepts negative real numbers
32838 of various types, negative HMS and date forms, and intervals in which
32839 all included values are negative. In @code{defmath}, the expression
32840 @samp{(< x 0)} will automatically be converted to @samp{(math-negp x)},
32841 and @samp{(>= x 0)} will be converted to @samp{(not (math-negp x))}.
32842 @end defun
32843
32844 @defun posp x
32845 Returns true if @var{x} is positive (and non-zero). For complex
32846 numbers, none of these three predicates will return true.
32847 @end defun
32848
32849 @defun looks-negp x
32850 Returns true if @var{x} is ``negative-looking.'' This returns true if
32851 @var{x} is a negative number, or a formula with a leading minus sign
32852 such as @samp{-a/b}. In other words, this is an object which can be
32853 made simpler by calling @code{(- @var{x})}.
32854 @end defun
32855
32856 @defun integerp x
32857 Returns true if @var{x} is an integer of any size.
32858 @end defun
32859
32860 @defun fixnump x
32861 Returns true if @var{x} is a native Lisp integer.
32862 @end defun
32863
32864 @defun natnump x
32865 Returns true if @var{x} is a nonnegative integer of any size.
32866 @end defun
32867
32868 @defun fixnatnump x
32869 Returns true if @var{x} is a nonnegative Lisp integer.
32870 @end defun
32871
32872 @defun num-integerp x
32873 Returns true if @var{x} is numerically an integer, i.e., either a
32874 true integer or a float with no significant digits to the right of
32875 the decimal point.
32876 @end defun
32877
32878 @defun messy-integerp x
32879 Returns true if @var{x} is numerically, but not literally, an integer.
32880 A value is @code{num-integerp} if it is @code{integerp} or
32881 @code{messy-integerp} (but it is never both at once).
32882 @end defun
32883
32884 @defun num-natnump x
32885 Returns true if @var{x} is numerically a nonnegative integer.
32886 @end defun
32887
32888 @defun evenp x
32889 Returns true if @var{x} is an even integer.
32890 @end defun
32891
32892 @defun looks-evenp x
32893 Returns true if @var{x} is an even integer, or a formula with a leading
32894 multiplicative coefficient which is an even integer.
32895 @end defun
32896
32897 @defun oddp x
32898 Returns true if @var{x} is an odd integer.
32899 @end defun
32900
32901 @defun ratp x
32902 Returns true if @var{x} is a rational number, i.e., an integer or a
32903 fraction.
32904 @end defun
32905
32906 @defun realp x
32907 Returns true if @var{x} is a real number, i.e., an integer, fraction,
32908 or floating-point number.
32909 @end defun
32910
32911 @defun anglep x
32912 Returns true if @var{x} is a real number or HMS form.
32913 @end defun
32914
32915 @defun floatp x
32916 Returns true if @var{x} is a float, or a complex number, error form,
32917 interval, date form, or modulo form in which at least one component
32918 is a float.
32919 @end defun
32920
32921 @defun complexp x
32922 Returns true if @var{x} is a rectangular or polar complex number
32923 (but not a real number).
32924 @end defun
32925
32926 @defun rect-complexp x
32927 Returns true if @var{x} is a rectangular complex number.
32928 @end defun
32929
32930 @defun polar-complexp x
32931 Returns true if @var{x} is a polar complex number.
32932 @end defun
32933
32934 @defun numberp x
32935 Returns true if @var{x} is a real number or a complex number.
32936 @end defun
32937
32938 @defun scalarp x
32939 Returns true if @var{x} is a real or complex number or an HMS form.
32940 @end defun
32941
32942 @defun vectorp x
32943 Returns true if @var{x} is a vector (this simply checks if its argument
32944 is a list whose first element is the symbol @code{vec}).
32945 @end defun
32946
32947 @defun numvecp x
32948 Returns true if @var{x} is a number or vector.
32949 @end defun
32950
32951 @defun matrixp x
32952 Returns true if @var{x} is a matrix, i.e., a vector of one or more vectors,
32953 all of the same size.
32954 @end defun
32955
32956 @defun square-matrixp x
32957 Returns true if @var{x} is a square matrix.
32958 @end defun
32959
32960 @defun objectp x
32961 Returns true if @var{x} is any numeric Calc object, including real and
32962 complex numbers, HMS forms, date forms, error forms, intervals, and
32963 modulo forms. (Note that error forms and intervals may include formulas
32964 as their components; see @code{constp} below.)
32965 @end defun
32966
32967 @defun objvecp x
32968 Returns true if @var{x} is an object or a vector. This also accepts
32969 incomplete objects, but it rejects variables and formulas (except as
32970 mentioned above for @code{objectp}).
32971 @end defun
32972
32973 @defun primp x
32974 Returns true if @var{x} is a ``primitive'' or ``atomic'' Calc object,
32975 i.e., one whose components cannot be regarded as sub-formulas. This
32976 includes variables, and all @code{objectp} types except error forms
32977 and intervals.
32978 @end defun
32979
32980 @defun constp x
32981 Returns true if @var{x} is constant, i.e., a real or complex number,
32982 HMS form, date form, or error form, interval, or vector all of whose
32983 components are @code{constp}.
32984 @end defun
32985
32986 @defun lessp x y
32987 Returns true if @var{x} is numerically less than @var{y}. Returns false
32988 if @var{x} is greater than or equal to @var{y}, or if the order is
32989 undefined or cannot be determined. Generally speaking, this works
32990 by checking whether @samp{@var{x} - @var{y}} is @code{negp}. In
32991 @code{defmath}, the expression @samp{(< x y)} will automatically be
32992 converted to @samp{(lessp x y)}; expressions involving @code{>}, @code{<=},
32993 and @code{>=} are similarly converted in terms of @code{lessp}.
32994 @end defun
32995
32996 @defun beforep x y
32997 Returns true if @var{x} comes before @var{y} in a canonical ordering
32998 of Calc objects. If @var{x} and @var{y} are both real numbers, this
32999 will be the same as @code{lessp}. But whereas @code{lessp} considers
33000 other types of objects to be unordered, @code{beforep} puts any two
33001 objects into a definite, consistent order. The @code{beforep}
33002 function is used by the @kbd{V S} vector-sorting command, and also
33003 by @kbd{a s} to put the terms of a product into canonical order:
33004 This allows @samp{x y + y x} to be simplified easily to @samp{2 x y}.
33005 @end defun
33006
33007 @defun equal x y
33008 This is the standard Lisp @code{equal} predicate; it returns true if
33009 @var{x} and @var{y} are structurally identical. This is the usual way
33010 to compare numbers for equality, but note that @code{equal} will treat
33011 0 and 0.0 as different.
33012 @end defun
33013
33014 @defun math-equal x y
33015 Returns true if @var{x} and @var{y} are numerically equal, either because
33016 they are @code{equal}, or because their difference is @code{zerop}. In
33017 @code{defmath}, the expression @samp{(= x y)} will automatically be
33018 converted to @samp{(math-equal x y)}.
33019 @end defun
33020
33021 @defun equal-int x n
33022 Returns true if @var{x} and @var{n} are numerically equal, where @var{n}
33023 is a fixnum which is not a multiple of 10. This will automatically be
33024 used by @code{defmath} in place of the more general @code{math-equal}
33025 whenever possible.
33026 @end defun
33027
33028 @defun nearly-equal x y
33029 Returns true if @var{x} and @var{y}, as floating-point numbers, are
33030 equal except possibly in the last decimal place. For example,
33031 314.159 and 314.166 are considered nearly equal if the current
33032 precision is 6 (since they differ by 7 units), but not if the current
33033 precision is 7 (since they differ by 70 units). Most functions which
33034 use series expansions use @code{with-extra-prec} to evaluate the
33035 series with 2 extra digits of precision, then use @code{nearly-equal}
33036 to decide when the series has converged; this guards against cumulative
33037 error in the series evaluation without doing extra work which would be
33038 lost when the result is rounded back down to the current precision.
33039 In @code{defmath}, this can be written @samp{(~= @var{x} @var{y})}.
33040 The @var{x} and @var{y} can be numbers of any kind, including complex.
33041 @end defun
33042
33043 @defun nearly-zerop x y
33044 Returns true if @var{x} is nearly zero, compared to @var{y}. This
33045 checks whether @var{x} plus @var{y} would by be @code{nearly-equal}
33046 to @var{y} itself, to within the current precision, in other words,
33047 if adding @var{x} to @var{y} would have a negligible effect on @var{y}
33048 due to roundoff error. @var{X} may be a real or complex number, but
33049 @var{y} must be real.
33050 @end defun
33051
33052 @defun is-true x
33053 Return true if the formula @var{x} represents a true value in
33054 Calc, not Lisp, terms. It tests if @var{x} is a non-zero number
33055 or a provably non-zero formula.
33056 @end defun
33057
33058 @defun reject-arg val pred
33059 Abort the current function evaluation due to unacceptable argument values.
33060 This calls @samp{(calc-record-why @var{pred} @var{val})}, then signals a
33061 Lisp error which @code{normalize} will trap. The net effect is that the
33062 function call which led here will be left in symbolic form.
33063 @end defun
33064
33065 @defun inexact-value
33066 If Symbolic mode is enabled, this will signal an error that causes
33067 @code{normalize} to leave the formula in symbolic form, with the message
33068 ``Inexact result.'' (This function has no effect when not in Symbolic mode.)
33069 Note that if your function calls @samp{(sin 5)} in Symbolic mode, the
33070 @code{sin} function will call @code{inexact-value}, which will cause your
33071 function to be left unsimplified. You may instead wish to call
33072 @samp{(normalize (list 'calcFunc-sin 5))}, which in Symbolic mode will
33073 return the formula @samp{sin(5)} to your function.
33074 @end defun
33075
33076 @defun overflow
33077 This signals an error that will be reported as a floating-point overflow.
33078 @end defun
33079
33080 @defun underflow
33081 This signals a floating-point underflow.
33082 @end defun
33083
33084 @node Computational Lisp Functions, Vector Lisp Functions, Predicates, Internals
33085 @subsubsection Computational Functions
33086
33087 @noindent
33088 The functions described here do the actual computational work of the
33089 Calculator. In addition to these, note that any function described in
33090 the main body of this manual may be called from Lisp; for example, if
33091 the documentation refers to the @code{calc-sqrt} [@code{sqrt}] command,
33092 this means @code{calc-sqrt} is an interactive stack-based square-root
33093 command and @code{sqrt} (which @code{defmath} expands to @code{calcFunc-sqrt})
33094 is the actual Lisp function for taking square roots.
33095
33096 The functions @code{math-add}, @code{math-sub}, @code{math-mul},
33097 @code{math-div}, @code{math-mod}, and @code{math-neg} are not included
33098 in this list, since @code{defmath} allows you to write native Lisp
33099 @code{+}, @code{-}, @code{*}, @code{/}, @code{%}, and unary @code{-},
33100 respectively, instead.
33101
33102 @defun normalize val
33103 (Full form: @code{math-normalize}.)
33104 Reduce the value @var{val} to standard form. For example, if @var{val}
33105 is a fixnum, it will be converted to a bignum if it is too large, and
33106 if @var{val} is a bignum it will be normalized by clipping off trailing
33107 (i.e., most-significant) zero digits and converting to a fixnum if it is
33108 small. All the various data types are similarly converted to their standard
33109 forms. Variables are left alone, but function calls are actually evaluated
33110 in formulas. For example, normalizing @samp{(+ 2 (calcFunc-abs -4))} will
33111 return 6.
33112
33113 If a function call fails, because the function is void or has the wrong
33114 number of parameters, or because it returns @code{nil} or calls
33115 @code{reject-arg} or @code{inexact-result}, @code{normalize} returns
33116 the formula still in symbolic form.
33117
33118 If the current simplification mode is ``none'' or ``numeric arguments
33119 only,'' @code{normalize} will act appropriately. However, the more
33120 powerful simplification modes (like Algebraic Simplification) are
33121 not handled by @code{normalize}. They are handled by @code{calc-normalize},
33122 which calls @code{normalize} and possibly some other routines, such
33123 as @code{simplify} or @code{simplify-units}. Programs generally will
33124 never call @code{calc-normalize} except when popping or pushing values
33125 on the stack.
33126 @end defun
33127
33128 @defun evaluate-expr expr
33129 Replace all variables in @var{expr} that have values with their values,
33130 then use @code{normalize} to simplify the result. This is what happens
33131 when you press the @kbd{=} key interactively.
33132 @end defun
33133
33134 @defmac with-extra-prec n body
33135 Evaluate the Lisp forms in @var{body} with precision increased by @var{n}
33136 digits. This is a macro which expands to
33137
33138 @smallexample
33139 (math-normalize
33140 (let ((calc-internal-prec (+ calc-internal-prec @var{n})))
33141 @var{body}))
33142 @end smallexample
33143
33144 The surrounding call to @code{math-normalize} causes a floating-point
33145 result to be rounded down to the original precision afterwards. This
33146 is important because some arithmetic operations assume a number's
33147 mantissa contains no more digits than the current precision allows.
33148 @end defmac
33149
33150 @defun make-frac n d
33151 Build a fraction @samp{@var{n}:@var{d}}. This is equivalent to calling
33152 @samp{(normalize (list 'frac @var{n} @var{d}))}, but more efficient.
33153 @end defun
33154
33155 @defun make-float mant exp
33156 Build a floating-point value out of @var{mant} and @var{exp}, both
33157 of which are arbitrary integers. This function will return a
33158 properly normalized float value, or signal an overflow or underflow
33159 if @var{exp} is out of range.
33160 @end defun
33161
33162 @defun make-sdev x sigma
33163 Build an error form out of @var{x} and the absolute value of @var{sigma}.
33164 If @var{sigma} is zero, the result is the number @var{x} directly.
33165 If @var{sigma} is negative or complex, its absolute value is used.
33166 If @var{x} or @var{sigma} is not a valid type of object for use in
33167 error forms, this calls @code{reject-arg}.
33168 @end defun
33169
33170 @defun make-intv mask lo hi
33171 Build an interval form out of @var{mask} (which is assumed to be an
33172 integer from 0 to 3), and the limits @var{lo} and @var{hi}. If
33173 @var{lo} is greater than @var{hi}, an empty interval form is returned.
33174 This calls @code{reject-arg} if @var{lo} or @var{hi} is unsuitable.
33175 @end defun
33176
33177 @defun sort-intv mask lo hi
33178 Build an interval form, similar to @code{make-intv}, except that if
33179 @var{lo} is less than @var{hi} they are simply exchanged, and the
33180 bits of @var{mask} are swapped accordingly.
33181 @end defun
33182
33183 @defun make-mod n m
33184 Build a modulo form out of @var{n} and the modulus @var{m}. Since modulo
33185 forms do not allow formulas as their components, if @var{n} or @var{m}
33186 is not a real number or HMS form the result will be a formula which
33187 is a call to @code{makemod}, the algebraic version of this function.
33188 @end defun
33189
33190 @defun float x
33191 Convert @var{x} to floating-point form. Integers and fractions are
33192 converted to numerically equivalent floats; components of complex
33193 numbers, vectors, HMS forms, date forms, error forms, intervals, and
33194 modulo forms are recursively floated. If the argument is a variable
33195 or formula, this calls @code{reject-arg}.
33196 @end defun
33197
33198 @defun compare x y
33199 Compare the numbers @var{x} and @var{y}, and return @mathit{-1} if
33200 @samp{(lessp @var{x} @var{y})}, 1 if @samp{(lessp @var{y} @var{x})},
33201 0 if @samp{(math-equal @var{x} @var{y})}, or 2 if the order is
33202 undefined or cannot be determined.
33203 @end defun
33204
33205 @defun numdigs n
33206 Return the number of digits of integer @var{n}, effectively
33207 @samp{ceil(log10(@var{n}))}, but much more efficient. Zero is
33208 considered to have zero digits.
33209 @end defun
33210
33211 @defun scale-int x n
33212 Shift integer @var{x} left @var{n} decimal digits, or right @mathit{-@var{n}}
33213 digits with truncation toward zero.
33214 @end defun
33215
33216 @defun scale-rounding x n
33217 Like @code{scale-int}, except that a right shift rounds to the nearest
33218 integer rather than truncating.
33219 @end defun
33220
33221 @defun fixnum n
33222 Return the integer @var{n} as a fixnum, i.e., a native Lisp integer.
33223 If @var{n} is outside the permissible range for Lisp integers (usually
33224 24 binary bits) the result is undefined.
33225 @end defun
33226
33227 @defun sqr x
33228 Compute the square of @var{x}; short for @samp{(* @var{x} @var{x})}.
33229 @end defun
33230
33231 @defun quotient x y
33232 Divide integer @var{x} by integer @var{y}; return an integer quotient
33233 and discard the remainder. If @var{x} or @var{y} is negative, the
33234 direction of rounding is undefined.
33235 @end defun
33236
33237 @defun idiv x y
33238 Perform an integer division; if @var{x} and @var{y} are both nonnegative
33239 integers, this uses the @code{quotient} function, otherwise it computes
33240 @samp{floor(@var{x}/@var{y})}. Thus the result is well-defined but
33241 slower than for @code{quotient}.
33242 @end defun
33243
33244 @defun imod x y
33245 Divide integer @var{x} by integer @var{y}; return the integer remainder
33246 and discard the quotient. Like @code{quotient}, this works only for
33247 integer arguments and is not well-defined for negative arguments.
33248 For a more well-defined result, use @samp{(% @var{x} @var{y})}.
33249 @end defun
33250
33251 @defun idivmod x y
33252 Divide integer @var{x} by integer @var{y}; return a cons cell whose
33253 @code{car} is @samp{(quotient @var{x} @var{y})} and whose @code{cdr}
33254 is @samp{(imod @var{x} @var{y})}.
33255 @end defun
33256
33257 @defun pow x y
33258 Compute @var{x} to the power @var{y}. In @code{defmath} code, this can
33259 also be written @samp{(^ @var{x} @var{y})} or
33260 @w{@samp{(expt @var{x} @var{y})}}.
33261 @end defun
33262
33263 @defun abs-approx x
33264 Compute a fast approximation to the absolute value of @var{x}. For
33265 example, for a rectangular complex number the result is the sum of
33266 the absolute values of the components.
33267 @end defun
33268
33269 @findex two-pi
33270 @findex pi-over-2
33271 @findex pi-over-4
33272 @findex pi-over-180
33273 @findex sqrt-two-pi
33274 @findex sqrt-e
33275 @findex e
33276 @findex ln-2
33277 @findex ln-10
33278 @defun pi
33279 The function @samp{(pi)} computes @samp{pi} to the current precision.
33280 Other related constant-generating functions are @code{two-pi},
33281 @code{pi-over-2}, @code{pi-over-4}, @code{pi-over-180}, @code{sqrt-two-pi},
33282 @code{e}, @code{sqrt-e}, @code{ln-2}, and @code{ln-10}. Each function
33283 returns a floating-point value in the current precision, and each uses
33284 caching so that all calls after the first are essentially free.
33285 @end defun
33286
33287 @defmac math-defcache @var{func} @var{initial} @var{form}
33288 This macro, usually used as a top-level call like @code{defun} or
33289 @code{defvar}, defines a new cached constant analogous to @code{pi}, etc.
33290 It defines a function @code{func} which returns the requested value;
33291 if @var{initial} is non-@code{nil} it must be a @samp{(float @dots{})}
33292 form which serves as an initial value for the cache. If @var{func}
33293 is called when the cache is empty or does not have enough digits to
33294 satisfy the current precision, the Lisp expression @var{form} is evaluated
33295 with the current precision increased by four, and the result minus its
33296 two least significant digits is stored in the cache. For example,
33297 calling @samp{(pi)} with a precision of 30 computes @samp{pi} to 34
33298 digits, rounds it down to 32 digits for future use, then rounds it
33299 again to 30 digits for use in the present request.
33300 @end defmac
33301
33302 @findex half-circle
33303 @findex quarter-circle
33304 @defun full-circle symb
33305 If the current angular mode is Degrees or HMS, this function returns the
33306 integer 360. In Radians mode, this function returns either the
33307 corresponding value in radians to the current precision, or the formula
33308 @samp{2*pi}, depending on the Symbolic mode. There are also similar
33309 function @code{half-circle} and @code{quarter-circle}.
33310 @end defun
33311
33312 @defun power-of-2 n
33313 Compute two to the integer power @var{n}, as a (potentially very large)
33314 integer. Powers of two are cached, so only the first call for a
33315 particular @var{n} is expensive.
33316 @end defun
33317
33318 @defun integer-log2 n
33319 Compute the base-2 logarithm of @var{n}, which must be an integer which
33320 is a power of two. If @var{n} is not a power of two, this function will
33321 return @code{nil}.
33322 @end defun
33323
33324 @defun div-mod a b m
33325 Divide @var{a} by @var{b}, modulo @var{m}. This returns @code{nil} if
33326 there is no solution, or if any of the arguments are not integers.
33327 @end defun
33328
33329 @defun pow-mod a b m
33330 Compute @var{a} to the power @var{b}, modulo @var{m}. If @var{a},
33331 @var{b}, and @var{m} are integers, this uses an especially efficient
33332 algorithm. Otherwise, it simply computes @samp{(% (^ a b) m)}.
33333 @end defun
33334
33335 @defun isqrt n
33336 Compute the integer square root of @var{n}. This is the square root
33337 of @var{n} rounded down toward zero, i.e., @samp{floor(sqrt(@var{n}))}.
33338 If @var{n} is itself an integer, the computation is especially efficient.
33339 @end defun
33340
33341 @defun to-hms a ang
33342 Convert the argument @var{a} into an HMS form. If @var{ang} is specified,
33343 it is the angular mode in which to interpret @var{a}, either @code{deg}
33344 or @code{rad}. Otherwise, the current angular mode is used. If @var{a}
33345 is already an HMS form it is returned as-is.
33346 @end defun
33347
33348 @defun from-hms a ang
33349 Convert the HMS form @var{a} into a real number. If @var{ang} is specified,
33350 it is the angular mode in which to express the result, otherwise the
33351 current angular mode is used. If @var{a} is already a real number, it
33352 is returned as-is.
33353 @end defun
33354
33355 @defun to-radians a
33356 Convert the number or HMS form @var{a} to radians from the current
33357 angular mode.
33358 @end defun
33359
33360 @defun from-radians a
33361 Convert the number @var{a} from radians to the current angular mode.
33362 If @var{a} is a formula, this returns the formula @samp{deg(@var{a})}.
33363 @end defun
33364
33365 @defun to-radians-2 a
33366 Like @code{to-radians}, except that in Symbolic mode a degrees to
33367 radians conversion yields a formula like @samp{@var{a}*pi/180}.
33368 @end defun
33369
33370 @defun from-radians-2 a
33371 Like @code{from-radians}, except that in Symbolic mode a radians to
33372 degrees conversion yields a formula like @samp{@var{a}*180/pi}.
33373 @end defun
33374
33375 @defun random-digit
33376 Produce a random base-1000 digit in the range 0 to 999.
33377 @end defun
33378
33379 @defun random-digits n
33380 Produce a random @var{n}-digit integer; this will be an integer
33381 in the interval @samp{[0, 10^@var{n})}.
33382 @end defun
33383
33384 @defun random-float
33385 Produce a random float in the interval @samp{[0, 1)}.
33386 @end defun
33387
33388 @defun prime-test n iters
33389 Determine whether the integer @var{n} is prime. Return a list which has
33390 one of these forms: @samp{(nil @var{f})} means the number is non-prime
33391 because it was found to be divisible by @var{f}; @samp{(nil)} means it
33392 was found to be non-prime by table look-up (so no factors are known);
33393 @samp{(nil unknown)} means it is definitely non-prime but no factors
33394 are known because @var{n} was large enough that Fermat's probabilistic
33395 test had to be used; @samp{(t)} means the number is definitely prime;
33396 and @samp{(maybe @var{i} @var{p})} means that Fermat's test, after @var{i}
33397 iterations, is @var{p} percent sure that the number is prime. The
33398 @var{iters} parameter is the number of Fermat iterations to use, in the
33399 case that this is necessary. If @code{prime-test} returns ``maybe,''
33400 you can call it again with the same @var{n} to get a greater certainty;
33401 @code{prime-test} remembers where it left off.
33402 @end defun
33403
33404 @defun to-simple-fraction f
33405 If @var{f} is a floating-point number which can be represented exactly
33406 as a small rational number. return that number, else return @var{f}.
33407 For example, 0.75 would be converted to 3:4. This function is very
33408 fast.
33409 @end defun
33410
33411 @defun to-fraction f tol
33412 Find a rational approximation to floating-point number @var{f} to within
33413 a specified tolerance @var{tol}; this corresponds to the algebraic
33414 function @code{frac}, and can be rather slow.
33415 @end defun
33416
33417 @defun quarter-integer n
33418 If @var{n} is an integer or integer-valued float, this function
33419 returns zero. If @var{n} is a half-integer (i.e., an integer plus
33420 @mathit{1:2} or 0.5), it returns 2. If @var{n} is a quarter-integer,
33421 it returns 1 or 3. If @var{n} is anything else, this function
33422 returns @code{nil}.
33423 @end defun
33424
33425 @node Vector Lisp Functions, Symbolic Lisp Functions, Computational Lisp Functions, Internals
33426 @subsubsection Vector Functions
33427
33428 @noindent
33429 The functions described here perform various operations on vectors and
33430 matrices.
33431
33432 @defun math-concat x y
33433 Do a vector concatenation; this operation is written @samp{@var{x} | @var{y}}
33434 in a symbolic formula. @xref{Building Vectors}.
33435 @end defun
33436
33437 @defun vec-length v
33438 Return the length of vector @var{v}. If @var{v} is not a vector, the
33439 result is zero. If @var{v} is a matrix, this returns the number of
33440 rows in the matrix.
33441 @end defun
33442
33443 @defun mat-dimens m
33444 Determine the dimensions of vector or matrix @var{m}. If @var{m} is not
33445 a vector, the result is an empty list. If @var{m} is a plain vector
33446 but not a matrix, the result is a one-element list containing the length
33447 of the vector. If @var{m} is a matrix with @var{r} rows and @var{c} columns,
33448 the result is the list @samp{(@var{r} @var{c})}. Higher-order tensors
33449 produce lists of more than two dimensions. Note that the object
33450 @samp{[[1, 2, 3], [4, 5]]} is a vector of vectors not all the same size,
33451 and is treated by this and other Calc routines as a plain vector of two
33452 elements.
33453 @end defun
33454
33455 @defun dimension-error
33456 Abort the current function with a message of ``Dimension error.''
33457 The Calculator will leave the function being evaluated in symbolic
33458 form; this is really just a special case of @code{reject-arg}.
33459 @end defun
33460
33461 @defun build-vector args
33462 Return a Calc vector with @var{args} as elements.
33463 For example, @samp{(build-vector 1 2 3)} returns the Calc vector
33464 @samp{[1, 2, 3]}, stored internally as the list @samp{(vec 1 2 3)}.
33465 @end defun
33466
33467 @defun make-vec obj dims
33468 Return a Calc vector or matrix all of whose elements are equal to
33469 @var{obj}. For example, @samp{(make-vec 27 3 4)} returns a 3x4 matrix
33470 filled with 27's.
33471 @end defun
33472
33473 @defun row-matrix v
33474 If @var{v} is a plain vector, convert it into a row matrix, i.e.,
33475 a matrix whose single row is @var{v}. If @var{v} is already a matrix,
33476 leave it alone.
33477 @end defun
33478
33479 @defun col-matrix v
33480 If @var{v} is a plain vector, convert it into a column matrix, i.e., a
33481 matrix with each element of @var{v} as a separate row. If @var{v} is
33482 already a matrix, leave it alone.
33483 @end defun
33484
33485 @defun map-vec f v
33486 Map the Lisp function @var{f} over the Calc vector @var{v}. For example,
33487 @samp{(map-vec 'math-floor v)} returns a vector of the floored components
33488 of vector @var{v}.
33489 @end defun
33490
33491 @defun map-vec-2 f a b
33492 Map the Lisp function @var{f} over the two vectors @var{a} and @var{b}.
33493 If @var{a} and @var{b} are vectors of equal length, the result is a
33494 vector of the results of calling @samp{(@var{f} @var{ai} @var{bi})}
33495 for each pair of elements @var{ai} and @var{bi}. If either @var{a} or
33496 @var{b} is a scalar, it is matched with each value of the other vector.
33497 For example, @samp{(map-vec-2 'math-add v 1)} returns the vector @var{v}
33498 with each element increased by one. Note that using @samp{'+} would not
33499 work here, since @code{defmath} does not expand function names everywhere,
33500 just where they are in the function position of a Lisp expression.
33501 @end defun
33502
33503 @defun reduce-vec f v
33504 Reduce the function @var{f} over the vector @var{v}. For example, if
33505 @var{v} is @samp{[10, 20, 30, 40]}, this calls @samp{(f (f (f 10 20) 30) 40)}.
33506 If @var{v} is a matrix, this reduces over the rows of @var{v}.
33507 @end defun
33508
33509 @defun reduce-cols f m
33510 Reduce the function @var{f} over the columns of matrix @var{m}. For
33511 example, if @var{m} is @samp{[[1, 2], [3, 4], [5, 6]]}, the result
33512 is a vector of the two elements @samp{(f (f 1 3) 5)} and @samp{(f (f 2 4) 6)}.
33513 @end defun
33514
33515 @defun mat-row m n
33516 Return the @var{n}th row of matrix @var{m}. This is equivalent to
33517 @samp{(elt m n)}. For a slower but safer version, use @code{mrow}.
33518 (@xref{Extracting Elements}.)
33519 @end defun
33520
33521 @defun mat-col m n
33522 Return the @var{n}th column of matrix @var{m}, in the form of a vector.
33523 The arguments are not checked for correctness.
33524 @end defun
33525
33526 @defun mat-less-row m n
33527 Return a copy of matrix @var{m} with its @var{n}th row deleted. The
33528 number @var{n} must be in range from 1 to the number of rows in @var{m}.
33529 @end defun
33530
33531 @defun mat-less-col m n
33532 Return a copy of matrix @var{m} with its @var{n}th column deleted.
33533 @end defun
33534
33535 @defun transpose m
33536 Return the transpose of matrix @var{m}.
33537 @end defun
33538
33539 @defun flatten-vector v
33540 Flatten nested vector @var{v} into a vector of scalars. For example,
33541 if @var{v} is @samp{[[1, 2, 3], [4, 5]]} the result is @samp{[1, 2, 3, 4, 5]}.
33542 @end defun
33543
33544 @defun copy-matrix m
33545 If @var{m} is a matrix, return a copy of @var{m}. This maps
33546 @code{copy-sequence} over the rows of @var{m}; in Lisp terms, each
33547 element of the result matrix will be @code{eq} to the corresponding
33548 element of @var{m}, but none of the @code{cons} cells that make up
33549 the structure of the matrix will be @code{eq}. If @var{m} is a plain
33550 vector, this is the same as @code{copy-sequence}.
33551 @end defun
33552
33553 @defun swap-rows m r1 r2
33554 Exchange rows @var{r1} and @var{r2} of matrix @var{m} in-place. In
33555 other words, unlike most of the other functions described here, this
33556 function changes @var{m} itself rather than building up a new result
33557 matrix. The return value is @var{m}, i.e., @samp{(eq (swap-rows m 1 2) m)}
33558 is true, with the side effect of exchanging the first two rows of
33559 @var{m}.
33560 @end defun
33561
33562 @node Symbolic Lisp Functions, Formatting Lisp Functions, Vector Lisp Functions, Internals
33563 @subsubsection Symbolic Functions
33564
33565 @noindent
33566 The functions described here operate on symbolic formulas in the
33567 Calculator.
33568
33569 @defun calc-prepare-selection num
33570 Prepare a stack entry for selection operations. If @var{num} is
33571 omitted, the stack entry containing the cursor is used; otherwise,
33572 it is the number of the stack entry to use. This function stores
33573 useful information about the current stack entry into a set of
33574 variables. @code{calc-selection-cache-num} contains the number of
33575 the stack entry involved (equal to @var{num} if you specified it);
33576 @code{calc-selection-cache-entry} contains the stack entry as a
33577 list (such as @code{calc-top-list} would return with @code{entry}
33578 as the selection mode); and @code{calc-selection-cache-comp} contains
33579 a special ``tagged'' composition (@pxref{Formatting Lisp Functions})
33580 which allows Calc to relate cursor positions in the buffer with
33581 their corresponding sub-formulas.
33582
33583 A slight complication arises in the selection mechanism because
33584 formulas may contain small integers. For example, in the vector
33585 @samp{[1, 2, 1]} the first and last elements are @code{eq} to each
33586 other; selections are recorded as the actual Lisp object that
33587 appears somewhere in the tree of the whole formula, but storing
33588 @code{1} would falsely select both @code{1}'s in the vector. So
33589 @code{calc-prepare-selection} also checks the stack entry and
33590 replaces any plain integers with ``complex number'' lists of the form
33591 @samp{(cplx @var{n} 0)}. This list will be displayed the same as a
33592 plain @var{n} and the change will be completely invisible to the
33593 user, but it will guarantee that no two sub-formulas of the stack
33594 entry will be @code{eq} to each other. Next time the stack entry
33595 is involved in a computation, @code{calc-normalize} will replace
33596 these lists with plain numbers again, again invisibly to the user.
33597 @end defun
33598
33599 @defun calc-encase-atoms x
33600 This modifies the formula @var{x} to ensure that each part of the
33601 formula is a unique atom, using the @samp{(cplx @var{n} 0)} trick
33602 described above. This function may use @code{setcar} to modify
33603 the formula in-place.
33604 @end defun
33605
33606 @defun calc-find-selected-part
33607 Find the smallest sub-formula of the current formula that contains
33608 the cursor. This assumes @code{calc-prepare-selection} has been
33609 called already. If the cursor is not actually on any part of the
33610 formula, this returns @code{nil}.
33611 @end defun
33612
33613 @defun calc-change-current-selection selection
33614 Change the currently prepared stack element's selection to
33615 @var{selection}, which should be @code{eq} to some sub-formula
33616 of the stack element, or @code{nil} to unselect the formula.
33617 The stack element's appearance in the Calc buffer is adjusted
33618 to reflect the new selection.
33619 @end defun
33620
33621 @defun calc-find-nth-part expr n
33622 Return the @var{n}th sub-formula of @var{expr}. This function is used
33623 by the selection commands, and (unless @kbd{j b} has been used) treats
33624 sums and products as flat many-element formulas. Thus if @var{expr}
33625 is @samp{((a + b) - c) + d}, calling @code{calc-find-nth-part} with
33626 @var{n} equal to four will return @samp{d}.
33627 @end defun
33628
33629 @defun calc-find-parent-formula expr part
33630 Return the sub-formula of @var{expr} which immediately contains
33631 @var{part}. If @var{expr} is @samp{a*b + (c+1)*d} and @var{part}
33632 is @code{eq} to the @samp{c+1} term of @var{expr}, then this function
33633 will return @samp{(c+1)*d}. If @var{part} turns out not to be a
33634 sub-formula of @var{expr}, the function returns @code{nil}. If
33635 @var{part} is @code{eq} to @var{expr}, the function returns @code{t}.
33636 This function does not take associativity into account.
33637 @end defun
33638
33639 @defun calc-find-assoc-parent-formula expr part
33640 This is the same as @code{calc-find-parent-formula}, except that
33641 (unless @kbd{j b} has been used) it continues widening the selection
33642 to contain a complete level of the formula. Given @samp{a} from
33643 @samp{((a + b) - c) + d}, @code{calc-find-parent-formula} will
33644 return @samp{a + b} but @code{calc-find-assoc-parent-formula} will
33645 return the whole expression.
33646 @end defun
33647
33648 @defun calc-grow-assoc-formula expr part
33649 This expands sub-formula @var{part} of @var{expr} to encompass a
33650 complete level of the formula. If @var{part} and its immediate
33651 parent are not compatible associative operators, or if @kbd{j b}
33652 has been used, this simply returns @var{part}.
33653 @end defun
33654
33655 @defun calc-find-sub-formula expr part
33656 This finds the immediate sub-formula of @var{expr} which contains
33657 @var{part}. It returns an index @var{n} such that
33658 @samp{(calc-find-nth-part @var{expr} @var{n})} would return @var{part}.
33659 If @var{part} is not a sub-formula of @var{expr}, it returns @code{nil}.
33660 If @var{part} is @code{eq} to @var{expr}, it returns @code{t}. This
33661 function does not take associativity into account.
33662 @end defun
33663
33664 @defun calc-replace-sub-formula expr old new
33665 This function returns a copy of formula @var{expr}, with the
33666 sub-formula that is @code{eq} to @var{old} replaced by @var{new}.
33667 @end defun
33668
33669 @defun simplify expr
33670 Simplify the expression @var{expr} by applying various algebraic rules.
33671 This is what the @w{@kbd{a s}} (@code{calc-simplify}) command uses. This
33672 always returns a copy of the expression; the structure @var{expr} points
33673 to remains unchanged in memory.
33674
33675 More precisely, here is what @code{simplify} does: The expression is
33676 first normalized and evaluated by calling @code{normalize}. If any
33677 @code{AlgSimpRules} have been defined, they are then applied. Then
33678 the expression is traversed in a depth-first, bottom-up fashion; at
33679 each level, any simplifications that can be made are made until no
33680 further changes are possible. Once the entire formula has been
33681 traversed in this way, it is compared with the original formula (from
33682 before the call to @code{normalize}) and, if it has changed,
33683 the entire procedure is repeated (starting with @code{normalize})
33684 until no further changes occur. Usually only two iterations are
33685 needed:@: one to simplify the formula, and another to verify that no
33686 further simplifications were possible.
33687 @end defun
33688
33689 @defun simplify-extended expr
33690 Simplify the expression @var{expr}, with additional rules enabled that
33691 help do a more thorough job, while not being entirely ``safe'' in all
33692 circumstances. (For example, this mode will simplify @samp{sqrt(x^2)}
33693 to @samp{x}, which is only valid when @var{x} is positive.) This is
33694 implemented by temporarily binding the variable @code{math-living-dangerously}
33695 to @code{t} (using a @code{let} form) and calling @code{simplify}.
33696 Dangerous simplification rules are written to check this variable
33697 before taking any action.
33698 @end defun
33699
33700 @defun simplify-units expr
33701 Simplify the expression @var{expr}, treating variable names as units
33702 whenever possible. This works by binding the variable
33703 @code{math-simplifying-units} to @code{t} while calling @code{simplify}.
33704 @end defun
33705
33706 @defmac math-defsimplify funcs body
33707 Register a new simplification rule; this is normally called as a top-level
33708 form, like @code{defun} or @code{defmath}. If @var{funcs} is a symbol
33709 (like @code{+} or @code{calcFunc-sqrt}), this simplification rule is
33710 applied to the formulas which are calls to the specified function. Or,
33711 @var{funcs} can be a list of such symbols; the rule applies to all
33712 functions on the list. The @var{body} is written like the body of a
33713 function with a single argument called @code{expr}. The body will be
33714 executed with @code{expr} bound to a formula which is a call to one of
33715 the functions @var{funcs}. If the function body returns @code{nil}, or
33716 if it returns a result @code{equal} to the original @code{expr}, it is
33717 ignored and Calc goes on to try the next simplification rule that applies.
33718 If the function body returns something different, that new formula is
33719 substituted for @var{expr} in the original formula.
33720
33721 At each point in the formula, rules are tried in the order of the
33722 original calls to @code{math-defsimplify}; the search stops after the
33723 first rule that makes a change. Thus later rules for that same
33724 function will not have a chance to trigger until the next iteration
33725 of the main @code{simplify} loop.
33726
33727 Note that, since @code{defmath} is not being used here, @var{body} must
33728 be written in true Lisp code without the conveniences that @code{defmath}
33729 provides. If you prefer, you can have @var{body} simply call another
33730 function (defined with @code{defmath}) which does the real work.
33731
33732 The arguments of a function call will already have been simplified
33733 before any rules for the call itself are invoked. Since a new argument
33734 list is consed up when this happens, this means that the rule's body is
33735 allowed to rearrange the function's arguments destructively if that is
33736 convenient. Here is a typical example of a simplification rule:
33737
33738 @smallexample
33739 (math-defsimplify calcFunc-arcsinh
33740 (or (and (math-looks-negp (nth 1 expr))
33741 (math-neg (list 'calcFunc-arcsinh
33742 (math-neg (nth 1 expr)))))
33743 (and (eq (car-safe (nth 1 expr)) 'calcFunc-sinh)
33744 (or math-living-dangerously
33745 (math-known-realp (nth 1 (nth 1 expr))))
33746 (nth 1 (nth 1 expr)))))
33747 @end smallexample
33748
33749 This is really a pair of rules written with one @code{math-defsimplify}
33750 for convenience; the first replaces @samp{arcsinh(-x)} with
33751 @samp{-arcsinh(x)}, and the second, which is safe only for real @samp{x},
33752 replaces @samp{arcsinh(sinh(x))} with @samp{x}.
33753 @end defmac
33754
33755 @defun common-constant-factor expr
33756 Check @var{expr} to see if it is a sum of terms all multiplied by the
33757 same rational value. If so, return this value. If not, return @code{nil}.
33758 For example, if called on @samp{6x + 9y + 12z}, it would return 3, since
33759 3 is a common factor of all the terms.
33760 @end defun
33761
33762 @defun cancel-common-factor expr factor
33763 Assuming @var{expr} is a sum with @var{factor} as a common factor,
33764 divide each term of the sum by @var{factor}. This is done by
33765 destructively modifying parts of @var{expr}, on the assumption that
33766 it is being used by a simplification rule (where such things are
33767 allowed; see above). For example, consider this built-in rule for
33768 square roots:
33769
33770 @smallexample
33771 (math-defsimplify calcFunc-sqrt
33772 (let ((fac (math-common-constant-factor (nth 1 expr))))
33773 (and fac (not (eq fac 1))
33774 (math-mul (math-normalize (list 'calcFunc-sqrt fac))
33775 (math-normalize
33776 (list 'calcFunc-sqrt
33777 (math-cancel-common-factor
33778 (nth 1 expr) fac)))))))
33779 @end smallexample
33780 @end defun
33781
33782 @defun frac-gcd a b
33783 Compute a ``rational GCD'' of @var{a} and @var{b}, which must both be
33784 rational numbers. This is the fraction composed of the GCD of the
33785 numerators of @var{a} and @var{b}, over the GCD of the denominators.
33786 It is used by @code{common-constant-factor}. Note that the standard
33787 @code{gcd} function uses the LCM to combine the denominators.
33788 @end defun
33789
33790 @defun map-tree func expr many
33791 Try applying Lisp function @var{func} to various sub-expressions of
33792 @var{expr}. Initially, call @var{func} with @var{expr} itself as an
33793 argument. If this returns an expression which is not @code{equal} to
33794 @var{expr}, apply @var{func} again until eventually it does return
33795 @var{expr} with no changes. Then, if @var{expr} is a function call,
33796 recursively apply @var{func} to each of the arguments. This keeps going
33797 until no changes occur anywhere in the expression; this final expression
33798 is returned by @code{map-tree}. Note that, unlike simplification rules,
33799 @var{func} functions may @emph{not} make destructive changes to
33800 @var{expr}. If a third argument @var{many} is provided, it is an
33801 integer which says how many times @var{func} may be applied; the
33802 default, as described above, is infinitely many times.
33803 @end defun
33804
33805 @defun compile-rewrites rules
33806 Compile the rewrite rule set specified by @var{rules}, which should
33807 be a formula that is either a vector or a variable name. If the latter,
33808 the compiled rules are saved so that later @code{compile-rules} calls
33809 for that same variable can return immediately. If there are problems
33810 with the rules, this function calls @code{error} with a suitable
33811 message.
33812 @end defun
33813
33814 @defun apply-rewrites expr crules heads
33815 Apply the compiled rewrite rule set @var{crules} to the expression
33816 @var{expr}. This will make only one rewrite and only checks at the
33817 top level of the expression. The result @code{nil} if no rules
33818 matched, or if the only rules that matched did not actually change
33819 the expression. The @var{heads} argument is optional; if is given,
33820 it should be a list of all function names that (may) appear in
33821 @var{expr}. The rewrite compiler tags each rule with the
33822 rarest-looking function name in the rule; if you specify @var{heads},
33823 @code{apply-rewrites} can use this information to narrow its search
33824 down to just a few rules in the rule set.
33825 @end defun
33826
33827 @defun rewrite-heads expr
33828 Compute a @var{heads} list for @var{expr} suitable for use with
33829 @code{apply-rewrites}, as discussed above.
33830 @end defun
33831
33832 @defun rewrite expr rules many
33833 This is an all-in-one rewrite function. It compiles the rule set
33834 specified by @var{rules}, then uses @code{map-tree} to apply the
33835 rules throughout @var{expr} up to @var{many} (default infinity)
33836 times.
33837 @end defun
33838
33839 @defun match-patterns pat vec not-flag
33840 Given a Calc vector @var{vec} and an uncompiled pattern set or
33841 pattern set variable @var{pat}, this function returns a new vector
33842 of all elements of @var{vec} which do (or don't, if @var{not-flag} is
33843 non-@code{nil}) match any of the patterns in @var{pat}.
33844 @end defun
33845
33846 @defun deriv expr var value symb
33847 Compute the derivative of @var{expr} with respect to variable @var{var}
33848 (which may actually be any sub-expression). If @var{value} is specified,
33849 the derivative is evaluated at the value of @var{var}; otherwise, the
33850 derivative is left in terms of @var{var}. If the expression contains
33851 functions for which no derivative formula is known, new derivative
33852 functions are invented by adding primes to the names; @pxref{Calculus}.
33853 However, if @var{symb} is non-@code{nil}, the presence of undifferentiable
33854 functions in @var{expr} instead cancels the whole differentiation, and
33855 @code{deriv} returns @code{nil} instead.
33856
33857 Derivatives of an @var{n}-argument function can be defined by
33858 adding a @code{math-derivative-@var{n}} property to the property list
33859 of the symbol for the function's derivative, which will be the
33860 function name followed by an apostrophe. The value of the property
33861 should be a Lisp function; it is called with the same arguments as the
33862 original function call that is being differentiated. It should return
33863 a formula for the derivative. For example, the derivative of @code{ln}
33864 is defined by
33865
33866 @smallexample
33867 (put 'calcFunc-ln\' 'math-derivative-1
33868 (function (lambda (u) (math-div 1 u))))
33869 @end smallexample
33870
33871 The two-argument @code{log} function has two derivatives,
33872 @smallexample
33873 (put 'calcFunc-log\' 'math-derivative-2 ; d(log(x,b)) / dx
33874 (function (lambda (x b) ... )))
33875 (put 'calcFunc-log\'2 'math-derivative-2 ; d(log(x,b)) / db
33876 (function (lambda (x b) ... )))
33877 @end smallexample
33878 @end defun
33879
33880 @defun tderiv expr var value symb
33881 Compute the total derivative of @var{expr}. This is the same as
33882 @code{deriv}, except that variables other than @var{var} are not
33883 assumed to be constant with respect to @var{var}.
33884 @end defun
33885
33886 @defun integ expr var low high
33887 Compute the integral of @var{expr} with respect to @var{var}.
33888 @xref{Calculus}, for further details.
33889 @end defun
33890
33891 @defmac math-defintegral funcs body
33892 Define a rule for integrating a function or functions of one argument;
33893 this macro is very similar in format to @code{math-defsimplify}.
33894 The main difference is that here @var{body} is the body of a function
33895 with a single argument @code{u} which is bound to the argument to the
33896 function being integrated, not the function call itself. Also, the
33897 variable of integration is available as @code{math-integ-var}. If
33898 evaluation of the integral requires doing further integrals, the body
33899 should call @samp{(math-integral @var{x})} to find the integral of
33900 @var{x} with respect to @code{math-integ-var}; this function returns
33901 @code{nil} if the integral could not be done. Some examples:
33902
33903 @smallexample
33904 (math-defintegral calcFunc-conj
33905 (let ((int (math-integral u)))
33906 (and int
33907 (list 'calcFunc-conj int))))
33908
33909 (math-defintegral calcFunc-cos
33910 (and (equal u math-integ-var)
33911 (math-from-radians-2 (list 'calcFunc-sin u))))
33912 @end smallexample
33913
33914 In the @code{cos} example, we define only the integral of @samp{cos(x) dx},
33915 relying on the general integration-by-substitution facility to handle
33916 cosines of more complicated arguments. An integration rule should return
33917 @code{nil} if it can't do the integral; if several rules are defined for
33918 the same function, they are tried in order until one returns a non-@code{nil}
33919 result.
33920 @end defmac
33921
33922 @defmac math-defintegral-2 funcs body
33923 Define a rule for integrating a function or functions of two arguments.
33924 This is exactly analogous to @code{math-defintegral}, except that @var{body}
33925 is written as the body of a function with two arguments, @var{u} and
33926 @var{v}.
33927 @end defmac
33928
33929 @defun solve-for lhs rhs var full
33930 Attempt to solve the equation @samp{@var{lhs} = @var{rhs}} by isolating
33931 the variable @var{var} on the lefthand side; return the resulting righthand
33932 side, or @code{nil} if the equation cannot be solved. The variable
33933 @var{var} must appear at least once in @var{lhs} or @var{rhs}. Note that
33934 the return value is a formula which does not contain @var{var}; this is
33935 different from the user-level @code{solve} and @code{finv} functions,
33936 which return a rearranged equation or a functional inverse, respectively.
33937 If @var{full} is non-@code{nil}, a full solution including dummy signs
33938 and dummy integers will be produced. User-defined inverses are provided
33939 as properties in a manner similar to derivatives:
33940
33941 @smallexample
33942 (put 'calcFunc-ln 'math-inverse
33943 (function (lambda (x) (list 'calcFunc-exp x))))
33944 @end smallexample
33945
33946 This function can call @samp{(math-solve-get-sign @var{x})} to create
33947 a new arbitrary sign variable, returning @var{x} times that sign, and
33948 @samp{(math-solve-get-int @var{x})} to create a new arbitrary integer
33949 variable multiplied by @var{x}. These functions simply return @var{x}
33950 if the caller requested a non-``full'' solution.
33951 @end defun
33952
33953 @defun solve-eqn expr var full
33954 This version of @code{solve-for} takes an expression which will
33955 typically be an equation or inequality. (If it is not, it will be
33956 interpreted as the equation @samp{@var{expr} = 0}.) It returns an
33957 equation or inequality, or @code{nil} if no solution could be found.
33958 @end defun
33959
33960 @defun solve-system exprs vars full
33961 This function solves a system of equations. Generally, @var{exprs}
33962 and @var{vars} will be vectors of equal length.
33963 @xref{Solving Systems of Equations}, for other options.
33964 @end defun
33965
33966 @defun expr-contains expr var
33967 Returns a non-@code{nil} value if @var{var} occurs as a subexpression
33968 of @var{expr}.
33969
33970 This function might seem at first to be identical to
33971 @code{calc-find-sub-formula}. The key difference is that
33972 @code{expr-contains} uses @code{equal} to test for matches, whereas
33973 @code{calc-find-sub-formula} uses @code{eq}. In the formula
33974 @samp{f(a, a)}, the two @samp{a}s will be @code{equal} but not
33975 @code{eq} to each other.
33976 @end defun
33977
33978 @defun expr-contains-count expr var
33979 Returns the number of occurrences of @var{var} as a subexpression
33980 of @var{expr}, or @code{nil} if there are no occurrences.
33981 @end defun
33982
33983 @defun expr-depends expr var
33984 Returns true if @var{expr} refers to any variable the occurs in @var{var}.
33985 In other words, it checks if @var{expr} and @var{var} have any variables
33986 in common.
33987 @end defun
33988
33989 @defun expr-contains-vars expr
33990 Return true if @var{expr} contains any variables, or @code{nil} if @var{expr}
33991 contains only constants and functions with constant arguments.
33992 @end defun
33993
33994 @defun expr-subst expr old new
33995 Returns a copy of @var{expr}, with all occurrences of @var{old} replaced
33996 by @var{new}. This treats @code{lambda} forms specially with respect
33997 to the dummy argument variables, so that the effect is always to return
33998 @var{expr} evaluated at @var{old} = @var{new}.
33999 @end defun
34000
34001 @defun multi-subst expr old new
34002 This is like @code{expr-subst}, except that @var{old} and @var{new}
34003 are lists of expressions to be substituted simultaneously. If one
34004 list is shorter than the other, trailing elements of the longer list
34005 are ignored.
34006 @end defun
34007
34008 @defun expr-weight expr
34009 Returns the ``weight'' of @var{expr}, basically a count of the total
34010 number of objects and function calls that appear in @var{expr}. For
34011 ``primitive'' objects, this will be one.
34012 @end defun
34013
34014 @defun expr-height expr
34015 Returns the ``height'' of @var{expr}, which is the deepest level to
34016 which function calls are nested. (Note that @samp{@var{a} + @var{b}}
34017 counts as a function call.) For primitive objects, this returns zero.
34018 @end defun
34019
34020 @defun polynomial-p expr var
34021 Check if @var{expr} is a polynomial in variable (or sub-expression)
34022 @var{var}. If so, return the degree of the polynomial, that is, the
34023 highest power of @var{var} that appears in @var{expr}. For example,
34024 for @samp{(x^2 + 3)^3 + 4} this would return 6. This function returns
34025 @code{nil} unless @var{expr}, when expanded out by @kbd{a x}
34026 (@code{calc-expand}), would consist of a sum of terms in which @var{var}
34027 appears only raised to nonnegative integer powers. Note that if
34028 @var{var} does not occur in @var{expr}, then @var{expr} is considered
34029 a polynomial of degree 0.
34030 @end defun
34031
34032 @defun is-polynomial expr var degree loose
34033 Check if @var{expr} is a polynomial in variable or sub-expression
34034 @var{var}, and, if so, return a list representation of the polynomial
34035 where the elements of the list are coefficients of successive powers of
34036 @var{var}: @samp{@var{a} + @var{b} x + @var{c} x^3} would produce the
34037 list @samp{(@var{a} @var{b} 0 @var{c})}, and @samp{(x + 1)^2} would
34038 produce the list @samp{(1 2 1)}. The highest element of the list will
34039 be non-zero, with the special exception that if @var{expr} is the
34040 constant zero, the returned value will be @samp{(0)}. Return @code{nil}
34041 if @var{expr} is not a polynomial in @var{var}. If @var{degree} is
34042 specified, this will not consider polynomials of degree higher than that
34043 value. This is a good precaution because otherwise an input of
34044 @samp{(x+1)^1000} will cause a huge coefficient list to be built. If
34045 @var{loose} is non-@code{nil}, then a looser definition of a polynomial
34046 is used in which coefficients are no longer required not to depend on
34047 @var{var}, but are only required not to take the form of polynomials
34048 themselves. For example, @samp{sin(x) x^2 + cos(x)} is a loose
34049 polynomial with coefficients @samp{((calcFunc-cos x) 0 (calcFunc-sin
34050 x))}. The result will never be @code{nil} in loose mode, since any
34051 expression can be interpreted as a ``constant'' loose polynomial.
34052 @end defun
34053
34054 @defun polynomial-base expr pred
34055 Check if @var{expr} is a polynomial in any variable that occurs in it;
34056 if so, return that variable. (If @var{expr} is a multivariate polynomial,
34057 this chooses one variable arbitrarily.) If @var{pred} is specified, it should
34058 be a Lisp function which is called as @samp{(@var{pred} @var{subexpr})},
34059 and which should return true if @code{mpb-top-expr} (a global name for
34060 the original @var{expr}) is a suitable polynomial in @var{subexpr}.
34061 The default predicate uses @samp{(polynomial-p mpb-top-expr @var{subexpr})};
34062 you can use @var{pred} to specify additional conditions. Or, you could
34063 have @var{pred} build up a list of every suitable @var{subexpr} that
34064 is found.
34065 @end defun
34066
34067 @defun poly-simplify poly
34068 Simplify polynomial coefficient list @var{poly} by (destructively)
34069 clipping off trailing zeros.
34070 @end defun
34071
34072 @defun poly-mix a ac b bc
34073 Mix two polynomial lists @var{a} and @var{b} (in the form returned by
34074 @code{is-polynomial}) in a linear combination with coefficient expressions
34075 @var{ac} and @var{bc}. The result is a (not necessarily simplified)
34076 polynomial list representing @samp{@var{ac} @var{a} + @var{bc} @var{b}}.
34077 @end defun
34078
34079 @defun poly-mul a b
34080 Multiply two polynomial coefficient lists @var{a} and @var{b}. The
34081 result will be in simplified form if the inputs were simplified.
34082 @end defun
34083
34084 @defun build-polynomial-expr poly var
34085 Construct a Calc formula which represents the polynomial coefficient
34086 list @var{poly} applied to variable @var{var}. The @kbd{a c}
34087 (@code{calc-collect}) command uses @code{is-polynomial} to turn an
34088 expression into a coefficient list, then @code{build-polynomial-expr}
34089 to turn the list back into an expression in regular form.
34090 @end defun
34091
34092 @defun check-unit-name var
34093 Check if @var{var} is a variable which can be interpreted as a unit
34094 name. If so, return the units table entry for that unit. This
34095 will be a list whose first element is the unit name (not counting
34096 prefix characters) as a symbol and whose second element is the
34097 Calc expression which defines the unit. (Refer to the Calc sources
34098 for details on the remaining elements of this list.) If @var{var}
34099 is not a variable or is not a unit name, return @code{nil}.
34100 @end defun
34101
34102 @defun units-in-expr-p expr sub-exprs
34103 Return true if @var{expr} contains any variables which can be
34104 interpreted as units. If @var{sub-exprs} is @code{t}, the entire
34105 expression is searched. If @var{sub-exprs} is @code{nil}, this
34106 checks whether @var{expr} is directly a units expression.
34107 @end defun
34108
34109 @defun single-units-in-expr-p expr
34110 Check whether @var{expr} contains exactly one units variable. If so,
34111 return the units table entry for the variable. If @var{expr} does
34112 not contain any units, return @code{nil}. If @var{expr} contains
34113 two or more units, return the symbol @code{wrong}.
34114 @end defun
34115
34116 @defun to-standard-units expr which
34117 Convert units expression @var{expr} to base units. If @var{which}
34118 is @code{nil}, use Calc's native base units. Otherwise, @var{which}
34119 can specify a units system, which is a list of two-element lists,
34120 where the first element is a Calc base symbol name and the second
34121 is an expression to substitute for it.
34122 @end defun
34123
34124 @defun remove-units expr
34125 Return a copy of @var{expr} with all units variables replaced by ones.
34126 This expression is generally normalized before use.
34127 @end defun
34128
34129 @defun extract-units expr
34130 Return a copy of @var{expr} with everything but units variables replaced
34131 by ones.
34132 @end defun
34133
34134 @node Formatting Lisp Functions, Hooks, Symbolic Lisp Functions, Internals
34135 @subsubsection I/O and Formatting Functions
34136
34137 @noindent
34138 The functions described here are responsible for parsing and formatting
34139 Calc numbers and formulas.
34140
34141 @defun calc-eval str sep arg1 arg2 @dots{}
34142 This is the simplest interface to the Calculator from another Lisp program.
34143 @xref{Calling Calc from Your Programs}.
34144 @end defun
34145
34146 @defun read-number str
34147 If string @var{str} contains a valid Calc number, either integer,
34148 fraction, float, or HMS form, this function parses and returns that
34149 number. Otherwise, it returns @code{nil}.
34150 @end defun
34151
34152 @defun read-expr str
34153 Read an algebraic expression from string @var{str}. If @var{str} does
34154 not have the form of a valid expression, return a list of the form
34155 @samp{(error @var{pos} @var{msg})} where @var{pos} is an integer index
34156 into @var{str} of the general location of the error, and @var{msg} is
34157 a string describing the problem.
34158 @end defun
34159
34160 @defun read-exprs str
34161 Read a list of expressions separated by commas, and return it as a
34162 Lisp list. If an error occurs in any expressions, an error list as
34163 shown above is returned instead.
34164 @end defun
34165
34166 @defun calc-do-alg-entry initial prompt no-norm
34167 Read an algebraic formula or formulas using the minibuffer. All
34168 conventions of regular algebraic entry are observed. The return value
34169 is a list of Calc formulas; there will be more than one if the user
34170 entered a list of values separated by commas. The result is @code{nil}
34171 if the user presses Return with a blank line. If @var{initial} is
34172 given, it is a string which the minibuffer will initially contain.
34173 If @var{prompt} is given, it is the prompt string to use; the default
34174 is ``Algebraic:''. If @var{no-norm} is @code{t}, the formulas will
34175 be returned exactly as parsed; otherwise, they will be passed through
34176 @code{calc-normalize} first.
34177
34178 To support the use of @kbd{$} characters in the algebraic entry, use
34179 @code{let} to bind @code{calc-dollar-values} to a list of the values
34180 to be substituted for @kbd{$}, @kbd{$$}, and so on, and bind
34181 @code{calc-dollar-used} to 0. Upon return, @code{calc-dollar-used}
34182 will have been changed to the highest number of consecutive @kbd{$}s
34183 that actually appeared in the input.
34184 @end defun
34185
34186 @defun format-number a
34187 Convert the real or complex number or HMS form @var{a} to string form.
34188 @end defun
34189
34190 @defun format-flat-expr a prec
34191 Convert the arbitrary Calc number or formula @var{a} to string form,
34192 in the style used by the trail buffer and the @code{calc-edit} command.
34193 This is a simple format designed
34194 mostly to guarantee the string is of a form that can be re-parsed by
34195 @code{read-expr}. Most formatting modes, such as digit grouping,
34196 complex number format, and point character, are ignored to ensure the
34197 result will be re-readable. The @var{prec} parameter is normally 0; if
34198 you pass a large integer like 1000 instead, the expression will be
34199 surrounded by parentheses unless it is a plain number or variable name.
34200 @end defun
34201
34202 @defun format-nice-expr a width
34203 This is like @code{format-flat-expr} (with @var{prec} equal to 0),
34204 except that newlines will be inserted to keep lines down to the
34205 specified @var{width}, and vectors that look like matrices or rewrite
34206 rules are written in a pseudo-matrix format. The @code{calc-edit}
34207 command uses this when only one stack entry is being edited.
34208 @end defun
34209
34210 @defun format-value a width
34211 Convert the Calc number or formula @var{a} to string form, using the
34212 format seen in the stack buffer. Beware the string returned may
34213 not be re-readable by @code{read-expr}, for example, because of digit
34214 grouping. Multi-line objects like matrices produce strings that
34215 contain newline characters to separate the lines. The @var{w}
34216 parameter, if given, is the target window size for which to format
34217 the expressions. If @var{w} is omitted, the width of the Calculator
34218 window is used.
34219 @end defun
34220
34221 @defun compose-expr a prec
34222 Format the Calc number or formula @var{a} according to the current
34223 language mode, returning a ``composition.'' To learn about the
34224 structure of compositions, see the comments in the Calc source code.
34225 You can specify the format of a given type of function call by putting
34226 a @code{math-compose-@var{lang}} property on the function's symbol,
34227 whose value is a Lisp function that takes @var{a} and @var{prec} as
34228 arguments and returns a composition. Here @var{lang} is a language
34229 mode name, one of @code{normal}, @code{big}, @code{c}, @code{pascal},
34230 @code{fortran}, @code{tex}, @code{eqn}, @code{math}, or @code{maple}.
34231 In Big mode, Calc actually tries @code{math-compose-big} first, then
34232 tries @code{math-compose-normal}. If this property does not exist,
34233 or if the function returns @code{nil}, the function is written in the
34234 normal function-call notation for that language.
34235 @end defun
34236
34237 @defun composition-to-string c w
34238 Convert a composition structure returned by @code{compose-expr} into
34239 a string. Multi-line compositions convert to strings containing
34240 newline characters. The target window size is given by @var{w}.
34241 The @code{format-value} function basically calls @code{compose-expr}
34242 followed by @code{composition-to-string}.
34243 @end defun
34244
34245 @defun comp-width c
34246 Compute the width in characters of composition @var{c}.
34247 @end defun
34248
34249 @defun comp-height c
34250 Compute the height in lines of composition @var{c}.
34251 @end defun
34252
34253 @defun comp-ascent c
34254 Compute the portion of the height of composition @var{c} which is on or
34255 above the baseline. For a one-line composition, this will be one.
34256 @end defun
34257
34258 @defun comp-descent c
34259 Compute the portion of the height of composition @var{c} which is below
34260 the baseline. For a one-line composition, this will be zero.
34261 @end defun
34262
34263 @defun comp-first-char c
34264 If composition @var{c} is a ``flat'' composition, return the first
34265 (leftmost) character of the composition as an integer. Otherwise,
34266 return @code{nil}.
34267 @end defun
34268
34269 @defun comp-last-char c
34270 If composition @var{c} is a ``flat'' composition, return the last
34271 (rightmost) character, otherwise return @code{nil}.
34272 @end defun
34273
34274 @comment @node Lisp Variables, Hooks, Formatting Lisp Functions, Internals
34275 @comment @subsubsection Lisp Variables
34276 @comment
34277 @comment @noindent
34278 @comment (This section is currently unfinished.)
34279
34280 @node Hooks, , Formatting Lisp Functions, Internals
34281 @subsubsection Hooks
34282
34283 @noindent
34284 Hooks are variables which contain Lisp functions (or lists of functions)
34285 which are called at various times. Calc defines a number of hooks
34286 that help you to customize it in various ways. Calc uses the Lisp
34287 function @code{run-hooks} to invoke the hooks shown below. Several
34288 other customization-related variables are also described here.
34289
34290 @defvar calc-load-hook
34291 This hook is called at the end of @file{calc.el}, after the file has
34292 been loaded, before any functions in it have been called, but after
34293 @code{calc-mode-map} and similar variables have been set up.
34294 @end defvar
34295
34296 @defvar calc-ext-load-hook
34297 This hook is called at the end of @file{calc-ext.el}.
34298 @end defvar
34299
34300 @defvar calc-start-hook
34301 This hook is called as the last step in a @kbd{M-x calc} command.
34302 At this point, the Calc buffer has been created and initialized if
34303 necessary, the Calc window and trail window have been created,
34304 and the ``Welcome to Calc'' message has been displayed.
34305 @end defvar
34306
34307 @defvar calc-mode-hook
34308 This hook is called when the Calc buffer is being created. Usually
34309 this will only happen once per Emacs session. The hook is called
34310 after Emacs has switched to the new buffer, the mode-settings file
34311 has been read if necessary, and all other buffer-local variables
34312 have been set up. After this hook returns, Calc will perform a
34313 @code{calc-refresh} operation, set up the mode line display, then
34314 evaluate any deferred @code{calc-define} properties that have not
34315 been evaluated yet.
34316 @end defvar
34317
34318 @defvar calc-trail-mode-hook
34319 This hook is called when the Calc Trail buffer is being created.
34320 It is called as the very last step of setting up the Trail buffer.
34321 Like @code{calc-mode-hook}, this will normally happen only once
34322 per Emacs session.
34323 @end defvar
34324
34325 @defvar calc-end-hook
34326 This hook is called by @code{calc-quit}, generally because the user
34327 presses @kbd{q} or @kbd{M-# c} while in Calc. The Calc buffer will
34328 be the current buffer. The hook is called as the very first
34329 step, before the Calc window is destroyed.
34330 @end defvar
34331
34332 @defvar calc-window-hook
34333 If this hook exists, it is called to create the Calc window.
34334 Upon return, this new Calc window should be the current window.
34335 (The Calc buffer will already be the current buffer when the
34336 hook is called.) If the hook is not defined, Calc will
34337 generally use @code{split-window}, @code{set-window-buffer},
34338 and @code{select-window} to create the Calc window.
34339 @end defvar
34340
34341 @defvar calc-trail-window-hook
34342 If this hook exists, it is called to create the Calc Trail window.
34343 The variable @code{calc-trail-buffer} will contain the buffer
34344 which the window should use. Unlike @code{calc-window-hook},
34345 this hook must @emph{not} switch into the new window.
34346 @end defvar
34347
34348 @defvar calc-edit-mode-hook
34349 This hook is called by @code{calc-edit} (and the other ``edit''
34350 commands) when the temporary editing buffer is being created.
34351 The buffer will have been selected and set up to be in
34352 @code{calc-edit-mode}, but will not yet have been filled with
34353 text. (In fact it may still have leftover text from a previous
34354 @code{calc-edit} command.)
34355 @end defvar
34356
34357 @defvar calc-mode-save-hook
34358 This hook is called by the @code{calc-save-modes} command,
34359 after Calc's own mode features have been inserted into the
34360 @file{.emacs} buffer and just before the ``End of mode settings''
34361 message is inserted.
34362 @end defvar
34363
34364 @defvar calc-reset-hook
34365 This hook is called after @kbd{M-# 0} (@code{calc-reset}) has
34366 reset all modes. The Calc buffer will be the current buffer.
34367 @end defvar
34368
34369 @defvar calc-other-modes
34370 This variable contains a list of strings. The strings are
34371 concatenated at the end of the modes portion of the Calc
34372 mode line (after standard modes such as ``Deg'', ``Inv'' and
34373 ``Hyp''). Each string should be a short, single word followed
34374 by a space. The variable is @code{nil} by default.
34375 @end defvar
34376
34377 @defvar calc-mode-map
34378 This is the keymap that is used by Calc mode. The best time
34379 to adjust it is probably in a @code{calc-mode-hook}. If the
34380 Calc extensions package (@file{calc-ext.el}) has not yet been
34381 loaded, many of these keys will be bound to @code{calc-missing-key},
34382 which is a command that loads the extensions package and
34383 ``retypes'' the key. If your @code{calc-mode-hook} rebinds
34384 one of these keys, it will probably be overridden when the
34385 extensions are loaded.
34386 @end defvar
34387
34388 @defvar calc-digit-map
34389 This is the keymap that is used during numeric entry. Numeric
34390 entry uses the minibuffer, but this map binds every non-numeric
34391 key to @code{calcDigit-nondigit} which generally calls
34392 @code{exit-minibuffer} and ``retypes'' the key.
34393 @end defvar
34394
34395 @defvar calc-alg-ent-map
34396 This is the keymap that is used during algebraic entry. This is
34397 mostly a copy of @code{minibuffer-local-map}.
34398 @end defvar
34399
34400 @defvar calc-store-var-map
34401 This is the keymap that is used during entry of variable names for
34402 commands like @code{calc-store} and @code{calc-recall}. This is
34403 mostly a copy of @code{minibuffer-local-completion-map}.
34404 @end defvar
34405
34406 @defvar calc-edit-mode-map
34407 This is the (sparse) keymap used by @code{calc-edit} and other
34408 temporary editing commands. It binds @key{RET}, @key{LFD},
34409 and @kbd{C-c C-c} to @code{calc-edit-finish}.
34410 @end defvar
34411
34412 @defvar calc-mode-var-list
34413 This is a list of variables which are saved by @code{calc-save-modes}.
34414 Each entry is a list of two items, the variable (as a Lisp symbol)
34415 and its default value. When modes are being saved, each variable
34416 is compared with its default value (using @code{equal}) and any
34417 non-default variables are written out.
34418 @end defvar
34419
34420 @defvar calc-local-var-list
34421 This is a list of variables which should be buffer-local to the
34422 Calc buffer. Each entry is a variable name (as a Lisp symbol).
34423 These variables also have their default values manipulated by
34424 the @code{calc} and @code{calc-quit} commands; @pxref{Multiple Calculators}.
34425 Since @code{calc-mode-hook} is called after this list has been
34426 used the first time, your hook should add a variable to the
34427 list and also call @code{make-local-variable} itself.
34428 @end defvar
34429
34430 @node Installation, Reporting Bugs, Programming, Top
34431 @appendix Installation
34432
34433 @noindent
34434 As of Calc 2.02g, Calc is integrated with GNU Emacs, and thus requires
34435 no separate installation of its Lisp files and this manual.
34436
34437 @appendixsec The GNUPLOT Program
34438
34439 @noindent
34440 Calc's graphing commands use the GNUPLOT program. If you have GNUPLOT
34441 but you must type some command other than @file{gnuplot} to get it,
34442 you should add a command to set the Lisp variable @code{calc-gnuplot-name}
34443 to the appropriate file name. You may also need to change the variables
34444 @code{calc-gnuplot-plot-command} and @code{calc-gnuplot-print-command} in
34445 order to get correct displays and hardcopies, respectively, of your
34446 plots.
34447
34448 @ifinfo
34449 @example
34450
34451 @end example
34452 @end ifinfo
34453 @appendixsec Printed Documentation
34454
34455 @noindent
34456 Because the Calc manual is so large, you should only make a printed
34457 copy if you really need it. To print the manual, you will need the
34458 @TeX{} typesetting program (this is a free program by Donald Knuth
34459 at Stanford University) as well as the @file{texindex} program and
34460 @file{texinfo.tex} file, both of which can be obtained from the FSF
34461 as part of the @code{texinfo} package.
34462
34463 To print the Calc manual in one huge 470 page tome, you will need the
34464 source code to this manual, @file{calc.texi}, available as part of the
34465 Emacs source. Once you have this file, type @kbd{texi2dvi calc.texi}.
34466 Alternatively, change to the @file{man} subdirectory of the Emacs
34467 source distribution, and type @kbd{make calc.dvi}. (Don't worry if you
34468 get some ``overfull box'' warnings while @TeX{} runs.)
34469
34470 The result will be a device-independent output file called
34471 @file{calc.dvi}, which you must print in whatever way is right
34472 for your system. On many systems, the command is
34473
34474 @example
34475 lpr -d calc.dvi
34476 @end example
34477
34478 @noindent
34479 or
34480
34481 @example
34482 dvips calc.dvi
34483 @end example
34484
34485 @c the bumpoddpages macro was deleted
34486 @ignore
34487 @cindex Marginal notes, adjusting
34488 Marginal notes for each function and key sequence normally alternate
34489 between the left and right sides of the page, which is correct if the
34490 manual is going to be bound as double-sided pages. Near the top of
34491 the file @file{calc.texi} you will find alternate definitions of
34492 the @code{\bumpoddpages} macro that put the marginal notes always on
34493 the same side, best if you plan to be binding single-sided pages.
34494 @end ignore
34495
34496 @appendixsec Settings File
34497
34498 @noindent
34499 @vindex calc-settings-file
34500 Another variable you might want to set is @code{calc-settings-file},
34501 which holds the file name in which commands like @kbd{m m} and @kbd{Z P}
34502 store ``permanent'' definitions. The default value for this variable
34503 is @code{"~/.emacs"}. If @code{calc-settings-file} does not contain
34504 @code{".emacs"} as a substring, and if the variable
34505 @code{calc-loaded-settings-file} is @code{nil}, then Calc will
34506 automatically load your settings file (if it exists) the first time
34507 Calc is invoked.
34508
34509 @ifinfo
34510 @example
34511
34512 @end example
34513 @end ifinfo
34514 @appendixsec Testing the Installation
34515
34516 @noindent
34517 To test your installation of Calc, start a new Emacs and type @kbd{M-# c}
34518 to make sure the autoloads and key bindings work. Type @kbd{M-# i}
34519 to make sure Calc can find its Info documentation. Press @kbd{q} to
34520 exit the Info system and @kbd{M-# c} to re-enter the Calculator.
34521 Type @kbd{20 S} to compute the sine of 20 degrees; this will test the
34522 autoloading of the extensions modules. The result should be
34523 0.342020143326. Finally, press @kbd{M-# c} again to make sure the
34524 Calculator can exit.
34525
34526 You may also wish to test the GNUPLOT interface; to plot a sine wave,
34527 type @kbd{' [0 ..@: 360], sin(x) @key{RET} g f}. Type @kbd{g q} when you
34528 are done viewing the plot.
34529
34530 Calc is now ready to use. If you wish to go through the Calc Tutorial,
34531 press @kbd{M-# t} to begin.
34532 @example
34533
34534 @end example
34535 @node Reporting Bugs, Summary, Installation, Top
34536 @appendix Reporting Bugs
34537
34538 @noindent
34539 If you find a bug in Calc, send e-mail to Jay Belanger,
34540
34541 @example
34542 belanger@@truman.edu
34543 @end example
34544
34545 @noindent
34546 (In the following text, ``I'' refers to the original Calc author, Dave
34547 Gillespie).
34548
34549 While I cannot guarantee that I will have time to work on your bug,
34550 I do try to fix bugs quickly whenever I can.
34551
34552 The latest version of Calc is available from Savannah, in the Emacs
34553 CVS tree. See @uref{http://savannah.gnu.org/projects/emacs}.
34554
34555 There is an automatic command @kbd{M-x report-calc-bug} which helps
34556 you to report bugs. This command prompts you for a brief subject
34557 line, then leaves you in a mail editing buffer. Type @kbd{C-c C-c} to
34558 send your mail. Make sure your subject line indicates that you are
34559 reporting a Calc bug; this command sends mail to the maintainer's
34560 regular mailbox.
34561
34562 If you have suggestions for additional features for Calc, I would
34563 love to hear them. Some have dared to suggest that Calc is already
34564 top-heavy with features; I really don't see what they're talking
34565 about, so, if you have ideas, send them right in. (I may even have
34566 time to implement them!)
34567
34568 At the front of the source file, @file{calc.el}, is a list of ideas for
34569 future work which I have not had time to do. If any enthusiastic souls
34570 wish to take it upon themselves to work on these, I would be delighted.
34571 Please let me know if you plan to contribute to Calc so I can coordinate
34572 your efforts with mine and those of others. I will do my best to help
34573 you in whatever way I can.
34574
34575 @c [summary]
34576 @node Summary, Key Index, Reporting Bugs, Top
34577 @appendix Calc Summary
34578
34579 @noindent
34580 This section includes a complete list of Calc 2.02 keystroke commands.
34581 Each line lists the stack entries used by the command (top-of-stack
34582 last), the keystrokes themselves, the prompts asked by the command,
34583 and the result of the command (also with top-of-stack last).
34584 The result is expressed using the equivalent algebraic function.
34585 Commands which put no results on the stack show the full @kbd{M-x}
34586 command name in that position. Numbers preceding the result or
34587 command name refer to notes at the end.
34588
34589 Algebraic functions and @kbd{M-x} commands that don't have corresponding
34590 keystrokes are not listed in this summary.
34591 @xref{Command Index}. @xref{Function Index}.
34592
34593 @iftex
34594 @begingroup
34595 @tex
34596 \vskip-2\baselineskip \null
34597 \gdef\sumrow#1{\sumrowx#1\relax}%
34598 \gdef\sumrowx#1\:#2\:#3\:#4\:#5\:#6\relax{%
34599 \leavevmode%
34600 {\smallfonts
34601 \hbox to5em{\sl\hss#1}%
34602 \hbox to5em{\tt#2\hss}%
34603 \hbox to4em{\sl#3\hss}%
34604 \hbox to5em{\rm\hss#4}%
34605 \thinspace%
34606 {\tt#5}%
34607 {\sl#6}%
34608 }}%
34609 \gdef\sumlpar{{\rm(}}%
34610 \gdef\sumrpar{{\rm)}}%
34611 \gdef\sumcomma{{\rm,\thinspace}}%
34612 \gdef\sumexcl{{\rm!}}%
34613 \gdef\sumbreak{\vskip-2.5\baselineskip\goodbreak}%
34614 \gdef\minus#1{{\tt-}}%
34615 @end tex
34616 @let@:=@sumsep
34617 @let@r=@sumrow
34618 @catcode`@(=@active @let(=@sumlpar
34619 @catcode`@)=@active @let)=@sumrpar
34620 @catcode`@,=@active @let,=@sumcomma
34621 @catcode`@!=@active @let!=@sumexcl
34622 @end iftex
34623 @format
34624 @iftex
34625 @advance@baselineskip-2.5pt
34626 @let@c@sumbreak
34627 @end iftex
34628 @r{ @: M-# a @: @: 33 @:calc-embedded-activate@:}
34629 @r{ @: M-# b @: @: @:calc-big-or-small@:}
34630 @r{ @: M-# c @: @: @:calc@:}
34631 @r{ @: M-# d @: @: @:calc-embedded-duplicate@:}
34632 @r{ @: M-# e @: @: 34 @:calc-embedded@:}
34633 @r{ @: M-# f @:formula @: @:calc-embedded-new-formula@:}
34634 @r{ @: M-# g @: @: 35 @:calc-grab-region@:}
34635 @r{ @: M-# i @: @: @:calc-info@:}
34636 @r{ @: M-# j @: @: @:calc-embedded-select@:}
34637 @r{ @: M-# k @: @: @:calc-keypad@:}
34638 @r{ @: M-# l @: @: @:calc-load-everything@:}
34639 @r{ @: M-# m @: @: @:read-kbd-macro@:}
34640 @r{ @: M-# n @: @: 4 @:calc-embedded-next@:}
34641 @r{ @: M-# o @: @: @:calc-other-window@:}
34642 @r{ @: M-# p @: @: 4 @:calc-embedded-previous@:}
34643 @r{ @: M-# q @:formula @: @:quick-calc@:}
34644 @r{ @: M-# r @: @: 36 @:calc-grab-rectangle@:}
34645 @r{ @: M-# s @: @: @:calc-info-summary@:}
34646 @r{ @: M-# t @: @: @:calc-tutorial@:}
34647 @r{ @: M-# u @: @: @:calc-embedded-update@:}
34648 @r{ @: M-# w @: @: @:calc-embedded-word@:}
34649 @r{ @: M-# x @: @: @:calc-quit@:}
34650 @r{ @: M-# y @: @:1,28,49 @:calc-copy-to-buffer@:}
34651 @r{ @: M-# z @: @: @:calc-user-invocation@:}
34652 @r{ @: M-# : @: @: 36 @:calc-grab-sum-down@:}
34653 @r{ @: M-# _ @: @: 36 @:calc-grab-sum-across@:}
34654 @r{ @: M-# ` @:editing @: 30 @:calc-embedded-edit@:}
34655 @r{ @: M-# 0 @:(zero) @: @:calc-reset@:}
34656
34657 @c
34658 @r{ @: 0-9 @:number @: @:@:number}
34659 @r{ @: . @:number @: @:@:0.number}
34660 @r{ @: _ @:number @: @:-@:number}
34661 @r{ @: e @:number @: @:@:1e number}
34662 @r{ @: # @:number @: @:@:current-radix@t{#}number}
34663 @r{ @: P @:(in number) @: @:+/-@:}
34664 @r{ @: M @:(in number) @: @:mod@:}
34665 @r{ @: @@ ' " @: (in number)@: @:@:HMS form}
34666 @r{ @: h m s @: (in number)@: @:@:HMS form}
34667
34668 @c
34669 @r{ @: ' @:formula @: 37,46 @:@:formula}
34670 @r{ @: $ @:formula @: 37,46 @:$@:formula}
34671 @r{ @: " @:string @: 37,46 @:@:string}
34672
34673 @c
34674 @r{ a b@: + @: @: 2 @:add@:(a,b) a+b}
34675 @r{ a b@: - @: @: 2 @:sub@:(a,b) a@minus{}b}
34676 @r{ a b@: * @: @: 2 @:mul@:(a,b) a b, a*b}
34677 @r{ a b@: / @: @: 2 @:div@:(a,b) a/b}
34678 @r{ a b@: ^ @: @: 2 @:pow@:(a,b) a^b}
34679 @r{ a b@: I ^ @: @: 2 @:nroot@:(a,b) a^(1/b)}
34680 @r{ a b@: % @: @: 2 @:mod@:(a,b) a%b}
34681 @r{ a b@: \ @: @: 2 @:idiv@:(a,b) a\b}
34682 @r{ a b@: : @: @: 2 @:fdiv@:(a,b)}
34683 @r{ a b@: | @: @: 2 @:vconcat@:(a,b) a|b}
34684 @r{ a b@: I | @: @: @:vconcat@:(b,a) b|a}
34685 @r{ a b@: H | @: @: 2 @:append@:(a,b)}
34686 @r{ a b@: I H | @: @: @:append@:(b,a)}
34687 @r{ a@: & @: @: 1 @:inv@:(a) 1/a}
34688 @r{ a@: ! @: @: 1 @:fact@:(a) a!}
34689 @r{ a@: = @: @: 1 @:evalv@:(a)}
34690 @r{ a@: M-% @: @: @:percent@:(a) a%}
34691
34692 @c
34693 @r{ ... a@: @key{RET} @: @: 1 @:@:... a a}
34694 @r{ ... a@: @key{SPC} @: @: 1 @:@:... a a}
34695 @r{... a b@: @key{TAB} @: @: 3 @:@:... b a}
34696 @r{. a b c@: M-@key{TAB} @: @: 3 @:@:... b c a}
34697 @r{... a b@: @key{LFD} @: @: 1 @:@:... a b a}
34698 @r{ ... a@: @key{DEL} @: @: 1 @:@:...}
34699 @r{... a b@: M-@key{DEL} @: @: 1 @:@:... b}
34700 @r{ @: M-@key{RET} @: @: 4 @:calc-last-args@:}
34701 @r{ a@: ` @:editing @: 1,30 @:calc-edit@:}
34702
34703 @c
34704 @r{ ... a@: C-d @: @: 1 @:@:...}
34705 @r{ @: C-k @: @: 27 @:calc-kill@:}
34706 @r{ @: C-w @: @: 27 @:calc-kill-region@:}
34707 @r{ @: C-y @: @: @:calc-yank@:}
34708 @r{ @: C-_ @: @: 4 @:calc-undo@:}
34709 @r{ @: M-k @: @: 27 @:calc-copy-as-kill@:}
34710 @r{ @: M-w @: @: 27 @:calc-copy-region-as-kill@:}
34711
34712 @c
34713 @r{ @: [ @: @: @:@:[...}
34714 @r{[.. a b@: ] @: @: @:@:[a,b]}
34715 @r{ @: ( @: @: @:@:(...}
34716 @r{(.. a b@: ) @: @: @:@:(a,b)}
34717 @r{ @: , @: @: @:@:vector or rect complex}
34718 @r{ @: ; @: @: @:@:matrix or polar complex}
34719 @r{ @: .. @: @: @:@:interval}
34720
34721 @c
34722 @r{ @: ~ @: @: @:calc-num-prefix@:}
34723 @r{ @: < @: @: 4 @:calc-scroll-left@:}
34724 @r{ @: > @: @: 4 @:calc-scroll-right@:}
34725 @r{ @: @{ @: @: 4 @:calc-scroll-down@:}
34726 @r{ @: @} @: @: 4 @:calc-scroll-up@:}
34727 @r{ @: ? @: @: @:calc-help@:}
34728
34729 @c
34730 @r{ a@: n @: @: 1 @:neg@:(a) @minus{}a}
34731 @r{ @: o @: @: 4 @:calc-realign@:}
34732 @r{ @: p @:precision @: 31 @:calc-precision@:}
34733 @r{ @: q @: @: @:calc-quit@:}
34734 @r{ @: w @: @: @:calc-why@:}
34735 @r{ @: x @:command @: @:M-x calc-@:command}
34736 @r{ a@: y @: @:1,28,49 @:calc-copy-to-buffer@:}
34737
34738 @c
34739 @r{ a@: A @: @: 1 @:abs@:(a)}
34740 @r{ a b@: B @: @: 2 @:log@:(a,b)}
34741 @r{ a b@: I B @: @: 2 @:alog@:(a,b) b^a}
34742 @r{ a@: C @: @: 1 @:cos@:(a)}
34743 @r{ a@: I C @: @: 1 @:arccos@:(a)}
34744 @r{ a@: H C @: @: 1 @:cosh@:(a)}
34745 @r{ a@: I H C @: @: 1 @:arccosh@:(a)}
34746 @r{ @: D @: @: 4 @:calc-redo@:}
34747 @r{ a@: E @: @: 1 @:exp@:(a)}
34748 @r{ a@: H E @: @: 1 @:exp10@:(a) 10.^a}
34749 @r{ a@: F @: @: 1,11 @:floor@:(a,d)}
34750 @r{ a@: I F @: @: 1,11 @:ceil@:(a,d)}
34751 @r{ a@: H F @: @: 1,11 @:ffloor@:(a,d)}
34752 @r{ a@: I H F @: @: 1,11 @:fceil@:(a,d)}
34753 @r{ a@: G @: @: 1 @:arg@:(a)}
34754 @r{ @: H @:command @: 32 @:@:Hyperbolic}
34755 @r{ @: I @:command @: 32 @:@:Inverse}
34756 @r{ a@: J @: @: 1 @:conj@:(a)}
34757 @r{ @: K @:command @: 32 @:@:Keep-args}
34758 @r{ a@: L @: @: 1 @:ln@:(a)}
34759 @r{ a@: H L @: @: 1 @:log10@:(a)}
34760 @r{ @: M @: @: @:calc-more-recursion-depth@:}
34761 @r{ @: I M @: @: @:calc-less-recursion-depth@:}
34762 @r{ a@: N @: @: 5 @:evalvn@:(a)}
34763 @r{ @: P @: @: @:@:pi}
34764 @r{ @: I P @: @: @:@:gamma}
34765 @r{ @: H P @: @: @:@:e}
34766 @r{ @: I H P @: @: @:@:phi}
34767 @r{ a@: Q @: @: 1 @:sqrt@:(a)}
34768 @r{ a@: I Q @: @: 1 @:sqr@:(a) a^2}
34769 @r{ a@: R @: @: 1,11 @:round@:(a,d)}
34770 @r{ a@: I R @: @: 1,11 @:trunc@:(a,d)}
34771 @r{ a@: H R @: @: 1,11 @:fround@:(a,d)}
34772 @r{ a@: I H R @: @: 1,11 @:ftrunc@:(a,d)}
34773 @r{ a@: S @: @: 1 @:sin@:(a)}
34774 @r{ a@: I S @: @: 1 @:arcsin@:(a)}
34775 @r{ a@: H S @: @: 1 @:sinh@:(a)}
34776 @r{ a@: I H S @: @: 1 @:arcsinh@:(a)}
34777 @r{ a@: T @: @: 1 @:tan@:(a)}
34778 @r{ a@: I T @: @: 1 @:arctan@:(a)}
34779 @r{ a@: H T @: @: 1 @:tanh@:(a)}
34780 @r{ a@: I H T @: @: 1 @:arctanh@:(a)}
34781 @r{ @: U @: @: 4 @:calc-undo@:}
34782 @r{ @: X @: @: 4 @:calc-call-last-kbd-macro@:}
34783
34784 @c
34785 @r{ a b@: a = @: @: 2 @:eq@:(a,b) a=b}
34786 @r{ a b@: a # @: @: 2 @:neq@:(a,b) a!=b}
34787 @r{ a b@: a < @: @: 2 @:lt@:(a,b) a<b}
34788 @r{ a b@: a > @: @: 2 @:gt@:(a,b) a>b}
34789 @r{ a b@: a [ @: @: 2 @:leq@:(a,b) a<=b}
34790 @r{ a b@: a ] @: @: 2 @:geq@:(a,b) a>=b}
34791 @r{ a b@: a @{ @: @: 2 @:in@:(a,b)}
34792 @r{ a b@: a & @: @: 2,45 @:land@:(a,b) a&&b}
34793 @r{ a b@: a | @: @: 2,45 @:lor@:(a,b) a||b}
34794 @r{ a@: a ! @: @: 1,45 @:lnot@:(a) !a}
34795 @r{ a b c@: a : @: @: 45 @:if@:(a,b,c) a?b:c}
34796 @r{ a@: a . @: @: 1 @:rmeq@:(a)}
34797 @r{ a@: a " @: @: 7,8 @:calc-expand-formula@:}
34798
34799 @c
34800 @r{ a@: a + @:i, l, h @: 6,38 @:sum@:(a,i,l,h)}
34801 @r{ a@: a - @:i, l, h @: 6,38 @:asum@:(a,i,l,h)}
34802 @r{ a@: a * @:i, l, h @: 6,38 @:prod@:(a,i,l,h)}
34803 @r{ a b@: a _ @: @: 2 @:subscr@:(a,b) a_b}
34804
34805 @c
34806 @r{ a b@: a \ @: @: 2 @:pdiv@:(a,b)}
34807 @r{ a b@: a % @: @: 2 @:prem@:(a,b)}
34808 @r{ a b@: a / @: @: 2 @:pdivrem@:(a,b) [q,r]}
34809 @r{ a b@: H a / @: @: 2 @:pdivide@:(a,b) q+r/b}
34810
34811 @c
34812 @r{ a@: a a @: @: 1 @:apart@:(a)}
34813 @r{ a@: a b @:old, new @: 38 @:subst@:(a,old,new)}
34814 @r{ a@: a c @:v @: 38 @:collect@:(a,v)}
34815 @r{ a@: a d @:v @: 4,38 @:deriv@:(a,v)}
34816 @r{ a@: H a d @:v @: 4,38 @:tderiv@:(a,v)}
34817 @r{ a@: a e @: @: @:esimplify@:(a)}
34818 @r{ a@: a f @: @: 1 @:factor@:(a)}
34819 @r{ a@: H a f @: @: 1 @:factors@:(a)}
34820 @r{ a b@: a g @: @: 2 @:pgcd@:(a,b)}
34821 @r{ a@: a i @:v @: 38 @:integ@:(a,v)}
34822 @r{ a@: a m @:pats @: 38 @:match@:(a,pats)}
34823 @r{ a@: I a m @:pats @: 38 @:matchnot@:(a,pats)}
34824 @r{ data x@: a p @: @: 28 @:polint@:(data,x)}
34825 @r{ data x@: H a p @: @: 28 @:ratint@:(data,x)}
34826 @r{ a@: a n @: @: 1 @:nrat@:(a)}
34827 @r{ a@: a r @:rules @:4,8,38 @:rewrite@:(a,rules,n)}
34828 @r{ a@: a s @: @: @:simplify@:(a)}
34829 @r{ a@: a t @:v, n @: 31,39 @:taylor@:(a,v,n)}
34830 @r{ a@: a v @: @: 7,8 @:calc-alg-evaluate@:}
34831 @r{ a@: a x @: @: 4,8 @:expand@:(a)}
34832
34833 @c
34834 @r{ data@: a F @:model, vars @: 48 @:fit@:(m,iv,pv,data)}
34835 @r{ data@: I a F @:model, vars @: 48 @:xfit@:(m,iv,pv,data)}
34836 @r{ data@: H a F @:model, vars @: 48 @:efit@:(m,iv,pv,data)}
34837 @r{ a@: a I @:v, l, h @: 38 @:ninteg@:(a,v,l,h)}
34838 @r{ a b@: a M @:op @: 22 @:mapeq@:(op,a,b)}
34839 @r{ a b@: I a M @:op @: 22 @:mapeqr@:(op,a,b)}
34840 @r{ a b@: H a M @:op @: 22 @:mapeqp@:(op,a,b)}
34841 @r{ a g@: a N @:v @: 38 @:minimize@:(a,v,g)}
34842 @r{ a g@: H a N @:v @: 38 @:wminimize@:(a,v,g)}
34843 @r{ a@: a P @:v @: 38 @:roots@:(a,v)}
34844 @r{ a g@: a R @:v @: 38 @:root@:(a,v,g)}
34845 @r{ a g@: H a R @:v @: 38 @:wroot@:(a,v,g)}
34846 @r{ a@: a S @:v @: 38 @:solve@:(a,v)}
34847 @r{ a@: I a S @:v @: 38 @:finv@:(a,v)}
34848 @r{ a@: H a S @:v @: 38 @:fsolve@:(a,v)}
34849 @r{ a@: I H a S @:v @: 38 @:ffinv@:(a,v)}
34850 @r{ a@: a T @:i, l, h @: 6,38 @:table@:(a,i,l,h)}
34851 @r{ a g@: a X @:v @: 38 @:maximize@:(a,v,g)}
34852 @r{ a g@: H a X @:v @: 38 @:wmaximize@:(a,v,g)}
34853
34854 @c
34855 @r{ a b@: b a @: @: 9 @:and@:(a,b,w)}
34856 @r{ a@: b c @: @: 9 @:clip@:(a,w)}
34857 @r{ a b@: b d @: @: 9 @:diff@:(a,b,w)}
34858 @r{ a@: b l @: @: 10 @:lsh@:(a,n,w)}
34859 @r{ a n@: H b l @: @: 9 @:lsh@:(a,n,w)}
34860 @r{ a@: b n @: @: 9 @:not@:(a,w)}
34861 @r{ a b@: b o @: @: 9 @:or@:(a,b,w)}
34862 @r{ v@: b p @: @: 1 @:vpack@:(v)}
34863 @r{ a@: b r @: @: 10 @:rsh@:(a,n,w)}
34864 @r{ a n@: H b r @: @: 9 @:rsh@:(a,n,w)}
34865 @r{ a@: b t @: @: 10 @:rot@:(a,n,w)}
34866 @r{ a n@: H b t @: @: 9 @:rot@:(a,n,w)}
34867 @r{ a@: b u @: @: 1 @:vunpack@:(a)}
34868 @r{ @: b w @:w @: 9,50 @:calc-word-size@:}
34869 @r{ a b@: b x @: @: 9 @:xor@:(a,b,w)}
34870
34871 @c
34872 @r{c s l p@: b D @: @: @:ddb@:(c,s,l,p)}
34873 @r{ r n p@: b F @: @: @:fv@:(r,n,p)}
34874 @r{ r n p@: I b F @: @: @:fvb@:(r,n,p)}
34875 @r{ r n p@: H b F @: @: @:fvl@:(r,n,p)}
34876 @r{ v@: b I @: @: 19 @:irr@:(v)}
34877 @r{ v@: I b I @: @: 19 @:irrb@:(v)}
34878 @r{ a@: b L @: @: 10 @:ash@:(a,n,w)}
34879 @r{ a n@: H b L @: @: 9 @:ash@:(a,n,w)}
34880 @r{ r n a@: b M @: @: @:pmt@:(r,n,a)}
34881 @r{ r n a@: I b M @: @: @:pmtb@:(r,n,a)}
34882 @r{ r n a@: H b M @: @: @:pmtl@:(r,n,a)}
34883 @r{ r v@: b N @: @: 19 @:npv@:(r,v)}
34884 @r{ r v@: I b N @: @: 19 @:npvb@:(r,v)}
34885 @r{ r n p@: b P @: @: @:pv@:(r,n,p)}
34886 @r{ r n p@: I b P @: @: @:pvb@:(r,n,p)}
34887 @r{ r n p@: H b P @: @: @:pvl@:(r,n,p)}
34888 @r{ a@: b R @: @: 10 @:rash@:(a,n,w)}
34889 @r{ a n@: H b R @: @: 9 @:rash@:(a,n,w)}
34890 @r{ c s l@: b S @: @: @:sln@:(c,s,l)}
34891 @r{ n p a@: b T @: @: @:rate@:(n,p,a)}
34892 @r{ n p a@: I b T @: @: @:rateb@:(n,p,a)}
34893 @r{ n p a@: H b T @: @: @:ratel@:(n,p,a)}
34894 @r{c s l p@: b Y @: @: @:syd@:(c,s,l,p)}
34895
34896 @r{ r p a@: b # @: @: @:nper@:(r,p,a)}
34897 @r{ r p a@: I b # @: @: @:nperb@:(r,p,a)}
34898 @r{ r p a@: H b # @: @: @:nperl@:(r,p,a)}
34899 @r{ a b@: b % @: @: @:relch@:(a,b)}
34900
34901 @c
34902 @r{ a@: c c @: @: 5 @:pclean@:(a,p)}
34903 @r{ a@: c 0-9 @: @: @:pclean@:(a,p)}
34904 @r{ a@: H c c @: @: 5 @:clean@:(a,p)}
34905 @r{ a@: H c 0-9 @: @: @:clean@:(a,p)}
34906 @r{ a@: c d @: @: 1 @:deg@:(a)}
34907 @r{ a@: c f @: @: 1 @:pfloat@:(a)}
34908 @r{ a@: H c f @: @: 1 @:float@:(a)}
34909 @r{ a@: c h @: @: 1 @:hms@:(a)}
34910 @r{ a@: c p @: @: @:polar@:(a)}
34911 @r{ a@: I c p @: @: @:rect@:(a)}
34912 @r{ a@: c r @: @: 1 @:rad@:(a)}
34913
34914 @c
34915 @r{ a@: c F @: @: 5 @:pfrac@:(a,p)}
34916 @r{ a@: H c F @: @: 5 @:frac@:(a,p)}
34917
34918 @c
34919 @r{ a@: c % @: @: @:percent@:(a*100)}
34920
34921 @c
34922 @r{ @: d . @:char @: 50 @:calc-point-char@:}
34923 @r{ @: d , @:char @: 50 @:calc-group-char@:}
34924 @r{ @: d < @: @: 13,50 @:calc-left-justify@:}
34925 @r{ @: d = @: @: 13,50 @:calc-center-justify@:}
34926 @r{ @: d > @: @: 13,50 @:calc-right-justify@:}
34927 @r{ @: d @{ @:label @: 50 @:calc-left-label@:}
34928 @r{ @: d @} @:label @: 50 @:calc-right-label@:}
34929 @r{ @: d [ @: @: 4 @:calc-truncate-up@:}
34930 @r{ @: d ] @: @: 4 @:calc-truncate-down@:}
34931 @r{ @: d " @: @: 12,50 @:calc-display-strings@:}
34932 @r{ @: d @key{SPC} @: @: @:calc-refresh@:}
34933 @r{ @: d @key{RET} @: @: 1 @:calc-refresh-top@:}
34934
34935 @c
34936 @r{ @: d 0 @: @: 50 @:calc-decimal-radix@:}
34937 @r{ @: d 2 @: @: 50 @:calc-binary-radix@:}
34938 @r{ @: d 6 @: @: 50 @:calc-hex-radix@:}
34939 @r{ @: d 8 @: @: 50 @:calc-octal-radix@:}
34940
34941 @c
34942 @r{ @: d b @: @:12,13,50 @:calc-line-breaking@:}
34943 @r{ @: d c @: @: 50 @:calc-complex-notation@:}
34944 @r{ @: d d @:format @: 50 @:calc-date-notation@:}
34945 @r{ @: d e @: @: 5,50 @:calc-eng-notation@:}
34946 @r{ @: d f @:num @: 31,50 @:calc-fix-notation@:}
34947 @r{ @: d g @: @:12,13,50 @:calc-group-digits@:}
34948 @r{ @: d h @:format @: 50 @:calc-hms-notation@:}
34949 @r{ @: d i @: @: 50 @:calc-i-notation@:}
34950 @r{ @: d j @: @: 50 @:calc-j-notation@:}
34951 @r{ @: d l @: @: 12,50 @:calc-line-numbering@:}
34952 @r{ @: d n @: @: 5,50 @:calc-normal-notation@:}
34953 @r{ @: d o @:format @: 50 @:calc-over-notation@:}
34954 @r{ @: d p @: @: 12,50 @:calc-show-plain@:}
34955 @r{ @: d r @:radix @: 31,50 @:calc-radix@:}
34956 @r{ @: d s @: @: 5,50 @:calc-sci-notation@:}
34957 @r{ @: d t @: @: 27 @:calc-truncate-stack@:}
34958 @r{ @: d w @: @: 12,13 @:calc-auto-why@:}
34959 @r{ @: d z @: @: 12,50 @:calc-leading-zeros@:}
34960
34961 @c
34962 @r{ @: d B @: @: 50 @:calc-big-language@:}
34963 @r{ @: d C @: @: 50 @:calc-c-language@:}
34964 @r{ @: d E @: @: 50 @:calc-eqn-language@:}
34965 @r{ @: d F @: @: 50 @:calc-fortran-language@:}
34966 @r{ @: d M @: @: 50 @:calc-mathematica-language@:}
34967 @r{ @: d N @: @: 50 @:calc-normal-language@:}
34968 @r{ @: d O @: @: 50 @:calc-flat-language@:}
34969 @r{ @: d P @: @: 50 @:calc-pascal-language@:}
34970 @r{ @: d T @: @: 50 @:calc-tex-language@:}
34971 @r{ @: d U @: @: 50 @:calc-unformatted-language@:}
34972 @r{ @: d W @: @: 50 @:calc-maple-language@:}
34973
34974 @c
34975 @r{ a@: f [ @: @: 4 @:decr@:(a,n)}
34976 @r{ a@: f ] @: @: 4 @:incr@:(a,n)}
34977
34978 @c
34979 @r{ a b@: f b @: @: 2 @:beta@:(a,b)}
34980 @r{ a@: f e @: @: 1 @:erf@:(a)}
34981 @r{ a@: I f e @: @: 1 @:erfc@:(a)}
34982 @r{ a@: f g @: @: 1 @:gamma@:(a)}
34983 @r{ a b@: f h @: @: 2 @:hypot@:(a,b)}
34984 @r{ a@: f i @: @: 1 @:im@:(a)}
34985 @r{ n a@: f j @: @: 2 @:besJ@:(n,a)}
34986 @r{ a b@: f n @: @: 2 @:min@:(a,b)}
34987 @r{ a@: f r @: @: 1 @:re@:(a)}
34988 @r{ a@: f s @: @: 1 @:sign@:(a)}
34989 @r{ a b@: f x @: @: 2 @:max@:(a,b)}
34990 @r{ n a@: f y @: @: 2 @:besY@:(n,a)}
34991
34992 @c
34993 @r{ a@: f A @: @: 1 @:abssqr@:(a)}
34994 @r{ x a b@: f B @: @: @:betaI@:(x,a,b)}
34995 @r{ x a b@: H f B @: @: @:betaB@:(x,a,b)}
34996 @r{ a@: f E @: @: 1 @:expm1@:(a)}
34997 @r{ a x@: f G @: @: 2 @:gammaP@:(a,x)}
34998 @r{ a x@: I f G @: @: 2 @:gammaQ@:(a,x)}
34999 @r{ a x@: H f G @: @: 2 @:gammag@:(a,x)}
35000 @r{ a x@: I H f G @: @: 2 @:gammaG@:(a,x)}
35001 @r{ a b@: f I @: @: 2 @:ilog@:(a,b)}
35002 @r{ a b@: I f I @: @: 2 @:alog@:(a,b) b^a}
35003 @r{ a@: f L @: @: 1 @:lnp1@:(a)}
35004 @r{ a@: f M @: @: 1 @:mant@:(a)}
35005 @r{ a@: f Q @: @: 1 @:isqrt@:(a)}
35006 @r{ a@: I f Q @: @: 1 @:sqr@:(a) a^2}
35007 @r{ a n@: f S @: @: 2 @:scf@:(a,n)}
35008 @r{ y x@: f T @: @: @:arctan2@:(y,x)}
35009 @r{ a@: f X @: @: 1 @:xpon@:(a)}
35010
35011 @c
35012 @r{ x y@: g a @: @: 28,40 @:calc-graph-add@:}
35013 @r{ @: g b @: @: 12 @:calc-graph-border@:}
35014 @r{ @: g c @: @: @:calc-graph-clear@:}
35015 @r{ @: g d @: @: 41 @:calc-graph-delete@:}
35016 @r{ x y@: g f @: @: 28,40 @:calc-graph-fast@:}
35017 @r{ @: g g @: @: 12 @:calc-graph-grid@:}
35018 @r{ @: g h @:title @: @:calc-graph-header@:}
35019 @r{ @: g j @: @: 4 @:calc-graph-juggle@:}
35020 @r{ @: g k @: @: 12 @:calc-graph-key@:}
35021 @r{ @: g l @: @: 12 @:calc-graph-log-x@:}
35022 @r{ @: g n @:name @: @:calc-graph-name@:}
35023 @r{ @: g p @: @: 42 @:calc-graph-plot@:}
35024 @r{ @: g q @: @: @:calc-graph-quit@:}
35025 @r{ @: g r @:range @: @:calc-graph-range-x@:}
35026 @r{ @: g s @: @: 12,13 @:calc-graph-line-style@:}
35027 @r{ @: g t @:title @: @:calc-graph-title-x@:}
35028 @r{ @: g v @: @: @:calc-graph-view-commands@:}
35029 @r{ @: g x @:display @: @:calc-graph-display@:}
35030 @r{ @: g z @: @: 12 @:calc-graph-zero-x@:}
35031
35032 @c
35033 @r{ x y z@: g A @: @: 28,40 @:calc-graph-add-3d@:}
35034 @r{ @: g C @:command @: @:calc-graph-command@:}
35035 @r{ @: g D @:device @: 43,44 @:calc-graph-device@:}
35036 @r{ x y z@: g F @: @: 28,40 @:calc-graph-fast-3d@:}
35037 @r{ @: g H @: @: 12 @:calc-graph-hide@:}
35038 @r{ @: g K @: @: @:calc-graph-kill@:}
35039 @r{ @: g L @: @: 12 @:calc-graph-log-y@:}
35040 @r{ @: g N @:number @: 43,51 @:calc-graph-num-points@:}
35041 @r{ @: g O @:filename @: 43,44 @:calc-graph-output@:}
35042 @r{ @: g P @: @: 42 @:calc-graph-print@:}
35043 @r{ @: g R @:range @: @:calc-graph-range-y@:}
35044 @r{ @: g S @: @: 12,13 @:calc-graph-point-style@:}
35045 @r{ @: g T @:title @: @:calc-graph-title-y@:}
35046 @r{ @: g V @: @: @:calc-graph-view-trail@:}
35047 @r{ @: g X @:format @: @:calc-graph-geometry@:}
35048 @r{ @: g Z @: @: 12 @:calc-graph-zero-y@:}
35049
35050 @c
35051 @r{ @: g C-l @: @: 12 @:calc-graph-log-z@:}
35052 @r{ @: g C-r @:range @: @:calc-graph-range-z@:}
35053 @r{ @: g C-t @:title @: @:calc-graph-title-z@:}
35054
35055 @c
35056 @r{ @: h b @: @: @:calc-describe-bindings@:}
35057 @r{ @: h c @:key @: @:calc-describe-key-briefly@:}
35058 @r{ @: h f @:function @: @:calc-describe-function@:}
35059 @r{ @: h h @: @: @:calc-full-help@:}
35060 @r{ @: h i @: @: @:calc-info@:}
35061 @r{ @: h k @:key @: @:calc-describe-key@:}
35062 @r{ @: h n @: @: @:calc-view-news@:}
35063 @r{ @: h s @: @: @:calc-info-summary@:}
35064 @r{ @: h t @: @: @:calc-tutorial@:}
35065 @r{ @: h v @:var @: @:calc-describe-variable@:}
35066
35067 @c
35068 @r{ @: j 1-9 @: @: @:calc-select-part@:}
35069 @r{ @: j @key{RET} @: @: 27 @:calc-copy-selection@:}
35070 @r{ @: j @key{DEL} @: @: 27 @:calc-del-selection@:}
35071 @r{ @: j ' @:formula @: 27 @:calc-enter-selection@:}
35072 @r{ @: j ` @:editing @: 27,30 @:calc-edit-selection@:}
35073 @r{ @: j " @: @: 7,27 @:calc-sel-expand-formula@:}
35074
35075 @c
35076 @r{ @: j + @:formula @: 27 @:calc-sel-add-both-sides@:}
35077 @r{ @: j - @:formula @: 27 @:calc-sel-sub-both-sides@:}
35078 @r{ @: j * @:formula @: 27 @:calc-sel-mul-both-sides@:}
35079 @r{ @: j / @:formula @: 27 @:calc-sel-div-both-sides@:}
35080 @r{ @: j & @: @: 27 @:calc-sel-invert@:}
35081
35082 @c
35083 @r{ @: j a @: @: 27 @:calc-select-additional@:}
35084 @r{ @: j b @: @: 12 @:calc-break-selections@:}
35085 @r{ @: j c @: @: @:calc-clear-selections@:}
35086 @r{ @: j d @: @: 12,50 @:calc-show-selections@:}
35087 @r{ @: j e @: @: 12 @:calc-enable-selections@:}
35088 @r{ @: j l @: @: 4,27 @:calc-select-less@:}
35089 @r{ @: j m @: @: 4,27 @:calc-select-more@:}
35090 @r{ @: j n @: @: 4 @:calc-select-next@:}
35091 @r{ @: j o @: @: 4,27 @:calc-select-once@:}
35092 @r{ @: j p @: @: 4 @:calc-select-previous@:}
35093 @r{ @: j r @:rules @:4,8,27 @:calc-rewrite-selection@:}
35094 @r{ @: j s @: @: 4,27 @:calc-select-here@:}
35095 @r{ @: j u @: @: 27 @:calc-unselect@:}
35096 @r{ @: j v @: @: 7,27 @:calc-sel-evaluate@:}
35097
35098 @c
35099 @r{ @: j C @: @: 27 @:calc-sel-commute@:}
35100 @r{ @: j D @: @: 4,27 @:calc-sel-distribute@:}
35101 @r{ @: j E @: @: 27 @:calc-sel-jump-equals@:}
35102 @r{ @: j I @: @: 27 @:calc-sel-isolate@:}
35103 @r{ @: H j I @: @: 27 @:calc-sel-isolate@: (full)}
35104 @r{ @: j L @: @: 4,27 @:calc-commute-left@:}
35105 @r{ @: j M @: @: 27 @:calc-sel-merge@:}
35106 @r{ @: j N @: @: 27 @:calc-sel-negate@:}
35107 @r{ @: j O @: @: 4,27 @:calc-select-once-maybe@:}
35108 @r{ @: j R @: @: 4,27 @:calc-commute-right@:}
35109 @r{ @: j S @: @: 4,27 @:calc-select-here-maybe@:}
35110 @r{ @: j U @: @: 27 @:calc-sel-unpack@:}
35111
35112 @c
35113 @r{ @: k a @: @: @:calc-random-again@:}
35114 @r{ n@: k b @: @: 1 @:bern@:(n)}
35115 @r{ n x@: H k b @: @: 2 @:bern@:(n,x)}
35116 @r{ n m@: k c @: @: 2 @:choose@:(n,m)}
35117 @r{ n m@: H k c @: @: 2 @:perm@:(n,m)}
35118 @r{ n@: k d @: @: 1 @:dfact@:(n) n!!}
35119 @r{ n@: k e @: @: 1 @:euler@:(n)}
35120 @r{ n x@: H k e @: @: 2 @:euler@:(n,x)}
35121 @r{ n@: k f @: @: 4 @:prfac@:(n)}
35122 @r{ n m@: k g @: @: 2 @:gcd@:(n,m)}
35123 @r{ m n@: k h @: @: 14 @:shuffle@:(n,m)}
35124 @r{ n m@: k l @: @: 2 @:lcm@:(n,m)}
35125 @r{ n@: k m @: @: 1 @:moebius@:(n)}
35126 @r{ n@: k n @: @: 4 @:nextprime@:(n)}
35127 @r{ n@: I k n @: @: 4 @:prevprime@:(n)}
35128 @r{ n@: k p @: @: 4,28 @:calc-prime-test@:}
35129 @r{ m@: k r @: @: 14 @:random@:(m)}
35130 @r{ n m@: k s @: @: 2 @:stir1@:(n,m)}
35131 @r{ n m@: H k s @: @: 2 @:stir2@:(n,m)}
35132 @r{ n@: k t @: @: 1 @:totient@:(n)}
35133
35134 @c
35135 @r{ n p x@: k B @: @: @:utpb@:(x,n,p)}
35136 @r{ n p x@: I k B @: @: @:ltpb@:(x,n,p)}
35137 @r{ v x@: k C @: @: @:utpc@:(x,v)}
35138 @r{ v x@: I k C @: @: @:ltpc@:(x,v)}
35139 @r{ n m@: k E @: @: @:egcd@:(n,m)}
35140 @r{v1 v2 x@: k F @: @: @:utpf@:(x,v1,v2)}
35141 @r{v1 v2 x@: I k F @: @: @:ltpf@:(x,v1,v2)}
35142 @r{ m s x@: k N @: @: @:utpn@:(x,m,s)}
35143 @r{ m s x@: I k N @: @: @:ltpn@:(x,m,s)}
35144 @r{ m x@: k P @: @: @:utpp@:(x,m)}
35145 @r{ m x@: I k P @: @: @:ltpp@:(x,m)}
35146 @r{ v x@: k T @: @: @:utpt@:(x,v)}
35147 @r{ v x@: I k T @: @: @:ltpt@:(x,v)}
35148
35149 @c
35150 @r{ @: m a @: @: 12,13 @:calc-algebraic-mode@:}
35151 @r{ @: m d @: @: @:calc-degrees-mode@:}
35152 @r{ @: m f @: @: 12 @:calc-frac-mode@:}
35153 @r{ @: m g @: @: 52 @:calc-get-modes@:}
35154 @r{ @: m h @: @: @:calc-hms-mode@:}
35155 @r{ @: m i @: @: 12,13 @:calc-infinite-mode@:}
35156 @r{ @: m m @: @: @:calc-save-modes@:}
35157 @r{ @: m p @: @: 12 @:calc-polar-mode@:}
35158 @r{ @: m r @: @: @:calc-radians-mode@:}
35159 @r{ @: m s @: @: 12 @:calc-symbolic-mode@:}
35160 @r{ @: m t @: @: 12 @:calc-total-algebraic-mode@:}
35161 @r{ @: m v @: @: 12,13 @:calc-matrix-mode@:}
35162 @r{ @: m w @: @: 13 @:calc-working@:}
35163 @r{ @: m x @: @: @:calc-always-load-extensions@:}
35164
35165 @c
35166 @r{ @: m A @: @: 12 @:calc-alg-simplify-mode@:}
35167 @r{ @: m B @: @: 12 @:calc-bin-simplify-mode@:}
35168 @r{ @: m C @: @: 12 @:calc-auto-recompute@:}
35169 @r{ @: m D @: @: @:calc-default-simplify-mode@:}
35170 @r{ @: m E @: @: 12 @:calc-ext-simplify-mode@:}
35171 @r{ @: m F @:filename @: 13 @:calc-settings-file-name@:}
35172 @r{ @: m N @: @: 12 @:calc-num-simplify-mode@:}
35173 @r{ @: m O @: @: 12 @:calc-no-simplify-mode@:}
35174 @r{ @: m R @: @: 12,13 @:calc-mode-record-mode@:}
35175 @r{ @: m S @: @: 12 @:calc-shift-prefix@:}
35176 @r{ @: m U @: @: 12 @:calc-units-simplify-mode@:}
35177
35178 @c
35179 @r{ @: s c @:var1, var2 @: 29 @:calc-copy-variable@:}
35180 @r{ @: s d @:var, decl @: @:calc-declare-variable@:}
35181 @r{ @: s e @:var, editing @: 29,30 @:calc-edit-variable@:}
35182 @r{ @: s i @:buffer @: @:calc-insert-variables@:}
35183 @r{ a b@: s l @:var @: 29 @:@:a (letting var=b)}
35184 @r{ a ...@: s m @:op, var @: 22,29 @:calc-store-map@:}
35185 @r{ @: s n @:var @: 29,47 @:calc-store-neg@: (v/-1)}
35186 @r{ @: s p @:var @: 29 @:calc-permanent-variable@:}
35187 @r{ @: s r @:var @: 29 @:@:v (recalled value)}
35188 @r{ @: r 0-9 @: @: @:calc-recall-quick@:}
35189 @r{ a@: s s @:var @: 28,29 @:calc-store@:}
35190 @r{ a@: s 0-9 @: @: @:calc-store-quick@:}
35191 @r{ a@: s t @:var @: 29 @:calc-store-into@:}
35192 @r{ a@: t 0-9 @: @: @:calc-store-into-quick@:}
35193 @r{ @: s u @:var @: 29 @:calc-unstore@:}
35194 @r{ a@: s x @:var @: 29 @:calc-store-exchange@:}
35195
35196 @c
35197 @r{ @: s A @:editing @: 30 @:calc-edit-AlgSimpRules@:}
35198 @r{ @: s D @:editing @: 30 @:calc-edit-Decls@:}
35199 @r{ @: s E @:editing @: 30 @:calc-edit-EvalRules@:}
35200 @r{ @: s F @:editing @: 30 @:calc-edit-FitRules@:}
35201 @r{ @: s G @:editing @: 30 @:calc-edit-GenCount@:}
35202 @r{ @: s H @:editing @: 30 @:calc-edit-Holidays@:}
35203 @r{ @: s I @:editing @: 30 @:calc-edit-IntegLimit@:}
35204 @r{ @: s L @:editing @: 30 @:calc-edit-LineStyles@:}
35205 @r{ @: s P @:editing @: 30 @:calc-edit-PointStyles@:}
35206 @r{ @: s R @:editing @: 30 @:calc-edit-PlotRejects@:}
35207 @r{ @: s T @:editing @: 30 @:calc-edit-TimeZone@:}
35208 @r{ @: s U @:editing @: 30 @:calc-edit-Units@:}
35209 @r{ @: s X @:editing @: 30 @:calc-edit-ExtSimpRules@:}
35210
35211 @c
35212 @r{ a@: s + @:var @: 29,47 @:calc-store-plus@: (v+a)}
35213 @r{ a@: s - @:var @: 29,47 @:calc-store-minus@: (v-a)}
35214 @r{ a@: s * @:var @: 29,47 @:calc-store-times@: (v*a)}
35215 @r{ a@: s / @:var @: 29,47 @:calc-store-div@: (v/a)}
35216 @r{ a@: s ^ @:var @: 29,47 @:calc-store-power@: (v^a)}
35217 @r{ a@: s | @:var @: 29,47 @:calc-store-concat@: (v|a)}
35218 @r{ @: s & @:var @: 29,47 @:calc-store-inv@: (v^-1)}
35219 @r{ @: s [ @:var @: 29,47 @:calc-store-decr@: (v-1)}
35220 @r{ @: s ] @:var @: 29,47 @:calc-store-incr@: (v-(-1))}
35221 @r{ a b@: s : @: @: 2 @:assign@:(a,b) a @t{:=} b}
35222 @r{ a@: s = @: @: 1 @:evalto@:(a,b) a @t{=>}}
35223
35224 @c
35225 @r{ @: t [ @: @: 4 @:calc-trail-first@:}
35226 @r{ @: t ] @: @: 4 @:calc-trail-last@:}
35227 @r{ @: t < @: @: 4 @:calc-trail-scroll-left@:}
35228 @r{ @: t > @: @: 4 @:calc-trail-scroll-right@:}
35229 @r{ @: t . @: @: 12 @:calc-full-trail-vectors@:}
35230
35231 @c
35232 @r{ @: t b @: @: 4 @:calc-trail-backward@:}
35233 @r{ @: t d @: @: 12,50 @:calc-trail-display@:}
35234 @r{ @: t f @: @: 4 @:calc-trail-forward@:}
35235 @r{ @: t h @: @: @:calc-trail-here@:}
35236 @r{ @: t i @: @: @:calc-trail-in@:}
35237 @r{ @: t k @: @: 4 @:calc-trail-kill@:}
35238 @r{ @: t m @:string @: @:calc-trail-marker@:}
35239 @r{ @: t n @: @: 4 @:calc-trail-next@:}
35240 @r{ @: t o @: @: @:calc-trail-out@:}
35241 @r{ @: t p @: @: 4 @:calc-trail-previous@:}
35242 @r{ @: t r @:string @: @:calc-trail-isearch-backward@:}
35243 @r{ @: t s @:string @: @:calc-trail-isearch-forward@:}
35244 @r{ @: t y @: @: 4 @:calc-trail-yank@:}
35245
35246 @c
35247 @r{ d@: t C @:oz, nz @: @:tzconv@:(d,oz,nz)}
35248 @r{d oz nz@: t C @:$ @: @:tzconv@:(d,oz,nz)}
35249 @r{ d@: t D @: @: 15 @:date@:(d)}
35250 @r{ d@: t I @: @: 4 @:incmonth@:(d,n)}
35251 @r{ d@: t J @: @: 16 @:julian@:(d,z)}
35252 @r{ d@: t M @: @: 17 @:newmonth@:(d,n)}
35253 @r{ @: t N @: @: 16 @:now@:(z)}
35254 @r{ d@: t P @:1 @: 31 @:year@:(d)}
35255 @r{ d@: t P @:2 @: 31 @:month@:(d)}
35256 @r{ d@: t P @:3 @: 31 @:day@:(d)}
35257 @r{ d@: t P @:4 @: 31 @:hour@:(d)}
35258 @r{ d@: t P @:5 @: 31 @:minute@:(d)}
35259 @r{ d@: t P @:6 @: 31 @:second@:(d)}
35260 @r{ d@: t P @:7 @: 31 @:weekday@:(d)}
35261 @r{ d@: t P @:8 @: 31 @:yearday@:(d)}
35262 @r{ d@: t P @:9 @: 31 @:time@:(d)}
35263 @r{ d@: t U @: @: 16 @:unixtime@:(d,z)}
35264 @r{ d@: t W @: @: 17 @:newweek@:(d,w)}
35265 @r{ d@: t Y @: @: 17 @:newyear@:(d,n)}
35266
35267 @c
35268 @r{ a b@: t + @: @: 2 @:badd@:(a,b)}
35269 @r{ a b@: t - @: @: 2 @:bsub@:(a,b)}
35270
35271 @c
35272 @r{ @: u a @: @: 12 @:calc-autorange-units@:}
35273 @r{ a@: u b @: @: @:calc-base-units@:}
35274 @r{ a@: u c @:units @: 18 @:calc-convert-units@:}
35275 @r{ defn@: u d @:unit, descr @: @:calc-define-unit@:}
35276 @r{ @: u e @: @: @:calc-explain-units@:}
35277 @r{ @: u g @:unit @: @:calc-get-unit-definition@:}
35278 @r{ @: u p @: @: @:calc-permanent-units@:}
35279 @r{ a@: u r @: @: @:calc-remove-units@:}
35280 @r{ a@: u s @: @: @:usimplify@:(a)}
35281 @r{ a@: u t @:units @: 18 @:calc-convert-temperature@:}
35282 @r{ @: u u @:unit @: @:calc-undefine-unit@:}
35283 @r{ @: u v @: @: @:calc-enter-units-table@:}
35284 @r{ a@: u x @: @: @:calc-extract-units@:}
35285 @r{ a@: u 0-9 @: @: @:calc-quick-units@:}
35286
35287 @c
35288 @r{ v1 v2@: u C @: @: 20 @:vcov@:(v1,v2)}
35289 @r{ v1 v2@: I u C @: @: 20 @:vpcov@:(v1,v2)}
35290 @r{ v1 v2@: H u C @: @: 20 @:vcorr@:(v1,v2)}
35291 @r{ v@: u G @: @: 19 @:vgmean@:(v)}
35292 @r{ a b@: H u G @: @: 2 @:agmean@:(a,b)}
35293 @r{ v@: u M @: @: 19 @:vmean@:(v)}
35294 @r{ v@: I u M @: @: 19 @:vmeane@:(v)}
35295 @r{ v@: H u M @: @: 19 @:vmedian@:(v)}
35296 @r{ v@: I H u M @: @: 19 @:vhmean@:(v)}
35297 @r{ v@: u N @: @: 19 @:vmin@:(v)}
35298 @r{ v@: u S @: @: 19 @:vsdev@:(v)}
35299 @r{ v@: I u S @: @: 19 @:vpsdev@:(v)}
35300 @r{ v@: H u S @: @: 19 @:vvar@:(v)}
35301 @r{ v@: I H u S @: @: 19 @:vpvar@:(v)}
35302 @r{ @: u V @: @: @:calc-view-units-table@:}
35303 @r{ v@: u X @: @: 19 @:vmax@:(v)}
35304
35305 @c
35306 @r{ v@: u + @: @: 19 @:vsum@:(v)}
35307 @r{ v@: u * @: @: 19 @:vprod@:(v)}
35308 @r{ v@: u # @: @: 19 @:vcount@:(v)}
35309
35310 @c
35311 @r{ @: V ( @: @: 50 @:calc-vector-parens@:}
35312 @r{ @: V @{ @: @: 50 @:calc-vector-braces@:}
35313 @r{ @: V [ @: @: 50 @:calc-vector-brackets@:}
35314 @r{ @: V ] @:ROCP @: 50 @:calc-matrix-brackets@:}
35315 @r{ @: V , @: @: 50 @:calc-vector-commas@:}
35316 @r{ @: V < @: @: 50 @:calc-matrix-left-justify@:}
35317 @r{ @: V = @: @: 50 @:calc-matrix-center-justify@:}
35318 @r{ @: V > @: @: 50 @:calc-matrix-right-justify@:}
35319 @r{ @: V / @: @: 12,50 @:calc-break-vectors@:}
35320 @r{ @: V . @: @: 12,50 @:calc-full-vectors@:}
35321
35322 @c
35323 @r{ s t@: V ^ @: @: 2 @:vint@:(s,t)}
35324 @r{ s t@: V - @: @: 2 @:vdiff@:(s,t)}
35325 @r{ s@: V ~ @: @: 1 @:vcompl@:(s)}
35326 @r{ s@: V # @: @: 1 @:vcard@:(s)}
35327 @r{ s@: V : @: @: 1 @:vspan@:(s)}
35328 @r{ s@: V + @: @: 1 @:rdup@:(s)}
35329
35330 @c
35331 @r{ m@: V & @: @: 1 @:inv@:(m) 1/m}
35332
35333 @c
35334 @r{ v@: v a @:n @: @:arrange@:(v,n)}
35335 @r{ a@: v b @:n @: @:cvec@:(a,n)}
35336 @r{ v@: v c @:n >0 @: 21,31 @:mcol@:(v,n)}
35337 @r{ v@: v c @:n <0 @: 31 @:mrcol@:(v,-n)}
35338 @r{ m@: v c @:0 @: 31 @:getdiag@:(m)}
35339 @r{ v@: v d @: @: 25 @:diag@:(v,n)}
35340 @r{ v m@: v e @: @: 2 @:vexp@:(v,m)}
35341 @r{ v m f@: H v e @: @: 2 @:vexp@:(v,m,f)}
35342 @r{ v a@: v f @: @: 26 @:find@:(v,a,n)}
35343 @r{ v@: v h @: @: 1 @:head@:(v)}
35344 @r{ v@: I v h @: @: 1 @:tail@:(v)}
35345 @r{ v@: H v h @: @: 1 @:rhead@:(v)}
35346 @r{ v@: I H v h @: @: 1 @:rtail@:(v)}
35347 @r{ @: v i @:n @: 31 @:idn@:(1,n)}
35348 @r{ @: v i @:0 @: 31 @:idn@:(1)}
35349 @r{ h t@: v k @: @: 2 @:cons@:(h,t)}
35350 @r{ h t@: H v k @: @: 2 @:rcons@:(h,t)}
35351 @r{ v@: v l @: @: 1 @:vlen@:(v)}
35352 @r{ v@: H v l @: @: 1 @:mdims@:(v)}
35353 @r{ v m@: v m @: @: 2 @:vmask@:(v,m)}
35354 @r{ v@: v n @: @: 1 @:rnorm@:(v)}
35355 @r{ a b c@: v p @: @: 24 @:calc-pack@:}
35356 @r{ v@: v r @:n >0 @: 21,31 @:mrow@:(v,n)}
35357 @r{ v@: v r @:n <0 @: 31 @:mrrow@:(v,-n)}
35358 @r{ m@: v r @:0 @: 31 @:getdiag@:(m)}
35359 @r{ v i j@: v s @: @: @:subvec@:(v,i,j)}
35360 @r{ v i j@: I v s @: @: @:rsubvec@:(v,i,j)}
35361 @r{ m@: v t @: @: 1 @:trn@:(m)}
35362 @r{ v@: v u @: @: 24 @:calc-unpack@:}
35363 @r{ v@: v v @: @: 1 @:rev@:(v)}
35364 @r{ @: v x @:n @: 31 @:index@:(n)}
35365 @r{ n s i@: C-u v x @: @: @:index@:(n,s,i)}
35366
35367 @c
35368 @r{ v@: V A @:op @: 22 @:apply@:(op,v)}
35369 @r{ v1 v2@: V C @: @: 2 @:cross@:(v1,v2)}
35370 @r{ m@: V D @: @: 1 @:det@:(m)}
35371 @r{ s@: V E @: @: 1 @:venum@:(s)}
35372 @r{ s@: V F @: @: 1 @:vfloor@:(s)}
35373 @r{ v@: V G @: @: @:grade@:(v)}
35374 @r{ v@: I V G @: @: @:rgrade@:(v)}
35375 @r{ v@: V H @:n @: 31 @:histogram@:(v,n)}
35376 @r{ v w@: H V H @:n @: 31 @:histogram@:(v,w,n)}
35377 @r{ v1 v2@: V I @:mop aop @: 22 @:inner@:(mop,aop,v1,v2)}
35378 @r{ m@: V J @: @: 1 @:ctrn@:(m)}
35379 @r{ m@: V L @: @: 1 @:lud@:(m)}
35380 @r{ v@: V M @:op @: 22,23 @:map@:(op,v)}
35381 @r{ v@: V N @: @: 1 @:cnorm@:(v)}
35382 @r{ v1 v2@: V O @:op @: 22 @:outer@:(op,v1,v2)}
35383 @r{ v@: V R @:op @: 22,23 @:reduce@:(op,v)}
35384 @r{ v@: I V R @:op @: 22,23 @:rreduce@:(op,v)}
35385 @r{ a n@: H V R @:op @: 22 @:nest@:(op,a,n)}
35386 @r{ a@: I H V R @:op @: 22 @:fixp@:(op,a)}
35387 @r{ v@: V S @: @: @:sort@:(v)}
35388 @r{ v@: I V S @: @: @:rsort@:(v)}
35389 @r{ m@: V T @: @: 1 @:tr@:(m)}
35390 @r{ v@: V U @:op @: 22 @:accum@:(op,v)}
35391 @r{ v@: I V U @:op @: 22 @:raccum@:(op,v)}
35392 @r{ a n@: H V U @:op @: 22 @:anest@:(op,a,n)}
35393 @r{ a@: I H V U @:op @: 22 @:afixp@:(op,a)}
35394 @r{ s t@: V V @: @: 2 @:vunion@:(s,t)}
35395 @r{ s t@: V X @: @: 2 @:vxor@:(s,t)}
35396
35397 @c
35398 @r{ @: Y @: @: @:@:user commands}
35399
35400 @c
35401 @r{ @: z @: @: @:@:user commands}
35402
35403 @c
35404 @r{ c@: Z [ @: @: 45 @:calc-kbd-if@:}
35405 @r{ c@: Z | @: @: 45 @:calc-kbd-else-if@:}
35406 @r{ @: Z : @: @: @:calc-kbd-else@:}
35407 @r{ @: Z ] @: @: @:calc-kbd-end-if@:}
35408
35409 @c
35410 @r{ @: Z @{ @: @: 4 @:calc-kbd-loop@:}
35411 @r{ c@: Z / @: @: 45 @:calc-kbd-break@:}
35412 @r{ @: Z @} @: @: @:calc-kbd-end-loop@:}
35413 @r{ n@: Z < @: @: @:calc-kbd-repeat@:}
35414 @r{ @: Z > @: @: @:calc-kbd-end-repeat@:}
35415 @r{ n m@: Z ( @: @: @:calc-kbd-for@:}
35416 @r{ s@: Z ) @: @: @:calc-kbd-end-for@:}
35417
35418 @c
35419 @r{ @: Z C-g @: @: @:@:cancel if/loop command}
35420
35421 @c
35422 @r{ @: Z ` @: @: @:calc-kbd-push@:}
35423 @r{ @: Z ' @: @: @:calc-kbd-pop@:}
35424 @r{ a@: Z = @:message @: 28 @:calc-kbd-report@:}
35425 @r{ @: Z # @:prompt @: @:calc-kbd-query@:}
35426
35427 @c
35428 @r{ comp@: Z C @:func, args @: 50 @:calc-user-define-composition@:}
35429 @r{ @: Z D @:key, command @: @:calc-user-define@:}
35430 @r{ @: Z E @:key, editing @: 30 @:calc-user-define-edit@:}
35431 @r{ defn@: Z F @:k, c, f, a, n@: 28 @:calc-user-define-formula@:}
35432 @r{ @: Z G @:key @: @:calc-get-user-defn@:}
35433 @r{ @: Z I @: @: @:calc-user-define-invocation@:}
35434 @r{ @: Z K @:key, command @: @:calc-user-define-kbd-macro@:}
35435 @r{ @: Z P @:key @: @:calc-user-define-permanent@:}
35436 @r{ @: Z S @: @: 30 @:calc-edit-user-syntax@:}
35437 @r{ @: Z T @: @: 12 @:calc-timing@:}
35438 @r{ @: Z U @:key @: @:calc-user-undefine@:}
35439
35440 @end format
35441
35442 @noindent
35443 NOTES
35444
35445 @enumerate
35446 @c 1
35447 @item
35448 Positive prefix arguments apply to @expr{n} stack entries.
35449 Negative prefix arguments apply to the @expr{-n}th stack entry.
35450 A prefix of zero applies to the entire stack. (For @key{LFD} and
35451 @kbd{M-@key{DEL}}, the meaning of the sign is reversed.)
35452
35453 @c 2
35454 @item
35455 Positive prefix arguments apply to @expr{n} stack entries.
35456 Negative prefix arguments apply to the top stack entry
35457 and the next @expr{-n} stack entries.
35458
35459 @c 3
35460 @item
35461 Positive prefix arguments rotate top @expr{n} stack entries by one.
35462 Negative prefix arguments rotate the entire stack by @expr{-n}.
35463 A prefix of zero reverses the entire stack.
35464
35465 @c 4
35466 @item
35467 Prefix argument specifies a repeat count or distance.
35468
35469 @c 5
35470 @item
35471 Positive prefix arguments specify a precision @expr{p}.
35472 Negative prefix arguments reduce the current precision by @expr{-p}.
35473
35474 @c 6
35475 @item
35476 A prefix argument is interpreted as an additional step-size parameter.
35477 A plain @kbd{C-u} prefix means to prompt for the step size.
35478
35479 @c 7
35480 @item
35481 A prefix argument specifies simplification level and depth.
35482 1=Default, 2=like @kbd{a s}, 3=like @kbd{a e}.
35483
35484 @c 8
35485 @item
35486 A negative prefix operates only on the top level of the input formula.
35487
35488 @c 9
35489 @item
35490 Positive prefix arguments specify a word size of @expr{w} bits, unsigned.
35491 Negative prefix arguments specify a word size of @expr{w} bits, signed.
35492
35493 @c 10
35494 @item
35495 Prefix arguments specify the shift amount @expr{n}. The @expr{w} argument
35496 cannot be specified in the keyboard version of this command.
35497
35498 @c 11
35499 @item
35500 From the keyboard, @expr{d} is omitted and defaults to zero.
35501
35502 @c 12
35503 @item
35504 Mode is toggled; a positive prefix always sets the mode, and a negative
35505 prefix always clears the mode.
35506
35507 @c 13
35508 @item
35509 Some prefix argument values provide special variations of the mode.
35510
35511 @c 14
35512 @item
35513 A prefix argument, if any, is used for @expr{m} instead of taking
35514 @expr{m} from the stack. @expr{M} may take any of these values:
35515 @iftex
35516 {@advance@tableindent10pt
35517 @end iftex
35518 @table @asis
35519 @item Integer
35520 Random integer in the interval @expr{[0 .. m)}.
35521 @item Float
35522 Random floating-point number in the interval @expr{[0 .. m)}.
35523 @item 0.0
35524 Gaussian with mean 1 and standard deviation 0.
35525 @item Error form
35526 Gaussian with specified mean and standard deviation.
35527 @item Interval
35528 Random integer or floating-point number in that interval.
35529 @item Vector
35530 Random element from the vector.
35531 @end table
35532 @iftex
35533 }
35534 @end iftex
35535
35536 @c 15
35537 @item
35538 A prefix argument from 1 to 6 specifies number of date components
35539 to remove from the stack. @xref{Date Conversions}.
35540
35541 @c 16
35542 @item
35543 A prefix argument specifies a time zone; @kbd{C-u} says to take the
35544 time zone number or name from the top of the stack. @xref{Time Zones}.
35545
35546 @c 17
35547 @item
35548 A prefix argument specifies a day number (0-6, 0-31, or 0-366).
35549
35550 @c 18
35551 @item
35552 If the input has no units, you will be prompted for both the old and
35553 the new units.
35554
35555 @c 19
35556 @item
35557 With a prefix argument, collect that many stack entries to form the
35558 input data set. Each entry may be a single value or a vector of values.
35559
35560 @c 20
35561 @item
35562 With a prefix argument of 1, take a single
35563 @texline @var{n}@math{\times2}
35564 @infoline @mathit{@var{N}x2}
35565 matrix from the stack instead of two separate data vectors.
35566
35567 @c 21
35568 @item
35569 The row or column number @expr{n} may be given as a numeric prefix
35570 argument instead. A plain @kbd{C-u} prefix says to take @expr{n}
35571 from the top of the stack. If @expr{n} is a vector or interval,
35572 a subvector/submatrix of the input is created.
35573
35574 @c 22
35575 @item
35576 The @expr{op} prompt can be answered with the key sequence for the
35577 desired function, or with @kbd{x} or @kbd{z} followed by a function name,
35578 or with @kbd{$} to take a formula from the top of the stack, or with
35579 @kbd{'} and a typed formula. In the last two cases, the formula may
35580 be a nameless function like @samp{<#1+#2>} or @samp{<x, y : x+y>}, or it
35581 may include @kbd{$}, @kbd{$$}, etc. (where @kbd{$} will correspond to the
35582 last argument of the created function), or otherwise you will be
35583 prompted for an argument list. The number of vectors popped from the
35584 stack by @kbd{V M} depends on the number of arguments of the function.
35585
35586 @c 23
35587 @item
35588 One of the mapping direction keys @kbd{_} (horizontal, i.e., map
35589 by rows or reduce across), @kbd{:} (vertical, i.e., map by columns or
35590 reduce down), or @kbd{=} (map or reduce by rows) may be used before
35591 entering @expr{op}; these modify the function name by adding the letter
35592 @code{r} for ``rows,'' @code{c} for ``columns,'' @code{a} for ``across,''
35593 or @code{d} for ``down.''
35594
35595 @c 24
35596 @item
35597 The prefix argument specifies a packing mode. A nonnegative mode
35598 is the number of items (for @kbd{v p}) or the number of levels
35599 (for @kbd{v u}). A negative mode is as described below. With no
35600 prefix argument, the mode is taken from the top of the stack and
35601 may be an integer or a vector of integers.
35602 @iftex
35603 {@advance@tableindent-20pt
35604 @end iftex
35605 @table @cite
35606 @item -1
35607 (@var{2}) Rectangular complex number.
35608 @item -2
35609 (@var{2}) Polar complex number.
35610 @item -3
35611 (@var{3}) HMS form.
35612 @item -4
35613 (@var{2}) Error form.
35614 @item -5
35615 (@var{2}) Modulo form.
35616 @item -6
35617 (@var{2}) Closed interval.
35618 @item -7
35619 (@var{2}) Closed .. open interval.
35620 @item -8
35621 (@var{2}) Open .. closed interval.
35622 @item -9
35623 (@var{2}) Open interval.
35624 @item -10
35625 (@var{2}) Fraction.
35626 @item -11
35627 (@var{2}) Float with integer mantissa.
35628 @item -12
35629 (@var{2}) Float with mantissa in @expr{[1 .. 10)}.
35630 @item -13
35631 (@var{1}) Date form (using date numbers).
35632 @item -14
35633 (@var{3}) Date form (using year, month, day).
35634 @item -15
35635 (@var{6}) Date form (using year, month, day, hour, minute, second).
35636 @end table
35637 @iftex
35638 }
35639 @end iftex
35640
35641 @c 25
35642 @item
35643 A prefix argument specifies the size @expr{n} of the matrix. With no
35644 prefix argument, @expr{n} is omitted and the size is inferred from
35645 the input vector.
35646
35647 @c 26
35648 @item
35649 The prefix argument specifies the starting position @expr{n} (default 1).
35650
35651 @c 27
35652 @item
35653 Cursor position within stack buffer affects this command.
35654
35655 @c 28
35656 @item
35657 Arguments are not actually removed from the stack by this command.
35658
35659 @c 29
35660 @item
35661 Variable name may be a single digit or a full name.
35662
35663 @c 30
35664 @item
35665 Editing occurs in a separate buffer. Press @kbd{C-c C-c} (or
35666 @key{LFD}, or in some cases @key{RET}) to finish the edit, or kill the
35667 buffer with @kbd{C-x k} to cancel the edit. The @key{LFD} key prevents evaluation
35668 of the result of the edit.
35669
35670 @c 31
35671 @item
35672 The number prompted for can also be provided as a prefix argument.
35673
35674 @c 32
35675 @item
35676 Press this key a second time to cancel the prefix.
35677
35678 @c 33
35679 @item
35680 With a negative prefix, deactivate all formulas. With a positive
35681 prefix, deactivate and then reactivate from scratch.
35682
35683 @c 34
35684 @item
35685 Default is to scan for nearest formula delimiter symbols. With a
35686 prefix of zero, formula is delimited by mark and point. With a
35687 non-zero prefix, formula is delimited by scanning forward or
35688 backward by that many lines.
35689
35690 @c 35
35691 @item
35692 Parse the region between point and mark as a vector. A nonzero prefix
35693 parses @var{n} lines before or after point as a vector. A zero prefix
35694 parses the current line as a vector. A @kbd{C-u} prefix parses the
35695 region between point and mark as a single formula.
35696
35697 @c 36
35698 @item
35699 Parse the rectangle defined by point and mark as a matrix. A positive
35700 prefix @var{n} divides the rectangle into columns of width @var{n}.
35701 A zero or @kbd{C-u} prefix parses each line as one formula. A negative
35702 prefix suppresses special treatment of bracketed portions of a line.
35703
35704 @c 37
35705 @item
35706 A numeric prefix causes the current language mode to be ignored.
35707
35708 @c 38
35709 @item
35710 Responding to a prompt with a blank line answers that and all
35711 later prompts by popping additional stack entries.
35712
35713 @c 39
35714 @item
35715 Answer for @expr{v} may also be of the form @expr{v = v_0} or
35716 @expr{v - v_0}.
35717
35718 @c 40
35719 @item
35720 With a positive prefix argument, stack contains many @expr{y}'s and one
35721 common @expr{x}. With a zero prefix, stack contains a vector of
35722 @expr{y}s and a common @expr{x}. With a negative prefix, stack
35723 contains many @expr{[x,y]} vectors. (For 3D plots, substitute
35724 @expr{z} for @expr{y} and @expr{x,y} for @expr{x}.)
35725
35726 @c 41
35727 @item
35728 With any prefix argument, all curves in the graph are deleted.
35729
35730 @c 42
35731 @item
35732 With a positive prefix, refines an existing plot with more data points.
35733 With a negative prefix, forces recomputation of the plot data.
35734
35735 @c 43
35736 @item
35737 With any prefix argument, set the default value instead of the
35738 value for this graph.
35739
35740 @c 44
35741 @item
35742 With a negative prefix argument, set the value for the printer.
35743
35744 @c 45
35745 @item
35746 Condition is considered ``true'' if it is a nonzero real or complex
35747 number, or a formula whose value is known to be nonzero; it is ``false''
35748 otherwise.
35749
35750 @c 46
35751 @item
35752 Several formulas separated by commas are pushed as multiple stack
35753 entries. Trailing @kbd{)}, @kbd{]}, @kbd{@}}, @kbd{>}, and @kbd{"}
35754 delimiters may be omitted. The notation @kbd{$$$} refers to the value
35755 in stack level three, and causes the formula to replace the top three
35756 stack levels. The notation @kbd{$3} refers to stack level three without
35757 causing that value to be removed from the stack. Use @key{LFD} in place
35758 of @key{RET} to prevent evaluation; use @kbd{M-=} in place of @key{RET}
35759 to evaluate variables.
35760
35761 @c 47
35762 @item
35763 The variable is replaced by the formula shown on the right. The
35764 Inverse flag reverses the order of the operands, e.g., @kbd{I s - x}
35765 assigns
35766 @texline @math{x \coloneq a-x}.
35767 @infoline @expr{x := a-x}.
35768
35769 @c 48
35770 @item
35771 Press @kbd{?} repeatedly to see how to choose a model. Answer the
35772 variables prompt with @expr{iv} or @expr{iv;pv} to specify
35773 independent and parameter variables. A positive prefix argument
35774 takes @mathit{@var{n}+1} vectors from the stack; a zero prefix takes a matrix
35775 and a vector from the stack.
35776
35777 @c 49
35778 @item
35779 With a plain @kbd{C-u} prefix, replace the current region of the
35780 destination buffer with the yanked text instead of inserting.
35781
35782 @c 50
35783 @item
35784 All stack entries are reformatted; the @kbd{H} prefix inhibits this.
35785 The @kbd{I} prefix sets the mode temporarily, redraws the top stack
35786 entry, then restores the original setting of the mode.
35787
35788 @c 51
35789 @item
35790 A negative prefix sets the default 3D resolution instead of the
35791 default 2D resolution.
35792
35793 @c 52
35794 @item
35795 This grabs a vector of the form [@var{prec}, @var{wsize}, @var{ssize},
35796 @var{radix}, @var{flfmt}, @var{ang}, @var{frac}, @var{symb}, @var{polar},
35797 @var{matrix}, @var{simp}, @var{inf}]. A prefix argument from 1 to 12
35798 grabs the @var{n}th mode value only.
35799 @end enumerate
35800
35801 @iftex
35802 (Space is provided below for you to keep your own written notes.)
35803 @page
35804 @endgroup
35805 @end iftex
35806
35807
35808 @c [end-summary]
35809
35810 @node Key Index, Command Index, Summary, Top
35811 @unnumbered Index of Key Sequences
35812
35813 @printindex ky
35814
35815 @node Command Index, Function Index, Key Index, Top
35816 @unnumbered Index of Calculator Commands
35817
35818 Since all Calculator commands begin with the prefix @samp{calc-}, the
35819 @kbd{x} key has been provided as a variant of @kbd{M-x} which automatically
35820 types @samp{calc-} for you. Thus, @kbd{x last-args} is short for
35821 @kbd{M-x calc-last-args}.
35822
35823 @printindex pg
35824
35825 @node Function Index, Concept Index, Command Index, Top
35826 @unnumbered Index of Algebraic Functions
35827
35828 This is a list of built-in functions and operators usable in algebraic
35829 expressions. Their full Lisp names are derived by adding the prefix
35830 @samp{calcFunc-}, as in @code{calcFunc-sqrt}.
35831 @iftex
35832 All functions except those noted with ``*'' have corresponding
35833 Calc keystrokes and can also be found in the Calc Summary.
35834 @end iftex
35835
35836 @printindex tp
35837
35838 @node Concept Index, Variable Index, Function Index, Top
35839 @unnumbered Concept Index
35840
35841 @printindex cp
35842
35843 @node Variable Index, Lisp Function Index, Concept Index, Top
35844 @unnumbered Index of Variables
35845
35846 The variables in this list that do not contain dashes are accessible
35847 as Calc variables. Add a @samp{var-} prefix to get the name of the
35848 corresponding Lisp variable.
35849
35850 The remaining variables are Lisp variables suitable for @code{setq}ing
35851 in your @file{.emacs} file.
35852
35853 @printindex vr
35854
35855 @node Lisp Function Index, , Variable Index, Top
35856 @unnumbered Index of Lisp Math Functions
35857
35858 The following functions are meant to be used with @code{defmath}, not
35859 @code{defun} definitions. For names that do not start with @samp{calc-},
35860 the corresponding full Lisp name is derived by adding a prefix of
35861 @samp{math-}.
35862
35863 @printindex fn
35864
35865 @summarycontents
35866
35867 @c [end]
35868
35869 @contents
35870 @bye
35871
35872
35873 @ignore
35874 arch-tag: 77a71809-fa4d-40be-b2cc-da3e8fb137c0
35875 @end ignore