Use 1//2 instead of ((rat simp) 1 2)
[maxima.git] / doc / tutorial / pt / max.tex
blob23545cf580246c78d4d8bb3aeb654435c4dfc3b4
1 %/gnuplot1.png/1.1/Mon May 2 13:07:17 2005//
2 %/gnuplot2.png/1.1/Mon May 2 13:07:19 2005//
3 %/gnuplot3.png/1.1/Mon May 2 13:07:19 2005//
4 %/gnuplot4.png/1.1/Mon May 2 13:07:19 2005//
5 %/gnuplot5.png/1.1/Mon May 2 13:07:19 2005//
6 %/gnuplot6.png/1.1/Mon May 2 13:07:19 2005//
7 %/gnuplot7.png/1.1/Mon May 2 13:07:19 2005//
8 %/gnuplot8.png/1.1/Mon May 2 13:07:19 2005//
9 %/grafico.eps/1.1/Mon May 2 13:07:19 2005//
10 %/grafico.pdf/1.1/Mon May 2 13:07:19 2005//
11 %/grafico.png/1.1/Mon May 2 13:07:19 2005//
12 %/max.tex/1.4/Fri Sep 9 22:58:18 2005//
13 %/maxima.png/1.1/Mon May 2 13:07:19 2005//
14 %/openmath1.png/1.1/Mon May 2 13:07:19 2005//
15 %/openmath2.png/1.1/Mon May 2 13:07:19 2005//
16 %/texmacs.png/1.1/Mon May 2 13:07:19 2005//
17 %/wxmaxima.png/1.1/Mon May 2 13:07:19 2005//
18 %/xmaxima.png/1.1/Mon May 2 13:07:19 2005//
19 \documentclass[12pt,titlepage,a4paper]{article}
20 \pagestyle{headings}
21 \title{\textbf{\Huge{Primeiros passos no Maxima}}}
22 \author{\Large{Mario Rodr\'{\i}guez Riotorto}\\
24 www.biomates.net\\
26 Tradutor - Jorge Barros de Abreu
28 \setlength{\oddsidemargin}{1cm}
29 \setlength{\textwidth}{14cm}
30 \setlength{\topmargin}{1.2cm}
31 \setlength{\textheight}{20cm}
32 \usepackage{graphicx}
33 \usepackage{lscape}
34 \usepackage[latin1]{inputenc}
35 \usepackage[brazil]{babel}
36 \usepackage{amsfonts}
37 \usepackage{latexsym}
38 \usepackage{amsmath,amsthm}
39 \usepackage{hyperref}
40 \usepackage{makeidx}
41 \usepackage[T1]{fontenc}
42 \usepackage{pslatex}
43 \hypersetup{colorlinks,
44 citecolor=black,
45 filecolor=black,
46 linkcolor=black,
47 urlcolor=black,
48 pdftex}
50 \newcommand{\normal}{\mathcal{N}}
51 \newcommand{\N}{\mathbb{N}}
52 \newcommand{\Z}{\mathbb{Z}}
53 \newcommand{\Q}{\mathbb{Q}}
54 \newcommand{\R}{\mathbb{R}}
56 \makeindex
58 \hyphenation{ma-te-má-ti-ca}
59 \hyphenation{e-xem-plo}
60 \hyphenation{ins-tru-ção}
61 \hyphenation{re-pre-sen-ta-rão}
62 \hyphenation{co-nhe-ci-men-tos}
63 \hyphenation{x-ma-xi-ma}
64 \hyphenation{Ma-xi-ma}
65 \hyphenation{de-ve-r\'a}
66 \hyphenation{subs-ti-tui-mos}
67 \hyphenation{re-a-li-za-das}
68 \hyphenation{va-ri-\'a-vel}
69 \hyphenation{va-lo-res}
70 \hyphenation{pa-ra-m\'e-tri-ca}
71 \hyphenation{me-ca-nis-mo}
72 \hyphenation{en-car-re-ga-re-mos}
73 \hyphenation{di-men-s\~oes}
74 \hyphenation{in-vo-ca-r\'a}
75 \hyphenation{re-fe-r\^en-cia}
76 \hyphenation{fa-cil-men-te}
77 \hyphenation{cons-tru-ção}
78 \hyphenation{a-rit-m\'e-ti-cas}
79 \hyphenation{di-fe-ren-te}
80 \hyphenation{dis-põe}
81 \hyphenation{fre-qüên-te}
82 \hyphenation{va-ri-á-veis}
83 \hyphenation{tem-po-rá-rias}
85 %versión: 04-09-05
87 \begin{document}
88 \maketitle
89 \newpage
90 \tableofcontents
91 \newpage
93 \bigskip
94 \begin{quote}
95 Copyright \copyright 2005 Mario Rodríguez Riotorto.
97 Permission is granted to copy, distribute and/or modify this document
98 under the terms of the GNU Free Documentation License, Version 1.2
99 or any later version published by the Free Software Foundation;
100 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
101 A copy of the license is included in the section entitled "GNU
102 Free Documentation License".
103 \end{quote}
104 \bigskip
106 \newpage
108 \newpage
109 \section{Introdução}
111 Este é um manual introdutório sobre o programa de cálculo simbólico Maxima, sucessor direto do lendário MACSYMA.
113 O objetivo do manual é facilitar o acesso a este programa a todas aquelas pessoas que pela primeira vez se interesam por ele.
115 Maxima é um programa cujo objetivo é a realização de cálculos matemáticos, tanto numéricos quanto simbólicos, capaz de manipular expressões algebrícas, derivar e integrar funções e montar diversos tipos de gráfico.
117 As orígens do Maxima temos que procurá-las a partir do ano de 1967 no MIT AI Lab (Laboratório de Inteligência Artificial do Instituto Tecnológico de Massachussets) como uma parte do projeto MAC (Machine Aided Cognition - Cognição Auxiliada por Máquina). O programa receberia o nome de Macsyma (MAC's SYmbolic MAnipulator - Manipulador Simbólico do MAC ), do qual o MIT mandaria uma cópia em 1982 ao DOE (Department Of Energy - Departamento de Energia), um dos organismos que contribuiram financeiramente para o desenvolvimento do projeto; esta primeira versão é conhecida como DOE-Macsyma. Posteriormente, o DOE concede a licença de exploração do programa à empresa Symbolics, que segue desenvolvendo o projeto durante alguns anos. Em 1992 o programa é adquirido por uma empresa que se chamaria precisamente Macsyma Inc, e o programa iria perdendo fôlego progressivamente diante a presença no mercado de outros programas similares como Maple ou Mathematica, ambos inspirados em suas orígens pelo próprio Macsyma.
119 Ocorreram duas histórias paralelas. Desde o ano de 1982, e até seu falecimento em 2001, William Schelter na Universidad do Texas manteve uma versão deste programa adaptada ao Lisp Comum padrão, a qual se conhecia com o nome de Maxima para diferenciá-la da versão comercial. No ano de 1998 Schelter conseguiu do DOE permissão para distribuir Maxima sob a licença GNU-GPL (www.gnu.org); com esse passo, muito mais pessoas começaram a dirigir seu olhar na direção do Maxima, justo no momento em que a versão comercial estava praticamente morta. Atualmente, o projeto está sendo liderado por um grupo de desenvolvedores oriundos de vários países, tanto do meio unversitário como do meio empresarial, assistidos e ajudados por outras muitas pessoas interessadas no Maxima e que mantêm um canal de comunicação através de uma lista de e-mails (maxima.sourceforge.net/maximalist.html).
121 Devido ao fato de que Maxima é distribuído sob a licença GNU-GPL, tanto o código fonte como os manuais são de livre acesso através da página web do projeto (maxima.sourceforge.net).
123 Como professor de matemáticas, não resisto a traduzir umas linhas do capítulo introdutório do manual oficial do programa:
125 \begin{quote}
126 Aquele que se prestam a utilizar o computador para fazer matemática, particularmente os estudantes, devem ter sempre em mente que estes ambientes não são substitutos do trabalho manual com as equações nem do esforço de compreender os conceitos. Estes meios não ajudam a formar a intuição nem a reforçar os conhecimentos fundamentais... Não se deve utilizar o computador como um substituto da formação básica.
128 Sem impedimentos, o domínio do computador e das ferramentas matemáticas computacionais são cruciais na hora de abordar o grande número de problemas que não podem ser resolvidos simplesmente com lápis e papel. Em muitos casos, problemas que demorariam anos para serem resolvidos de forma manual podem ser resolvidos em questão de segundos com um computador... Além disso, em caso de erro, sua correção será mais rápida e simplesmente voltando a executar um código já escrito, mas convenientemente modificado para sanar a falha.
130 Se bem que o computador pode corrigir erros humanos, o humano por sua parte tampouco deve confiar no computador de forma inquestionável. Todos estes sistemas possuem seus limites e quando esses limites são alcançados, é possível obter respostas incorretas... Dessa forma, não se pode abrir mão de revisar os resultados que forem obtidos. O computador não diz sempre a verdade, e se a disser, certamente não será completa.
131 \end{quote}
133 \begin{flushright}
134 \emph{Ferrol-A Coru\~{n}a}
135 \end{flushright}
138 \newpage
139 \section{Instalação}
141 É possível ter o programa Maxima tanto em Linux como em Windows. A informação para a instalação nestes dois sistemas pode ser encontrada na página \emph{web} do projeto.
143 No que se refere ao Linux, o pacote básico tem o programa Maxima no ambiente do console de texto, Figura~\ref{fig:consola}, mas também é possível a instalação de módulos ou programas adicionais que permitam a utilização do programa através de um ambiente gráfico; aqui se pode escolher várias opções: xmaxima, Figura~\ref{fig:tcl}, baseado em Tcl-Tk e disponível na própria página do projeto Maxima; wxmaxima (wxmaxima.sourceforge.net), Figura~\ref{fig:wxmaxima}, baseado em wxWidgets que surgiu mais recentemente; também existe a possibilidade de acessar o Maxima a partir de uma sessão do editor de texto WYSIWYG TeXmacs (www.texmacs.org), Figura~\ref{fig:texmacs}, que ao fazer uso das fontes \TeX \\(www.tug.org/teTeX) aumenta consideravelmente a qualidade na impressão de fórmulas e expressões matemáticas. Um programa adicional que não deve faltar é o gnuplot (www.gnuplot.info) para a representação de gráficos em 2D e 3D. Todos estes programas podem ser baixados gratuitamente da internet. Para a instalação destes programas deve-se ler a documentação correspondente a cada caso.
145 Também, e para os mais valentes, é possível baixar o código fonte e compilá-lo, para o que será necesario ter operacional um ambiente Lisp na máquina, como GCL (www.gnu.org/software/gcl), CLISP (clisp.cons.org) o CMUCL (www.cons.org/cmucl).
147 Quanto ao Windows, também a partir da página do projeto pode-se baixar um executável que instala xmaxima, com uma aparência similar à da Figura~\ref{fig:tcl}. Se o wxmaxima tiver a preferência, uma vez instalado o pacote anterior (xmaxima), se fará uso do executável para este sistema operacional que se encontrará no sítio wxmaxima.sourceforge.net.
149 \begin{figure}
150 \includegraphics[angle=90]{maxima.png}
151 \caption{Maxima operando no console modo texto.}
152 \label{fig:consola}
153 \end{figure}
156 \begin{figure}
157 \includegraphics[angle=90]{xmaxima.png}
158 \caption{xmaxima: Maxima trabalhando em ambiente gráfico Tcl-Tk.}
159 \label{fig:tcl}
160 \end{figure}
163 \begin{figure}
164 \includegraphics[]{wxmaxima.png}
165 \caption{wxmaxima: Maxima sendo executado no Windows.}
166 \label{fig:wxmaxima}
167 \end{figure}
170 \begin{figure}
171 \includegraphics[angle=90]{texmacs.png}
172 \caption{Maxima trabalhando no TeXmacs.}
173 \label{fig:texmacs}
174 \end{figure}
179 \newpage
180 \section{Primeira sessão com Maxima}
182 Uma vez que entramos no Maxima, o que veremos primeiro será a seguinte informação:
183 \begin{verbatim}
184 Maxima 5.9.2 http://maxima.sourceforge.net
185 Using Lisp CLISP 2.33.2 (2004-06-02)
186 Distributed under the GNU Public License. See the file COPYING.
187 Dedicated to the memory of William Schelter.
188 This is a development version of Maxima. The function bug_report()
189 provides bug reporting information.
190 (%i1)
191 \end{verbatim}
193 Trás a informação sobre a licença, GNU-GPL, nos informa sobre a versão que estamos trabalhando e a página \emph{web} do projeto. A continuação, muito importante, aparece o indicador \verb|(%i1)| esperando nossa primeira pergunta. Se queremos calcular uma simples soma teclamos a operação desejada seguida de um ponto e vírgula (\verb|;|)\index{1@; (ponto e vírgula)} e uma apertamos a tecla Enter
194 \begin{verbatim}
195 (%i1) 45 + 23;
196 \end{verbatim}
197 ao que Maxima nos responderá
198 \begin{verbatim}
199 (%o1) 68
200 (%i2)
201 \end{verbatim}
202 indicando \verb|(%i2)| que Maxima espera nossa segunda instrução.
204 \begin{verbatim}
205 (%i2) x:34578; y:984003; x*y;
206 (%o2) 34578
207 (%o3) 984003
208 (%o4) 34024855734
209 (%i5)
210 \end{verbatim}
211 é conveniente prestar atenção ao fato de que a atribuição de um valor a uma variável se faz com os dois pontos, não com o sinal de igualdade, que se reserva para as equações.
213 É possível que não desejemos os resultados intermediários que Maxima vá calculando ou, como neste caso, que se deseje apenas as atribuições às variáveis; em tais situações convém fazer uso do delimitador \verb|$|\index{3@\$}, que não devolve ao console os resultados que forem sendo calculados. Repetindo o cálculo da forma
214 \begin{verbatim}
215 (%i5) x:34578$ y:984003$ x*y;
216 (%o7) 34024855734
217 \end{verbatim}
218 podemos conseguir uma saída mais limpa. As atribuições a variáveis permanecem ativas enquanto durar a sessão com o Maxima, pelo que podemos subtrair as variáveis \verb|x| e \verb|y| anteriores
219 \begin{verbatim}
220 (%i8) x-y;
221 (%o8) - 949425
222 \end{verbatim}
223 Esta operação deixa um resto; se queremos resolver a equação $x^2-3x+1=0$,
224 \begin{verbatim}
225 (%i9) solve(x^2-3*x+1=0,x);
226 A number was found where a variable was expected -`solve'
227 -- an error. Quitting. To debug this try debugmode(true);
228 \end{verbatim}
229 nos devolve uma mensagem de erro, uma vez que onde se supõe que há uma incógnita, o que realmente encontra é um número, neste caso 34578. O problema se resolve esvaziando o conteúdo da variável \verb|x| mediante a função \verb|kill|\index{kill},
230 \begin{verbatim}
231 (%i10) kill(x)$
232 (%i11) solve(x^2-3*x+1=0,x);
233 sqrt(5) - 3 sqrt(5) + 3
234 (%o11) [x = - -----------, x = -----------]
236 \end{verbatim}
237 logo as soluções da equação formam o conjunto $\{-\frac{\sqrt{5}-3}{2}, \frac{\sqrt{5}+3}{2}\}$. Vemos que em Maxima a raíz quadrada se calcula com a função \verb|sqrt|\index{sqrt}.
239 Os rótulos \verb|(@%ix)|\index{7@%ix} e \verb|(%ox)|\index{8@%ox}, sendo \verb|x| um número inteiro, podem ser utilizadas ao longo de uma sessão a fim de evitar ter que voltar a escrever expressões; assim, se queremos calcular o quociente $\frac{x y}/{x-y}$, com $x=34578$ y $y=984003$, podemos aproveitar os resultados \verb|(%o7)| y \verb|(%o8)| e fazer
240 \begin{verbatim}
241 (%i12) %o7/%o8;
242 11341618578
243 (%o12) - -----------
244 316475
245 \end{verbatim}
247 Os rótulos que indicam as entradas e saídas podem ser modificadas à vontade fazendo uso das variáveis \verb|inchar|\index{inchar} e \verb|outchar|\index{outchar},
248 \begin{verbatim}
249 (%i13) inchar;
250 (%o13) %i
251 (%i14) outchar;
252 (%o14) %o
253 (%i15) inchar: "entrada";
254 (%o15) entrada
255 (menda15) outchar: "saída";
256 (lerenda15) "saída"
257 (menda16) 2+6;
258 (lerenda16) 8
259 (menda17) inchar:"%i"$ outchar:"%o"$
260 (%i17)
261 \end{verbatim}
263 No caso de que se pretenda realizar novamente um cálculo já indicado deverá escrever-se dois apóstrofos (\verb|''|)\index{5@''}, não aspas, junto com o rótulo da instrução desejada
264 \begin{verbatim}
265 (%i18) ''%i9;
266 (%o18) x - 984003
267 \end{verbatim}
268 Ôbserve que ao usar \verb|x| sem valor numérico, agora o resultado é outro. Quando deseja fazer referência ao último resultado calculado pelo Maxima pode ser mais simples fazer uso do símbolo \verb|%|\index{6@%}, de forma que se queremos subtrair \verb|x| da última expressão podemos fazer
269 \begin{verbatim}
270 (%i19) %-x;
271 (%o19) - 984003
272 \end{verbatim}
274 Certas constantes matemáticas de uso freqüente possuem um símbolo especial em Maxima: a base dos logarítmos naturais ($e$), o quociente entre o comprimento de uma circunferência e seu diámetro ($\pi$), a unidade imaginária ($i=\sqrt{-1}$) e a constante de Euler-Mascheroni ($\gamma=-\int_0^\infty e^{-x} \ln x dx$), se representarão por \verb|%e|\index{9@%e}, \verb|%pi|\index{11@%pi}, \verb|%i|\index{10@%i} e \verb|%gamma|\index{12@%gamma}, respectivamente.
276 É muito simples pedir ao Maxima que nos informe sobre alguma função de sua linguagem; a técnica nos servirá para ampliar informação sobre qualquier instrução que se faça referência neste manual, por exemplo,
277 \begin{verbatim}
278 (%i20) describe(sqrt);
280 0: isqrt :(maxima.info)Definitions for Operators.
281 1: sqrt :Definitions for Operators.
282 2: sqrtdispflag :Definitions for Operators.
283 Enter space-separated numbers, àll' or `none': 1
285 Info from file /usr/local/info/maxima.info:
286 - Function: sqrt (<x>)
287 The square root of <x>. It is represented internally by
288 `<x>^(1/2)'. See also `rootscontract'.
290 `radexpand' if `true' will ...roots of factors of a product
291 which are powers of n to be ...outside of the radical, e.g.
292 `sqrt(16*x^2)' will ...`4*x' only if `radexpand' is `true'.
294 (%o20) false
295 \end{verbatim}
296 Inicialmente mostra um simples menu no qual devemos selecionar que informação concreta desejamos; nesta ocasião se optou por \verb|1| que é o número associado à função que interessava.
298 A fim de não perder os resultados de uma sessão com Maxima, talvez com o objetivo de continuar o trabalho em próximas jornadas, podemos guardar em um arquivo aqueles valores que nos podem interessar; suponhamos que necesitamos armazenar o conteúdo da variável \verb|y|, tal como o definimos na entrada \verb|(%i5)|, assim como o resultado da saída
299 \verb|(%o11)|, junto com a instrução que a gerou, a entrada \verb|(%i11)|,
300 \begin{verbatim}
301 (%i21) save("minha.sessao",y,resultado=%o11,equacao=%i11)$
302 \end{verbatim}
303 Note que o primeiro argumento de \verb|save|\index{save} é o nome do arquivo, junto com seu caminho se se considera necessário, que a variável \verb|y| se escreve tal qual, porém as referências às entradas e saídas devem ser acompanhadas de um nome que as faça posteriormente reconhecíveis.
305 Por último, a forma correta de abandonar a sessão de Maxima é mediante
306 \index{quit}\begin{verbatim}
307 (%i22) quit();
308 \end{verbatim}
310 Abramos agora uma nova sessão com Maxima e coloquemos na memória os resultados da anterior sessão,
311 \index{load}\begin{verbatim}
312 (%i1) load("minha.sessao")$
313 (%i2) y;
314 (%o2) 984003
315 (%i3) equacao;
317 (%o3) solve(x - 3 x + 1 = 0, x)
318 (%i4) resultado;
319 sqrt(5) - 3 sqrt(5) + 3
320 (%o4) [x = - -----------, x = -----------]
322 \end{verbatim}
324 Se agora quiséssemos recalcular as soluções da equação, modificando-a de maneira que o coeficiente de primeiro grau seja substituído por outro número, simplemente faríamos
325 \index{subst}\index{ev}\begin{verbatim}
326 (%i5) subst(5,3,equacao);
328 (%o5) solve(x - 5 x + 1 = 0, x)
329 (%i6) ev(%);
330 sqrt(21) - 5 sqrt(21) + 5
331 (%o6) [x = - ------------, x = ------------]
333 \end{verbatim}
336 \newpage
337 \section{Operações aritméticas}
339 Os operadores aritméticos mais comuns são:
340 \index{14@+}\index{15@-}\index{16@*}\index{17@/}\index{18@\^\ }\index{19@**}\begin{center}
341 \begin{tabular}{|c|l|} \hline
342 \verb|+| & adição \\
343 \verb|-| & subtração \\
344 \verb|*| & produto \\
345 \verb|/| & divisão \\
346 \verb|^| ou \verb|**| & potência \\ \hline
347 \end{tabular}
348 \end{center}
350 Maxima devolve os resultados de forma exata, sem aproximações decimais; assim temos que, para realizar o cálculo da expressão
352 \left[
353 \left( \frac{3^7}{4+\frac{3}{5}} \right)^{-1} + \frac{7}{9}
354 \right]^3
356 fazermos
357 \begin{verbatim}
358 (%i1) ((3^7/(4+3/5))^(-1)+7/9)^3;
359 620214013952
360 (%o1) -------------
361 1307544150375
362 \end{verbatim}
363 obtendo o resultado em forma de fração simplificada.
365 De outra forma podemos solicitar o resultado em forma decimal; por exemplo, se queremos a expressão decimal do último resultado,
366 \index{numer}\begin{verbatim}
367 (%i2) %,numer;
368 (%o2) .4743350454163436
369 \end{verbatim}
371 Maxima pode trabalhar com precissão arbitrária. Para calcular o valor do quociente $\frac{e}{\pi}$ com 100 casas decimais, deveremos especificar primeiro a precissão requerida atribuindo à variável \verb|fpprec|\index{fpprec} o valor 100 e em seguida realizar o cálculo, solicitando a expressão decimal com uma chamada à função \verb|bfloat|\index{bfloat}:
372 \begin{verbatim}
373 (%i3) fpprec:100$ bfloat(%e/%pi);
374 (%o4) 8.65255979432265087217774789646089617428744623908515#
375 5394543302889480450445706770586319246625161845173B-1
376 \end{verbatim}
377 Note que quando um resultado é devolvido no formato \verb|bfloat| se escreve a letra \verb|B|\index{B} em lugar da clássica \verb|E|\index{E} para indicar o expoente.
379 Na instrução \verb|%i3| se estabelece a precisão desejada e logo se transforma o valor simbólico \verb|%e/%pi| mediante a função \verb|bfloat|. Lembre-se que o símbolo \verb|$| serve como delimitador entre instruções.
381 A fatoração de um número inteiro em fatores primos é um problema difícil de resolver para quantidades grandes; de fato, alguns algorítmos de encriptação (ocultação/embaralhamento de informações) se baseiam nesta dificultade.
382 \index{factor}\begin{verbatim}
383 (%i5) factor(1303948800000);
384 12 3 5 3
385 (%o5) 2 3 5 7 11
386 \end{verbatim}
388 Na seguinte fatoração fazemos uso da variável global \verb|showtime|\index{showtime} para saber o tempo que leva executar o cálculo,
389 \index{33@/*...*/}\begin{verbatim}
390 (%i6) showtime:true$ /* ativamos o contador de tempo */
391 Êvaluation took 0.00 seconds. (0.00 elapsed) using 80 bytes.
392 (%i7) factor(2^300-1);
393 Êvaluation took 349.35 sec. (352.10 elap.) using 21866187.852 KB.
395 (%o7) 3 5 7 11 13 31 41 61 101 151 251 331 601 1201 1321
396 1801 4051 8101 63901 100801 268501 10567201 13334701
397 1182468601 1133836730401
398 (%i8) showtime:false$ /* desativamos o contador */
399 \end{verbatim}
400 O texto que se escreve entre \verb|/*| e \verb|*/| são comentários que Maxima ignora.
402 Em relação aos números primos, para saber se um número é ou não primo,
403 \index{primep}\begin{verbatim}
404 (%i9) primep(3^56-1);
405 (%o9) false
406 \end{verbatim}
407 E para solicitar ao Maxima que comprove se um número é par ou impar necessitamos lançar mão das funções \verb|evenp|\index{evenp} ou \verb|oddp|\index{oddp}, respectivamente,
408 \begin{verbatim}
409 (%i10) evenp(42);
410 (%o10) true
411 (%i11) oddp(31);
412 (%o11) true
413 \end{verbatim}
416 Solicitamos ao Maxima que nos faça uma lista com todos os divisores de um número,
417 \index{divisors}\begin{verbatim}
418 (%i12) divisors(100);
419 (%o12) {1, 2, 4, 5, 10, 20, 25, 50, 100}
420 \end{verbatim}
422 No que concerne à divisão, pode ser necessário conhecer o quociente inteiro e o resto correspondente; para isso se dispõe das funções \verb|quotient|\index{quotient} e \verb|remainder|\index{remainder},
423 \begin{verbatim}
424 (%i13) quotient(5689,214);
425 (%o13) 26
426 (%i14) remainder(5689,214);
427 (%o14) 125
428 \end{verbatim}
431 \newpage
432 \section{Números complexos}
434 Como já se comentou mais acima, a unidade imaginária $\sqrt{-1}$ se representa em Maxima mediante o símbolo \verb|%i|\index{i},
435 \begin{verbatim}
436 (%i1) %i^2;
437 (%o1) - 1
438 \end{verbatim}
440 Está disponível as operações básicas com números complexos,
441 \begin{verbatim}
442 (%i2) z1:3+5*%i$ z2:1/2-4*%i$ /*z1 y z2*/
443 (%i4) z1 + z2; /*adição*/
445 (%o4) %i + -
447 (%i5) z1 - z2; /*subtração*/
449 (%o5) 9 %i + -
451 (%i6) z1 * z2; /*multiplicação*/
453 (%o6) (- - 4 %i) (5 %i + 3)
455 (%i7) z1 / z2; /* divisão */
456 5 %i + 3
457 (%o7) --------
459 - - 4 %i
461 \end{verbatim}
463 É possível que estes dois últimos resultados nos pareçam frustrantes e os desejemos em outro formato, resultado das operações indicadas; com esse objetivo podemos pedir a Maxima que nos devolva \verb|(%o6)| e \verb|(%o7)| em forma cartesiana,
464 \index{rectform}\begin{verbatim}
465 (%i8) rectform(%o6);
466 43 19 %i
467 (%o8) -- - -----
469 (%i9) rectform(%o7);
470 \end{verbatim}
471 \begin{verbatim}
472 58 %i 74
473 (%o9) ----- - --
474 65 65
475 \end{verbatim}
477 As funções \verb|realpart|\index{realpart} e \verb|imagpart|\index{imagpart} extraem do número complexo suas partes real e imaginária, respectivamente. Podemos utilizá-las para comprovar que o resultado obtido em \verb|(%o9)| é o correto,
478 \begin{verbatim}
479 (%i10) realpart(%o7);
481 (%o10) - --
483 (%i11) imagpart(%o7);
485 (%o11) --
487 \end{verbatim}
489 Antes havíamos optado pelos resultados em formato cartesiano; mas também é possível solicitar na forma polar,
490 \index{polarform}\begin{verbatim}
491 (%i12) polarform(%o7);
492 %i (%pi - atan(29/37))
493 2 sqrt(34) %e
494 (%o12) -----------------------------------
495 sqrt(65)
496 (%i13) %,numer; /*raio e argumento ambos reais*/
497 2.4768181587724474 %i
498 (%o13) 1.4464811413591583 %e
499 \end{verbatim}
501 A norma (módulo) de um número complexo se calcula com a função \verb|abs|\index{abs} e admite o argumento tanto em forma cartesiana como em forma polar,
502 \begin{verbatim}
503 (%i14) abs(%o9);
504 2 sqrt(34)
505 (%o14) ----------
506 sqrt(65)
507 (%i15) abs(%o12);
508 2 sqrt(34)
509 (%o15) ----------
510 sqrt(65)
511 \end{verbatim}
513 Por último, o conjugado de um número complexo se calcula com a função \verb|conjugate|\index{conjugate}, porém seu uso requer a colocação na memória do arquivo \verb|eigen|. Como se vê neste exemplo, o resultado dependerá do formato do argumento, cartesiano ou polar,
514 \begin{verbatim}
515 (%i16) load(eigen)$
516 (%i17) conjugate(%o9); /*forma cartesiana*/
517 58 %i 74
518 (%o17) - ----- - --
519 65 65
520 (%i18) conjugate(%o12); /*forma polar*/
521 %i atan(29/37)
522 2 sqrt(34) %e
523 (%o18) - ---------------------------
524 sqrt(65)
525 \end{verbatim}
528 \newpage
529 \section{Manipulações algébricas}
531 Sem dúvida uma das capacidades mais importantes do Maxima é sua habilidade para manipular expressões algébricas. Desenvolvamos um exemplo que começa por atribuir à variável \verb|q| uma expressão literal:
532 \begin{verbatim}
533 (%i1) q: (x+3)^5-(x-a)^3+(x+b)^(-1)+(x-1/4)^(-5);
534 1 3 5 1
535 (%o1) ----- - (x - a) + (x + 3) + --------
536 x + b 1 5
537 (x - -)
539 \end{verbatim}
540 Se observa que em principio Maxima não realiza nenhum cálculo. A função \verb|expand|\index{expand} se encarrega de desenvolver as potências,
541 \begin{verbatim}
542 (%i2) expand(q);
543 1 1 5
544 (%o2) ------------------------------------ + ----- + x
545 4 3 2 x + b
546 5 5 x 5 x 5 x 5 x 1
547 x - ---- + ---- - ---- + --- - ----
548 4 8 32 256 1024
549 4 3 2 2 2 3
550 + 15 x + 89 x + 3 a x + 270 x - 3 a x + 405 x + a
551 + 243
552 \end{verbatim}
553 Não obstante é possível que não nos interesse expandir toda a expressão, entre outras coisas para evitar uma resposta grande e difícil de interpretar; em tal caso podemos utilizar \verb|expand|\index{expand} adicionando dois argumentos e fazer da seguinte maneira
554 \begin{verbatim}
555 (%i3) q,expand(3,2);
556 1 5 3 2 2 1
557 (%o3) ----- + (x + 3) - x + 3 a x - 3 a x + --------
558 x + b 1 5
559 (x - -)
563 \end{verbatim}
564 Com o primeiro argumento indicamos que queremos a expansão de todas aquelas potências com exponente positivo menor ou igual a 3 e das que tendo o exponente negativo sejam menores ou iguais a 2.
566 Dada uma expressão com valores literais, podemos desejar sustituir alguma letra por outra expressão; por exemplo, se queremos fazer as trocas $a=2$, $b=2c$ no último resultado obtido,
567 \begin{verbatim}
568 (%i4) %,a=2,b=2*c;
569 1 5 3 2 1
570 (%o4) ------- + (x + 3) - x + 6 x - 12 x + -------- + 8
571 x + 2 c 1 5
572 (x - -)
574 \end{verbatim}
576 Nestes últimos exemplos (\verb|%i3| e \verb|%i4|) apareceram sentenças com elementos separados por vírgula (\verb|,|)\index{2@, (vírgula)}. Esta é uma forma simplificada de utilizar a função \verb|ev|, que avalia a primera expressão atribuindo os valores que se lhe vão indicando em seguida; por exemplo, \verb|(%i3)| se podia ter escrito da forma \verb|ev(q,expand(3,2))| e \verb|(%i4)| como \verb|ev(%,a=2,b=2*c)|. Outra forma é usar da variante com \verb|ev|\index{ev} esta mais indicada para ser utilizada dentro de expressões mais amplas. Observe-se o resultado seguinte
577 \begin{verbatim}
578 (%i5) 3*x^2 + ev(x^4,x=5);
580 (%o5) 3 x + 625
581 \end{verbatim}
582 onde a substitução $x=5$ foi realizada exclusivamente dentro do ambiente delimitado pela função \verb|ev|.
584 De forma mais geral, a função \verb|subst|\index{subst} substitui subexpressões inteiras. no seguinte exemplo, introducimos uma expressão algébrica e a seguir substituimos todos os bin\^omios \verb|x+y| pela letra \verb|k|,
585 \begin{verbatim}
586 (%i6) 1/(x+y)-(y+x)/z+(x+y)^2;
587 y + x 2 1
588 (%o6) - ----- + (y + x) + -----
589 z y + x
590 (%i7) subst(k,x+y,%);
591 k 2 1
592 (%o7) - - + k + -
594 \end{verbatim}
595 Não obstante, o seguinte resultado nos sugere que devemos ser cuidadosos com o uso desta função, já que Maxima algumas vezes não interpretará como subexpressão aquela que para nós é
596 uma subexpressão:
597 \index{subst}\begin{verbatim}
598 (%i8) subst(sqrt(k),x+y,(x+y)^2+(x+y));
599 (%o8) y + x + k
600 \end{verbatim}
601 Como uma aplicação prática de \verb|subst|, vejamos como podemos utilizá-la para obter o conjugado de um número complexo,
602 \begin{verbatim}
603 (%i9) subst(-%i,%i,a+b*%i);
604 (%o9) a - %i b
605 \end{verbatim}
607 A operação inversa da expansão é a fatoração. Façamos a expansão e a fatoração sucessivamente de um polinômio para comprovar os resultados,
608 \index{expand}\index{factor}\begin{verbatim}
609 (%i10) expand((a-2)*(b+1)^2*(a+b)^5);
610 7 7 2 6 6 6 3 5
611 (%o10) a b - 2 b + 5 a b - 8 a b - 4 b + 10 a b
612 2 5 5 5 4 4 2 4 4
613 - 10 a b - 19 a b - 2 b + 10 a b - 35 a b - 10 a b
614 5 3 4 3 3 3 2 3 6 2
615 + 5 a b + 10 a b - 30 a b - 20 a b + a b
616 5 2 4 2 3 2 6 5 4
617 + 8 a b - 10 a b - 20 a b + 2 a b + a b - 10 a b
619 + a - 2 a
620 (%i11) factor(%);
622 (%o11) (a - 2) (b + 1) (b + a)
623 \end{verbatim}
625 A função \verb|ratsimp|\index{ratsimp} simplifica qualquer expressão racional, assim como as subexpressões racionais que são argumentos de funções quaisquer. O resultado é retornado como o quociente de dois polinômios. Em algumas ocasiões não é suficiente com uma única execução de \verb|ratsimp|, pelo que será necesário aplicá-la mais vezes, isto é o que faz precisamente a função \verb|fullratsimp|\index{fullratsimp}; solidifiquemos isto com um exemplo:
626 \begin{verbatim}
627 (%i12) (x^(a/2)-1)^2*(x^(a/2)+1)^2 / (x^a-1);
628 \end{verbatim}
629 \newpage
630 \begin{verbatim}
631 a/2 2 a/2 2
632 (x - 1) (x + 1)
633 (%o12) -----------------------
635 x - 1
636 (%i13) ratsimp(%); /* simplificamos uma vez */
637 2 a a
638 x - 2 x + 1
639 (%o13) ---------------
641 x - 1
642 (%i14) ratsimp(%); /* simplificamos outra vez */
644 (%o14) x - 1
645 (%i15) fullratsimp(%o12); /* simplificamos tudo de uma vez! */
647 (%o15) x - 1
648 \end{verbatim}
650 Dada uma fração algébrica, podemos obter separadamente o numerador e o denominador,
651 \index{num}\index{denom}\begin{verbatim}
652 (%i16) fr: (x^3-4*x^2+4*x-2)/(x^2+x+1);
654 x - 4 x + 4 x - 2
655 (%o16) -------------------
657 x + x + 1
658 (%i17) num(fr);
660 (%o17) x - 4 x + 4 x - 2
661 (%i18) denom(fr);
663 (%o18) x + x + 1
664 \end{verbatim}
666 O máximo divisor comum de um conjunto de polinômios se calcula com a função \verb|gcd|\index{gcd} e o mínimo multiplo comum com \verb|lcm|\index{lcm}
667 \begin{verbatim}
668 (%i19) p1: x^7-4*x^6-7*x^5+8*x^4+11*x^3-4*x^2-5*x;
669 7 6 5 4 3 2
670 (%o19) x - 4 x - 7 x + 8 x + 11 x - 4 x - 5 x
671 (%i20) p2: x^4-2*x^3-4*x^2+2*x+3;
672 4 3 2
673 (%o20) x - 2 x - 4 x + 2 x + 3
674 (%i21) gcd(p1,p2);
676 (%o21) x + x - x - 1
677 (%i22) load(functs)$
678 (%i23) lcm(p1,p2);
680 (%o23) (x - 5) (x - 3) (x - 1) x (x + 1)
681 \end{verbatim}
682 Em \verb|(%i19)| e \verb|(%i20)| definimos os polinômios \verb|p1| e \verb|p2|, a seguir calculamos seu máximo divisor comum (mdc) em \verb|(%i21)| e antes de pedir o mínimo múltiplo comum em \verb|(%i23)| colocamos na memória o arquivo \verb|functs.mac| no qual se encontra definida a função \verb|lcm|. É possível que desejemos dispor do mdc fatorado, pelo que fazemos
683 \index{factor}\begin{verbatim}
684 (%i24) factor(%o21);
686 (%o24) (x - 1) (x + 1)
687 \end{verbatim}
690 \newpage
691 \section{Equacões}
693 Atribuir um rótulo a uma equação é tão simples como fazer
694 \begin{verbatim}
695 (%i1) eq: 3 * x = 1 + x;
696 (%o1) 3 x = x + 1
697 \end{verbatim}
699 A partir daí, aquelas operações nas quais usava-se um rótulo serão realizadas a ambos os membros da igualdade; subtraimos \verb|x| nos dois lados e a seguir dividimos o que resta por \verb|2|,
700 \begin{verbatim}
701 (%i2) %-x;
702 (%o2) 2 x = 1
703 (%i3) %/2;
705 (%o3) x = -
707 \end{verbatim}
708 obtendo desta maneira a solução da equação como se tivéssemos feito manualmente.
710 Tem-se que dizer que a equação anterior pode ser resolvida de um modo mais imediato,
711 \index{solve}\begin{verbatim}
712 (%i4) solve(eq);
714 (%o4) [x = -]
716 \end{verbatim}
718 A instrução \verb|solve| pode admitir como segundo argumento a incógnita em relação à qual se pretende calcular o valor, o que resultará de utilidade quando na equação aparecerem constantes literais,
719 \begin{verbatim}
720 (%i5) solve((2-a)/x-3=b*x+1/x,x);
721 sqrt((4 - 4 a) b + 9) + 3
722 (%o5) [x = - -------------------------,
724 sqrt((4 - 4 a) b + 9) - 3
725 x = -------------------------]
727 \end{verbatim}
728 As soluções das equações serão provavelmente utilizadas em cálculos posteriores, pelo que nos interesará poder extraí-las da lista anterior; a seguir tomamos o primeiro resultado calculado por Maxima mediante a função \verb|part|\index{part} e depois atribuimos à variável \verb|sol| o resultado numérico,
729 \begin{verbatim}
730 (%i6) part(%,1);
731 sqrt((4 - 4 a) b + 9) + 3
732 (%o6) x = - -------------------------
734 (%i7) sol: rhs(%);
735 sqrt((4 - 4 a) b + 9) + 3
736 (%o7) - -------------------------
738 \end{verbatim}
739 A função \verb|rhs|\index{rhs} retorna o lado direito da igualdade, enquanto que \verb|lhs|\index{lhs} faria a mesma coisa com o lado esquerdo.
741 É possível resolver equações polinomiais de grau $\leq 4$, porém desgraçadamente, como é de se esperar, Maxima não dispõe de um método algébrico que permita resolver equações polinomiais de grau maior que quatro,
742 \begin{verbatim}
743 (%i8) solve(x^5 - 3*x^4 + 2*x^3 -2*x^2 - x + 4 = 0);
744 5 4 3 2
745 (%o8) [0 = x - 3 x + 2 x - 2 x - x + 4]
746 \end{verbatim}
747 pelo que \verb|solve| devolverá a mesma equação sem resolver.
749 Maxima dispõe de outra função para resolver equações e sistemas, que em muitas ocasiões será mais \'util que \verb|solve|. Vejamos como trata a instrução \verb|algsys|\index{algsys} a equação polinomial anterior,
750 \begin{verbatim}
751 (%i9) algsys([x^5 - 3*x^4 + 2*x^3 -2*x^2 - x + 4 = 0],[x]);
752 (%o9) [[x = 2.478283086356668],
753 [x = .1150057557117294 - 1.27155810694299 %i],
754 [x = 1.27155810694299 %i + .1150057557117294],
755 [x = - .8598396689940523], [x = 1.151545166402536]]
756 \end{verbatim}
757 Como se vê, ao não ser capaz de resolvê-la algebricamente, nos brinda a oportunidade de conhecer uma aproximação numérica da solução. A função \verb|algsys| reconhece a variável global \verb|realonly|\index{realonly}, que quando toma o valor \verb|true|, fará com que se ignorem as soluções complexas,
758 \begin{verbatim}
759 (%i10) realonly:true$
760 (%i11) ''%i9; /* recalcula a entrada %i9 */
761 (%o12) [[x = 2.478283086356668], [x = 1.151545166402536],
762 [x = - .8598396689940523]]
763 (%i13) realonly:false$ /* lhe devolvemos o valor padrão */
764 \end{verbatim}
766 Tratando-se de equações polinomiais, para forçar o cálculo numérico de suas raízes se pode fazer uso também da instrução \verb|allroots|\index{allroots}, que obtém tanto as raízes reais como as raízes complexas,
767 \begin{verbatim}
768 (%i14) allroots(x^5 - 3*x^4 + 2*x^3 -2*x^2 - x + 4 = 0);
769 (%o14) [x = 1.151545173424091, x = - .8598397137271315,
770 x = 1.27155810694299 %i + .1150057557117294,
771 x = .1150057557117294 - 1.27155810694299 %i,
772 x = 2.478283028879582]
773 \end{verbatim}
774 donde se recordará que o símbolo \verb|%i| representa a unidade imaginária $i = \sqrt{-1}$.
776 Vemos a seguir como resolver um sistema linear de equações mediante \verb|algsys|. Sejam as equações
778 \left\{ \begin{array}{rcrcrcc}
779 2 x & - & 4 y & + & 2 z & = & -2 \\
780 \frac{1}{3} x & + & 2 y & + & 9 z & = & x+y \\
781 -4 x & + & \sqrt{2} y & + & z & = & 3 y
782 \end{array}
783 \right.
785 se fará
786 \begin{verbatim}
787 (%i15) algsys([ 2 * x - 4 * y + 2 * z = -2,
788 1/3* x + 2 * y + 9 * z = x + y,
789 -4 * x + sqrt(2) * y + z = 3 * y],
790 [x,y,z]);
791 27 sqrt(2) - 84 106
792 (%o15) [[x = - ----------------, y = - ----------------,
793 29 sqrt(2) - 314 29 sqrt(2) - 314
794 575 sqrt(2) - 2884
795 z = - --------------------]]
796 9106 sqrt(2) - 50139
797 \end{verbatim}
798 note-se que as equações estão entre colchetes e se separaram por vírgulas e que o mesmo se deve fazer com os nomes das incógnitas.
800 Também a função \verb|algsys|\index{algsys} permite a resolução de sistemas de equações não lineares como
802 \left\{ \begin{array}{rcl}
803 3 x^2-y & = & 2 y^2 + 4 \\
804 5 x +7 y & = & 1
805 \end{array}
806 \right.
808 Podemos proceder como se indica a seguir,
809 \begin{verbatim}
810 (%i16) algsys([3*x^2-y=2*y^2+4, 5*x+7*y=1],[x,y]);
811 \end{verbatim}
812 \newpage
813 \begin{verbatim}
814 7 sqrt(1685) + 55
815 (%o16) [[x = - -----------------,
817 5 sqrt(5) sqrt(337) + 67
818 y = ------------------------],
820 7 sqrt(1685) - 55 5 sqrt(5) sqrt(337) - 67
821 [x = -----------------, y = - ------------------------]]
822 194 194
823 \end{verbatim}
824 cujo resultado é uma lista com dois pares ordenados, soluções ambos do sistema proposto. Uma maneira alternativa de proceder neste caso podería consistir em solicitar primeiro ao Maxima que nos eliminasse uma das variáveis e resolver a seguir para a outra, tal como indica o seguinte código,
825 \index{eliminate}\begin{verbatim}
826 (%i17) eliminate([3*x^2-y=2*y^2+4, 5*x+7*y=1],[y]);
828 (%o17) [97 x + 55 x - 205]
829 (%i18) algsys(%,[x]);
830 7 sqrt(1685) - 55 7 sqrt(1685) + 55
831 (%o18) [[x = -----------------], [x = - -----------------]]
832 194 194
833 \end{verbatim}
834 Em \verb|(%i17)| pedimos que nos elimine a incógnita $y$, obtendo como resultado uma equação de segundo grau, a qual se resolve a seguir. Note-se que na expressão \verb|(%o17)| falta uma igualdade, o que haverá de interpretar-se como igualada a zero, sendo equivalente a $97x^2+55x-205=0$.
836 Já para terminar, resolvamos uma equação indeterminada obtendo a solução em forma paramétrica,
837 \begin{verbatim}
838 (%i19) algsys([3*x^2-5*y=x],[x,y]);
840 3 %r1 - %r1
841 (%o19) [[x = %r1, y = ------------]]
843 (%i20) %, %r1:1;
845 (%o20) [[x = 1, y = -]]
847 \end{verbatim}
848 Maxima nomeia os par\^metros seguindo o esquema \verb|%Rx|\index{13@%Rx}, sendo \verb|x| um número inteiro positivo. Na entrada \verb|%i20| pedimos que em \verb|%o19| se substitua o par\^ametro pela unidade.
850 \newpage
851 \section{Matrizes}
853 A definição de uma matriz é extremadamente simples em Maxima,
854 \index{matrix}\begin{verbatim}
855 (%i1) m1: matrix([3,4,0],[6,0,-2],[0,6,a]);
856 [ 3 4 0 ]
858 (%o1) [ 6 0 - 2 ]
860 [ 0 6 a ]
861 \end{verbatim}
863 Também é possível definir uma matriz de forma interativa tal como mostra o seguinte exemplo,
864 \index{entermatrix}\begin{verbatim}
865 (%i2) entermatrix(2,3);
866 Row 1 Column 1:
867 4/7;
868 Row 1 Column 2:
870 Row 1 Column 3:
871 %pi;
872 Row 2 Column 1:
873 sqrt(2);
874 Row 2 Column 2:
875 log(3);
876 Row 2 Column 3:
879 Matrix entered.
880 [ 4 ]
881 [ - 0 %pi ]
882 (%o2) [ 7 ]
884 [ sqrt(2) log(3) - 9 ]
885 \end{verbatim}
887 Existe um terceiro método para construir matrizes que é útil quando o elemento $(i,j)$-ésimo da mesma é função de sua posição dentro da matriz. A seguir, se fixa em primeiro lugar a regra que permite definir um elemento qualquer e logo com base nela se constrói uma matriz de dimensões $2 \times 5$
888 \index{28@:=}\index{genmatrix}\begin{verbatim}
889 (%i3) a[i,j]:=i+j$
890 (%i4) genmatrix(a,2,5);
891 [ 2 3 4 5 6 ]
892 (%o4) [ ]
893 [ 3 4 5 6 7 ]
894 \end{verbatim}
895 Observe-se que o símbolo de atribuição para o elemento genérico é \verb|:=|.
898 Podemos acessar aos diferentes elementos da matriz fazendo refer\^encia a seus subíndices, indicando primeiro a linha e depois a coluna:
899 \begin{verbatim}
900 (%i5) m1[3,1];
901 (%o5) 0
902 \end{verbatim}
904 Se pode extrair uma submatriz com a função \verb|submatrix|\index{submatrix}, tendo em conta que os inteiros que precedem ao nome da matriz original são as linha a eliminar e os que se colocam por detrás indicam as colunas que não interesam; no seguinte exemplo, queremos a submatriz que nos resta de \verb|m1| depois de extrair a primeira linha e a segunda coluna,
905 \begin{verbatim}
906 (%i5) submatrix(1,m1,2);
907 [ 6 - 2 ]
908 (%o5) [ ]
909 [ 0 a ]
910 \end{verbatim}
911 Outro exemplo é o seguinte,
912 \begin{verbatim}
913 (%i6) submatrix(1,2,m1,3);
914 (%o6) [ 0 6 ]
915 \end{verbatim}
916 na qual eliminamos as duas primeiras linhas e a última coluna.
918 Da mesma forma que se extrai submatrizes, é possível adicionar linhas e colunas a uma matriz dada; por exemplo,
919 \index{addrow}\index{addcol}\begin{verbatim}
920 (%i7) addrow(m1,[1,1,1],[2,2,2]);
921 \end{verbatim}
922 \newpage
923 \begin{verbatim}
924 [ 3 4 0 ]
926 [ 6 0 - 2 ]
928 (%o7) [ 0 6 a ]
930 [ 1 1 1 ]
932 [ 2 2 2 ]
933 (%i8) addcol(%,[7,7,7,7,7]);
934 [ 3 4 0 7 ]
936 [ 6 0 - 2 7 ]
938 (%o8) [ 0 6 a 7 ]
940 [ 1 1 1 7 ]
942 [ 2 2 2 7 ]
943 \end{verbatim}
945 A matriz identidade é mais fácil construí-la mediante a função \verb|ident|\index{ident},
946 \begin{verbatim}
947 (%i9) ident(3);
948 [ 1 0 0 ]
950 (%o9) [ 0 1 0 ]
952 [ 0 0 1 ]
953 \end{verbatim}
954 e a matriz com todos seus elementos iguais a zero,
955 \index{zeromatrix}\begin{verbatim}
956 (%i10) zeromatrix(2,4);
957 [ 0 0 0 0 ]
958 (%o10) [ ]
959 [ 0 0 0 0 ]
960 \end{verbatim}
961 Também, uma matriz diagonal com todos os elementos da diagonal principal iguais pode construir-se com uma chamada à função \verb|diagmatrix|\index{diagmatrix},
962 \begin{verbatim}
963 (%i11) diagmatrix(4,%e);
964 \end{verbatim}
965 \newpage
966 \begin{verbatim}
967 [ %e 0 0 0 ]
969 [ 0 %e 0 0 ]
970 (%o11) [ ]
971 [ 0 0 %e 0 ]
973 [ 0 0 0 %e ]
974 \end{verbatim}
976 Em todo caso, deve ter-se cuidado em que se a matriz não for construída de forma apropriada, Maxima não a reconhece como tal. Para saber se uma expressão é reconhecida como uma matriz se utiliza a função \verb|matrixp|\index{matrixp}; a seguinte sequência permite aclarar o que se pretende dizer,
977 \begin{verbatim}
978 (%i12) matrix([[1,2,3],[4,5,6]]); /* construçào correta */
979 (%o12) [ [1, 2, 3] [4, 5, 6] ]
980 (%i13) matrixp(%); /* é a anterior realmente uma matriz? */
981 (%o13) TRUE
982 (%i14) [[7,8,9],[0,1,2]]; /* outra matriz */
983 (%o14) [[7, 8, 9], [0, 1, 2]]
984 (%i15) matrixp(%); /* sera uma matriz? */
985 (%o15) FALSE
986 \end{verbatim}
988 Casos particulares de submatrizes são as matrizes linha e as matrizes coluna; os exemplos se explicam por si só:
989 \index{col}\index{row}\begin{verbatim}
990 (%i16) col(m1,3);
991 [ 0 ]
993 (%o16) [ - 2 ]
995 [ a ]
996 (%i17) row(m1,2);
997 (%o17) [ 6 0 - 2 ]
998 \end{verbatim}
1000 Com as matrizes se pode realizar múltiplas operações. Começemos pelo cálculo da potência de uma matriz:
1001 \index{20@\^\ \^\ }\begin{verbatim}
1002 (%i18) m1^^2;
1003 \end{verbatim}
1004 \newpage
1005 \begin{verbatim}
1006 [ 33 12 - 8 ]
1008 (%o18) [ 18 12 - 2 a ]
1010 [ 2 ]
1011 [ 36 6 a a - 12 ]
1012 \end{verbatim}
1013 Note-se que se utiliza duas vezes o símbolo \verb|^| antes do exponente; em caso de escrevê-lo uma só vez se calcularíam as potências de cada um dos elementos da matriz independentemente, como se indica no seguinte exemplo,
1014 \index{18@\^\ }\begin{verbatim}
1015 (%i19) m2:m1^2;
1016 [ 9 16 0 ]
1018 (%o19) [ 36 0 4 ]
1020 [ 2 ]
1021 [ 0 36 a ]
1022 \end{verbatim}
1025 Para a adição, subtração e produto matriciais se utilizam os operadores \verb|+|, \verb|-| e \verb|.|, respectivamente,
1026 \index{14@+}\index{15@-}\index{17@/}\index{17@.}\begin{verbatim}
1027 (%i20) m1+m2;
1028 [ 12 20 0 ]
1030 (%o20) [ 42 0 2 ]
1032 [ 2 ]
1033 [ 0 42 a + a ]
1034 (%i21) m1-m2;
1035 [ - 6 - 12 0 ]
1037 (%o21) [ - 30 0 - 6 ]
1039 [ 2 ]
1040 [ 0 - 30 a - a ]
1041 (%i22) m1.m2;
1042 \end{verbatim}
1043 \newpage
1044 \begin{verbatim}
1045 [ 171 48 16 ]
1047 [ 2 ]
1048 (%o22) [ 54 24 - 2 a ]
1050 [ 3 ]
1051 [ 216 36 a a + 24 ]
1052 \end{verbatim}
1054 Sem impedimentos, tanto o produto elemento a elemento de duas matrizes, como a multiplicação por um escalar se realizam mediante o operador \verb|*|, como indicam os seguintes dois exemplos,
1055 \index{16@*}\begin{verbatim}
1056 (%i23) m1*m2;
1057 [ 27 64 0 ]
1059 (%o23) [ 216 0 - 8 ]
1061 [ 3 ]
1062 [ 0 216 a ]
1063 (%i24) 4*m1;
1064 [ 12 16 0 ]
1066 (%o24) [ 24 0 - 8 ]
1068 [ 0 24 4 a ]
1069 \end{verbatim}
1071 Outros cálculos freqüentes com matrizes são a transposição, o determinante, a inversão, o polinômio característico, assim como os autovalores (eigenvalues) e autovetores (eigenvectors) próprios; para todos eles existe funções em Maxima:
1072 \index{transpose}\index{determinant}\index{invert}\index{detout}\index{charpoly}\begin{verbatim}
1073 (%i25) transpose(m1); /*a transposta*/
1074 [ 3 6 0 ]
1076 (%o25) [ 4 0 6 ]
1078 [ 0 - 2 a ]
1079 (%i26) determinant(m1); /*o determinante*/
1080 (%o26) 36 - 24 a
1081 (%i27) invert(m1); /*a inversa*/
1082 \end{verbatim}
1083 \newpage
1084 \begin{verbatim}
1085 [ 12 4 a 8 ]
1086 [ --------- - --------- - --------- ]
1087 [ 36 - 24 a 36 - 24 a 36 - 24 a ]
1089 [ 6 a 3 a 6 ]
1090 (%o27) [ - --------- --------- --------- ]
1091 [ 36 - 24 a 36 - 24 a 36 - 24 a ]
1093 [ 36 18 24 ]
1094 [ --------- - --------- - --------- ]
1095 [ 36 - 24 a 36 - 24 a 36 - 24 a ]
1096 (%i28) invert(m1),detout; /*a inversa, com o determinante fora*/
1097 [ 12 - 4 a - 8 ]
1099 [ - 6 a 3 a 6 ]
1101 [ 36 - 18 - 24 ]
1102 (%o28) ----------------------
1103 36 - 24 a
1104 (%i29) charpoly(m1,x); /*pol. caract. com variável x*/
1105 (%o29) (3 - x) (12 - (a - x) x) - 24 (a - x)
1106 (%i30) expand(%); /*pol. caract. expandido*/
1107 3 2 2
1108 (%o30) - x + a x + 3 x - 3 a x + 12 x - 24 a + 36
1109 \end{verbatim}
1111 Vamos supor agora que a vari\'avel \verb|a| em (\%o30) vale zero e calculemos os valores próprios (autovalores) da matriz,
1112 \index{eigenvalues}\begin{verbatim}
1113 (%i31) m1,a:0;
1114 [ 3 4 0 ]
1116 (%o31) [ 6 0 - 2 ]
1118 [ 0 6 0 ]
1119 (%i32) eigenvalues(%o31);
1120 sqrt(15) %i + 3 sqrt(15) %i - 3
1121 (%o32) [[- ---------------, ---------------, 6], [1, 1, 1]]
1123 \end{verbatim}
1124 O resultado que se obtém é uma lista formada por duas sublistas, na primeira se encontram os valores próprios, que neste caso são $\lambda_1=-\frac{3}{2}-\frac{\sqrt{15}}{2} i$, $\lambda_2=-\frac{3}{2}+\frac{\sqrt{15}}{2} i$ e $\lambda_3=6$, enquanto que na segunda sublista se encontram as multiplicidades de cada uma das $\lambda_i$.
1126 Para o cálculo dos vetores próprios (autovetores),
1127 \index{eigenvectors}\begin{verbatim}
1128 (%i33) eigenvectors(%o31);
1130 sqrt(15) %i + 3 sqrt(15) %i - 3
1131 (%o33) [[[- ---------------, ---------------, 6],
1134 sqrt(15) %i + 9
1135 [1, 1, 1]], [1, - ---------------,
1138 3 sqrt(3) sqrt(5) %i - 21
1139 - -------------------------],
1142 sqrt(15) %i - 9 3 sqrt(3) sqrt(5) %i + 21 3 3
1143 [1, ---------------, -------------------------], [1, -, -]]
1144 8 8 4 4
1145 \end{verbatim}
1146 O que se obtém é, em primeiro lugar, os valores pr\'oprios (autovalores) junto com suas multiplicidades, o mesmo resultado que se obtém com a função \verb|eigenvalues|; a seguir os vetores próprios (autovetores) da matriz associados a cada um dos valores próprios (autovalores). As vezes interessa que os vetores sejam unit\'arios, de norma (módulo) 1, para o que será de utilidade a função \verb|uniteigenvectors|\index{uniteigenvectors}, que se encontra definida no pacote \verb|eigen.lisp|, o que significa que antes de fazer uso dele teremos que executar o comando \verb|load(eigen)|.
1148 Outros cálculos possíveis com matrizes,
1149 \index{minor}\index{rank}\index{matrixmap}\begin{verbatim}
1150 (%i34) minor(%o31,2,1); /* ou menor complementar de um elemento */
1151 [ 4 0 ]
1152 (%o34) [ ]
1153 [ 6 0 ]
1154 (%i35) rank(%o31); /* ou posto da matriz*/
1155 (%o35) 3
1156 (%i36) matrixmap(sin,%o31);
1157 \end{verbatim}
1158 \newpage
1159 \begin{verbatim}
1160 [ sin(3) sin(4) 0 ]
1162 (%o36) [ sin(6) 0 - sin(2) ]
1164 [ 0 sin(6) 0 ]
1165 \end{verbatim}
1166 Neste último exemplo, aplicamos a função seno a todos os elementos da matriz.
1169 \newpage
1170 \section{Funções matemáticas}
1172 Em Maxima estão definidas um grande número de funções, algumas das quais se apresentam na
1173 Figura~\ref{fig:funções}. A seguir se desenvolvem alguns exemplos sobre seu uso.
1175 \index{abs}\index{min}\index{max}\index{signum}\index{binomial}\index{genfact}\index{sqrt}\index{exp}\index{log}\index{sin}\index{cos}\index{tan}\index{csc}\index{sec}\index{cot}\index{asin}\index{acos}\index{atan}\index{atan2}\index{sinh}\index{cosh}\index{tanh}\index{asinh}\index{acosh}\index{atanh}\index{gamma}\index{beta}\index{erf}\begin{figure}
1176 \begin{center}
1177 \begin{tabular}{|c|c|} \hline
1178 \verb|abs(x)| & $\mbox{abs}(x)$ \\ \hline
1179 \verb|min(x1,x2,...)| & $\min(x_1,x_2,\ldots)$ \\ \hline
1180 \verb|max(x1,x2,...)| & $\max(x_1,x_2,\ldots)$ \\ \hline
1181 \verb|signum(x)| & $\mbox{sinal}(x)=\left\{
1182 \begin{array}{rl}
1183 -1 & \mbox{si $x<0$} \\
1184 0 & \mbox{si $x=0$} \\
1185 1 & \mbox{si $x>0$}
1186 \end{array}\right.$ \\ \hline
1187 \verb|x!| & $x!$ \\ \hline
1188 \verb|x!!| & $x!!$ \\ \hline
1189 \verb|binomial(m,n)| & $\binom{m}{n}=\frac{m(m-1)\ldots[m-(n-1)]}{n!}$ \\ \hline
1190 \verb|genfact(m,n,p)| & $m(m-p)(m-2p)\ldots[m-(n-1)p]$ \\ \hline
1191 \verb|sqrt(x)| & $\sqrt{x}$ \\ \hline
1192 \verb|exp(x)| & $e^x$ \\ \hline
1193 \verb|log(x)| & $\ln(x)$ \\ \hline
1194 \verb|sin(x)| & $\sin(x)$ \\ \hline
1195 \verb|cos(x)| & $\cos(x)$ \\ \hline
1196 \verb|tan(x)| & $\tan(x)$ \\ \hline
1197 \verb|csc(x)| & $\csc(x)$ \\ \hline
1198 \verb|sec(x)| & $\sec(x)$ \\ \hline
1199 \verb|cot(x)| & $\cot(x)$ \\ \hline
1200 \verb|asin(x)| & $\arcsin(x)$ \\ \hline
1201 \verb|acos(x)| & $\arccos(x)$ \\ \hline
1202 \verb|atan(x)| & $\arctan(x)$ \\ \hline
1203 \verb|atan2(x,y)|& $\arctan(\frac{x}{y}) \in (-\pi,\pi)$ \\ \hline
1204 \verb|sinh(x)| & $\sinh(x)=\frac{1}{2}(e^x-e^{-x})$ \\ \hline
1205 \verb|cosh(x)| & $\cosh(x)=\frac{1}{2}(e^x+e^{-x})$ \\ \hline
1206 \verb|tanh(x)| & $\tanh(x)=\frac{\sinh(x)}{\cosh(x)}$ \\ \hline
1207 \verb|asinh(x)| & $\mbox{arcsinh}(x)$ \\ \hline
1208 \verb|acosh(x)| & $\mbox{arccosh}(x)$ \\ \hline
1209 \verb|atanh(x)| & $\mbox{arctanh}(x)$ \\ \hline
1210 \verb|gamma(x)| & $\Gamma(x)=\int_0^\infty e^{-u}u^{x-1}du, \forall x>0$ \\ \hline
1211 \verb|beta(x,y)| & $\beta(x,y)=\frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)}$ \\ \hline
1212 \verb|erf(x)| & $\mbox{erf}(x)=\int_0^x \frac{2}{\sqrt{\pi}}e^{-u^2}du$ \\ \hline
1213 \end{tabular}
1214 \end{center}
1215 \caption{Algumas funções do Maxima.}
1216 \label{fig:funções}
1217 \end{figure}
1220 As funções exponenciais sempre são positivas, independentemente do argumento $x$,
1221 \index{limit}\begin{verbatim}
1222 (%i1) limit(1/(x-1),x,1,minus);
1223 (%o1) minf
1224 (%i2) abs(3^-x);
1226 (%o2) --
1229 (%i3) signum(3^-x);
1230 (%o3) 1
1231 \end{verbatim}
1234 A função \verb|genfact(m,n,p)|\index{genfact} é o fatorial generalizado, de forma que \verb|genfact(m,m,1)| coincide com $m!$,
1235 \begin{verbatim}
1236 (%i4) genfact(5,5,1)-5!;
1237 (%o4) 0
1238 \end{verbatim}
1239 e \verb|genfact(m,m/2,2)| é igual a $m!!$,
1240 \begin{verbatim}
1241 (%i5) genfact(5,5/2,2)-5!!;
1242 (%o5) 0
1243 \end{verbatim}
1246 Maxima sempre devolve resultados exatos, que podemos solicitar em formato decimal,
1247 \index{asin}\begin{verbatim}
1248 (%i6) asin(1);
1250 (%o6) ---
1252 (%i7) %,numer;
1253 (%o7) 1.570796326794897
1254 \end{verbatim}
1255 Recordemos que o formato decimal podemos pedir com precissão arbitrária,
1256 \begin{verbatim}
1257 (%i8) fpprec:50$ bfloat(%o6);
1258 (%o9) 1.5707963267948966192313216916397514420985846996876B0
1259 \end{verbatim}
1261 A função \textit{error} está relacionada com a função de distribuição da variável aleatória normal $X \sim \normal(0,1)$ da forma
1263 \Phi(x)=\Pr(X \leq x)=\frac{1}{2}+\frac{1}{2}\mbox{erf}\left(\frac{x}{\sqrt{2}} \right),
1265 pelo que a probabilidade de que esta variável tome um valor menor que $1.5$ é da ordem de
1266 \index{erf}\begin{verbatim}
1267 (%i10) 0.5+0.5*erf(1.5/sqrt(2)),numer;
1268 (%o10) 0.9331927987311419
1269 \end{verbatim}
1271 Uma forma mais elegante de fazer o anterior é definir nossa própria função de distribução a partir da de \textit{error}, para o que se faz uso do símbolo \verb|:=|,
1272 \index{28@:=}\begin{verbatim}
1273 (%i11) F(x):=1/2+erf(x/sqrt(2))/2$
1274 (%i12) F(1.5),numer;
1275 (%o12) 0.9331927987311419
1276 \end{verbatim}
1278 Não terminam aqui as funções do Maxima; junto às já expostas teríamos que incluir as funções de Airy, elípticas e de Bessel, sobre as quais se poderá obter mais informação executando a instrucção \verb|describe|\index{describe} e utilizando como argumento \verb|airy|\index{airy}, \verb|elliptic|\index{elliptic} ou \verb|bessel|\index{bessel}, conforme o caso. Por exemplo,
1279 \begin{verbatim}
1280 (%i13) describe(airy);
1282 0: airy :(maxima.info)Definitions for Special Functions.
1283 1: airy_ai :Definitions for Special Functions.
1284 2: airy_bi :Definitions for Special Functions.
1285 3: airy_dai :Definitions for Special Functions.
1286 4: airy_dbi :Definitions for Special Functions.
1287 Enter space-separated numbers, àll' or `none': 1
1289 Info from file /usr/local/info/maxima.info:
1290 - Function: airy_ai (<x>)
1291 The Airy function Ai, as defined in Abramowitz and Stegun,
1292 Handbook of Mathematical Functions, Section 10.4.
1294 The Airy equation `diff (y(x), x, 2) - x y(x) = 0' has two
1295 linearly independent solutions, `y = Ai(x)' and `y = Bi(x)'. The
1296 derivative `diff (airy_ai(x), x)' is àiry_dai(x)'.
1298 If the argument `x' is a real or complex floating point number,
1299 the numerical value of àiry_ai' is returned when possible.
1301 See also 'airy_bi', 'airy_dai', 'airy_dbi'.
1302 (%o13) false
1303 \end{verbatim}
1306 \newpage
1307 \section{Limites}
1309 Sem mais preâmbulos, vejamos alguns exemplos de como calcular limites com a assistência do Maxima. Em primeiro lugar vemos que é possível fazer com que a variável se aproxime ao infinito ($x \rightarrow \infty$) fazendo uso do símbolo \verb|inf|\index{inf}, ou que se aproxime ao menos infinito ($x \rightarrow -\infty$) fazendo uso de \verb|minf|\index{minf},
1310 \index{limit}\begin{verbatim}
1311 (%i1) limit(1/sqrt(x),x,inf);
1312 (%o1) 0
1313 (%i2) limit((exp(x)-exp(-x))/(exp(x)+exp(-x)),x,minf);
1314 (%o2) - 1
1315 \end{verbatim}
1316 que nos permite calcular $\lim_{x \rightarrow \infty} \frac{1}{\sqrt{x}}$ e
1317 $\lim_{x \rightarrow -\infty} \frac{e^x-e^{-x}}{e^x+e^{-x}}$, respectivamente.
1319 Os seguintes exemplos mostram limites nos quais a variável $x$ se aproxima de pontos de descontinuidade,
1320 \begin{verbatim}
1321 (%i3) limit((x^2-x/3-2/3)/(5*x^2-11*x+6),x,1);
1323 (%o3) - -
1325 (%i4) limit(1/(x-1)^2,x,1);
1326 (%o4) inf
1327 \end{verbatim}
1328 de onde obtivemos os resultados
1330 \lim_{x \rightarrow 1} \frac{x^2-\frac{x}{3}-\frac{2}{3}}{5x^2-11x+6}=-\frac{5}{3}
1334 \lim_{x \rightarrow 1} \frac{1}{(x-1)^2}=\infty.
1337 Sem impedimentos, certos limites não podem ser resolvidos sem informação adicional, tal é o caso de
1338 $\lim_{x \rightarrow 1} \frac{1}{x-1}$, para o qual podemos fazer
1339 \begin{verbatim}
1340 (%i5) limit(1/(x-1),x,1);
1341 (%o5) und
1342 \end{verbatim}
1343 de onde Maxima nos responde com o símbolo \verb|und|\index{und} de \emph{undefined} ou indefinido. Em tais situações podemos indicar ao assistente que a variável $x$ se aproxima de 1 pela dereita ($x \rightarrow 1^+$) ou pela esquerda ($x \rightarrow 1^-$),
1344 \index{plus}\index{minus}\begin{verbatim}
1345 (%i6) limit(1/(x-1),x,1,plus);
1346 (%o6) inf
1347 (%i7) limit(1/(x-1),x,1,minus);
1348 (%o7) minf
1349 \end{verbatim}
1352 \newpage
1353 \section{Derivadas}
1355 Maxima controla o cálculo de derivadas mediante a instrução \verb|diff|\index{diff}. A seguir se apresentam alguns exemplos sobre seu uso,
1356 \begin{verbatim}
1357 (%i1) diff(x^log(a*x),x);
1358 log(a x) log(a x) log(x)
1359 (%o1) x (-------- + ------)
1361 (%i2) diff(x^log(a*x),x,2); /*derivada segunda*/
1362 log(a x) log(a x) log(x) 2
1363 (%o2) x (-------- + ------)
1365 log(a x) log(a x) log(x) 2
1366 + x (- -------- - ------ + --)
1367 2 2 2
1368 x x x
1369 (%i3) factor(%);
1370 log(a x) - 2 2
1371 (%o3) x (log (a x) + 2 log(x) log(a x)
1373 - log(a x) + log (x) - log(x) + 2)
1374 \end{verbatim}
1375 de onde se calculadou a primeira e segunda derivadas da função $y=x^{\ln(ax)}$. Note-se que na entrada \verb|(%i3)| se pediu ao asistente que simplificasse a saída \verb|(%o2)|.
1377 Também se pode calcular derivadas parciais, tal como se mostra a seguir,
1378 \begin{verbatim}
1379 (%i4) diff(x*cos(y)+y*sin(x*y),x,1,y,2);
1381 (%o4) - 4 x y sin(x y) - x y cos(x y) + 2 cos(x y)
1382 - cos(y)
1383 (%i5) diff(exp(x)*sin(y)*tan(z),x,3,y,5,z,2);
1385 (%o5) 2 %e cos(y) sec (z) tan(z)
1386 \end{verbatim}
1387 de onde se obteve os resultados
1389 \frac{\vartheta^3}{\vartheta x \vartheta y^2} \left( x\cos(y)+y\sin(xy) \right) =
1390 -4xy\sin(xy)-x^2y^2\cos(xy)+2\cos(xy)-\cos(y)
1394 \frac{\vartheta^{10}}{\vartheta x^3 \vartheta y^5 \vartheta z^2} \left( e^x \sin(y) \tan(z) \right) =
1395 2 e^x \cos(y) \sec^2(z) \tan(z).
1398 Maxima também nos pode ajudar à hora de aplicar a regra da cadeia no cálculo de derivadas de funções vetoriais com variável também vetorial. Suponha-se que certa variável $z$ depende de outras duas $x$ e $y$, às quais por sua vez dependem de $u$ e $v$. Vejamos como se aplica a regra da cadeia para obter
1399 $\frac{\vartheta z}{\vartheta v}$, $\frac{\vartheta z^2}{\vartheta y \vartheta v}$ ou $\frac{\vartheta z^2}{\vartheta u \vartheta v}$.
1400 \index{depends}\begin{verbatim}
1401 (%i6) depends(z,[x,y],[x,y],[u,v]);
1402 (%o6) [z(x, y), x(u, v), y(u, v)]
1403 (%i7) diff(z,v,1);
1404 dy dz dx dz
1405 (%o7) -- -- + -- --
1406 dv dy dv dx
1407 (%i8) diff(z,y,1,v,1);
1409 dy d z dx d z
1410 (%o8) -- --- + -- -----
1411 dv 2 dv dx dy
1413 (%i9) diff(z,u,1,v,1);
1414 2 2 2
1415 dy dy d z dx d z d y dz
1416 (%o9) -- (-- --- + -- -----) + ----- --
1417 du dv 2 dv dx dy du dv dy
1419 2 2 2
1420 dx dx d z dy d z d x dz
1421 + -- (-- --- + -- -----) + ----- --
1422 du dv 2 dv dx dy du dv dx
1424 \end{verbatim}
1426 A qualquer momento podemos solicitar ao Maxima que nos recorde o quadro de dependências,
1427 \index{dependencies}\begin{verbatim}
1428 (%i10) dependencies;
1429 (%o10) [z(x, y), x(u, v), y(u, v)]
1430 \end{verbatim}
1431 ou também podemos eliminar dependências,
1432 \index{remove}\begin{verbatim}
1433 (%i11) remove(x,dependency);
1434 (%o11) done
1435 (%i12) dependencies;
1436 (%o12) [z(x, y), y(u, v)]
1437 (%i13) diff(z,y,1,v,1);
1439 dy d z
1440 (%o13) -- ---
1441 dv 2
1443 \end{verbatim}
1445 Vejamos como Maxima deriva funções definidas implícitamente. No seguinte exemplo, para evitar que \verb|y| seja considerada uma constante, a declararemos dependente de \verb|x|,
1446 \begin{verbatim}
1447 (%i14) depends(y,x)$
1448 (%i15) diff(x^2+y^3=2*x*y,x);
1449 2 dy dy
1450 (%o15) 3 y -- + 2 x = 2 x -- + 2 y
1451 dx dx
1452 \end{verbatim}
1454 Quando se solicita o cálculo de uma derivada sem especificar a variável em relação à qual se deriva, Maxima utilizará o símbolo \verb|del|\index{del} para representar as diferencias,
1455 \begin{verbatim}
1456 (%i16) diff(x^2);
1457 (%o16) 2 x del(x)
1458 \end{verbatim}
1459 O que se interpretará como $2x dx$. Se na expressão a derivar existe mais de uma variável, teremos diferencias para todas,
1460 \begin{verbatim}
1461 (%i17) diff(x^2+y^3=2*x*y);
1462 2 2 dy
1463 (%o17) 3 y del(y) + (3 y -- + 2 x) del(x) =
1466 2 x del(y) + (2 x -- + 2 y) del(x)
1468 \end{verbatim}
1469 Recorde-se que durante este cálculo estava todavia ativa a dependência declarada na entrada \verb|(%i14)|.
1471 Finalmente, para acabar esta seção, façamos refer\^encia ao desenvolvimento de Taylor de terceiro grau da função
1473 y=\frac{x \ln x}{x^2-1}
1475 em torno de $x=1$,
1476 \index{taylor}\begin{verbatim}
1477 (%i18) taylor((x*log(x))/(x^2-1),x,1,3);
1479 1 (x - 1) (x - 1)
1480 (%o18)/T/ - - -------- + -------- + . . .
1481 2 12 12
1482 (%i19) expand(%);
1484 x x 5 x 1
1485 (%o19) -- - -- + --- + -
1486 12 3 12 3
1487 \end{verbatim}
1489 A seguir um exemplo de desenvolvimento multivariante da função $y=\exp(x^2 \sin(x y))$ ao redor do ponto $(2,0)$ até grau 2 com relação a cada variável,
1490 \begin{verbatim}
1491 (%i20) taylor(exp(x^2*sin(x*y)),[x,2,2],[y,0,2]);
1493 (%o20)/T/ 1 + 8 y + 32 y + . . .
1495 + (12 y + 96 y + . . .) (x - 2)
1497 + (6 y + 120 y + . . .) (x - 2) + . . .
1498 (%i21) expand(%);
1499 2 2 2 2 2
1500 (%o21) 120 x y - 384 x y + 320 y + 6 x y - 12 x y + 8 y
1502 \end{verbatim}
1505 \newpage
1506 \section{Integrais}
1508 A função do Maxima que controla o cálculo de integrais é \verb|integrate|\index{integrate}, tanto para as definidas como para as indefinidas; comecemos por estas últimas,
1509 \begin{verbatim}
1510 (%i1) integrate(cos(x)^3/sin(x)^4,x);
1512 3 sin (x) - 1
1513 (%o1) -------------
1515 3 sin (x)
1516 (%i2) integrate(a[3]*x^3+a[2]*x^2+a[1]*x+a[0],x);
1517 4 3 2
1518 a x a x a x
1519 3 2 1
1520 (%o2) ----- + ----- + ----- + a x
1521 4 3 2 0
1522 \end{verbatim}
1523 que nos devolve os resultados
1525 \int \frac{\cos^3 x}{\sin^4 x} dx = \frac{3 \sin^2 x -1}{3 \sin^3 x}
1529 \int (a_3 x^3+a_2 x^2+a_1 x + a_0) dx = \frac{a_3 x^4}{4} + \frac{a_2 x^3}{3} +\frac{a_1 x^2}{2} + a_0 x.
1531 Al\'em disso, este último exemplo nos oferece a oportunidade de ver como escrever coeficientes com subíndices.
1533 Agora um par de exemplos sobre a integral definida,
1534 \index{positive}\index{negative}\index{zero}\begin{verbatim}
1535 (%i3) integrate(2*x/((x-1)*(x+2)),x,3,5);
1536 2 log(7) + log(4) 2 log(5) + log(2)
1537 (%o3) 2 (----------------- - -----------------)
1539 (%i4) %,numer; /*aproximação decimal*/
1540 (%o4) 0.91072776920158
1541 (%i5) integrate(asin(x),x,0,u);
1542 Is u positive, negative, or zero?
1544 positive;
1546 (%o5) u asin(u) + sqrt(1 - u ) - 1
1547 \end{verbatim}
1548 isto é,
1550 \int_3^5 \frac{2x}{(x-1)(x+2)} dx \approx 0.91072776920158
1554 \int_0^u \arcsin(x) dx = u \arcsin(u) + \sqrt{1-u^2}-1, \forall u>0.
1556 Note-se neste último exemplo como antes de dar o resultado Maxima pergunta se $u$ é positivo, negativo ou nulo; respondemos escrevendo \verb|positive;| (ponto e vírgula incluído) obtemos finalmente o resultado.
1558 A transformada de Laplace de uma função $f(x)$ se define como a integral
1560 L(p)=\int_0^\infty f(x) e^{-p x} dx,
1562 sendo $p$ um número complexo. Assim, a transformada de Laplace de $f(x)=k e^{-k x}$ é
1563 \index{laplace}\begin{verbatim}
1564 (%i6) laplace(k*exp(-k*x),x,p);
1566 (%o6) -----
1567 p + k
1568 \end{verbatim}
1569 e calculando a transformada inversa voltamos ao ponto de partida,
1570 \index{ilt}\begin{verbatim}
1571 (%i7) ilt(%,p,x);
1572 - k x
1573 (%o7) k %e
1574 \end{verbatim}
1576 A transformada de Fourier de uma função se reduz à de Laplace quando o argumento $p=-i t$, sendo $i$ a unidade imaginária e $t \in \R$,
1578 F(t)=\int_0^\infty f(x) e^{i t x} dx.
1580 Desta maneira, a transformada de Fourier de $f(x)=k e^{-k x}$ é
1581 \begin{verbatim}
1582 (%i8) laplace(k*exp(-k*x),x,-%i*t);
1584 (%o8) --------
1585 k - %i t
1586 \end{verbatim}
1587 Note-se que se $x>0$, a $f(x)$ anterior é precisamente a função de densidade de uma variável aleatória exponencial de parâmetro $k$, pelo que este último resultado coincide precisamente com a função característica desta mesma distribuição. Tenha-se em conta que Maxima calcula a transformada de Laplace integrando na semi-reta positiva, pelo que o cálculo anterior não é válido para calcular funções características de variáveis aleatórias que possam tomar valores negativos, como por exemplo a distribução normal. Uma possível solução a esta situação é integrar diretamente para calcular a função característica da distribução normal $X \sim \normal(0,1)$,
1588 \index{ratsimp}\begin{verbatim}
1589 (%i9) integrate(1/sqrt(2*%pi)*exp(-x^2/2)*exp(%i*t*x),x,minf,inf);
1591 %i t
1592 ------
1594 (%o9) %e
1595 (%i10) ratsimp(%); /* Ojo: %i^2=-1 */
1598 - --
1600 (%o10) %e
1601 \end{verbatim}
1604 \newpage
1605 \section{Equações diferenciais}
1607 Com Maxima se pode resolver analíticamente algumas equações diferenciais ordin\'arias de primeira e segunda ordem mediante a instrução \verb|ode2|\index{ode2}.
1609 Uma equação diferencial de primeira ordem possui a forma geral $F(x,y,y')=0$, de onde $y'=\frac{dy}{dx}$. Para expressar uma destas equações se faz uso de \verb|diff|\index{diff},
1610 \begin{verbatim}
1611 (%i1) /* equação de variáveis separadas */
1612 eq:(x-1)*y^3+(y-1)*x^3*'diff(y,x)=0;
1613 3 dy 3
1614 (%o1) x (y - 1) -- + (x - 1) y = 0
1616 \end{verbatim}
1617 sendo obrigatorio o uso do apóstrofo (\verb|'|) antes de \verb|diff| com o objetivo evitar o cálculo da derivada, que por outro lado daria zero ao não haver-se declarado a variável \verb|y| como dependente de \verb|x|. Para a resolução desta equação tão somente teremos que fazer
1618 \begin{verbatim}
1619 (%i2) ode2(ec,y,x);
1620 2 y - 1 2 x - 1
1621 (%o2) ------- = %c - -------
1623 2 y 2 x
1624 \end{verbatim}
1625 de onde \verb|%C| representa uma constante, que se ajustará conforme a condição inicial que se lhe imponha à equação. Suponha-se que se sabe que quando $x=2$, deve verificar-se que $y=-3$, o qual faremos saber ao Maxima a través da função \verb|ic1|\index{ic1},
1626 \begin{verbatim}
1627 (%i3) ic1(%o2,x=2,y=-3);
1629 2 y - 1 x + 72 x - 36
1630 (%o3) ------- = - --------------
1632 2 y 72 x
1633 \end{verbatim}
1635 Vejamos exemplos de outros tipos de equações diferenciais que o Maxima pode resolver,
1636 \begin{verbatim}
1637 (%i4) /* equação homogênia */
1638 ode2(x^3+y^3+3*x*y^2*'diff(y,x),y,x);
1639 \end{verbatim}
1640 \newpage
1641 \begin{verbatim}
1643 4 x y + x
1644 (%o4) ----------- = %c
1646 \end{verbatim}
1647 Neste caso, quando não se inclui o símbolo de igualdade, se dá por certo que a expressão é igual a zero.
1649 \begin{verbatim}
1650 (%i5) /* redutível a homogênea */
1651 ode2('diff(y,x)=(x+y-1)/(x-y-1),y,x);
1652 2 2 x - 1
1653 log(y + x - 2 x + 1) + 2 atan(-----)
1655 (%o5) -------------------------------------- = %c
1657 (%i6) /* equação exata */
1658 ode2((4*x^3+8*y)+(8*x-4*y^3)*'diff(y,x),y,x);
1660 (%o6) - y + 8 x y + x = %c
1661 (%i7) /* Bernoulli */
1662 ode2('diff(y,x)-y+sqrt(y),y,x);
1663 (%o7) 2 log(sqrt(y) - 1) = x + %c
1664 (%i8) solve(%,y);
1665 x + %c x/2 + %c/2
1666 (%o8) [y = %e + 2 %e + 1]
1667 \end{verbatim}
1668 Neste último caso, optamos por obter a solução em sua forma explícita.
1670 Uma equação diferencial ordinária de segunda ordem possui a forma general $F(x,y,y',y'')=0$, sendo $y''$ a segunda derivada de $y$ com relação a $x$. Como exemplo,
1671 \begin{verbatim}
1672 (%i9) 'diff(y,x)=x+'diff(y,x,2);
1674 dy d y
1675 (%o9) -- = --- + x
1676 dx 2
1678 (%i10) ode2(%,y,x);
1679 \end{verbatim}
1680 \newpage
1681 \begin{verbatim}
1683 x x + 2 x + 2
1684 (%o10) y = %k1 %e + ------------ + %k2
1686 \end{verbatim}
1687 Maxima nos devolve um resultado que depende dos parâmetros, \verb|%k1| e \verb|%k2|, que para ajustá-los necessitaremos proporcionar certas condições iniciais; se sabemos que quando $x=1$ então $y=-1$ e $y'=\left.\frac{dy}{dx}\right|_{x=1}=2$, faremos uso da instrução \verb|ic2|\index{ic2},
1688 \begin{verbatim}
1689 (%i11) ic2(%,x=1,y=-1,diff(y,x)=2);
1691 x + 2 x + 2 7
1692 (%o11) y = ------------ - -
1694 \end{verbatim}
1695 No caso das equações de segunda ordem, também é possível ajustar os parámetros da solução especificando condições de contorno, isto é, fixando dois pontos do plano pelos quais passe a solução; assim, se a solução obtida em \verb|(%o10)| deve pasar pelos pontos $(-1,3)$ e $(2,\frac{5}{3})$, fazemos
1696 \index{bc2}\begin{verbatim}
1697 (%i12) bc2(%o10,x=-1,y=3,x=2,y=5/3);
1698 x + 1 2 3
1699 35 %e x + 2 x + 2 15 %e + 20
1700 (%o12) y = - ---------- + ------------ + -----------
1701 3 2 3
1702 6 %e - 6 6 %e - 6
1703 \end{verbatim}
1704 Note-se que este cálculo se solicita ao Maxima com \verb|bc2|.
1706 A resolução de sistemas de equações diferenciais se faz com chamadas à função \verb|desolve|\index{desolve}. Neste contexto é preciso ter em conta que se deve utilizar notação funcional dentro da expressão \verb|diff|; um exemplo aclarará este ponto, resolvendo o sistema
1708 \left\{
1709 \begin{array}{lcl}
1710 \frac{df(x)}{dx} & = & 3 f(x) - 2 g(x) \\
1711 \frac{dg(x)}{dx} & = & 2 f(x) - 2 g(x)
1712 \end{array}
1713 \right.
1715 \begin{verbatim}
1716 (%i13) desolve(['diff(f(x),x)=3*f(x)-2*g(x),
1717 'diff(g(x),x)=2*f(x)-2*g(x)],
1718 [f(x),g(x)]);
1719 \end{verbatim}
1720 \newpage
1721 \begin{verbatim}
1723 (2 g(0) - f(0)) %e
1724 (%o13) [f(x) = ---------------------
1727 (2 g(0) - 4 f(0)) %e
1728 - -----------------------, g(x) =
1730 - x 2 x
1731 (4 g(0) - 2 f(0)) %e (g(0) - 2 f(0)) %e
1732 ----------------------- - ---------------------]
1734 \end{verbatim}
1735 Como se vê, as referências às funções devem incluir a variável independente e as equações estarão entre colchetes, assim como os nomes das funções. Observamos na resposta que nos dá Maxima a presença de \verb|f(0)| e \verb|g(0)|, o que é devido ao fato de se desconhecerem as condições de contorno do sistema.
1737 Neste último exemplo, suponhamos que queremos resolver o sistema de equações diferenciais
1739 \left\{
1740 \begin{array}{lcl}
1741 \frac{df(x)}{dx} & = & f(x) + g(x) + 3 h(x) \\
1742 \frac{dg(x)}{dx} & = & g(x) - 2 h(x) \\
1743 \frac{dh(x)}{dx} & = & f(x) + h(x)
1744 \end{array}
1745 \right.
1747 sob as condições $f(0)=-1$, $g(0)=3$ e $f(0)=1$. em primeiro lugar introduziremos estas condições com a função \verb|atvalue|\index{atvalue}, para posteriormente solicitar a resolução do sistema,
1748 \begin{verbatim}
1749 (%i14) atvalue(f(x),x=0,-1)$
1750 (%i15) atvalue(g(x),x=0,3)$
1751 (%i16) atvalue(h(x),x=0,1)$
1752 (%i17) desolve(['diff(f(x),x)=f(x)+g(x)+3*h(x),
1753 'diff(g(x),x)=g(x)-2*h(x),
1754 'diff(h(x),x)=f(x)+h(x)], [f(x),g(x),h(x)]);
1755 2 x 2 x - x
1756 (%o17) [f(x) = x %e + %e - 2 %e ,
1757 2 x 2 x - x
1758 g(x) = - 2 x %e + 2 %e + %e ,
1759 2 x - x
1760 h(x) = x %e + %e ]
1761 \end{verbatim}
1764 \newpage
1765 \section{Números aleatórios}
1767 Se seu argumento é um número inteiro positivo, a função \verb|random(n)|\index{random} gera um número pseudoaleatório com distribuição uniforme discreta entre $0$ e $n-1$, ambos inclusive; assim, uma simulação do lançamento de um dado seria
1768 \begin{verbatim}
1769 (%i1) random(6)+1;
1770 (%o1) 5
1771 \end{verbatim}
1772 e uma s\'erie de 100 lan\c{c}amentos de uma moeda,
1773 \index{makelist}\begin{verbatim}
1774 (%i2) makelist(random(2),i,1,100);
1775 (%o2) [0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1,
1776 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0,
1777 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0,
1778 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1,
1779 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1,
1780 1, 1, 1]
1781 \end{verbatim}
1783 Quando o argumento é um número decimal positivo, a variável aleatória que se simula é a uniforme contínua, dando como resultado um número real pertencente ao intervalo $[0,r)$,
1784 \begin{verbatim}
1785 (%i3) random(6.0);
1786 (%o3) 1.171107706786732
1787 \end{verbatim}
1789 O algorítmo gerador dos números pseudoaleatórios é determinista, de maneira que partindo de uma mesma semente ou valor inicial, se gerará a mesma seqüência de números. Para controlar o valor desta semente dispomos das funções \verb|make_random_state|\index{make\_random\_state} e \verb|set_random_state|\index{set\_random\_state}; por exemplo, para definir uma semente que se gere a partir do estado atual do relógio do sistema faremos
1790 \begin{verbatim}
1791 (%i4) nova_semente: make_random_state(true)$
1792 \end{verbatim}
1793 Sem impedimentos, para que tal semente se ative no gerador, devemos indicar expressamente fazendo
1794 \begin{verbatim}
1795 (%i5) set_random_state(nova_semente)$
1796 \end{verbatim}
1798 O argumento da função \verb|make_random_state| pode ser também um número inteiro, como se faz no exemplo de mais abaixo.
1800 Vejamos um caso de aplicação de tudo isto. Suponhamos que queremos simular diferentes séries estocásticas, de forma que todas elas sejam iguais. Se fazemos
1801 \begin{verbatim}
1802 (%i6) makelist(random(6),i,1,10);
1803 (%o6) [0, 2, 2, 4, 3, 0, 3, 3, 5, 3]
1804 (%i7) makelist(random(6),i,1,10);
1805 (%o7) [5, 4, 4, 5, 0, 1, 3, 1, 3, 4]
1806 (%i8) makelist(random(6),i,1,10);
1807 (%o8) [4, 4, 3, 4, 5, 2, 5, 5, 2, 3]
1808 \end{verbatim}
1809 o mais provável é que obtenhamos três seqüências distintas, como no exemplo. Se fazemos
1810 \begin{verbatim}
1811 (%i9) semente: make_random_state(123456789)$
1812 (%i10) set_random_state(semilla)$ makelist(random(6),i,1,10);
1813 (%o11) [4, 4, 0, 1, 0, 3, 2, 5, 4, 4]
1814 (%i12) set_random_state(semilla)$ makelist(random(6),i,1,10);
1815 (%o13) [4, 4, 0, 1, 0, 3, 2, 5, 4, 4]
1816 (%i14) set_random_state(semilla)$ makelist(random(6),i,1,10);
1817 (%o15) [4, 4, 0, 1, 0, 3, 2, 5, 4, 4]
1818 \end{verbatim}
1819 se verá que as três seqüências são iguais, já que antes de gerar cada amostra aleatória reiniciamos o estado do gerador.
1821 Outra variável aleatória que interessa simular é a normal ou gaussiana com média $\mu=m \in \R$ e desvio padrão $\sigma=s>0$, para o qual se dispõe da função \verb|gauss(m,s)|\index{gauss},
1822 \begin{verbatim}
1823 (%i16) gauss(31.45,1.23);
1824 (%o16) 32.2873298461951
1825 \end{verbatim}
1826 O gerador de números aleatórios normais opera independentemente do mecanismo de semente comentado mais acima.
1828 \newpage
1829 \section{Gráficos}
1831 Maxima não está habilitado para realizar gráficos, pelo que necesitará de um programa externo que realize esta tarefa. Nós a partir do Maxima nos encarregaremos de ordenar que tipo de gráfico queremos e Maxima se encarregará de comunicá-lo à aplicação gráfica que está ativa nesse momento, que por padrão será o Gnuplot.
1833 Veremos em primeiro lugar alguns exemplos de como gerar gráficos a partir do Maxima com Gnuplot e logo trataremos brevemente sobre como podemos modificar algumas das opções padrão do ambiente gráfico.
1835 O mais simples é desenhar uma função no plano, por exemplo $y=e^{-x^2}$, em um intervalo tal como $[-2, 5]$,
1836 \index{plot2d}\begin{verbatim}
1837 (%i1) plot2d(exp(-x^2),[x,-2,5])$
1838 \end{verbatim}
1839 cujo resultado se pode observar na região \emph{a)} da Figura~\ref{fig:gp1}. Na região \emph{b)} da mesma figura se pode ver como é possível representar varias funções de uma só vez,
1840 \begin{verbatim}
1841 (%i2) plot2d([-x^2,1+x,7*sin(x)],[x,-2,5])$
1842 \end{verbatim}
1844 \begin{figure}
1845 \begin{center}
1846 \includegraphics[scale=1.0]{gnuplot1.png} \\
1847 \emph{a)} \\
1848 \includegraphics[scale=1.0]{gnuplot2.png} \\
1849 \emph{b)} \\
1850 \caption{Funções em coordenadas cartesianas: \emph{a)} uma única função; \emph{b)} uma família de funções.}
1851 \label{fig:gp1}
1852 \end{center}
1853 \end{figure}
1855 Para a realização de funções definidas na forma paramétrica necessitamos fazer uso do símbolo \verb|parametric|, Figura~\ref{fig:gp2},
1856 \begin{verbatim}
1857 (%i3) plot2d([parametric,t,t*sin(1/t),[t,0.01,0.2]])$
1858 \end{verbatim}
1859 O resultado que se obtém é o da região \emph{a)}. Maxima calcula por padrão um número fixo de pontos da função que logo utilizará para representá-la; como esta é uma função que varia muito perto da orígem, pediremos que nos faça o desenho com um maior número de pontos, o que se fará mediante a opção \verb|nticks|, tal como se indica a seguir,
1860 \begin{verbatim}
1861 (%i4) plot2d([parametric,t,t*sin(1/t),[t,0.01,0.2],[nticks,500]])$
1862 \end{verbatim}
1863 Se comprova que o aspecto mudou apreciadamente.
1865 \begin{figure}
1866 \begin{center}
1867 \includegraphics[scale=1.0]{gnuplot3.png} \\
1868 \emph{a)} \\
1869 \includegraphics[scale=1.0]{gnuplot4.png} \\
1870 \emph{b)} \\
1871 \caption{Controle do número de pontos: \emph{a)} número de pontos padrão; \emph{b)} a mesma função com 500 pontos.}
1872 \label{fig:gp2}
1873 \end{center}
1874 \end{figure}
1876 O seguinte exemplo mostra a presença em um mesmo gráfico da função $y=x^3+2$ junto com a circunferência de raio unitário, expressa na forma paramétrica, que na região \emph{a)} da Figura~\ref{fig:gp3} se vê como uma elipse devido à diferença de escalas nos eixos,
1877 \begin{verbatim}
1878 (%i5) plot2d([x^3+2,[parametric,cos(t),sin(t),[t,-5,5]]],
1879 (%i6) [x,-1.3,1.3],[nticks,500])$
1880 \end{verbatim}
1882 Também é possível a geração de superficies em 3D definidas da forma $z=f(x,y)$, regi\~ao \emph{b)} da Figura~\ref{fig:gp3},
1883 \index{plot3d}\begin{verbatim}
1884 (%i7) plot3d(exp(-x^2-y^2),[x,-2,2],[y,-2,0])$
1885 \end{verbatim}
1887 \begin{figure}
1888 \begin{center}
1889 \includegraphics[scale=1.0]{gnuplot5.png} \\
1890 \emph{a)} \\
1891 \includegraphics[scale=1.0]{gnuplot6.png} \\
1892 \emph{b)} \\
1893 \caption{Mais tipos de gráficos: \emph{a)} combinando funções paramétrica e não paramétrica; \emph{b)} superfície em 3D.}
1894 \label{fig:gp3}
1895 \end{center}
1896 \end{figure}
1898 Finalmente, do manual de Maxima se extraiu a superf\'icie (cinta) de M\"{o}bius como um exemplo de superfície paramética, região \emph{a)} da Figura~\ref{fig:gp4},
1899 \begin{verbatim}
1900 (%i8) plot3d([cos(x)*(3+y*cos(x/2)),
1901 sin(x)*(3+y*cos(x/2)),y*sin(x/2)],
1902 [x,-%pi,%pi],[y,-1,1],['grid,50,15]);
1903 \end{verbatim}
1905 A função \verb|plot3d| é capaz de gerar uma curva paramétrica em três dimensões, como o prova esta hélice, que se pode ver na região \emph{b)} da Figura~\ref{fig:gp4},
1906 \begin{verbatim}
1907 (%i9) plot3d([cos(t),sin(t),2*t],[t,-%pi,%pi],[u,0,1]);
1908 \end{verbatim}
1910 \begin{figure}
1911 \begin{center}
1912 \includegraphics[scale=1.0]{gnuplot7.png} \\
1913 \emph{a)} \\
1914 \includegraphics[scale=1.0]{gnuplot8.png} \\
1915 \emph{b)} \\
1916 \caption{Gráficos paramétricos em 3D: \emph{a)} uma superficie; \emph{b)} uma curva.}
1917 \label{fig:gp4}
1918 \end{center}
1919 \end{figure}
1921 O controle das opções gráficas se consegue manipulando a variável global \verb|plot_options|\index{plot\_options}, cujo estado por padrão é
1922 \begin{verbatim}
1923 (%i10) plot_options;
1924 (%o10) [[x, - 1.755559702014e+305, 1.755559702014e+305],
1925 [y, - 1.755559702014e+305, 1.755559702014e+305],
1926 [t, - 3, 3], [GRID, 30, 30], [VIEW_DIRECTION, 1, 1, 1],
1927 [COLOUR_Z, FALSE], [TRANSFORM_XY, FALSE],
1928 [RUN_VIEWER, TRUE], [PLOT_FORMAT, GNUPLOT],
1929 [GNUPLOT_TERM, DEFAULT], [GNUPLOT_OUT_FILE, FALSE],
1930 [NTICKS, 10], [ADAPT_DEPTH, 10], [GNUPLOT_PM3D, FALSE],
1931 [GNUPLOT_PREAMBLE, ], [GNUPLOT_CURVE_TITLES, [DEFAULT]],
1932 [GNUPLOT_CURVE_STYLES, [with lines 3, with lines 1,
1933 with lines 2, with lines 5, with lines 4, with lines 6,
1934 with lines 7]], [GNUPLOT_DEFAULT_TERM_COMMAND, ],
1935 [GNUPLOT_DUMB_TERM_COMMAND, set term dumb 79 22],
1936 [GNUPLOT_PS_TERM_COMMAND, set size 1.5, 1.5;set term postsc#
1937 ript eps enhanced color solid 24]]
1938 \end{verbatim}
1939 Para maior informação sobre o significado de cada um dos elementos desta lista sería aconselhável executar o comando \verb|describe(plot_options)|.
1941 Já se comentou que a menos que se lhe indique o contr\'ario, Maxima invocará o programa Gnuplot para a representação de um gráfico, pode ser que prefiramos o programa Openmath, que faz parte da distribução de Maxima; em tal caso teríamos que modificar previamente as opções guardadas em \verb|plot_options| e a seguir solicitar o gráfico desejado, como neste caso no que se representa a função gamma e sua inversa, cujo resultado se observa na região \emph{a)} da Figura~\ref{fig:gp5}
1942 \index{set\_plot\_option}\begin{verbatim}
1943 (%i11) set_plot_option([plot_format, openmath])$
1944 (%i12) plot2d([gamma(x),1/gamma(x)],[x,-4.5,5],[y,-10,10])$
1945 \end{verbatim}
1946 Openmath também é capaz de realizar gráficos em três dimensões definidas em coordenadas polares e que se representa na região \emph{b)} da Figura~\ref{fig:gp5}. Note-se como a partir da própria função é possível alterar as opções gráficas; sem impedimentos, feito desta maneira as trocas só possuem efeito para a realização do gráfico presente, sem alterar as opções globais do Maxima.
1947 \begin{verbatim}
1948 (%i13) plot3d(r^0.33*cos(t/3),[r,0,1],[t,0,6*%pi],
1949 ['grid,20,80],['transform_xy,polar_to_xy])$
1950 \end{verbatim}
1952 \begin{figure}
1953 \begin{center}
1954 \includegraphics[scale=1.0]{openmath1.png} \\
1955 \emph{a)} \\
1956 \includegraphics[scale=1.0]{openmath2.png} \\
1957 \emph{b)} \\
1958 \caption{Gráficos em Openmath: \emph{a)} no plano; \emph{b)} em três dimensões.}
1959 \label{fig:gp5}
1960 \end{center}
1961 \end{figure}
1963 As Figuras que foram representadas até agora nesta seção são capturadas da janela do monitor gerada por Gnuplot ou por Openmath e guardadas no disco em formato PNG. Sem impedimentos, podemos fazer com que o programa gráfico gere diretamente um arquivo PNG em lugar de mostrar no monitor. Voltemos ao Gnuplot e obtenhamos diretamente deste programa um arquivo com este formato (png) de um dos gráficos que já realizamos anteriormente,
1964 \index{gnuplot\_preamble}\begin{verbatim}
1965 (%i14) set_plot_option([plot_format, gnuplot])$
1966 (%i15) plot3d(exp(-x^2-y^2),[x,-2,2],[y,-2,0],
1967 [gnuplot_preamble,"set terminal png size 420,320;
1968 set out 'grafico.png'"])$
1969 \end{verbatim}
1970 Depois de alterar globalmente o programa gráfico, voltemos a representar a superficie tridimensional que já vimos na região \emph{b)} da Figura~\ref{fig:gp3}. Veja-se como se mudou o parâmetro gráfico \verb|gnuplot_preamble| para indicar ao Gnuplot que gere um arquivo em formato PNG de certas dimensões dadas e que o guarde com o nome \verb|grafico.png|. O resultado o vemos na região \emph{a)} da Figura~\ref{fig:gp6}. Quando se trabalha em Gnuplot, o par\^ametro \verb|gnuplot_preamble| permite passar a este programa uma série de comandos que aperfeiçoam os detalles; estes comandos devem ir separados por ponto e vírgula e devem ser os próprios da linguagem do Gnuplot. Para um melhor domínio destes detalhes é aconselhável recorrer à documentação deste programa (www.gnuplot.info).
1972 Por último, se se quer um arquivo gráfico em Postscript, repitamos o último exemplo solicitando este formato,
1973 \begin{verbatim}
1974 (%i16) plot3d(exp(-x^2-y^2),[x,-2,2],[y,-2,0],
1975 [gnuplot_preamble,"set terminal postscript eps;
1976 set out 'grafico.eps'"])$
1977 \end{verbatim}
1978 O resultado enontra-se na região \emph{b)} da Figura~\ref{fig:gp6}. Os gráficos armazenados em formato Postscript, os que possuem extensão EPS, são adequados quando se planeja criar um documento baseado em \TeX-\LaTeX.
1980 \begin{figure}
1981 \begin{center}
1982 \includegraphics[scale=1.0]{grafico.png} \\
1983 \emph{a)} \\
1984 \includegraphics[scale=1.0]{grafico.pdf} \\
1985 \emph{b)} \\
1986 \caption{Formatos de arquivos gráficos: \emph{a)} PNG; \emph{b)} Postscript.}
1987 \label{fig:gp6}
1988 \end{center}
1989 \end{figure}
1991 Posto que estamos falando de \LaTeX, este é um bom lugar para fazer referência a uma função que transforma uma expressão de Maxima para o formato \TeX, de maneira que o resultado que se obtenha possa ser incorporado facilmente (copiar e colar) a um arquivo fonte de \LaTeX; a modo de exemplo, calculemos uma derivada para posteriormente transformá-la,
1992 \index{4@'}\index{tex}\begin{verbatim}
1993 (%i17) 'diff(sin(x^x)*sqrt(log(x)),x)=
1994 diff(sin(x^x)*sqrt(log(x)),x);
1996 (%o17) -- (sqrt(log(x)) sin(x )) =
2000 sin(x ) x x
2001 ---------------- + x sqrt(log(x)) (log(x) + 1) cos(x )
2002 2 x sqrt(log(x))
2003 (%i18) tex(%);
2005 $${{d}\over{d\,x}}\,\left(\sqrt{\log x}\,\sin x^{x}\right)={{\sin x^{
2006 x}}\over{2\,x\,\sqrt{\log x}}}+x^{x}\,\sqrt{\log x}\,\left(\log x+1
2007 \right)\,\cos x^{x}$$
2008 (%o18) false
2009 \end{verbatim}
2010 O apóstrofo que se coloca na entrada \verb|(%i17)| antes da função \verb|diff| serve para devolver a expressão sem avaliá-la, tal como aparece no membro esquerdo da igualdade \verb|(%o17)|. Uma vez copiada e colada a resposta da entrada \verb|(%i18)| em um fonte \LaTeX, sua compilação dará como resultado a expressão
2012 {{d}\over{d\,x}}\,\left(\sqrt{\log x}\,\sin x^{x}\right)={{\sin x^{
2013 x}}\over{2\,x\,\sqrt{\log x}}}+x^{x}\,\sqrt{\log x}\,\left(\log x+1
2014 \right)\,\cos x^{x}
2016 mais fácil de interpretar por um humano.
2019 \newpage
2020 \section{Listas}
2022 As listas são objetos muito potentes à hora de representar estruturas de dados; de fato, toda expressão de Maxima se representa internamente como uma lista, o que não é de estranhar tomando-se em conta que Maxima está programado em Lisp (\emph{List Processing}). Vejamos como podemos ver a representação interna, isto é em Lisp, de uma simples expressão tal como $1+3a$,
2023 \index{31@:lisp}\begin{verbatim}
2024 (%i1) :lisp #$1+3*a$
2025 ((MPLUS SIMP) 1 ((MTIMES SIMP) 3 $a))
2026 \end{verbatim}
2027 Note-se que o formato geral é da forma \verb|:lisp #$expr$|, sendo \verb|expr| uma expressão qualquer na linguagem do Maxima.
2029 Todavia a nível de usu\'ario que não está interesado nas interioridades de Maxima, também se pode trabalhar com listas como as definidas a seguir, sempre encerradas entre colchetes,
2030 \index{34@[...]}\index{32@``...''}\begin{verbatim}
2031 (%i2) q:[b,5,a,d,1,3,7]$
2032 (%i3) r:[1,[a,3],sqrt(3)/2,"Don Quijote"];
2033 sqrt(3)
2034 (%o3) [1, [a, 3], -------, Don Quijote]
2036 \end{verbatim}
2037 Vemos que os elementos de uma lista podem por sua vez serem também listas, expressões matemáticas ou cadeias de caracteres incluídas entre aspas duplas, o que pode ser aproveitado para a construção e manipulação de estruturas mais ou menos complexas. Extraiamos a seguir alguma informação das listas anteriores,
2038 \index{listp}\index{first}\index{second}\index{third}\index{last}\index{rest}\index{part}\index{length}\index{reverse}\index{member}\index{sort}\index{delete}\begin{verbatim}
2039 (%i4) listp(r); /* é r uma lista? */
2040 (%o4) true
2041 (%i5) first(r); /* primeiro elemento */
2042 (%o5) 1
2043 (%i6) second(r); /* segundo elemento */
2044 (%o6) [a, 3]
2045 (%i7) third(r); /* ...até o décimo somente */
2046 sqrt(3)
2047 (%o7) -------
2049 (%i8) last(r); /* o último da lista */
2050 (%o8) Don Quijote
2051 (%i9) rest(r); /* todos menos o primeiro */
2052 sqrt(3)
2053 (%o9) [[a, 3], -------, Dom Quixote]
2055 (%i10) part(r,3); /* peço o que quero */
2056 sqrt(3)
2057 (%o10) -------
2059 (%i11) length(r); /* quantos existem? */
2060 (%o11) 4
2061 (%i12) reverse(r); /* invertemos */
2062 sqrt(3)
2063 (%o12) [Dom Quixote, -------, [a, 3], 1]
2065 (%i13) member(a,r); /* é a um elemento?*/
2066 (%o13) false
2067 (%i14) member([a,3],r); /* ou é [a,3]? */
2068 (%o14) true
2069 (%i15) sort(q); /* ordeno */
2070 (%o15) [1, 3, 5, 7, a, b, d]
2071 (%i16) delete([a,3],r); /* apago o elemento */
2072 sqrt(3)
2073 (%o16) [1, -------, Dom Quixote]
2075 \end{verbatim}
2076 Note-se que em todo este tempo a lista \verb|r| não foi alterada,
2077 \begin{verbatim}
2078 (%i17) r;
2079 sqrt(3)
2080 (%o18) [1, [a, 3], -------, Dom Quixote]
2082 \end{verbatim}
2084 Algumas funções de Maxima permitem adicionar novos elementos a uma lista, tanto ao início como ao final,
2085 \index{cons}\index{endcons}\begin{verbatim}
2086 (%i19) cons(1+2,q);
2087 (%o19) [3, b, 5, a, d, 1, 3, 7]
2088 (%i20) endcons(x,q);
2089 (%o20) [b, 5, a, d, 1, 3, 7, x]
2090 \end{verbatim}
2091 Neste exemplo observamos também que a lista \verb|q| não foi alterada; se o que queremos é atualizar seu conteúdo,
2092 \begin{verbatim}
2093 (%i26) q: endcons(x,cons(1+2,q))$
2094 (%i27) q;
2095 (%o27) [3, b, 5, a, d, 1, 3, 7, x]
2096 \end{verbatim}
2098 É possível unir duas listas,
2099 \index{append}\begin{verbatim}
2100 (%i28) append(r,q);
2101 sqrt(3)
2102 (%o28) [1, [a, 3], -------, Dom Quixote, 3, b, 5, a, d, 1,
2105 3, 7, x]
2106 \end{verbatim}
2108 Quando os elementos de uma lista obedecem a um certo critério de construção, podemos utilizar a função \verb|makelist|\index{makelist},
2109 \begin{verbatim}
2110 (%i29) s:makelist(2+k*2,k,0,10);
2111 (%o29) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
2112 \end{verbatim}
2113 de onde indicamos ao Maxima que nos construa uma lista com elementos da forma \verb|2+2*k|, de modo que \verb|k| tome valores inteiros de 0 a 10.
2115 A função \verb|apply|\index{apply} permite fornecer a outra função todos os elementos de uma lista como argumentos, assim podemos adicionar ou multiplicar todos os elementos da lista \verb|s| recém criada,
2116 \index{14@+}\index{16@*}\begin{verbatim}
2117 (%i30) apply("+",s);
2118 (%o30) 132
2119 (%i31) apply("*",s);
2120 (%o31) 81749606400
2121 \end{verbatim}
2122 ainda que estas duas operações tivessem sido melhor realizadas com as funções \verb|sum|\index{sum} e \verb|product|\index{product}.
2124 Às vezes interessará aplicar uma mesma função a varios elementos de uma lista de forma independente, para o que faremos uso de \verb|map|\index{map}; a seguir um exemplo de cálculo de fatoriais e outro trigonométrico,
2125 \begin{verbatim}
2126 (%i32) map("!",s);
2127 (%o32) [2, 24, 720, 40320, 3628800, 479001600, 87178291200,
2128 20922789888000, 6402373705728000, 2432902008176640000,
2129 1124000727777607680000]
2130 (%i33) map(sin,s);
2131 (%o33) [sin(2), sin(4), sin(6), sin(8), sin(10), sin(12),
2132 sin(14), sin(16), sin(18), sin(20), sin(22)]
2133 \end{verbatim}
2135 Por último, as listas também podem ser utilizadas em operações aritméticas,
2136 \index{14@+}\index{15@-}\index{16@*}\index{17@/}\index{18@\^\ }\index{21@.}\begin{verbatim}
2137 (%i34) [1,2,3]+[a,b,c];
2138 (%o34) [a + 1, b + 2, c + 3]
2139 (%i35) [1,2,3]*[a,b,c];
2140 (%o35) [a, 2 b, 3 c]
2141 (%i36) [1,2,3]/[a,b,c];
2142 1 2 3
2143 (%o36) [-, -, -]
2144 a b c
2145 (%i37) [1,2,3]-[a,b,c];
2146 (%o37) [1 - a, 2 - b, 3 - c]
2147 (%i38) [1,2,3].[a,b,c]; /* produto escalar */
2148 (%o38) 3 c + 2 b + a
2149 (%i39) [a,b,c]^3;
2150 3 3 3
2151 (%o39) [a , b , c ]
2152 (%i40) 3^[a,b,c];
2153 a b c
2154 (%o40) [3 , 3 , 3 ]
2155 \end{verbatim}
2156 Para que estas operações possam realizar-se sem problemas, a variável global \verb|listarith|\index{listarith} deve tomar o valor \verb|true|, caso contrário o resultado será bem diferente,
2157 \begin{verbatim}
2158 (%i41) listarith:false$
2159 (%i42) [1,2,3]+[4,5,6];
2160 (%o42) [4, 5, 6] + [1, 2, 3]
2161 (%i43) listarith:true$
2162 \end{verbatim}
2164 Como já se viu no começo desta seção, uma lista pode ser elemento de outra lista, se queremos desfazer todas as listas interiores para que seus elementos passem a fazer parte da exterior,
2165 \index{flatten}\begin{verbatim}
2166 (%i44) flatten([1,[a,b],2,3,[c,[d,e]]]);
2167 (%o44) [1, a, b, 2, 3, c, d, e]
2168 \end{verbatim}
2171 \newpage
2172 \section{Operações com conjuntos}
2174 Se define a seguir um conjunto mediante a função \verb|set|\index{set},
2175 \begin{verbatim}
2176 (%i1) c1:set(a,[2,k],b,sqrt(2),a,set(a,b),
2177 3,"Sancho",set(),b,sqrt(2),a);
2178 (%o1) {3, sqrt(2), {}, [2, k], a, {a, b}, b, Sancho}
2179 \end{verbatim}
2180 Como se vê, se admitem objetos de mui diversa natureza como elementos de um conjunto: números, expressões, o conjunto vazio (\verb|{}|), listas, outros conjuntos ou cadeias de caracteres. Quando se trabalha com listas, pode ser de utilidade considerar seus componentes como elementos de um conjunto, logo se necessita uma função que nos transforme uma lista em conjunto,
2181 \index{setify}\begin{verbatim}
2182 (%i2) [[2,k],sqrt(2),set(b,a),[k,2],"Pança"];
2183 (%o2) [[2, k], sqrt(2), {a, b}, [k, 2], Pança]
2184 (%i3) c2:setify(%);
2185 (%o3) {sqrt(2), [2, k], {a, b}, [k, 2], Pança}
2186 \end{verbatim}
2187 a mudança na natureza destas duas coleções de objetos se aprecia na presença de chaves frente aos colchetes. De igual maneira, podemos transformar um conjunto em lista,
2188 \index{listify}\begin{verbatim}
2189 (%i4) listify(%o1);
2190 (%o4) [3, sqrt(2), {}, [2, k], a, {a, b}, b, Sancho]
2191 \end{verbatim}
2192 Comprovemos rapidamente que \verb|{}| representa o conjunto vazio,
2193 \index{emptyp}\begin{verbatim}
2194 (%i5) emptyp(%[3]);
2195 (%o5) true
2196 \end{verbatim}
2197 Recorde-se que \verb|%| substitui a última resposta dada por Maxima, que neste caso havia sido uma lista, pelo que \verb|%[3]| faz referência à sua terceira componente.
2199 Para comprovar se um certo objeto faz parte de um conjunto fazemos uso da instrução \verb|elementp|\index{elementp},
2200 \begin{verbatim}
2201 (%i6) elementp(sqrt(2),c1);
2202 (%o6) true
2203 \end{verbatim}
2204 É possível extrair um elemento de um conjunto e logo adicionar-lhe outro diferente
2205 \index{disjoin}\index{adjoion}\begin{verbatim}
2206 (%i7) c1: disjoin(sqrt(2),c1); /* sqrt(2) retirado */
2207 (%o7) {3, {}, [2, k], a, {a, b}, b, Sancho}
2208 (%i8) c1: adjoin(sqrt(3),c1); /* sqrt(3) dentro */
2209 (%o8) {3, sqrt(3), {}, [2, k], a, {a, b}, b, Sancho}
2210 \end{verbatim}
2211 A substituição que se acaba de realizar se podia ter feito com a função \verb|subst|\index{subst},
2212 \begin{verbatim}
2213 (%i9) /* novamente coloca-se sqrt(2) */
2214 subst(sqrt(2),sqrt(3),c1);
2215 (%o9) {3, sqrt(2), {}, [2, k], a, {a, b}, b, Sancho}
2216 \end{verbatim}
2218 A comprovação de que um conjunto é subconjunto de outro se faz com a função \verb|subsetp|\index{subsetp},
2219 \begin{verbatim}
2220 (%i10) subsetp(set([k,2],"Pança"),c2);
2221 (%o10) true
2222 \end{verbatim}
2224 A seguir alguns exemplos de operações com conjuntos,
2225 \index{union}\index{intersection}\index{setdifference}\index{cardinality}\begin{verbatim}
2226 (%i11) union(c1,c2);
2227 (%o11) {3, sqrt(2), sqrt(3), {}, [2, k], a, {a, b}, b,
2228 [k, 2], Pança, Sancho}
2229 (%i12) intersection(c1,c2);
2230 (%o12) {[2, k], {a, b}}
2231 (%i13) setdifference(c1,c2);
2232 (%o13) {3, sqrt(3), {}, a, b, Sancho}
2233 (%i14) cardinality(%);
2234 (%o14) 6
2235 \end{verbatim}
2236 Vemos aqui também como pedir o cardinal de um conjunto.
2238 Igual ao que se viu em como aplicar uma função a todos os elementos de uma lista, podemos fazer o mesmo com os elementos de um conjunto,
2239 \index{map}\begin{verbatim}
2240 (%i15) map(sin,set(1,2,3,4,5));
2241 (%o15) {sin(1), sin(2), sin(3), sin(4), sin(5)}
2242 \end{verbatim}
2244 Por último, o produto cartesiano de três conjuntos,
2245 \index{cartesianproduct@cartesian\_product}\begin{verbatim}
2246 (%i16) cartesian_product(set(1,2),set(a,b,c),set(x,y));
2247 (%o16) {[1, a, x], [1, a, y], [1, b, x], [1, b, y],
2248 [1, c, x], [1, c, y], [2, a, x], [2, a, y], [2, b, x],
2249 [2, b, y], [2, c, x], [2, c, y]}
2250 \end{verbatim}
2252 \newpage
2253 \section{Operações lógicas}
2255 Como qualquer outro interpretador ou ambiente de programação, Maxima dispõe também da capacidade de avaliar predicados lógicos, aqueles que podem ser ou verdadeiros (\verb|true|)\index{true}, ou falsos (\verb|false|)\index{false}. Os predicados mais simples são funções que devolvem um destes dois valores lógicos; exemplos dessas já apareceram em seções anteriores,
2256 \begin{verbatim}
2257 (%i1) listp([[1,2],[a,b]]);
2258 (%o1) true
2259 (%i2) matrixp([[1,2],[a,b]]);
2260 (%o2) false
2261 (%i3) evenp(2^3);
2262 (%o3) true
2263 \end{verbatim}
2265 Posto que Maxima é um ambiente de processamento matemático, é freqüênte ter que comparar duas quantidades. Os operadores de comparação se resumem na seguinte tabela,
2266 \index{22@=}\index{23@\#}\index{24@$>$}\index{25@$<$}\index{26@$>=$}\index{27@$=<$}\begin{center}
2267 \begin{tabular}{|c|c|} \hline
2268 \verb|=| & ...igual a... \\ \hline
2269 \verb|#| & ...diferente de... \\ \hline
2270 \verb|>| & ...maior que... \\ \hline
2271 \verb|<| & ...menor que... \\ \hline
2272 \verb|>=| & ...maior ou igual a... \\ \hline
2273 \verb|=<| & ...menor ou igual a... \\ \hline
2274 \end{tabular}
2275 \end{center}
2277 Se se quer saber se um número é menor que outro podemos fazer uso da função \verb|is|\index{is},
2278 \begin{verbatim}
2279 (%i4) is(sqrt(7895)<85);
2280 (%o4) false
2281 (%i5) is(4^12#16777216);
2282 (%o5) false
2283 \end{verbatim}
2284 No primeiro caso comprovamos se $\sqrt{7895}$ é estritamente menor que 85 e no segundo comprovamos se a potência $4^{12}$ é diferente de 16777216.
2286 Junto com estes predicados simples, os conectores \verb|and|\index{and}, \verb|or|\index{or} e \verb|not|\index{not} permitem construir formas mais complexas. a tabela adicional resume o comportamento destes operadores,
2287 \begin{center}
2288 \begin{tabular}{|c|c||c|c|c|} \hline
2289 p & q & p \verb|and| q & p \verb|or| q & \verb|not| p \\ \hline
2290 \verb|false| & \verb|false| & \verb|false| & \verb|false| & \verb|true| \\
2291 \verb|false| & \verb|true| & \verb|false| & \verb|true| & \verb|true| \\
2292 \verb|true| & \verb|false| & \verb|false| & \verb|true| & \verb|false| \\
2293 \verb|true| & \verb|true| & \verb|true| & \verb|true| & \verb|false| \\ \hline
2294 \end{tabular}
2295 \end{center}
2297 Na hora de escrever expressões lógicas convém ter em conta a ordem de precedência; primeiro se avalia \verb|not|, a seguir \verb|and| e, finalmente, \verb|or|; em caso de dúvida sempre se pode recorrer aos parêntesis. Um exemplo,
2298 \begin{verbatim}
2299 (%i6) is(not 3<4 or 5<5);
2300 (%o6) false
2301 \end{verbatim}
2302 Aqui, primeiro se avalia \verb|not 3<4|, que dá como resultado \verb|false|; a seguir, se avalia se é certo ou não que \verb|5<5|, o qual é também falso, finalmente se obtém o resultado correspondente a \verb|false or false|.
2304 O leitor devería ser capaz de justificar as seguintes respostas,
2305 \begin{verbatim}
2306 (%i7) is(3#4 and not 7<=2);
2307 (%o7) true
2308 (%i8) is((5<8 or 8<2) and oddp(3) and evenp(sqrt(16)));
2309 (%o8) true
2310 \end{verbatim}
2313 \newpage
2314 \section{Programação no Maxima}
2316 Com vistas à optimização de tempo e esforço será interessante poder definir de uma só vez nossas próprias funções e poder logo reutilizá-las quantas vezes seja necessário.
2318 A programação de funções requer certas sentenças de controle que são comuns, com mais ou menos matrizes (nuances) em sua sintaxe, em todas as linguagens de programação.
2320 Um elemento imprescindível no controle do fluxo é a sentença condicional \verb|if|\index{if-then-else}, cuja estrutura é
2321 \begin{verbatim}
2322 if <cond> then <expr1> else <expr2>
2323 \end{verbatim}
2324 tal como em
2325 \begin{verbatim}
2326 (%i1) x:30!$ y:exp(30)$
2327 (%i3) if (x>y) then 0 else 1;
2328 (%o3) 0
2329 \end{verbatim}
2331 A condição \verb|<cond>| é uma expressão lógica que admite os operadores \verb|and|\index{and}, \verb|or|\index{or} e \verb|not|\index{not}, sendo seus argumentos predicados lógicos, cujo valor só pode ser \emph{verdadero} ou \emph{falso},
2333 Outra sentença que nunca falta em uma linguagem de programação é a que controla as iterações e os cíclos. Maxima oferece aqui várias possibilidades. Em primeiro lugar,
2334 \index{for}\begin{verbatim}
2335 for <var>:<val1> step <val2> thru <val3> do <expr>
2336 \end{verbatim}
2337 O seguinte exemplo escreve, fazendo uso da função \verb|print|\index{print}, os cinco primeiros cubos inteiros positivos,
2338 \begin{verbatim}
2339 (%i4) for i:1 thru 5 do print(i^3);
2345 (%o4) done
2346 \end{verbatim}
2348 Outra possibilidade de controlar as iterações é com a versão
2349 \begin{verbatim}
2350 for <var>:<val1> step <val2> while <cond> do <expr>
2351 \end{verbatim}
2352 que no seguinte exemplo se utiliza para calcular as quintas potências de todos os números impares menores que 20; note-se como trás a sentença "\verb|do|" se pode escrever várias expressões separadas por vírgulas (\verb|,|)\index{2@, (coma)} e encerradas entre parêntesis,
2353 \begin{verbatim}
2354 (%i5) for i:1 step 2 while i<20 do(j:i^5,print(j));
2357 3125
2358 16807
2359 59049
2360 161051
2361 371293
2362 759375
2363 1419857
2364 2476099
2365 (%o5) done
2366 \end{verbatim}
2368 Também existe uma versão da sentença \verb|for| mui a propósito para trabalhar com listas,
2369 \begin{verbatim}
2370 for <var> in <lista> do <expr>
2371 \end{verbatim}
2372 como se mostra no seguinte exemplo, de onde se imprime todos os elementos de uma amostra simulada de números aleatórios, aumentados em uma unidade,
2373 \begin{verbatim}
2374 (%i7) m:makelist(random(4),i,1,10);
2375 (%o7) [2, 0, 3, 2, 2, 3, 0, 1, 1, 3]
2376 (%i8) for i in m do print(i+1);
2387 (%o8) done
2388 \end{verbatim}
2390 Em geral, a definição de uma nova função em Maxima tem a estrutura
2391 \begin{verbatim}
2392 f(<arg1>,<arg2>,...):=<expr>
2393 \end{verbatim}
2394 de onde \verb|<argi>| são os argumentos e \verb|<expr>| é uma expressão sintaticamente válida. Por exemplo, já que Maxima não dispõe da função logarítmica em base arbitrária, a podemos definir por nossa conta,
2395 \index{28@:=}\begin{verbatim}
2396 (%i9) logb(x,b):=log(x)/log(b)$
2397 (%i10) logb(234,10);
2398 log(234)
2399 (%o10) --------
2400 log(10)
2401 (%i11) %,numer;
2402 (%o11) 2.3692157
2403 \end{verbatim}
2405 Em algumas ocasiões, a função é o suficientemente complexa como para necessitar tanto de variáveis locais que guardem valores temporários, como de expressões que os calculem; em tais casos teremos que lançar mão do ambiente de bloco com a instrução \verb|block|\index{block}, cuja estrutura é
2406 \begin{verbatim}
2407 f(<arg1>,<arg2>,...):=block([<varloc1>,<varloc2>,...],
2408 <expr1>,
2409 <expr2>,
2410 ....
2411 <exprm> );
2412 \end{verbatim}
2413 sendo o resultado devolvido o da última expressão avaliada (\verb|<exprm>|). As variáveis\,\,\, locais às quais se fizeram \,\,\, referência se declaram\,\,\, entre \,\,\,colchetes\\(\verb|<varloci>|) dentro do bloco, de onde podem ser inicializadas e cuja vida se extende durante o tiempo que dure o cálculo do bloco; al\'em do mais, se uma destas variáveis temporárias se chama igual a outra global da sessão do Maxima, não interferirá com ela e qualquer referência à variável se considerará que é à local, e em caso de que esta não estiver declarada, a referência será à externa à função. A seguir, um exemplo no qual se define uma função que calcula a média de uma lista de números,
2414 \begin{verbatim}
2415 (%i12) media(lista):=block([n:length(lista),suma],
2416 if not listp(lista)
2417 then return("Atenção: não é uma lista"),
2418 suma: sum(lista[k],k,1,n),
2419 suma/n )$
2420 (%i13) media([45,25,87,23,65,31]);
2421 (%o13) 46
2422 (%i14) media([[2,3],[6,3],[4,7],[2,6]]);
2423 7 19
2424 (%o14) [-, --]
2426 (%i15) media([1/3,sqrt(5),logb(5,2),x]);
2427 log(5) 1
2428 x + ------ + sqrt(5) + -
2429 log(2) 3
2430 (%o15) ------------------------
2432 (%i16) solve(%=10,x); /* quanto vale x para a m\'edia 10? */
2433 3 log(5) + (3 sqrt(5) - 119) log(2)
2434 (%o16) [x = - -----------------------------------]
2435 3 log(2)
2436 \end{verbatim}
2437 Este último cálculo não tem nada a ver com o que se comenta nesta seção, porém mostra como integrar nossa função em uma sessão rotineira. Examinando o código da função \verb|media| reparamos na presença da instrucção \verb|return|, que é uma forma alternativa de sair do contexto marcado por \verb|block|; neste caso, o resultado que devolve a função é o indicado pelo argumento de \verb|return|\index{return}, é dizer a cadeia \verb|"Atenção: não é uma lista"|. Também se observa que se declaram duas variáveis locais, \verb|n| e \verb|suma|, atribuindo à primeira o número de elementos da lista; junto com estas existe outra variável local, a \verb|k| da instrução \verb|sum|, que só está ativa durante o cálculo desta soma, não sendo necessário declará-la em todo o contexto do bloco.
2439 As vezes é necessário definir funções cujo número de argumentos não se conhece a priori. Por exemplo, tal como está programada a função \verb|gcd|\index{gcd} em Maxima, a que calcula o máximo divisor comum, não admite mais de dois argumentos; podemos suprir esta carência desenhando uma função, que chamaremos \verb|mcd|, e que admita um número arbitrário de números,
2440 \begin{verbatim}
2441 (%i17) mcd(a,b,[c]):=block([n],
2442 n: length(c),
2443 r: gcd(a,b),
2444 if n>0 then
2445 for i in c do r: gcd(r,i),
2446 r )$
2447 (%i18) mcd(120,300,480,825);
2448 (%o18) 15
2449 \end{verbatim}
2451 Por último, se adiciona um exemplo no qual se define uma função fazendo uso de algumas das sentenças comentadas nesta seção. Como se vê, à função se lhe atribui o nome de \verb|transafin| e sua ação é a de aplicar uma transformação afim a uma lista de pontos,
2452 \begin{verbatim}
2453 /*Assim se escrevem os comentários. */
2454 /*pts deve ser uma lista de pares: */
2455 /* [[x1,y1],[x2,y2],[x3,y3],...] */
2456 transafin(pts, a, b, c, d, e, f):=
2457 block([pts2, n, i, x, y],
2458 pts2: copylist(pts),
2459 n: length(pts2),
2460 for i:1 thru n do(
2461 x: pts2[i][1],
2462 y: pts2[i][2],
2463 pts2[i][1]: a*x+b*y+c,
2464 pts2[i][2]: d*x+e*y+f ),
2465 return(pts2) )$
2466 \end{verbatim}
2468 A função \verb|transafin|, e qualquer outra dentro desta seção, se pode escrever em Maxima ee logo chamá-la para que realize sua ação; sem impedimento, talvez seja melhor escrevê-lala diretamente com um editor de texto qualquer e guardá-la em um arquivo, ponhamos o nome \verb|tf.mac|, para fazer uso dela no futuro; assim, uma vez dentro de Maxima executaríamos a instrução \verb|batch("tf.mac")| e logo faríamos
2469 \begin{verbatim}
2470 (%i19) cuadrado:[[0,0],[1,0],[1,1],[0,1]]$
2471 (%i20) transafin(cuadrado,-1,0,-1,0,1,1);
2472 (%o20) [[- 1, 1], [- 2, 1], [- 2, 2], [- 1, 2]]
2473 \end{verbatim}
2474 obtendo assim o resultado de aplicá-la aos vértices do quadrado unitário uma simetría com relação ao eixho das ordenadas seguida de uma traslação ao longo do vetor $\vec{v}=(-1,1)$.
2476 \newpage
2477 \section{GNU Free Documentation License}
2480 \tiny
2482 \begin{center}
2484 Version 1.2, November 2002
2487 Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
2489 \bigskip
2491 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
2493 \bigskip
2495 Everyone is permitted to copy and distribute verbatim copies
2496 of this license document, but changing it is not allowed.
2497 \end{center}
2500 \begin{center}
2501 {\bf Preamble}
2502 \end{center}
2504 The purpose of this License is to make a manual, textbook, or other
2505 functional and useful document "free" in the sense of freedom: to
2506 assure everyone the effective freedom to copy and redistribute it,
2507 with or without modifying it, either commercially or noncommercially.
2508 Secondarily, this License preserves for the author and publisher a way
2509 to get credit for their work, while not being considered responsible
2510 for modifications made by others.
2512 This License is a kind of "copyleft", which means that derivative
2513 works of the document must themselves be free in the same sense. It
2514 complements the GNU General Public License, which is a copyleft
2515 license designed for free software.
2517 We have designed this License in order to use it for manuals for free
2518 software, because free software needs free documentation: a free
2519 program should come with manuals providing the same freedoms that the
2520 software does. But this License is not limited to software manuals;
2521 it can be used for any textual work, regardless of subject matter or
2522 whether it is published as a printed book. We recommend this License
2523 principally for works whose purpose is instruction or reference.
2526 \begin{center}
2527 {\bf 1. APPLICABILITY AND DEFINITIONS}
2528 \end{center}
2530 This License applies to any manual or other work, in any medium, that
2531 contains a notice placed by the copyright holder saying it can be
2532 distributed under the terms of this License. Such a notice grants a
2533 world-wide, royalty-free license, unlimited in duration, to use that
2534 work under the conditions stated herein. The \textbf{"Document"}, below,
2535 refers to any such manual or work. Any member of the public is a
2536 licensee, and is addressed as \textbf{"you"}. You accept the license if you
2537 copy, modify or distribute the work in a way requiring permission
2538 under copyright law.
2540 A \textbf{"Modified Version"} of the Document means any work containing the
2541 Document or a portion of it, either copied verbatim, or with
2542 modifications and/or translated into another language.
2544 A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
2545 the Document that deals exclusively with the relationship of the
2546 publishers or authors of the Document to the Document's overall subject
2547 (or to related matters) and contains nothing that could fall directly
2548 within that overall subject. (Thus, if the Document is in part a
2549 textbook of mathematics, a Secondary Section may not explain any
2550 mathematics.) The relationship could be a matter of historical
2551 connection with the subject or with related matters, or of legal,
2552 commercial, philosophical, ethical or political position regarding
2553 them.
2555 The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
2556 are designated, as being those of Invariant Sections, in the notice
2557 that says that the Document is released under this License. If a
2558 section does not fit the above definition of Secondary then it is not
2559 allowed to be designated as Invariant. The Document may contain zero
2560 Invariant Sections. If the Document does not identify any Invariant
2561 Sections then there are none.
2563 The \textbf{"Cover Texts"} are certain short passages of text that are listed,
2564 as Front-Cover Texts or Back-Cover Texts, in the notice that says that
2565 the Document is released under this License. A Front-Cover Text may
2566 be at most 5 words, and a Back-Cover Text may be at most 25 words.
2568 A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
2569 represented in a format whose specification is available to the
2570 general public, that is suitable for revising the document
2571 straightforwardly with generic text editors or (for images composed of
2572 pixels) generic paint programs or (for drawings) some widely available
2573 drawing editor, and that is suitable for input to text formatters or
2574 for automatic translation to a variety of formats suitable for input
2575 to text formatters. A copy made in an otherwise Transparent file
2576 format whose markup, or absence of markup, has been arranged to thwart
2577 ôr discourage subsequent modification by readers is not Transparent.
2578 An image format is not Transparent if used for any substantial amount
2579 ôf text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
2581 Êxamples of suitable formats for Transparent copies include plain
2582 ASCII without markup, Texinfo input format, LaTeX input format, SGML
2583 ôr XML using a publicly available DTD, and standard-conforming simple
2584 HTML, PostScript or PDF designed for human modification. Examples of
2585 transparent image formats include PNG, XCF and JPG. Opaque formats
2586 include proprietary formats that can be read and edited only by
2587 proprietary word processors, SGML or XML for which the DTD and/or
2588 processing tools are not generally available, and the
2589 machine-generated HTML, PostScript or PDF produced by some word
2590 processors for output purposes only.
2592 The \textbf{"Title Page"} means, for a printed book, the title page itself,
2593 plus such following pages as are needed to hold, legibly, the material
2594 this License requires to appear in the title page. For works in
2595 formats which do not have any title page as such, "Title Page" means
2596 the text near the most prominent appearance of the work's title,
2597 preceding the beginning of the body of the text.
2599 A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
2600 title either is precisely XYZ or contains XYZ in parentheses following
2601 text that translates XYZ in another language. (Here XYZ stands for a
2602 specific section name mentioned below, such as \textbf{"Acknowledgements"},
2603 \textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
2604 To \textbf{"Preserve the Title"}
2605 ôf such a section when you modify the Document means that it remains a
2606 section "Entitled XYZ" according to this definition.
2608 The Document may include Warranty Disclaimers next to the notice which
2609 states that this License applies to the Document. These Warranty
2610 Disclaimers are considered to be included by reference in this
2611 License, but only as regards disclaiming warranties: any other
2612 implication that these Warranty Disclaimers may have is void and has
2613 no effect on the meaning of this License.
2616 \begin{center}
2617 {\bf 2. VERBATIM COPYING}
2618 \end{center}
2620 You may copy and distribute the Document in any medium, either
2621 commercially or noncommercially, provided that this License, the
2622 copyright notices, and the license notice saying this License applies
2623 to the Document are reproduced in all copies, and that you add não other
2624 conditions whatsoever to those of this License. You may not use
2625 technical measures to obstruct or control the reading or further
2626 copying of the copies you make or distribute. However, you may accept
2627 compensation in exchange for copies. If you distribute a large enough
2628 number of copies you must also follow the conditions in section 3.
2630 You may also lend copies, under the same conditions stated above, and
2631 you may publicly display copies.
2634 \begin{center}
2635 {\bf 3. COPYING IN QUANTITY}
2636 \end{center}
2639 If you publish printed copies (or copies in media that commonly have
2640 printed covers) of the Document, numbering more than 100, and the
2641 Document's license notice requires Cover Texts, you must enclose the
2642 copies in covers that carry, clearly and legibly, all these Cover
2643 Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
2644 the back cover. Both covers must also clearly and legibly identify
2645 you as the publisher of these copies. The front cover must present
2646 the full title with all words of the title equally prominent and
2647 visible. You may add other material on the covers in addition.
2648 Copying with changes limited to the covers, as long as they preserve
2649 the title of the Document and satisfy these conditions, can be treated
2650 as verbatim copying in other respects.
2652 If the required texts for either cover are too voluminous to fit
2653 legibly, you should put the first ones listed (as many as fit
2654 reasonably) on the actual cover, and continue the rest onto adjacent
2655 pages.
2657 If you publish or distribute Opaque copies of the Document numbering
2658 more than 100, you must either include a machine-readable Transparent
2659 copy along with each Opaque copy, or state in or with each Opaque copy
2660 a computer-network location from which the general network-using
2661 public has access to download using public-standard network protocols
2662 a complete Transparent copy of the Document, free of added material.
2663 If you use the latter option, you must take reasonably prudent steps,
2664 when you begin distribution of Opaque copies in quantity, to ensure
2665 that this Transparent copy will remain thus accessible at the stated
2666 location until at least one year after the last time you distribute an
2667 Ôpaque copy (directly or through your agents or retailers) of that
2668 êdition to the public.
2670 It is requested, but not required, that you contact the authors of the
2671 Document well before redistributing any large number of copies, to give
2672 them a chance to provide you with an updated version of the Document.
2675 \begin{center}
2676 {\bf 4. MODIFICATIONS}
2677 \end{center}
2679 You may copy and distribute a Modified Version of the Document under
2680 the conditions of sections 2 and 3 above, provided that you release
2681 the Modified Version under precisely this License, with the Modified
2682 Version filling the role of the Document, thus licensing distribution
2683 and modification of the Modified Version to whoever possesses a copy
2684 ôf it. In addition, you must do these things in the Modified Version:
2686 \begin{itemize}
2687 \item[A.]
2688 Use in the Title Page (and on the covers, if any) a title distinct
2689 from that of the Document, and from those of previous versions
2690 (which should, if there were any, be listed in the History section
2691 of the Document). You may use the same title as a previous version
2692 if the original publisher of that version gives permission.
2694 \item[B.]
2695 List on the Title Page, as authors, one or more persons or entities
2696 responsible for authorship of the modifications in the Modified
2697 Version, together with at least five of the principal authors of the
2698 Document (all of its principal authors, if it has fewer than five),
2699 unless they release you from this requirement.
2701 \item[C.]
2702 State on the Title page the name of the publisher of the
2703 Modified Version, as the publisher.
2705 \item[D.]
2706 Preserve all the copyright notices of the Document.
2708 \item[E.]
2709 Add an appropriate copyright notice for your modifications
2710 adjacent to the other copyright notices.
2712 \item[F.]
2713 Include, immediately after the copyright notices, a license notice
2714 giving the public permission to use the Modified Version under the
2715 terms of this License, in the form shown in the Addendum below.
2717 \item[G.]
2718 Preserve in that license notice the full lists of Invariant Sections
2719 and required Cover Texts given in the Document's license notice.
2721 \item[H.]
2722 Include an unaltered copy of this License.
2724 \item[I.]
2725 Preserve the section Entitled "History", Preserve its Title, and add
2726 to it an item stating at least the title, year, new authors, and
2727 publisher of the Modified Version as given on the Title Page. If
2728 there is não section Entitled "History" in the Document, create one
2729 stating the title, year, authors, and publisher of the Document as
2730 given on its Title Page, then add an item describing the Modified
2731 Version as stated in the previous sentence.
2733 \item[J.]
2734 Preserve the network location, if any, given in the Document for
2735 public access to a Transparent copy of the Document, and likewise
2736 the network locations given in the Document for previous versions
2737 it was based on. These may be placed in the "History" section.
2738 You may omit a network location for a work that was published at
2739 least four years before the Document itself, or if the original
2740 publisher of the version it refers to gives permission.
2742 \item[K.]
2743 For any section Entitled "Acknowledgements" or "Dedications",
2744 Preserve the Title of the section, and preserve in the section all
2745 the substance and tone of each of the contributor acknowledgements
2746 and/or dedications given therein.
2748 \item[L.]
2749 Preserve all the Invariant Sections of the Document,
2750 unaltered in their text and in their titles. Section numbers
2751 or the equivalent are not considered part of the section titles.
2753 \item[M.]
2754 Delete any section Entitled "Endorsements". Such a section
2755 may not be included in the Modified Version.
2757 \item[N.]
2758 Do not retitle any existing section to be Entitled "Endorsements"
2759 or to conflict in title with any Invariant Section.
2761 \item[O.]
2762 Preserve any Warranty Disclaimers.
2763 \end{itemize}
2765 If the Modified Version includes new front-matter sections or
2766 appendices that qualify as Secondary Sections and contain não material
2767 copied from the Document, you may at your option designate some or all
2768 ôf these sections as invariant. To do this, add their titles to the
2769 list of Invariant Sections in the Modified Version's license notice.
2770 These titles must be distinct from any other section titles.
2772 You may add a section Entitled "Endorsements", provided it contains
2773 nothing but endorsements of your Modified Version by various
2774 parties--for example, statements of peer review or that the text has
2775 been approved by an organization as the authoritative definition of a
2776 standard.
2778 You may add a passage of up to five words as a Front-Cover Text, and a
2779 passage of up to 25 words as a Back-Cover Text, to the end of the list
2780 ôf Cover Texts in the Modified Version. Only one passage of
2781 Front-Cover Text and one of Back-Cover Text may be added by (or
2782 through arrangements made by) any one entity. If the Document already
2783 includes a cover text for the same cover, previously added by you or
2784 by arrangement made by the same entity you are acting on behalf of,
2785 you may not add another; but you may replace the old one, on explicit
2786 permission from the previous publisher that added the old one.
2788 The author(s) and publisher(s) of the Document do not by this License
2789 give permission to use their names for publicity for or to assert or
2790 imply endorsement of any Modified Version.
2793 \begin{center}
2794 {\bf 5. COMBINING DOCUMENTS}
2795 \end{center}
2798 You may combine the Document with other documents released under this
2799 License, under the terms defined in section 4 above for modified
2800 versions, provided that you include in the combination all of the
2801 Invariant Sections of all of the original documents, unmodified, and
2802 list them all as Invariant Sections of your combined work in its
2803 license notice, and that you preserve all their Warranty Disclaimers.
2805 The combined work need only contain one copy of this License, and
2806 multiple identical Invariant Sections may be replaced with a single
2807 copy. If there are multiple Invariant Sections with the same name but
2808 different contents, make the title of each such section unique by
2809 adding at the end of it, in parentheses, the name of the original
2810 author or publisher of that section if known, or else a unique number.
2811 Make the same adjustment to the section titles in the list of
2812 Invariant Sections in the license notice of the combined work.
2814 In the combination, you must combine any sections Entitled "History"
2815 in the various original documents, forming one section Entitled
2816 "History"; likewise combine any sections Entitled "Acknowledgements",
2817 and any sections Entitled "Dedications". You must delete all sections
2818 Êntitled "Endorsements".
2820 \begin{center}
2821 {\bf 6. COLLECTIONS OF DOCUMENTS}
2822 \end{center}
2824 You may make a collection consisting of the Document and other documents
2825 released under this License, and replace the individual copies of this
2826 License in the various documents with a single copy that is included in
2827 the collection, provided that you follow the rules of this License for
2828 verbatim copying of each of the documents in all other respects.
2830 You may extract a single document from such a collection, and distribute
2831 it individually under this License, provided you insert a copy of this
2832 License into the extracted document, and follow this License in all
2833 ôther respects regarding verbatim copying of that document.
2836 \begin{center}
2837 {\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
2838 \end{center}
2841 A compilation of the Document or its derivatives with other separate
2842 and independent documents or works, in or on a volume of a storage or
2843 distribution medium, is called an "aggregate" if the copyright
2844 resulting from the compilation is not used to limit the legal rights
2845 ôf the compilation's users beyond what the individual works permit.
2846 When the Document is included in an aggregate, this License does not
2847 apply to the other works in the aggregate which are not themselves
2848 derivative works of the Document.
2850 If the Cover Text requirement of section 3 is applicable to these
2851 copies of the Document, then if the Document is less than one half of
2852 the entire aggregate, the Document's Cover Texts may be placed on
2853 covers that bracket the Document within the aggregate, or the
2854 êlectronic equivalent of covers if the Document is in electronic form.
2855 Ôtherwise they must appear on printed covers that bracket the whole
2856 aggregate.
2859 \begin{center}
2860 {\bf 8. TRANSLATION}
2861 \end{center}
2864 Translation is considered a kind of modification, so you may
2865 distribute translations of the Document under the terms of section 4.
2866 Replacing Invariant Sections with translations requires special
2867 permission from their copyright holders, but you may include
2868 translations of some or all Invariant Sections in addition to the
2869 ôriginal versions of these Invariant Sections. You may include a
2870 translation of this License, and all the license notices in the
2871 Document, and any Warranty Disclaimers, provided that you also include
2872 the original English version of this License and the original versions
2873 ôf those notices and disclaimers. In case of a disagreement between
2874 the translation and the original version of this License or a notice
2875 ôr disclaimer, the original version will prevail.
2877 If a section in the Document is Entitled "Acknowledgements",
2878 "Dedications", or "History", the requirement (section 4) to Preserve
2879 its Title (section 1) will typically require changing the actual
2880 title.
2883 \begin{center}
2884 {\bf 9. TERMINATION}
2885 \end{center}
2888 You may not copy, modify, sublicense, or distribute the Document except
2889 as expressly provided for under this License. Any other attempt to
2890 copy, modify, sublicense or distribute the Document is void, and will
2891 automatically terminate your rights under this License. However,
2892 parties who have received copies, or rights, from you under this
2893 License will not have their licenses terminated so long as such
2894 parties remain in full compliance.
2897 \begin{center}
2898 {\bf 10. FUTURE REVISIONS OF THIS LICENSE}
2899 \end{center}
2902 The Free Software Foundation may publish new, revised versions
2903 ôf the GNU Free Documentation License from time to time. Such new
2904 versions will be similar in spirit to the present version, but may
2905 differ in detail to address new problems or concerns. See
2906 http://www.gnu.org/copyleft/.
2908 Êach version of the License is given a distinguishing version number.
2909 If the Document specifies that a particular numbered version of this
2910 License "or any later version" applies to it, you have the option of
2911 following the terms and conditions either of that specified version or
2912 ôf any later version that has been published (not as a draft) by the
2913 Free Software Foundation. If the Document does not specify a version
2914 number of this License, you may choose any version ever published (not
2915 as a draft) by the Free Software Foundation.
2918 \begin{center}
2919 {\bf ADDENDUM: How to use this License for your documents}
2920 \end{center}
2922 To use this License in a document you have written, include a copy of
2923 the License in the document and put the following copyright and
2924 license notices just after the title page:
2926 \bigskip
2927 \begin{quote}
2928 Copyright \copyright YEAR YOUR NAME.
2929 Permission is granted to copy, distribute and/or modify this document
2930 under the terms of the GNU Free Documentation License, Version 1.2
2931 or any later version published by the Free Software Foundation;
2932 with não Invariant Sections, não Front-Cover Texts, and não Back-Cover Texts.
2933 A copy of the license is included in the section entitled "GNU
2934 Free Documentation License".
2935 \end{quote}
2936 \bigskip
2938 If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
2939 replace the "with...Texts." line with this:
2941 \bigskip
2942 \begin{quote}
2943 with the Invariant Sections being LIST THEIR TITLES, with the
2944 Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
2945 \end{quote}
2946 \bigskip
2948 If you have Invariant Sections without Cover Texts, or some other
2949 combination of the three, merge those two alternatives to suit the
2950 situation.
2952 If your document contains nontrivial examples of program code, we
2953 recommend releasing these examples in parallel under your choice of
2954 free software license, such as the GNU General Public License,
2955 to permit their use in free software.
2957 \normalsize
2959 \printindex
2961 \end{document}