86075
|
1 ;;; calc-menu.el --- a menu for Calc
|
|
2
|
|
3 ;; Copyright (C) 2007 Free Software Foundation, Inc.
|
|
4
|
|
5 ;; Maintainer: Jay Belanger <jay.p.belanger@gmail.com>
|
|
6
|
|
7 ;; This file is part of GNU Emacs.
|
|
8
|
|
9 ;; GNU Emacs is free software; you can redistribute it and/or modify
|
|
10 ;; it under the terms of the GNU General Public License as published by
|
|
11 ;; the Free Software Foundation; either version 3, or (at your option)
|
|
12 ;; any later version.
|
|
13
|
|
14 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
17 ;; GNU General Public License for more details.
|
|
18
|
|
19 ;; You should have received a copy of the GNU General Public License
|
|
20 ;; along with GNU Emacs; see the file COPYING. If not, write to the
|
|
21 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
22 ;; Boston, MA 02110-1301, USA.
|
|
23
|
|
24 ;;; Commentary:
|
|
25
|
|
26 (defvar calc-arithmetic-menu
|
|
27 (list "Arithmetic"
|
|
28 (list "Basic"
|
|
29 ["-(1:)" calc-change-sign :keys "n"]
|
|
30 ["(2:) + (1:)" calc-plus :keys "+"]
|
|
31 ["(2:) - (1:)" calc-minus :keys "-"]
|
|
32 ["(2:) * (1:)" calc-times :keys "*"]
|
|
33 ["(2:) / (1:)" calc-divide :keys "/"]
|
|
34 ["(2:) ^ (1:)" calc-power :keys "^"]
|
|
35 ["(2:) ^ (1/(1:))"
|
|
36 (progn
|
|
37 (require 'calc-ext)
|
|
38 (let ((calc-inverse-flag t))
|
|
39 (call-interactively 'calc-power)))
|
|
40 :keys "I ^"
|
|
41 :help "The (1:)th root of (2:)"]
|
|
42 ["abs(1:)"
|
|
43 (progn
|
|
44 (require 'calc-arith)
|
|
45 (call-interactively 'calc-abs))
|
|
46 :keys "A"
|
|
47 :help "Absolute value"]
|
|
48 ["1/(1:)"
|
|
49 (progn
|
|
50 (require 'calc-arith)
|
|
51 (call-interactively 'calc-inv))
|
|
52 :keys "&"]
|
|
53 ["sqrt(1:)"
|
|
54 (progn
|
|
55 (require 'calc-math)
|
|
56 (call-interactively 'calc-sqrt))
|
|
57 :keys "Q"]
|
|
58 ["idiv(2:,1:)"
|
|
59 (progn
|
|
60 (require 'calc-arith)
|
|
61 (call-interactively 'calc-idiv))
|
|
62 :keys "\\"
|
|
63 :help "The integer quotient of (2:) over (1:)"]
|
|
64 ["(2:) mod (1:)"
|
|
65 (progn
|
|
66 (require 'calc-misc)
|
|
67 (call-interactively 'calc-mod))
|
|
68 :keys "%"
|
|
69 :help "The remainder when (2:) is divided by (1:)"])
|
|
70 (list "Rounding"
|
|
71 ["floor(1:)"
|
|
72 (progn
|
|
73 (require 'calc-arith)
|
|
74 (call-interactively 'calc-floor))
|
|
75 :keys "F"
|
|
76 :help "The greatest integer less than or equal to (1:)"]
|
|
77 ["ceiling(1:)"
|
|
78 (progn
|
|
79 (require 'calc-arith)
|
|
80 (call-interactively 'calc-ceiling))
|
|
81 :keys "I F"
|
|
82 :help "The smallest integer greater than or equal to (1:)"]
|
|
83 ["round(1:)"
|
|
84 (progn
|
|
85 (require 'calc-arith)
|
|
86 (call-interactively 'calc-round))
|
|
87 :keys "R"
|
|
88 :help "The nearest integer to (1:)"]
|
|
89 ["truncate(1:)"
|
|
90 (progn
|
|
91 (require 'calc-arith)
|
|
92 (call-interactively 'calc-trunc))
|
|
93 :keys "I R"
|
|
94 :help "The integer part of (1:)"])
|
|
95 (list "Complex Numbers"
|
|
96 ["Re(1:)"
|
|
97 (progn
|
|
98 (require 'calc-cplx)
|
|
99 (call-interactively 'calc-re))
|
|
100 :keys "f r"]
|
|
101 ["Im(1:)"
|
|
102 (progn
|
|
103 (require 'calc-cplx)
|
|
104 (call-interactively 'calc-im))
|
|
105 :keys "f i"]
|
|
106 ["conj(1:)"
|
|
107 (progn
|
|
108 (require 'calc-cplx)
|
|
109 (call-interactively 'calc-conj))
|
|
110 :keys "J"
|
|
111 :help "The complex conjugate of (1:)"]
|
|
112 ["length(1:)"
|
|
113 (progn (require 'calc-arith)
|
|
114 (call-interactively 'calc-abs))
|
|
115 :keys "A"
|
|
116 :help "The length (absolute value) of (1:)"]
|
|
117 ["arg(1:)"
|
|
118 (progn
|
|
119 (require 'calc-cplx)
|
|
120 (call-interactively 'calc-argument))
|
|
121 :keys "G"
|
|
122 :help "The argument (polar angle) of (1:)"])
|
|
123 (list "Conversion"
|
|
124 ["Convert (1:) to a float"
|
|
125 (progn
|
|
126 (require 'calc-ext)
|
|
127 (call-interactively 'calc-float))
|
|
128 :keys "c f"]
|
|
129 ["Convert (1:) to a fraction"
|
|
130 (progn
|
|
131 (require 'calc-ext)
|
|
132 (call-interactively 'calc-fraction))
|
|
133 :keys "c F"])
|
|
134 (list "Binary"
|
|
135 ["Set word size"
|
|
136 (progn
|
|
137 (require 'calc-bin)
|
|
138 (call-interactively 'calc-word-size))
|
|
139 :keys "b w"]
|
|
140 ["Clip (1:) to word size"
|
|
141 (progn
|
|
142 (require 'calc-bin)
|
|
143 (call-interactively 'calc-clip))
|
|
144 :keys "b c"
|
|
145 :help "Reduce (1:) modulo 2^wordsize"]
|
|
146 ["(2:) and (1:)"
|
|
147 (progn
|
|
148 (require 'calc-bin)
|
|
149 (call-interactively 'calc-and))
|
|
150 :keys "b a"
|
|
151 :help "Bitwise AND [modulo 2^wordsize]"]
|
|
152 ["(2:) or (1:)"
|
|
153 (progn
|
|
154 (require 'calc-bin)
|
|
155 (call-interactively 'calc-or))
|
|
156 :keys "b o"
|
|
157 :help "Bitwise inclusive OR [modulo 2^wordsize]"]
|
|
158 ["(2:) xor (1:)"
|
|
159 (progn
|
|
160 (require 'calc-bin)
|
|
161 (call-interactively 'calc-xor))
|
|
162 :keys "b x"
|
|
163 :help "Bitwise exclusive OR [modulo 2^wordsize]"]
|
|
164 ["diff(2:,1:)"
|
|
165 (progn
|
|
166 (require 'calc-bin)
|
|
167 (call-interactively 'calc-diff))
|
|
168 :keys "b d"
|
|
169 :help "Bitwise difference [modulo 2^wordsize]"]
|
|
170 ["not (1:)"
|
|
171 (progn
|
|
172 (require 'calc-bin)
|
|
173 (call-interactively 'calc-not))
|
|
174 :keys "b n"
|
|
175 :help "Bitwise NOT [modulo 2^wordsize]"]
|
|
176 ["left shift(1:)"
|
|
177 (progn
|
|
178 (require 'calc-bin)
|
|
179 (call-interactively 'calc-lshift-binary))
|
|
180 :keys "b l"
|
|
181 :help "Shift (1:)[modulo 2^wordsize] one bit left"]
|
|
182 ["right shift(1:)"
|
|
183 (progn
|
|
184 (require 'calc-bin)
|
|
185 (call-interactively 'calc-rshift-binary))
|
|
186 :keys "b r"
|
|
187 :help "Shift (1:)[modulo 2^wordsize] one bit right, putting 0s on the left"]
|
|
188 ["arithmetic right shift(1:)"
|
|
189 (progn
|
|
190 (require 'calc-bin)
|
|
191 (call-interactively 'calc-rshift-arith))
|
|
192 :keys "b R"
|
|
193 :help "Shift (1:)[modulo 2^wordsize] one bit right, duplicating the leftmost bit"]
|
|
194 ["rotate(1:)"
|
|
195 (progn
|
|
196 (require 'calc-bin)
|
|
197 (call-interactively 'calc-rotate-binary))
|
|
198 :keys "b t"
|
|
199 :help "Rotate (1:)[modulo 2^wordsize] one bit left"])
|
|
200 "-------"
|
|
201 ["Help on Arithmetic"
|
|
202 (calc-info-goto-node "Arithmetic")])
|
|
203 "Menu for Calc's arithmetic functions.")
|
|
204
|
|
205 (defvar calc-scientific-function-menu
|
|
206 (list "Scientific functions"
|
|
207 (list "Constants"
|
|
208 ["pi"
|
|
209 (progn
|
|
210 (require 'calc-math)
|
|
211 (call-interactively 'calc-pi))
|
|
212 :keys "P"]
|
|
213 ["e"
|
|
214 (progn
|
|
215 (require 'calc-math)
|
|
216 (let ((calc-hyperbolic-flag t))
|
|
217 (call-interactively 'calc-pi)))
|
|
218 :keys "H P"]
|
|
219 ["phi"
|
|
220 (progn
|
|
221 (require 'calc-math)
|
|
222 (let ((calc-inverse-flag t)
|
|
223 (calc-hyperbolic-flag t))
|
|
224 (call-interactively 'calc-pi)))
|
|
225 :keys "I H P"
|
|
226 :help "The golden ratio"]
|
|
227 ["gamma"
|
|
228 (progn
|
|
229 (require 'calc-math)
|
|
230 (let ((calc-inverse-flag t))
|
|
231 (call-interactively 'calc-pi)))
|
|
232 :keys "I P"
|
|
233 :help "Euler's constant"])
|
|
234 (list "Logs and exps"
|
|
235 ["ln(1:)"
|
|
236 (progn
|
|
237 (require 'calc-math)
|
|
238 (call-interactively 'calc-ln))
|
|
239 :keys "L"
|
|
240 :help "The natural logarithm"]
|
|
241 ["e^(1:)"
|
|
242 (progn
|
|
243 (require 'calc-math)
|
|
244 (call-interactively 'calc-exp))
|
|
245 :keys "E"]
|
|
246 ["log(1:) [base 10]"
|
|
247 (progn
|
|
248 (require 'calc-math)
|
|
249 (call-interactively 'calc-log10))
|
|
250 :keys "H L"
|
|
251 :help "The common logarithm"]
|
|
252 ["10^(1:)"
|
|
253 (progn
|
|
254 (require 'calc-math)
|
|
255 (let ((calc-inverse-flag t))
|
|
256 (call-interactively 'calc-log10)))
|
|
257 :keys "I H L"]
|
|
258 ["log(2:) [base(1:)]"
|
|
259 (progn
|
|
260 (require 'calc-math)
|
|
261 (call-interactively 'calc-log))
|
|
262 :keys "B"
|
|
263 :help "The logarithm with an arbitrary base"]
|
|
264 ["(2:) ^ (1:)"
|
|
265 calc-power
|
|
266 :keys "^"])
|
|
267 (list "Trig functions"
|
|
268 ["sin(1:)"
|
|
269 (progn
|
|
270 (require 'calc-math)
|
|
271 (call-interactively 'calc-sin))
|
|
272 :keys "S"]
|
|
273 ["cos(1:)"
|
|
274 (progn
|
|
275 (require 'calc-math)
|
|
276 (call-interactively 'calc-cos))
|
|
277 :keys "C"]
|
|
278 ["tan(1:)"
|
|
279 (progn
|
|
280 (require 'calc-math)
|
|
281 (call-interactively 'calc-tan))
|
|
282 :keys "T"]
|
|
283 ["arcsin(1:)"
|
|
284 (progn
|
|
285 (require 'calc-math)
|
|
286 (call-interactively 'calc-arcsin))
|
|
287 :keys "I S"]
|
|
288 ["arccos(1:)"
|
|
289 (progn
|
|
290 (require 'calc-math)
|
|
291 (call-interactively 'calc-arccos))
|
|
292 :keys "I C"]
|
|
293 ["arctan(1:)"
|
|
294 (progn
|
|
295 (require 'calc-math)
|
|
296 (call-interactively 'calc-arctan))
|
|
297 :keys "I T"]
|
|
298 ["arctan2(2:,1:)"
|
|
299 (progn
|
|
300 (require 'calc-math)
|
|
301 (call-interactively 'calc-arctan2))
|
|
302 :keys "f T"]
|
|
303 "--Angle measure--"
|
|
304 ["Radians"
|
|
305 (progn
|
|
306 (require 'calc-math)
|
|
307 (calc-radians-mode))
|
|
308 :keys "m r"
|
|
309 :style radio
|
|
310 :selected (eq calc-angle-mode 'rad)]
|
|
311 ["Degrees"
|
|
312 (progn
|
|
313 (require 'calc-math)
|
|
314 (calc-degrees-mode))
|
|
315 :keys "m d"
|
|
316 :style radio
|
|
317 :selected (eq calc-angle-mode 'deg)]
|
|
318 ["HMS"
|
|
319 (progn
|
|
320 (require 'calc-math)
|
|
321 (calc-hms-mode))
|
|
322 :keys "m h"
|
|
323 :style radio
|
|
324 :selected (eq calc-angle-mode 'hms)])
|
|
325 (list "Hyperbolic Functions"
|
|
326 ["sinh(1:)"
|
|
327 (progn
|
|
328 (require 'calc-math)
|
|
329 (call-interactively 'calc-sinh))
|
|
330 :keys "H S"]
|
|
331 ["cosh(1:)"
|
|
332 (progn
|
|
333 (require 'calc-math)
|
|
334 (call-interactively 'calc-cosh))
|
|
335 :keys "H C"]
|
|
336 ["tanh(1:)"
|
|
337 (progn
|
|
338 (require 'calc-math)
|
|
339 (call-interactively 'calc-tanh))
|
|
340 :keys "H T"]
|
|
341 ["arcsinh(1:)"
|
|
342 (progn
|
|
343 (require 'calc-math)
|
|
344 (call-interactively 'calc-arcsinh))
|
|
345 :keys "I H S"]
|
|
346 ["arccosh(1:)"
|
|
347 (progn
|
|
348 (require 'calc-math)
|
|
349 (call-interactively 'calc-arccosh))
|
|
350 :keys "I H C"]
|
|
351 ["arctanh(1:)"
|
|
352 (progn
|
|
353 (require 'calc-math)
|
|
354 (call-interactively 'calc-arctanh))
|
|
355 :keys "I H T"])
|
|
356 (list "Advanced math"
|
|
357 ["Gamma(1:)"
|
|
358 (progn
|
|
359 (require 'calc-comb)
|
|
360 (call-interactively 'calc-gamma))
|
|
361 :keys "f g"
|
|
362 :help "The Euler Gamma function"]
|
|
363 ["GammaP(2:,1:)"
|
|
364 (progn
|
|
365 (require 'calc-funcs)
|
|
366 (call-interactively 'calc-inc-gamma))
|
|
367 :keys "f G"
|
|
368 :help "The lower incomplete Gamma function"]
|
|
369 ["Beta(2:,1:)"
|
|
370 (progn
|
|
371 (require 'calc-funcs)
|
|
372 (call-interactively 'calc-beta))
|
|
373 :keys "f b"
|
|
374 :help "The Euler Beta function"]
|
|
375 ["BetaI(3:,2:,1:)"
|
|
376 (progn
|
|
377 (require 'calc-funcs)
|
|
378 (call-interactively 'calc-inc-beta))
|
|
379 :keys "f B"
|
|
380 :help "The incomplete Beta function"]
|
|
381 ["erf(1:)"
|
|
382 (progn
|
|
383 (require 'calc-funcs)
|
|
384 (call-interactively 'calc-erf))
|
|
385 :keys "f e"
|
|
386 :help "The error function"]
|
|
387 ["BesselJ(2:,1:)"
|
|
388 (progn
|
|
389 (require 'calc-funcs)
|
|
390 (call-interactively 'calc-bessel-J))
|
|
391 :keys "f j"
|
|
392 :help "The Bessel function of the first kind (of order (2:))"]
|
|
393 ["BesselY(2:,1:)"
|
|
394 (progn
|
|
395 (require 'calc-funcs)
|
|
396 (call-interactively 'calc-bessel-Y))
|
|
397 :keys "f y"
|
|
398 :help "The Bessel function of the second kind (of order (2:))"])
|
|
399 (list "Combinatorial"
|
|
400 ["gcd(2:,1:)"
|
|
401 (progn
|
|
402 (require 'calc-comb)
|
|
403 (call-interactively 'calc-gcd))
|
|
404 :keys "k g"]
|
|
405 ["lcm(2:,1:)"
|
|
406 (progn
|
|
407 (require 'calc-comb)
|
|
408 (call-interactively 'calc-lcm))
|
|
409 :keys "k l"]
|
|
410 ["factorial(1:)"
|
|
411 (progn
|
|
412 (require 'calc-comb)
|
|
413 (call-interactively 'calc-factorial))
|
|
414 :keys "!"]
|
|
415 ["(2:) choose (1:)"
|
|
416 (progn
|
|
417 (require 'calc-comb)
|
|
418 (call-interactively 'calc-choose))
|
|
419 :keys "k c"]
|
|
420 ["permutations(2:,1:)"
|
|
421 (progn
|
|
422 (require 'calc-comb)
|
|
423 (call-interactively 'calc-perm))
|
|
424 :keys "H k c"]
|
|
425 ["Primality test for (1:)"
|
|
426 (progn
|
|
427 (require 'calc-comb)
|
|
428 (call-interactively 'calc-prime-test))
|
|
429 :keys "k p"
|
|
430 :help "For large (1:), a probabilistic test"]
|
|
431 ["Factor (1:) into primes"
|
|
432 (progn
|
|
433 (require 'calc-comb)
|
|
434 (call-interactively 'calc-prime-factors))
|
|
435 :keys "k f"]
|
|
436 ["Next prime after (1:)"
|
|
437 (progn
|
|
438 (require 'calc-comb)
|
|
439 (call-interactively 'calc-next-prime))
|
|
440 :keys "k n"]
|
|
441 ["Previous prime before (1:)"
|
|
442 (progn
|
|
443 (require 'calc-comb)
|
|
444 (call-interactively 'calc-prev-prime))
|
|
445 :keys "I k n"]
|
|
446 ["phi(1:)"
|
|
447 (progn
|
|
448 (require 'calc-comb)
|
|
449 (call-interactively 'calc-totient))
|
|
450 :keys "k n"
|
|
451 :help "Euler's totient function"]
|
|
452 ["random(1:)"
|
|
453 (progn
|
|
454 (require 'calc-comb)
|
|
455 (call-interactively 'calc-random))
|
|
456 :keys "k r"
|
|
457 :help "A random number >=1 and < (1:)"])
|
|
458 "----"
|
|
459 ["Help on Scientific Functions"
|
|
460 (calc-info-goto-node "Scientific Functions")])
|
|
461 "Menu for Calc's scientific functions.")
|
|
462
|
|
463 (defvar calc-algebra-menu
|
|
464 (list "Algebra"
|
|
465 (list "Simplification"
|
|
466 ["Simplify (1:)"
|
|
467 (progn
|
|
468 (require 'calc-alg)
|
|
469 (call-interactively 'calc-simplify))
|
|
470 :keys "a s"]
|
|
471 ["Simplify (1:) with extended rules"
|
|
472 (progn
|
|
473 (require 'calc-alg)
|
|
474 (call-interactively 'calc-simplify-extended))
|
|
475 :keys "a e"
|
|
476 :help "Apply possibly unsafe simplifications"])
|
|
477 (list "Manipulation"
|
|
478 ["Expand formula (1:)"
|
|
479 (progn
|
|
480 (require 'calc-alg)
|
|
481 (call-interactively 'calc-expand-formula))
|
|
482 :keys "a \""
|
|
483 :help "Expand (1:) into its defining formula, if possible"]
|
|
484 ["Evaluate variables in (1:)"
|
|
485 (progn
|
|
486 (require 'calc-ext)
|
|
487 (call-interactively 'calc-evaluate))
|
|
488 :keys "="]
|
|
489 ["Make substitution in (1:)"
|
|
490 (progn
|
|
491 (require 'calc-alg)
|
|
492 (call-interactively 'calc-substitute))
|
|
493 :keys "a b"
|
|
494 :help
|
|
495 "Substitute all occurrences of a sub-expression with a new sub-expression"])
|
|
496 (list "Polynomials"
|
|
497 ["Factor (1:)"
|
|
498 (progn
|
|
499 (require 'calc-alg)
|
|
500 (call-interactively 'calc-factor))
|
|
501 :keys "a f"]
|
|
502 ["Collect terms in (1:)"
|
|
503 (progn
|
|
504 (require 'calc-alg)
|
|
505 (call-interactively 'calc-collect))
|
|
506 :keys "a c"
|
|
507 :help "Arrange as a polynomial in a given variable"]
|
|
508 ["Expand (1:)"
|
|
509 (progn
|
|
510 (require 'calc-alg)
|
|
511 (call-interactively 'calc-expand))
|
|
512 :keys "a x"
|
|
513 :help "Apply distributive law everywhere"]
|
|
514 ["Find roots of (1:)"
|
|
515 (progn
|
|
516 (require 'calcalg2)
|
|
517 (call-interactively 'calc-poly-roots))
|
|
518 :keys "a P"])
|
|
519 (list "Calculus"
|
|
520 ["Differentiate (1:)"
|
|
521 (progn
|
|
522 (require 'calcalg2)
|
|
523 (call-interactively 'calc-derivative))
|
|
524 :keys "a d"]
|
|
525 ["Integrate (1:) [indefinite]"
|
|
526 (progn
|
|
527 (require 'calcalg2)
|
|
528 (call-interactively 'calc-integral))
|
|
529 :keys "a i"]
|
|
530 ["Integrate (1:) [definite]"
|
|
531 (progn
|
|
532 (require 'calcalg2)
|
|
533 (let ((var (read-string "Integration variable: ")))
|
|
534 (calc-tabular-command 'calcFunc-integ "Integration"
|
|
535 "intg" nil var nil nil)))
|
|
536 :keys "C-u a i"]
|
|
537 ["Integrate (1:) [numeric]"
|
|
538 (progn
|
|
539 (require 'calcalg2)
|
|
540 (call-interactively 'calc-num-integral))
|
|
541 :keys "a I"
|
|
542 :help "Integrate using the open Romberg method"]
|
|
543 ["Taylor expand (1:)"
|
|
544 (progn
|
|
545 (require 'calcalg2)
|
|
546 (call-interactively 'calc-taylor))
|
|
547 :keys "a t"]
|
|
548 ["Minimize (2:) [initial guess = (1:)]"
|
|
549 (progn
|
|
550 (require 'calcalg3)
|
|
551 (call-interactively 'calc-find-minimum))
|
|
552 :keys "a N"
|
|
553 :help "Find a local minimum"]
|
|
554 ["Maximize (2:) [initial guess = (1:)]"
|
|
555 (progn
|
|
556 (require 'calcalg3)
|
|
557 (call-interactively 'calc-find-maximum))
|
|
558 :keys "a X"
|
|
559 :help "Find a local maximum"])
|
|
560 (list "Solving"
|
|
561 ["Solve equation (1:)"
|
|
562 (progn
|
|
563 (require 'calcalg2)
|
|
564 (call-interactively 'calc-solve-for))
|
|
565 :keys "a S"]
|
|
566 ["Solve equation (2:) numerically [initial guess = (1:)]"
|
|
567 (progn
|
|
568 (require 'calcalg3)
|
|
569 (call-interactively 'calc-find-root))
|
|
570 :keys "a R"]
|
|
571 ["Find roots of polynomial (1:)"
|
|
572 (progn
|
|
573 (require 'calcalg2)
|
|
574 (call-interactively 'calc-poly-roots))
|
|
575 :keys "a P"])
|
|
576 (list "Curve fitting"
|
|
577 ["Fit (1:)=[x values, y values] to a curve"
|
|
578 (progn
|
|
579 (require 'calcalg3)
|
|
580 (call-interactively 'calc-curve-fit))
|
|
581 :keys "a F"])
|
|
582 "----"
|
|
583 ["Help on Algebra"
|
|
584 (calc-info-goto-node "Algebra")])
|
|
585 "Menu for Calc's algebraic facilities.")
|
|
586
|
|
587
|
|
588 (defvar calc-graphics-menu
|
|
589 (list "Graphics"
|
|
590 ["Graph 2D [(1:)= y values, (2:)= x values]"
|
|
591 (progn
|
|
592 (require 'calc-graph)
|
|
593 (call-interactively 'calc-graph-fast))
|
|
594 :keys "g f"]
|
|
595 ["Graph 3D [(1:)= z values, (2:)= y values, (3:)= xvalues]"
|
|
596 (progn
|
|
597 (require 'calc-graph)
|
|
598 (call-interactively 'calc-graph-fast-3d))
|
|
599 :keys "g F"]
|
|
600 "----"
|
|
601 ["Help on Graphics"
|
|
602 (calc-info-goto-node "Graphics")])
|
|
603 "Menu for Calc's graphics.")
|
|
604
|
|
605
|
|
606 (defvar calc-vectors-menu
|
|
607 (list "Matrices/Vectors"
|
|
608 (list "Matrices"
|
|
609 ["(2:) + (1:)" calc-plus :keys "+"]
|
|
610 ["(2:) - (1:)" calc-minus :keys "-"]
|
|
611 ["(2:) * (1:)" calc-times :keys "*"]
|
|
612 ["(1:)^(-1)"
|
|
613 (progn
|
|
614 (require 'calc-arith)
|
|
615 (call-interactively 'calc-inv))
|
|
616 :keys "&"]
|
|
617 ["Create an identity matrix"
|
|
618 (progn
|
|
619 (require 'calc-vec)
|
|
620 (call-interactively 'calc-ident))
|
|
621 :keys "v i"]
|
|
622 ["transpose(1:)"
|
|
623 (progn
|
|
624 (require 'calc-vec)
|
|
625 (call-interactively 'calc-transpose))
|
|
626 :keys "v t"]
|
|
627 ["det(1:)"
|
|
628 (progn
|
|
629 (require 'calc-mtx)
|
|
630 (call-interactively 'calc-mdet))
|
|
631 :keys "V D"]
|
|
632 ["trace(1:)"
|
|
633 (progn
|
|
634 (require 'calc-mtx)
|
|
635 (call-interactively 'calc-mtrace))
|
|
636 :keys "V T"]
|
|
637 ["LUD decompose (1:)"
|
|
638 (progn
|
|
639 (require 'calc-mtx)
|
|
640 (call-interactively 'calc-mlud))
|
|
641 :keys "V L"]
|
|
642 ["Extract a row from (1:)"
|
|
643 (progn
|
|
644 (require 'calc-vec)
|
|
645 (call-interactively 'calc-mrow))
|
|
646 :keys "v r"]
|
|
647 ["Extract a column from (1:)"
|
|
648 (progn
|
|
649 (require 'calc-vec)
|
|
650 (call-interactively 'calc-mcol))
|
|
651 :keys "v c"])
|
|
652 (list "Vectors"
|
|
653 ["Extract the first element of (1:)"
|
|
654 (progn
|
|
655 (require 'calc-vec)
|
|
656 (call-interactively 'calc-head))
|
|
657 :keys "v h"]
|
|
658 ["Extract an element from (1:)"
|
|
659 (progn
|
|
660 (require 'calc-vec)
|
|
661 (call-interactively 'calc-mrow))
|
|
662 :keys "v r"]
|
|
663 ["Reverse (1:)"
|
|
664 (progn
|
|
665 (require 'calc-vec)
|
|
666 (call-interactively 'calc-reverse-vector))
|
|
667 :keys "v v"]
|
|
668 ["Unpack (1:)"
|
|
669 (progn
|
|
670 (require 'calc-vec)
|
|
671 (call-interactively 'calc-unpack))
|
|
672 :keys "v u"
|
|
673 :help "Separate the elements of (1:)"]
|
|
674 ["(2:) cross (1:)"
|
|
675 (progn
|
|
676 (require 'calc-vec)
|
|
677 (call-interactively 'calc-cross))
|
|
678 :keys "V C"
|
|
679 :help "The cross product in R^3"]
|
|
680 ["(2:) dot (1:)"
|
|
681 calc-mult
|
|
682 :keys "*"
|
|
683 :help "The dot product"]
|
|
684 ["Map a function across (1:)"
|
|
685 (progn
|
|
686 (require 'calc-map)
|
|
687 (call-interactively 'calc-map))
|
|
688 :keys "V M"
|
|
689 :help "Apply a function to each element"])
|
|
690 (list "Vectors as sets"
|
|
691 ["Remove duplicates from (1:)"
|
|
692 (progn
|
|
693 (require 'calc-vec)
|
|
694 (call-interactively 'calc-remove-duplicates))
|
|
695 :keys "V +"]
|
|
696 ["(2:) union (1:)"
|
|
697 (progn
|
|
698 (require 'calc-vec)
|
|
699 (call-interactively 'calc-set-union))
|
|
700 :keys "V V"]
|
|
701 ["(2:) intersect (1:)"
|
|
702 (progn
|
|
703 (require 'calc-vec)
|
|
704 (call-interactively 'calc-set-intersect))
|
|
705 :keys "V ^"]
|
|
706 ["(2:) \\ (1:)"
|
|
707 (progn
|
|
708 (require 'calc-vec)
|
|
709 (call-interactively 'calc-set-difference))
|
|
710 :keys "V -"
|
|
711 :help "Set difference"])
|
|
712 (list "Statistics on vectors"
|
|
713 ["length(1:)"
|
|
714 (progn
|
|
715 (require 'calc-stat)
|
|
716 (call-interactively 'calc-vector-count))
|
|
717 :keys "u #"
|
|
718 :help "The number of data values"]
|
|
719 ["sum(1:)"
|
|
720 (progn
|
|
721 (require 'calc-stat)
|
|
722 (call-interactively 'calc-vector-sum))
|
|
723 :keys "u +"
|
|
724 :help "The sum of the data values"]
|
|
725 ["max(1:)"
|
|
726 (progn
|
|
727 (require 'calc-stat)
|
|
728 (call-interactively 'calc-vector-max))
|
|
729 :keys "u x"
|
|
730 :help "The maximum of the data values"]
|
|
731 ["min(1:)"
|
|
732 (progn
|
|
733 (require 'calc-stat)
|
|
734 (call-interactively 'calc-vector-min))
|
|
735 :keys "u N"
|
|
736 :help "The minumum of the data values"]
|
|
737 ["mean(1:)"
|
|
738 (progn
|
|
739 (require 'calc-stat)
|
|
740 (call-interactively 'calc-vector-mean))
|
|
741 :keys "u M"
|
|
742 :help "The average (arithmetic mean) of the data values"]
|
|
743 ["mean(1:) with error"
|
|
744 (progn
|
|
745 (require 'calc-stat)
|
|
746 (call-interactively 'calc-vector-mean-error))
|
|
747 :keys "I u M"
|
|
748 :help "The average (arithmetic mean) of the data values as an error form"]
|
|
749 ["sdev(1:)"
|
|
750 (progn
|
|
751 (require 'calc-stat)
|
|
752 (call-interactively 'calc-vector-sdev))
|
|
753 :keys "u S"
|
|
754 :help "The sample sdev, sqrt[sum((values - mean)^2)/(N-1)]"]
|
|
755 ["variance(1:)"
|
|
756 (progn
|
|
757 (require 'calc-stat)
|
|
758 (call-interactively 'calc-vector-variance))
|
|
759 :keys "H u S"
|
|
760 :help "The sample variance, sum((values - mean)^2)/(N-1)"]
|
|
761 ["population sdev(1:)"
|
|
762 (progn
|
|
763 (require 'calc-stat)
|
|
764 (call-interactively 'calc-vector-pop-sdev))
|
|
765 :keys "I u S"
|
|
766 :help "The population sdev, sqrt[sum((values - mean)^2)/N]"]
|
|
767 ["population variance(1:)"
|
|
768 (progn
|
|
769 (require 'calc-stat)
|
|
770 (call-interactively 'calc-vector-pop-variance))
|
|
771 :keys "H I u S"
|
|
772 :help "The population variance, sum((values - mean)^2)/N"]
|
|
773 ["median(1:)"
|
|
774 (progn
|
|
775 (require 'calc-stat)
|
|
776 (call-interactively 'calc-vector-median))
|
|
777 :keys "H u M"
|
|
778 :help "The median of the data values"]
|
|
779 ["harmonic mean(1:)"
|
|
780 (progn
|
|
781 (require 'calc-stat)
|
|
782 (call-interactively 'calc-vector-harmonic-mean))
|
|
783 :keys "H I u M"]
|
|
784 ["geometric mean(1:)"
|
|
785 (progn
|
|
786 (require 'calc-stat)
|
|
787 (call-interactively 'calc-vector-geometric-mean))
|
|
788 :keys "u G"]
|
|
789 ["arithmetic-geometric mean(1:)"
|
|
790 (progn
|
|
791 (require 'calc-stat)
|
|
792 (let ((calc-hyperbolic-flag t))
|
|
793 (call-interactively 'calc-vector-geometric-mean)))
|
|
794 :keys "H u G"]
|
|
795 ["RMS(1:)"
|
|
796 (progn (require 'calc-arith)
|
|
797 (call-interactively 'calc-abs))
|
|
798 :keys "A"
|
|
799 :help "The root-mean-square, or quadratic mean"])
|
|
800 ["Abbreviate long vectors"
|
|
801 (progn
|
|
802 (require 'calc-mode)
|
|
803 (call-interactively 'calc-full-vectors))
|
|
804 :keys "v ."
|
|
805 :style toggle
|
|
806 :selected (not calc-full-vectors)]
|
|
807 "----"
|
|
808 ["Help on Matrices/Vectors"
|
|
809 (calc-info-goto-node "Matrix Functions")])
|
|
810 "Menu for Calc's vector and matrix functions.")
|
|
811
|
|
812 (defvar calc-units-menu
|
|
813 (list "Units"
|
|
814 ["Convert units in (1:)"
|
|
815 (progn
|
|
816 (require 'calc-units)
|
|
817 (call-interactively 'calc-convert-units ))
|
|
818 :keys "u c"]
|
|
819 ["Convert temperature in (1:)"
|
|
820 (progn
|
|
821 (require 'calc-units)
|
|
822 (call-interactively 'calc-convert-temperature))
|
|
823 :keys "u t"]
|
|
824 ["Simplify units in (1:)"
|
|
825 (progn
|
|
826 (require 'calc-units)
|
|
827 (call-interactively 'calc-simplify-units))
|
|
828 :keys "u s"]
|
|
829 ["View units table"
|
|
830 (progn
|
|
831 (require 'calc-units)
|
|
832 (call-interactively 'calc-view-units-table))
|
|
833 :keys "u V"]
|
|
834 "----"
|
|
835 ["Help on Units"
|
|
836 (calc-info-goto-node "Units")])
|
|
837 "Menu for Calc's units functions.")
|
|
838
|
|
839 (defvar calc-variables-menu
|
|
840 (list "Variables"
|
|
841 ["Store (1:) into a variable"
|
|
842 (progn
|
|
843 (require 'calc-store)
|
|
844 (call-interactively 'calc-store))
|
|
845 :keys "s s"]
|
|
846 ["Recall a variable value"
|
|
847 (progn
|
|
848 (require 'calc-store)
|
|
849 (call-interactively 'calc-recall ))
|
|
850 :keys "s r"]
|
|
851 ["Edit the value of a variable"
|
|
852 (progn
|
|
853 (require 'calc-store)
|
|
854 (call-interactively 'calc-edit-variable))
|
|
855 :keys "s e"]
|
|
856 ["Exchange (1:) with a variable value"
|
|
857 (progn
|
|
858 (require 'calc-store)
|
|
859 (call-interactively 'calc-store-exchange))
|
|
860 :keys "s x"]
|
|
861 ["Clear variable value"
|
|
862 (progn
|
|
863 (require 'calc-store)
|
|
864 (call-interactively 'calc-unstore))
|
|
865 :keys "s u"]
|
|
866 ["Evaluate variables in (1:)"
|
|
867 (progn
|
|
868 (require 'calc-ext)
|
|
869 (call-interactively 'calc-evaluate))
|
|
870 :keys "="]
|
|
871 ["Evaluate (1:), assigning a value to a variable"
|
|
872 (progn
|
|
873 (require 'calc-store)
|
|
874 (call-interactively 'calc-let))
|
|
875 :keys "s l"
|
|
876 :help "Evaluate (1:) under a temporary assignment of a variable"]
|
|
877 "----"
|
|
878 ["Help on Variables"
|
|
879 (calc-info-goto-node "Store and Recall")])
|
|
880 "Menu for Calc's variables.")
|
|
881
|
|
882 (defvar calc-stack-menu
|
|
883 (list "Stack"
|
|
884 ["Remove (1:)"
|
|
885 calc-pop
|
|
886 :keys "DEL"]
|
|
887 ["Switch (1:) and (2:)"
|
|
888 calc-roll-down
|
|
889 :keys "TAB"]
|
|
890 ["Duplicate (1:)"
|
|
891 calc-enter
|
|
892 :keys "RET"]
|
|
893 ["Edit (1:)"
|
|
894 (progn
|
|
895 (require 'calc-yank)
|
|
896 (call-interactively calc-edit))
|
|
897 :keys "`"]
|
|
898 "----"
|
|
899 ["Help on Stack"
|
|
900 (calc-info-goto-node "Stack and Trail")])
|
|
901 "Menu for Calc's stack functions.")
|
|
902
|
|
903 (defvar calc-errors-menu
|
|
904 (list "Undo"
|
|
905 ["Undo"
|
|
906 (progn
|
|
907 (require 'calc-undo)
|
|
908 (call-interactively 'calc-undo))
|
|
909 :keys "U"]
|
|
910 ["Redo"
|
|
911 (progn
|
|
912 (require 'calc-undo)
|
|
913 (call-interactively 'calc-redo))
|
|
914 :keys "D"]
|
|
915 "----"
|
|
916 ["Help on Undo"
|
|
917 (progn
|
|
918 (calc-info-goto-node "Introduction")
|
|
919 (Info-goto-node "Undo"))]))
|
|
920
|
|
921 (defvar calc-modes-menu
|
|
922 (list "Modes"
|
|
923 ["Precision"
|
|
924 (progn
|
|
925 (require 'calc-ext)
|
|
926 (call-interactively 'calc-precision))
|
|
927 :keys "p"
|
|
928 :help "Set the precision for floating point calculations"]
|
|
929 ["Fraction mode"
|
|
930 (progn
|
|
931 (require 'calc-frac)
|
|
932 (call-interactively 'calc-frac-mode))
|
|
933 :keys "m f"
|
|
934 :style toggle
|
|
935 :selected calc-prefer-frac
|
|
936 :help "Leave integer quotients as fractions"]
|
|
937 ["Symbolic mode"
|
|
938 (lambda ()
|
|
939 (interactive)
|
|
940 (require 'calc-mode)
|
|
941 (calc-symbolic-mode nil))
|
|
942 :keys "m s"
|
|
943 :style toggle
|
|
944 :selected calc-symbolic-mode
|
|
945 :help "Leave functions producing inexact answers in symbolic form"]
|
|
946 ["Infinite mode"
|
|
947 (lambda ()
|
|
948 (interactive)
|
|
949 (require 'calc-mode)
|
|
950 (calc-infinite-mode nil))
|
|
951 :keys "m i"
|
|
952 :style toggle
|
|
953 :selected calc-infinite-mode
|
|
954 :help "Let expressions like 1/0 produce infinite results"]
|
|
955 ["Abbreviate long vectors"
|
|
956 (progn
|
|
957 (require 'calc-mode)
|
|
958 (call-interactively 'calc-full-vectors))
|
|
959 :keys "v ."
|
|
960 :style toggle
|
|
961 :selected (not calc-full-vectors)]
|
|
962 (list "Angle measure"
|
|
963 ["Radians"
|
|
964 (progn
|
|
965 (require 'calc-math)
|
|
966 (call-interactively 'calc-radians-mode))
|
|
967 :keys "m r"
|
|
968 :style radio
|
|
969 :selected (eq calc-angle-mode 'rad)]
|
|
970 ["Degrees"
|
|
971 (progn
|
|
972 (require 'calc-math)
|
|
973 (call-interactively 'calc-degrees-mode))
|
|
974 :keys "m d"
|
|
975 :style radio
|
|
976 :selected (eq calc-angle-mode 'deg)]
|
|
977 ["HMS"
|
|
978 (progn
|
|
979 (require 'calc-math)
|
|
980 (call-interactively 'calc-hms-mode))
|
|
981 :keys "m h"
|
|
982 :style radio
|
|
983 :selected (eq calc-angle-mode 'hms)])
|
|
984 (list "Radix"
|
|
985 ["Decimal"
|
|
986 (progn
|
|
987 (require 'calc-bin)
|
|
988 (call-interactively 'calc-decimal-radix))
|
|
989 :keys "d 0"
|
|
990 :style radio
|
|
991 :selected (= calc-number-radix 10)]
|
|
992 ["Binary"
|
|
993 (progn
|
|
994 (require 'calc-bin)
|
|
995 (call-interactively 'calc-binary-radix))
|
|
996 :keys "d 2"
|
|
997 :style radio
|
|
998 :selected (= calc-number-radix 2)]
|
|
999 ["Octal"
|
|
1000 (progn
|
|
1001 (require 'calc-bin)
|
|
1002 (call-interactively 'calc-octal-radix))
|
|
1003 :keys "d 8"
|
|
1004 :style radio
|
|
1005 :selected (= calc-number-radix 8)]
|
|
1006 ["Hexadecimal"
|
|
1007 (progn
|
|
1008 (require 'calc-bin)
|
|
1009 (call-interactively 'calc-hex-radix))
|
|
1010 :keys "d 6"
|
|
1011 :style radio
|
|
1012 :selected (= calc-number-radix 16)]
|
|
1013 ["Other"
|
|
1014 (progn
|
|
1015 (require 'calc-bin)
|
|
1016 (call-interactively 'calc-radix))
|
|
1017 :keys "d r"
|
|
1018 :style radio
|
|
1019 :selected (not
|
|
1020 (or
|
|
1021 (= calc-number-radix 10)
|
|
1022 (= calc-number-radix 2)
|
|
1023 (= calc-number-radix 8)
|
|
1024 (= calc-number-radix 16)))])
|
|
1025 (list "Float format"
|
|
1026 ["Normal"
|
|
1027 (progn
|
|
1028 (require 'calc-mode)
|
|
1029 (call-interactively 'calc-normal-notation))
|
|
1030 :keys "d n"
|
|
1031 :style radio
|
|
1032 :selected (eq (car-safe calc-float-format) 'float)]
|
|
1033 ["Fixed point"
|
|
1034 (progn
|
|
1035 (require 'calc-mode)
|
|
1036 (call-interactively 'calc-fix-notation))
|
|
1037 :keys "d f"
|
|
1038 :style radio
|
|
1039 :selected (eq (car-safe calc-float-format) 'fix)]
|
|
1040 ["Scientific notation"
|
|
1041 (progn
|
|
1042 (require 'calc-mode)
|
|
1043 (call-interactively 'calc-sci-notation))
|
|
1044 :keys "d s"
|
|
1045 :style radio
|
|
1046 :selected (eq (car-safe calc-float-format) 'sci)]
|
|
1047 ["Engineering notation"
|
|
1048 (progn
|
|
1049 (require 'calc-mode)
|
|
1050 (call-interactively 'calc-eng-notation))
|
|
1051 :keys "d e"
|
|
1052 :style radio
|
|
1053 :selected (eq (car-safe calc-float-format) 'eng)])
|
|
1054 (list "Algebraic"
|
|
1055 ["Algebraic Mode"
|
|
1056 (progn
|
|
1057 (require 'calc-mode)
|
|
1058 (call-interactively 'calc-algebraic-mode))
|
|
1059 :keys "m a"
|
|
1060 :style radio
|
|
1061 :selected (eq calc-algebraic-mode t)
|
|
1062 :help "Keys which start numeric entry also start algebraic entry"]
|
|
1063 ["Total Algebraic Mode"
|
|
1064 (progn
|
|
1065 (require 'calc-mode)
|
|
1066 (call-interactively 'calc-total-algebraic-mode))
|
|
1067 :keys "m t"
|
|
1068 :style radio
|
|
1069 :selected (eq calc-algebraic-mode 'total)
|
|
1070 :help "All regular letters and punctuation begin algebraic entry"])
|
|
1071 "----"
|
|
1072 ["Save mode settings" calc-save-modes :keys "m m"]
|
|
1073 "----"
|
|
1074 ["Help on Modes"
|
|
1075 (calc-info-goto-node "Mode settings")])
|
|
1076 "Menu for Calc's mode settings.")
|
|
1077
|
|
1078 (defvar calc-help-menu
|
|
1079 (list "Help"
|
|
1080 ["Manual"
|
|
1081 calc-info
|
|
1082 :keys "h i"]
|
|
1083 ["Tutorial"
|
|
1084 calc-tutorial
|
|
1085 :keys "h t"]
|
|
1086 ["Summary"
|
|
1087 calc-info-summary
|
|
1088 :keys "h s"]
|
|
1089 "----"
|
|
1090 ["Help on Help"
|
|
1091 (progn
|
|
1092 (calc-info-goto-node "Introduction")
|
|
1093 (Info-goto-node "Help Commands"))])
|
|
1094 "Menu for Calc's help functions.")
|
|
1095
|
|
1096 (easy-menu-define
|
|
1097 calc-menu
|
|
1098 calc-mode-map
|
|
1099 "Menu for Calc."
|
|
1100 (list "Calc"
|
|
1101 calc-arithmetic-menu
|
|
1102 calc-scientific-function-menu
|
|
1103 calc-algebra-menu
|
|
1104 calc-graphics-menu
|
|
1105 calc-vectors-menu
|
|
1106 calc-units-menu
|
|
1107 calc-variables-menu
|
|
1108 calc-stack-menu
|
|
1109 calc-errors-menu
|
|
1110 calc-modes-menu
|
|
1111 calc-help-menu
|
|
1112 ["Reset"
|
|
1113 (progn
|
|
1114 (require 'calc-ext)
|
|
1115 (call-interactively 'calc-reset))
|
|
1116 :help "Reset Calc to its initial state"]
|
|
1117 ["Quit" calc-quit]))
|
|
1118
|
|
1119 (provide 'calc-menu)
|