Documentation for Maxima source code blocks.
[worg.git] / org-contrib / babel / languages / ob-doc-maxima.org
1 #+OPTIONS:    H:3 num:nil toc:2 \n:nil @:t ::t |:t ^:{} -:t f:t *:t TeX:t LaTeX:t skip:nil d:(HIDE) tags:not-in-toc
2 #+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate hideblocks
3 #+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
4 #+TAGS:       Write(w) Update(u) Fix(f) Check(c) noexport(n)
5 #+TITLE:      Maxima Source Code Blocks in Org Mode
6 #+AUTHOR:     Thomas S. Dye
7 #+EMAIL:      tsd[at]tsdye[dot]com
8 #+LANGUAGE:   en
9 #+STYLE:      <style type="text/css">#outline-container-introduction{ clear:both; }</style>
10 #+LINK_UP:    ../languages.html
11 #+LINK_HOME:  http://orgmode.org/worg/
12 #+EXPORT_EXCLUDE_TAGS: noexport
13
14 #+name: banner
15 #+begin_html
16   <div id="subtitle" style="float: center; text-align: center;">
17   <p>
18   Org Mode support for <a href="http://maxima.sourceforge.net/">Maxima</a>
19   </p>
20   <p>
21   <a href="http://maxima.sourceforge.net/">
22   <img src="http://maxima.sourceforge.net/i/logo.png"/>
23   </a>
24   </p>
25   </div>
26 #+end_html
27
28 * Template Checklist [8/12]                                        :noexport:
29   - [X] Revise #+TITLE:
30   - [X] Indicate #+AUTHOR:
31   - [X] Add #+EMAIL:
32   - [X] Revise banner source block [3/3]
33     - [X] Add link to a useful language web site
34     - [X] Replace "Language" with language name
35     - [X] Find a suitable graphic and use it to link to the language
36       web site
37   - [X] Write an [[Introduction]]
38   - [X] Describe [[Requirements%20and%20Setup][Requirements and Setup]]
39   - [X] Replace "Language" with language name in [[Org%20Mode%20Features%20for%20Language%20Source%20Code%20Blocks][Org Mode Features for Language Source Code Blocks]]
40   - [ ] Describe [[Header%20Arguments][Header Arguments]]
41   - [ ] Describe support for [[Sessions]]
42   - [ ] Describe [[Result%20Types][Result Types]]
43   - [ ] Describe [[Other]] differences from supported languages
44   - [X] Provide brief [[Examples%20of%20Use][Examples of Use]]
45 * Introduction
46 Maxima is a computer algebra system descended from Macsyma, which was
47 originally released in 1982.  It is released under the terms of the
48 GNU General Public License.
49
50 Maxima is written in Common Lisp.  It can be accessed and extended in
51 Lisp. 
52
53 * Requirements and Setup
54 Maxima binaries are available for Windows and Linux.  These either
55 require a compatible Common Lisp or an executable Lisp image.  Mac OS
56 X users can install via brew or MacPorts.  The combinations of
57 operating system and Lisp implementation known to run Maxima can be
58 found on [[http://maxima-project.org/wiki/index.php?title%3DMaxima_ports][the Maxima ports page]].
59
60 There are several versions of Maxima, some with different names.  The
61 variable =org-babel-maxima-command= can be set to the name of your
62 Maxima executable.  The default value is "maxima".
63
64 Maxima ships with =Emacs= modes.  Instructions for configuring them
65 can be found on [[http://emacswiki.org/emacs/MaximaMode][emacswiki]].  =imaxima= is an =Emacs= front end with
66 image that displays fully typeset math in your =Emacs= window.
67
68 You must activate Maxima by adding a line to
69 =org-babel-load-languages=:
70
71 #+BEGIN_SRC emacs-lisp
72     (org-babel-do-load-languages
73      'org-babel-load-languages
74      '((maxima . t))) ; this line activates maxima
75 #+END_SRC
76
77
78 * Org Mode Features for Maxima Source Code Blocks
79 ** Header Arguments
80 There are no Maxima-specific default header argument values.
81
82 The header argument, =:cmdline=, can be used to pass command line
83 arguments to Maxima.
84
85 ** Sessions
86 Org-mode support for Maxima does not include sessions.
87
88 ** Result Types
89 Maxima produces the full range of result types.
90
91 * Examples of Use
92
93 The following source code block uses =maxima= as a calculator for
94 powers of 12, where the powers are passed with a variable.
95
96 #+begin_example
97 ,#+name: test-maxima
98 ,#+header: :exports results
99 ,#+header: :var x=1.3121254
100 ,#+begin_src maxima 
101   programmode: false;
102   print(12^x);
103 ,#+end_src
104 #+end_example
105
106 #+name: test-maxima
107 #+header: :exports results
108 #+header: :var x=1.3121254
109 #+begin_src maxima 
110   programmode: false;
111   print(12^x);
112 #+end_src
113
114 #+results: test-maxima
115 : 26.06280316745402
116
117 Of course, =maxima= is more than a calculator.
118
119 #+begin_example
120 ,#+name: solve-maxima
121 ,#+header: :exports results
122 ,#+begin_src maxima :results output
123   programmode: false;
124   eq: x**2-16 = 0;
125   solution: solve(eq, x);
126   print(solution);
127 ,#+end_src
128 #+end_example
129
130 #+name: solve-maxima
131 #+header: :exports results
132 #+begin_src maxima :results output
133   programmode: false;
134   eq: x**2-16 = 0;
135   solution: solve(eq, x);
136   print(solution);
137 #+end_src
138
139 #+results: solve-maxima
140 : solve: solution:
141 :                                     x = - 4
142 :                                      x = 4
143 : [%t1, %t2] 
144
145 With =gnuplot= installed (4.0 or higher), 3D graphics are possible.
146 This example is from [[http://maxima.sourceforge.net/maxima-gnuplot.html][a tutorial on the maxima/gnuplot interface]].
147
148 #+begin_example
149 ,#+name: 3d-maxima
150 ,#+header: :file images/maxima-3d.png
151 ,#+header: :exports results
152 ,#+header: :results graphics
153 ,#+begin_src maxima 
154   programmode: false;
155   plot3d(atan(-x^2+y^3/4),[x,-4,4],[y,-4,4],[grid,50,50],[gnuplot_pm3d,true]);
156 ,#+end_src
157 #+end_example
158
159 #+name: 3d-maxima
160 #+header: :file images/maxima-3d.png
161 #+header: :results graphics
162 #+header: :exports results
163 #+begin_src maxima 
164   programmode: false;
165   plot3d(atan(-x^2+y^3/4),[x,-4,4],[y,-4,4],[grid,50,50],[gnuplot_pm3d,true]);
166 #+end_src
167
168 #+results: 3d-maxima
169 [[file:images/maxima-3d.png]]
170