1 % /minimal-maxima.tex/1.2/Tue Dec 20 05:35:05 2005//
2 \documentclass[12pt
]{article
}
4 \usepackage[latin1]{inputenc}
5 \usepackage[brazil
]{babel
}
6 \usepackage[dvipdfm,colorlinks,linkcolor=red
]{hyperref
}
8 \addtolength{\topmargin}{-
0.5in
}
9 \addtolength{\textheight}{1in
}
10 \addtolength{\footskip}{0.5in
}
12 \setlength{\parskip}{8pt
}
13 \setlength{\parindent}{0pt
}
15 \title{Maxima Mínimo\\
16 {\small Liberado sob os termos da Licença pública GNU, Versão
2}}
17 \author{Autor - Robert Dodier. Tradutor - Jorge Barros de Abreu.
}
24 \section{O que é Maxima?
}
27 {Home page:
\url{http://maxima.sourceforge.net
} \\
28 Documentos:
\url{http://maxima.sourceforge.net/pt/documentation.html
} \\
29 Manual de referência:
\url{http://maxima.sourceforge.net/pt/maxima.html
}}
30 é um sistema que trabalha com expressões,
31 tais como $x + y$, $sin (a + b
\pi)$, e $u
\cdot v - v
\cdot u$.\\
33 Maxima não está muito preocupado sobre o significado de uma expressão.
34 Se uma expressão é representativa ou não quem decide é o usuário.
36 Algumas vezes você quer atribuir valores a entidades desconhecidas
37 e avaliar a expressão.
38 Maxima está disponível para fazer isso.
39 Mas Maxima está também disponível para adiar atribuições de valores específicos;
40 você pode realizar muitas manipulações de uma expressão,
41 e somente mais adiante (ou nunca) atribuir valores a entidades desconhecidas.
43 Vamos ver alguns exemplos.
47 \item Quero calcular o volume de uma esfera.
50 (
%i1) V: 4/3 * %pi * r^3;
64 \item $V$ é o mesmo que antes; Maxima não muda $V$ até que eu diga a ele para fazer isso.
74 \item Digo ao maxima para re-avaliar $V$.
83 \item Gostaria de ver um valor numérico em lugar de uma expressão.
87 (
%o5) 4188.79020478639
94 Tudo no Maxima é uma expressão,
95 incluindo expressões matemáticas, objetos, e construções de programação.
96 uma expressão é ou um átomo, ou um operador junto com seus argumentos.
98 Um átomo é um símbolo (um nome), uma seqüência de caracteres entre apóstrofos,
99 ou um número (ou inteiro ou em ponto flutuante).
101 Todas as expressões não atômicas são representadas como $
\mathit{op
}(a_1,
\ldots, a_n)$
102 onde $
\mathit{op
}$ é o nome de um operador
103 e $a_1,
\ldots, a_n$ são seus argumentos.
104 (A expressão pode ser mostrada de forma diferente,
105 mas a representação interna é a mesma.)
106 Os argumentos de uma expressão podem ser átomos ou expressões não atômicas.
108 Expressões matemáticas possuem operadores matemáticos,
109 tais como $+ \; - \; * \; / \; < \; = \; >$
110 ou uma avaliação de função tal como $
\mathbf{sin
}(x),
\mathbf{bessel
\_j}(n, x)$.
111 Em tais casos, o operador é a função.
113 Objetos no Maxima são expressões.
114 Uma lista $
[a_1,
\ldots, a_n
]$ é uma expressão $
\mathbf{list
}(a_1,
\ldots, a_n)$.
115 Uma matriz é uma expressão
117 \mathbf{matrix
}(
\mathbf{list
}(a_
{1,
1},
\ldots, a_
{1,n
}),
\ldots,
\mathbf{list
}(a_
{m,
1},
\ldots, a_
{m,n
}))
120 Construções de programação são expressões.
121 Um bloco de código $
\mathbf{block
} (a_1,
\ldots, a_n)$ é uma expressão com operador $
\mathbf{block
}$
122 e argumentos $a_1,
\ldots, a_n$.
123 Uma declaração condicional $
\mathbf{if\
} a
\mathbf{\ then\
} b
\mathbf{\ elseif\
} c
\mathbf{\ then\
} d$
124 é uma expressão $
\mathbf{if
}(a, b, c, d)$.
125 Um ciclo $
\mathbf{for\
} a
\mathbf{\ in\
} L
\mathbf{\ do\
} S$ é uma expressão similar a $
\mathbf{do
}(a, L, S)$.
127 A função do Maxima $
\mathbf{op
}$ retorna o operador de uma expressão não atômica.
128 A função $
\mathbf{args
}$ retorna os argumentos de uma expressão não atômica.
129 A função $
\mathbf{atom
}$ diz se uma expressão é um átomo ou não.
131 Vamos ver alguns exemplos mais.
135 \item Átomos são símbolos, seqüências de caracteres, e números.
136 Agrupei muitos exemplos em uma lista então podemos vê-los todos juntos.
137 % [a, foo, foo_bar, "Hello, world!", 42, 17.29];
140 (
%i2) [a, foo, foo_bar, "Hello, world!", 42, 17.29];
141 (
%o2) [a, foo, foo_bar, Hello, world!, 42, 17.29]
144 \item Mathematical expressions.
145 % [a + b + c, a * b * c, foo = bar, a*b < c*d];
148 (
%i1) [a + b + c, a * b * c, foo = bar, a*b < c*d];
149 (
%o1) [c + b + a, a b c, foo = bar, a b < c d]
152 \item Listas e matrizes.
153 Os elementos de uma lista ou matriz podem ser qualquer tipo de expressão,
154 mesmo outra lista ou matriz.
155 % L: [a, b, c, %pi, %e, 1729, 1/(a*d - b*c)];
156 % L2: [a, b, [c, %pi, [%e, 1729], 1/(a*d - b*c)]];
159 % M: matrix ([%pi, 17], [29, %e]);
160 % M2: matrix ([[%pi, 17], a*d - b*c], [matrix ([1, a], [b, 7]), %e]);
165 (
%i1) L: [a, b, c, %pi, %e, 1729, 1/(a*d - b*c)];
167 (
%o1) [a, b, c, %pi, %e, 1729, ---------]
169 (
%i2) L2: [a, b, [c, %pi, [%e, 1729], 1/(a*d - b*c)]];
171 (
%o2) [a, b, [c, %pi, [%e, 1729], ---------]]
179 (
%o4) [c, %pi, [%e, 1729], ---------]
181 (
%i5) M: matrix ([%pi, 17], [29, %e]);
185 (
%i6) M2: matrix ([[%pi, 17], a*d - b*c], [matrix ([1, a], [b, 7]), %e]);
186 [ [%pi, 17] a d - b c ]
199 \item Construção de programação são expressões.
200 $x : y$ significa atribua $y$ a $x$; o valor da expressão de atribuição é $y$.
201 $
\mathbf{block
}$ agrupa muitas expressões, e as avalia uma vez após outra;
202 o valor do bloco é o valor da última expressão.
205 % block ([a], a: 42, a^2 - 1600) + block ([b], b: 5, %pi^b);
206 % (if a > 1 then %pi else %e) + (if b < 0 then 1/2 else 1/7);
209 (
%i1) (a: 42) - (b: 17);
213 (
%i3) block ([a], a: 42, a^2 - 1600) + block ([b], b: 5, %pi^b);
216 (
%i4) (if a > 1 then %pi else %e) + (if b < 0 then 1/2 else 1/7);
222 \item $
\mathbf{op
}$ retorna o operador, $
\mathbf{args
}$ retorna os argumentos,
223 $
\mathbf{atom
}$ diz se uma expressão é um átomo ou não.
228 % op (foo (p, q) := p - q);
230 % args (p + q > p*q);
231 % args (sin (p + q));
233 % args (foo (p, q) := p - q);
236 % atom (sin (p + q));
241 (
%i2) op (p + q > p*q);
243 (
%i3) op (sin (p + q));
245 (
%i4) op (foo (p, q));
247 (
%i5) op (foo (p, q) := p - q);
251 (
%i7) args (p + q > p*q);
253 (
%i8) args (sin (p + q));
255 (
%i9) args (foo (p, q));
257 (
%i10) args (foo (p, q) := p - q);
258 (
%o10) [foo(p, q), p - q]
263 (
%i13) atom (sin (p + q));
267 \item Operadores e argumentos de construções de programação.
268 O apóstrofo simples diz ao Maxima para construir a expressão mas não fazer a avaliação para um momento posterior escolhido pelo usuário.
269 Vamos voltar paa aquele último.
270 % op ('(block ([a], a: 42, a^2 - 1600)));
271 % op ('(if p > q then p else q));
272 % op ('(for x in L do print (x)));
273 % args ('(block ([a], a: 42, a^2 - 1600)));
274 % args ('(if p > q then p else q));
275 % args ('(for x in L do print (x)));
278 (
%i1) op ('(block ([a], a: 42, a^2 - 1600)));
280 (
%i2) op ('(if p > q then p else q));
282 (
%i3) op ('(for x in L do print (x)));
284 (
%i4) args ('(block ([a], a: 42, a^2 - 1600)));
286 (
%o4) [[a], a : 42, a - 1600]
287 (
%i5) args ('(if p > q then p else q));
288 (
%o5) [p > q, p, true, q]
289 (
%i6) args ('(for x in L do print (x)));
290 (
%o6) [x, L, false, false, false, false, print(x)]
297 O valor de um símbolo é uma expressão associada ao símbolo.
298 Todo símbolo tem um valor;
299 se não for de outra forma atribuido um valor, um símbolo avalia para si mesmo.
300 (E.g., $x$ avalia para $x$ se não for de outra forma atribuido um valor.)
302 Números e seqüências de caractere avaliam para si mesmos.
304 Um expressão não atômica é avaliada aproximadamente como segue.
307 \item Cada argumento do operadro da expressão é avaliado.
308 \item Se um operador está associado a uma função que pode ser chamada, a função é chamada,
309 e o valor de retorno da função é o valor da expressão.
312 Avaliação é modificada de várias maneiras.
313 Algumas modificações causam menos avaliação:
316 \item Algumas funções não avaliam algumas ou todos os seus argumentos,
317 ou de outra forma modificam a avaliação de seus argumentos.
318 % Exemplos: $\mathbf{kill}$, $\mathbf{save}$, $\mathbf{sum}$, $\mathbf{:=}$ (definição de função).
319 \item Um apóstrofo simples $'$ evita avaliação.
321 \item $'a$ avalia para $a$. Qualquer outro valor de $a$ é ignorado.
322 \item $'f(a_1,
\ldots, a_n)$ avaliam para $f(
\mathbf{ev
}(a_1),
\ldots,
\mathbf{ev
}(a_n))$.
323 É isso, os argumetos são avaliados mas $f$ não é chamada.
324 \item $'(
\ldots)$ evita avaliação de quaisquer expressões dentro de $(...)$.
328 Algumas modificações causam mais avaliação:
331 \item Dois apóstrofos $''a$ causam uma avaliação extra na hora em que a expressão $a$ é passada.
332 \item $
\mathbf{ev
}(a)$ causa uma avaliação extra de $a$ toda vez que $
\mathbf{ev
}(a)$ for avaliado.
333 \item O idioma $
\mathbf{apply
}(f,
[a_1,
\ldots, a_n
])$ causa a avaliação
334 dos argumentos $a_1,
\ldots, a_n$ mesmo se $f$ comumente colocar um apoóstrofo nos argumentos $a_1,
\ldots, a_n$.
335 \item $
\mathbf{define
}$ constrói uma definição de função da mesma forma que $
\mathbf{:=
}$,
336 nas $
\mathbf{define
}$ avalia o corpo da função enquanto $
\mathbf{:=
}$ coloca um apóstrofo nesse mesmo corpo não avaliando-o portanto.
339 Vamos considerar como algumas funções são avaliadas.
343 \item Símbolos avaliam para simesmos se não forem de outra forma atribuidos a um valor.
344 % block (a: 1, b: 2, e: 5);
348 (
%i1) block (a: 1, b: 2, e: 5);
350 (
%i2) [a, b, c, d, e];
351 (
%o2) [1, 2, c, d, 5]
354 \item Argumentos de um operador são comumente avaliados (a menos que a avaliação seja evitada de uma forma ou de outra).
355 % block (x: %pi, y: %e);
361 (
%i1) block (x: %pi, y: %e);
371 \item Se um operador corresponde a uma função que pode ser chamada,
372 a função é chamada (a menos que isso seja evitado por algum meio).
373 De outra forma eavaliação retorna outra expressão com o mesmo operador.
374 % foo (p, q) := p - q;
380 (
%i1) foo (p, q) := p - q;
381 (
%o1) foo(p, q) := p - q
390 \item Algumas funções colocam apóstrofo em seus argumentos.
391 Exemplos: $
\mathbf{save
}$, $
\mathbf{:=
}$, $
\mathbf{kill
}$.
392 % block (a: 1, b: %pi, c: x + y);
394 % save ("tmp.save", a, b, c);
401 (
%i1) block (a: 1, b: %pi, c: x + y);
404 (
%o2) [1, %pi, y + x]
405 (
%i3) save ("tmp.save", a, b, c);
413 (
%i6) kill (a, b, c);
419 \item Um apóstrofo simples evita avaliação mesmo se isso puder comumente acontecer.
420 % foo (x, y) := y - x;
421 % block (a: %e, b: 17);
428 (
%i1) foo (x, y) := y - x;
429 (
%o1) foo(x, y) := y - x
430 (
%i2) block (a: %e, b: 17);
442 \item Dois apóstrofos simples (apóstrofo-apóstrofo) fazem com que ocorra uma avaliação extra na hora em que a expressão for passada.
444 % foo (x) := diff (sin (x), x);
445 % foo (x) := ''(diff (sin (x), x));
448 (
%i1) diff (sin (x), x);
450 (
%i2) foo (x) := diff (sin (x), x);
451 (
%o2) foo(x) := diff(sin(x), x)
452 (
%i3) foo (x) := ''(diff (sin (x), x));
453 (
%o3) foo(x) := cos(x)
456 \item $
\mathbf{ev
}$ faz com que uma avaliação extra ocorra toda vez que isso for avaliado.
457 Contrasta com o efeito de apóstrofo-apóstrofo.
458 % block (xx: yy, yy: zz);
466 (
%i1) block (xx: yy, yy: zz);
470 (
%i3) foo (x) := ''x;
474 (
%i5) bar (x) := ev (x);
475 (
%o5) bar(x) := ev(x)
480 \item $
\mathbf{apply
}$ faz com que ocorra a avaliação do argumento mesmo mesmo se eles estiverem comumente com apóstrofo.
481 % block (a: aa, b: bb, c: cc);
482 % block (aa: 11, bb: 22, cc: 33);
483 % [a, b, c, aa, bb, cc];
484 % apply (kill, [a, b, c]);
485 % [a, b, c, aa, bb, cc];
487 % [a, b, c, aa, bb, cc];
490 (
%i1) block (a: aa, b: bb, c: cc);
492 (
%i2) block (aa: 11, bb: 22, cc: 33);
494 (
%i3) [a, b, c, aa, bb, cc];
495 (
%o3) [aa, bb, cc, 11, 22, 33]
496 (
%i4) apply (kill, [a, b, c]);
498 (
%i5) [a, b, c, aa, bb, cc];
499 (
%o5) [aa, bb, cc, aa, bb, cc]
500 (
%i6) kill (a, b, c);
502 (
%i7) [a, b, c, aa, bb, cc];
503 (
%o7) [a, b, c, aa, bb, cc]
506 \item $
\mathbf{define
}$ avalia o corpo de uma definição de função.
507 % integrate (sin (a*x), x, 0, %pi);
508 % foo (x) := integrate (sin (a*x), x, 0, %pi);
509 % define (foo (x), integrate (sin (a*x), x, 0, %pi));
512 (
%i1) integrate (sin (a*x), x, 0, %pi);
516 (
%i2) foo (x) := integrate (sin (a*x), x, 0, %pi);
517 (
%o2) foo(x) := integrate(sin(a x), x, 0, %pi)
518 (
%i3) define (foo (x), integrate (sin (a*x), x, 0, %pi));
520 (
%o3) foo(x) := - - ----------
526 \section{Simplificação
}
528 Após avaliar uma expressão,
529 Maxima tenta encontrar uma expressão equivalente que é ``mais simples.''
530 Maxima aplica muitas regras que abrange noções convencionais de simplicidade.
532 $
1 +
1$ simplifica para $
2$,
533 $x + x$ simplifica para $
2 x$,
534 and $
\mathbf{sin
}(
\mathbf{\%pi
})$ simplifica para $
0$.
537 muitas bem conhecidas identidades não são aplicadas automaticamente.
539 fórmulas de arco duplo para funções trigonométricas,
540 ou rearranjos de razões tais como $a/b + c/b
\rightarrow (a + c)/b$.
541 Existem muitas funções que podem aplicar identidades.
543 Simplificação é sempre aplicada a menos que explicitamente evitada.
544 Simplificação é aplicada mesmo se uma expressão não for avaliada.
546 $
\mathbf{tellsimpafter
}$ estabelece regras de simplificação definidas pelo usuário.
548 Vamos ver alguns exemplos de simplificação.
552 \item Apóstrofo evita avaliação mas não simplificação.
553 Quando o sinalizador global $
\mathbf{simp
}$ for $
\mathbf{false
}$,
554 simplificação é evitada mas não a avaliação.
556 % '[1 + 1, x + x, x * x, sin (%pi)];
558 % block ([x: 1], x + x);
562 (
%i1) '[1 + 1, x + x, x * x, sin (%pi)];
564 (
%o1) [2, 2 x, x , 0]
566 (
%i3) block ([x: 1], x + x);
570 \item Algumas identidade não são aplicadas automaticamente.
571 $
\mathbf{expand
}$, $
\mathbf{ratsimp
}$, $
\mathbf{trigexpand
}$, $
\mathbf{demoivre
}$
572 são algumas funções que aplicam identidades.
600 (
%i6) trigexpand (%);
601 (
%o6) 2 cos(x) sin(x)
602 (
%i7) a * exp (b * %i);
606 (
%o8) a (%i sin(b) + cos(b))
611 \section{apply, map, e lambda
}
615 \item $
\mathbf{apply
}$ constrói e avalia uma expressão.
616 Os argumentos da expressão são sempre avaliados (mesmo se eles não puderem ser avaliados de outra forma).
617 % apply (sin, [x * %pi]);
618 % L: [a, b, c, x, y, z];
622 (
%i1) apply (sin, [x * %pi]);
624 (
%i2) L: [a, b, c, x, y, z];
625 (
%o2) [a, b, c, x, y, z]
626 (
%i3) apply ("+", L);
627 (
%o3) z + y + x + c + b + a
630 \item $
\mathbf{map
}$ constrói e avalia uma expressão usando ítens individuais de uma lista de argumentos.
631 Os argumentos de uma expressão sào sempre avaliados (mesmo se eles não puderem ser avaliados de outra forma).
632 O resultado é uma lista.
633 % map (foo, [x, y, z]);
634 % map ("+", [1, 2, 3], [a, b, c]);
635 % map (atom, [a, b, c, a + b, a + b + c]);
638 (
%i1) map (foo, [x, y, z]);
639 (
%o1) [foo(x), foo(y), foo(z)]
640 (
%i2) map ("+", [1, 2, 3], [a, b, c]);
641 (
%o2) [a + 1, b + 2, c + 3]
642 (
%i3) map (atom, [a, b, c, a + b, a + b + c]);
643 (
%o3) [true, true, true, false, false]
646 \item $
\mathbf{lambda
}$ constrói uma expressão lambda (i.e., uma função sem nome).
647 A expressão lambda pode ser usada em alguns contextos como uma função comum que possui nome.
648 $
\mathbf{lambda
}$ não avalia o corpo da função.
649 % f: lambda ([x, y], (x + y)*(x - y));
652 % map (f, [1, 2, 3], [a, b, c]);
653 %% apply (lambda ([x, y], (x + y)*(x - y)), [p, q]);
654 %% map (lambda ([x, y], (x + y)*(x - y)), [1, 2, 3], [a, b, c]);
657 (
%i1) f: lambda ([x, y], (x + y)*(x - y));
658 (
%o1) lambda([x, y], (x + y) (x - y))
660 (
%o2) (a - b) (b + a)
661 (
%i3) apply (f, [p, q]);
662 (
%o3) (p - q) (q + p)
663 (
%i4) map (f, [1, 2, 3], [a, b, c]);
664 (
%o4) [(1 - a) (a + 1), (2 - b) (b + 2), (3 - c) (c + 3)]
669 \section{Tipos de objetos internos
}
671 Um objeto é representado como uma expressão.
672 Como outra expressão, um objeto compreende um operador e seus argumentos.
674 Os mais importantes tipos de objets internos são listas, matrizes, e conjuntos.
680 \item Uma lista é indicada dessa forma: $
[a, b, c
]$.
682 \item If $L$ é uma lista, $L
[i
]$ é seu $i$'ésimo elemento. $L
[1]$ é o primeiro elemento.
684 \item $
\mathbf{map
}(
\mathit{f
}, L)$ aplica $
\mathit{f
}$ a cada elemento de $L$.
686 \item $
\mathbf{apply
}(
\mathbf{"+"
}, L)$ é a soma dos elementos de $L$.
688 \item $
\mathbf{for\
} x
\mathbf{\ in \
} L
\mathbf{\ do \
} \mathit{expr
}$
689 avalia $
\mathit{expr
}$ para cada elemento de $L$.
691 \item $
\mathbf{length
}(L)$ é o número de elementos em $L$.
695 \subsection{Matrizes
}
699 \item Uma matriz é definida da seguinte forma: $
\mathbf{matrix
}(L_1,
\ldots, L_n)$
700 onde $L_1,
\ldots, L_n$ são listas que representam as linhas da matriz.
702 \item Se $M$ for uma matriz, $M
[i, j
]$ ou $M
[i
][j
]$ é seu $(i, j)$'ésimo elemento.
703 $M
[1,
1]$ é o elemento no canto superior esquerdo.
705 \item O operador $
\mathbf{.
}$ representa multiplicação não comutativa.
706 $M . L$, $L . M$, e $M . N$ são produtos não comutativos,
707 onde $L$ é uma lista e $M$ e $N$ são matrizes.
709 % \item $M\mathbf{\hat{ }\hat{ }}n$ é a potenciação não comutativa, i.e., $M . M . \ldots . M$.
711 \item $
\mathbf{transpose
}(M)$ é a transposta de $M$.
713 \item $
\mathbf{eigenvalues
}(M)$ retorna o autovalor de $M$.
715 \item $
\mathbf{eigenvectors
}(M)$ retorna o autovetor de $M$.
717 \item $
\mathbf{length
}(M)$ retorna o nuúmero de linhas de $M$.
719 \item $
\mathbf{length
}(
\mathbf{transpose
}(M))$ retorna o número de colunas de $M$.
723 \subsection{Conjuntos
}
727 \item Maxima entende conjuntos finitos explicitamente definidos.
728 Conjuntos não são o mesmo qque listas; uma conversão explícita é necessária para mudar de um para outro.
730 \item Um conjunto é especificado dessa forma:
731 $
\mathbf{set
}(a, b, c,
\ldots)$ onde os elementos do conjunto são $a, b, c,
\ldots$.
733 \item $
\mathbf{union
} (A, B)$ é a união dos conjuntos $A$ e $B$.
735 \item $
\mathbf{intersection
} (A, B)$ é a intersecção dos conjuntos $A$ e $B$.
737 \item $
\mathbf{cardinality
} (A)$ é o número de elementos no conjunto $A$.
741 \section{Como fazer para...
}
743 \subsection{Definir uma função
}
747 \item O operador $
\mathbf{:=
}$ define uma função, colocando um apóstrofo no corpo da função.
749 Nesse exemplo, $
\mathbf{diff
}$ é reavalado toda vez que a função for chamada.
750 O argumento é substituído por $x$ e a expressão resultante é avaliada.
751 Quando o argumento for alguma outra coisa que não um símbolo, isso causa um erro:
752 para $
\mathbf{foo
} (
1)$ Maxima tenta avaliar $
\mathbf{diff
} (
\mathbf{sin
}(
1)^
2,
1)$.
753 % foo (x) := diff (sin(x)^2, x);
758 (
%i1) foo (x) := diff (sin(x)^2, x);
760 (
%o1) foo(x) := diff(sin (x), x)
762 (
%o2) 2 cos(u) sin(u)
764 Non-variable
2nd argument to diff:
770 \item $
\mathbf{define
}$ define uma função, avaliando o corpo da função.
772 Nesse exemplo, $
\mathbf{diff
}$ é avaliado somente uma vez (quando a função é definida).
773 $
\mathbf{foo
} (
1)$ is OK now.
774 % define (foo (x), diff (sin(x)^2, x));
779 (
%i1) define (foo (x), diff (sin(x)^2, x));
780 (
%o1) foo(x) := 2 cos(x) sin(x)
782 (
%o2) 2 cos(u) sin(u)
784 (
%o3) 2 cos(1) sin(1)
789 \subsection{Resolver uma equação
}
790 % eq_1: a * x + b * y + z = %pi;
791 % eq_2: z - 5*y + x = 0;
792 % s: solve ([eq_1, eq_2], [x, z]);
794 % [subst (s[1], eq_1), subst (s[1], eq_2)];
798 (
%i1) eq_1: a * x + b * y + z = %pi;
799 (
%o1) z + b y + a x = %pi
800 (
%i2) eq_2: z - 5*y + x = 0;
801 (
%o2) z - 5 y + x = 0
802 (
%i3) s: solve ([eq_1, eq_2], [x, z]);
803 (b +
5) y -
%pi (b + 5 a) y - %pi
804 (
%o3) [[x = - ---------------, z = -----------------]]
808 (
%i5) [subst (s[1], eq_1), subst (s[1], eq_2)];
809 (b +
5 a) y -
%pi a ((b + 5) y - %pi)
810 (
%o5) [----------------- - ------------------- + b y = %pi,
812 (b +
5 a) y -
%pi (b + 5) y - %pi
813 ----------------- - --------------- -
5 y =
0]
816 (
%o6) [%pi = %pi, 0 = 0]
819 \subsection{Integrar e diferenciar
}
821 $
\mathbf{integrate
}$ calcular integrais definidas e indefinidas.
822 % integrate (1/(1 + x), x, 0, 1);
823 % integrate (exp(-u) * sin(u), u, 0, inf);
825 % integrate (1/(1 + x), x, 0, a);
826 % integrate (exp(-a*u) * sin(a*u), u, 0, inf);
827 % integrate (exp (sin (t)), t, 0, %pi);
828 % 'integrate (exp(-u) * sin(u), u, 0, inf);
831 (
%i1) integrate (1/(1 + x), x, 0, 1);
833 (
%i2) integrate (exp(-u) * sin(u), u, 0, inf);
837 (
%i3) assume (a > 0);
839 (
%i4) integrate (1/(1 + x), x, 0, a);
841 (
%i5) integrate (exp(-a*u) * sin(a*u), u, 0, inf);
845 (
%i6) integrate (exp (sin (t)), t, 0, %pi);
853 (
%i7) 'integrate (exp(-u) * sin(u), u, 0, inf);
863 $
\mathbf{diff
}$ calcular derivadas.
865 % diff (sin (y*x), x);
866 % diff (sin (y*x), y);
867 % diff (sin (y*x), x, 2);
868 % 'diff (sin (y*x), x, 2);
871 (
%i1) diff (sin (y*x));
872 (
%o1) x cos(x y) del(y) + y cos(x y) del(x)
873 (
%i2) diff (sin (y*x), x);
875 (
%i3) diff (sin (y*x), y);
877 (
%i4) diff (sin (y*x), x, 2);
880 (
%i5) 'diff (sin (y*x), x, 2);
888 \subsection{Fazer um gráfico
}
890 $
\mathbf{plot2d
}$ desenhar gráficos bidimensionais.
891 % plot2d (exp(-u) * sin(u), [u, 0, 2*%pi]);
892 % plot2d ([exp(-u), exp(-u) * sin(u)], [u, 0, 2*%pi]);
893 % xx: makelist (i/2.5, i, 1, 10);
894 % yy: map (lambda ([x], exp(-x) * sin(x)), xx);
895 % plot2d ([discrete, xx, yy]);
896 % plot2d ([discrete, xx, yy], [gnuplot_curve_styles, ["with points"]]);
899 (
%i1) plot2d (exp(-u) * sin(u), [u, 0, 2*%pi]);
901 (
%i2) plot2d ([exp(-u), exp(-u) * sin(u)], [u, 0, 2*%pi]);
903 (
%i3) xx: makelist (i/2.5, i, 1, 10);
904 (
%o3) [0.4, 0.8, 1.2, 1.6, 2.0, 2.4, 2.8, 3.2, 3.6, 4.0]
905 (
%i4) yy: map (lambda ([x], exp(-x) * sin(x)), xx);
906 (
%o4) [0.261034921143457, 0.322328869227062, .2807247779692679,
907 .2018104299334517,
.1230600248057767,
.0612766372619573,
908 .0203706503896865, -
.0023794587414574, -
.0120913057698414,
910 (
%i5) plot2d ([discrete, xx, yy]);
912 (
%i6) plot2d ([discrete, xx, yy], [gnuplot_curve_styles, ["with points"]]);
916 Veja também $
\mathbf{plot3d
}$.
918 \subsection{Gravar e chamar um arquivo
}
920 $
\mathbf{save
}$ escreve expressões em um arquivo.
923 % save ("my.session", a, b);
924 % save ("my.session", all);
929 (
%i2) b: foo^2 * bar;
932 (
%i3) save ("minha.sessao", a, b);
934 (
%i4) save ("minha.sessao", all);
938 $
\mathbf{load
}$ lê expressões de um arquivo.
939 % load ("minha.sessao");
944 (
%i1) load ("minha.sessao");
953 Veja também $
\mathbf{stringout
}$ e $
\mathbf{batch
}$.
955 \section{Programando no Maxima
}
958 % argument-quoting and argument-evaluating functions
959 % directory organization: src, tests, share, doc
961 Existe um ambiente, que contém todos os símbolos do Maxima.
962 Não existe como criar outro ambiente.
964 Todas as variáveis são globais a menos que pareçam em uma declaração de variáveis locais.
965 Funções, expressões lambda, e blocos podem ter variáveis locais.
967 O valor de uma variável é aquele que foi atribuído mais recentemente,
968 ou por uma atribuição explícita ou por atribuição de um valor a uma variável local
969 em um bloco, função, ou expressão lambda.
970 Essa política é conhecida como
{\it escopo dinâmico
}.
972 Se uma variável é uma variável local em uma função, expressão lambda, ou bloco,
973 seu valor é local mas suas outras propriedades
974 (como estabelecidas através de $
\mathbf{declare
}$)
976 A função $
\mathbf{local
}$ faz uma variável local com relação a todas as propriedades.
978 Por padrão uma definição de função é global,
979 mesmo se isso aparecer dentro de uma função, expressão lambda, ou bloco.
980 $
\mathbf{local
}(f), f(x)
\mathbf{\ :=\
} \ldots$ cria uma definição de função local.
982 $
\mathbf{trace
}(
\mathit{foo
})$ faz com que o Maxima mostre uma mensagem quando a função $
\mathit{foo
}$
983 for iniciada e terminada.
985 Vamos ver alguns exemplos de programação no Maxima.
989 \item Todas as variáveis são globais a menos que apareçam em uma declaração de variáveis locais.
990 Funções, expressões lambda, e blocos podem ter variáveis locais.
992 % (x: 42, y: 1729, z: foo*bar);
995 % lambda ([x, z], (x - z)/y);
996 % apply (%, [uu, vv]);
997 % block ([y, z], y: 65536, [x, y, z]);
1000 (
%i1) (x: 42, y: 1729, z: foo*bar);
1002 (
%i2) f (x, y) := x*y*z;
1003 (
%o2) f(x, y) := x y z
1006 (
%i4) lambda ([x, z], (x - z)/y);
1008 (
%o4) lambda([x, z], -----)
1010 (
%i5) apply (%, [uu, vv]);
1014 (
%i6) block ([y, z], y: 65536, [x, y, z]);
1015 (
%o6) [42, 65536, z]
1018 \item O valor de uma variável é aquele que foi atribuido mais recentemente,
1019 ou por atribuição explícita ou por atribuição de um valor a uma variável local.
1024 % bar (x) := foo (%e);
1028 (
%i1) foo (y) := x - y;
1029 (
%o1) foo(y) := x - y
1034 (
%i4) bar (x) := foo (%e);
1035 (
%o4) bar(x) := foo(%e)
1042 \section{Lisp e Maxima
}
1045 % defining an argument-evaluating function in lisp
1046 % defining an argument-quoting function in lisp
1047 % calling a function defined in maxima from lisp
1048 % useful lisp fcns: meval, simplifya, displa
1050 A construção
{\bf :lisp
} $
\mathit{expr
}$ diz ao interpretador Lisp
1051 para avaliar $
\mathit{expr
}$.
1052 Essa construção é reconhecida em entradas através da linha de comando e em arquivos processados por $
\mathbf{batch
}$,
1053 mas não é reconhecida por $
\mathbf{load
}$.
1055 O símbolo Maxima $
\mathbf{foo
}$ corresponde ao símbolo Lisp \$foo,
1056 e o símbolo Lisp foo corresponde ao símbolo Maxima $
\mathbf{?foo
}$.
1058 {\bf :lisp
} $
\mathrm{(
}\mathbf{defun\
} \mathrm{\$foo\ (a)\ (
\ldots))
}$
1059 define uma função Lisp $
\mathrm{foo
}$ que avalia seus argumentos.
1060 A partir o Maxima, a função é chamada como $
\mathbf{foo
}(a)$.
1062 {\bf :lisp
} $
\mathrm{(
}\mathbf{defmspec\
} \mathrm{\$foo\ (e)\ (
\ldots))
}$
1063 define uma função Lisp $
\mathbf{foo
}$ que coloca uma apóstrofo em seus argumentos não avaliando-os portanto.
1064 A partir do Maxima, a função é chamada como $
\mathbf{foo
}(a)$.
1065 Os argumentos de $
\mathrm{\$foo
}$ são $(
\mathbf{cdr\
} e),$
1066 e $(
\mathbf{caar\
} e)$ é sempre $
\mathrm{\$foo
}$ por si mesma.
1068 A partir do Lisp, ta construção $(
\mathbf{mfuncall\ '\$
}\mathrm{foo\
}a_1
\ldots a_n)$
1069 chama a função $
\mathbf{foo
}$ definida no Maxima.
1071 Vamos extender ao Lisp a partir do Maxima e vice-versa.
1075 \item A construção
{\bf :lisp
} $
\mathit{expr
}$ diz ao interpretador Lisp
1076 para avaliar $
\mathit{expr
}$.
1085 ((MEXPT SIMP) ((MPLUS SIMP) $AA $BB)
2)
1088 \item {\bf :lisp
} $
\mathrm{(
}\mathbf{defun\
} \mathrm{\$foo\ (a)\ (
\ldots))
}$
1089 define uma função Lisp $
\mathbf{foo
}$ que avalia seus argumentos.
1091 % :lisp (defun $foo (a b) `((mplus) ((mtimes) ,a ,b) $%pi))
1092 % (p: x + y, q: x - y);
1095 (
%i1) :lisp (defun $foo (a b) `((mplus) ((mtimes) ,a ,b) $%pi))
1097 (
%i1) (p: x + y, q: x - y);
1100 (
%o2) (x - y) (y + x) + %pi
1103 \item {\bf :lisp
} $
\mathrm{(
}\mathbf{defmspec\
} \mathrm{\$foo\ (e)\ (
\ldots))
}$
1104 define uma função Lisp $
\mathbf{foo
}$ que coloca um apóstrofo em seus argumentos não avaliando-os portanto.
1105 % :lisp (defmspec $bar (e) (let ((a (cdr e))) `((mplus) ((mtimes) ,@a) $%pi)))
1109 (
%i1) :lisp (defmspec $bar (e) (let ((a (cdr e))) `((mplus) ((mtimes) ,@a) $%pi)))
1110 #<CLOSURE LAMBDA (E) (LET ((A (CDR E))) `((MPLUS) ((MTIMES) ,@A) $
%PI))>
1113 (
%i2) bar (''p, ''q);
1117 \item Partindo do Lisp, a construção $(
\mathbf{mfuncall\ '\$
}\mathrm{foo\
}a_1
\ldots a_n)$
1118 chama a função $
\mathbf{foo
}$ definida no Maxima.
1121 % :lisp (displa (mfuncall '$blurf '((mplus) $grotz $mumble)))
1123 (
%i1) blurf (x) := x^2;
1126 (
%i2) :lisp (displa (mfuncall '$blurf '((mplus) $grotz $mumble)))