/* wxMaxima 0.7.2 http://wxmaxima.sourceforge.net
Maxima 5.12.0 http://maxima.sourceforge.net
Using Lisp GNU Common Lisp (GCL) GCL 2.6.8 (aka GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
This is a development version of Maxima. The function bug_report()
provides bug reporting information.

/*
Curso "Maxima Para Exatas" - 1a Aula, 14/05/2007

/*
Usando o Maxima como uma "calculadora" :

/*
O recomendado é digitar ";" ao final do cálculo a ser feito, embora o wxMaxima
automaticamente adicione tal caracter, o xMaxima não faz isso.

(%i1) 144*17 - 9;

Result

/*
Na verdade uma "calculadora" com tela muito grande :

(%i2) 144^25;

Result

(%i3) 144^100;

Result

/*
O símbolo "%" serve para acessar a última saída ("%oN" tem o "o" de output) :

(%i4) %;

Result

/*
O "%oN" serve para acessar a N-ésima saída calculada na sessão (sequência de
cálculos) do Maxima :

(%i5) %o2;

Result

(%i6) %o2^(1/25);

Result

/*
Além de cálculos numéricos de grande precisão, o Maxima também faz cálculos
simbólicos (com expressões literais) também chamados de cálculos algébricos.
Por isso o Maxima é um software da categoria CAS (Computer Algebra System,
ou Sistema de Computação Algébrica).

(%i7) (x + 2*y)^4;

Result

/*
A expressão acima não foi alterada pois isso não foi pedido explicitamente.
Para, por exemplo, expandir, usa-se a função "expand". Note que o argumento
da função fica entre parênteses "(", ")" :

(%i8) expand(%);

Result

/*
O Maxima é "case dependent", i.e., letras minúsculas e maiúsculas (caixa baixa
e caixa alta) são diferentes. "expand" é uma função do Maxima, e todas as
funções nativas do Maxima são escritas em caixa baixa (letras minúsculas).
Assim "Expand" não existe, por isso a linha abaixo não é calculada :

(%i9) Expand(%o7);

Result

/*
Há diferença entre se referir à entrada "%iN" e saída "%oN". Aqui "%i8"
não está calculada e por isso não pode ser fatorada. Mas a saída "%o8"
está calculada e pode ser :

(%i10) factor(%i8);

Result

(%i11) factor(%o8);

Result

/*
O Maxima é muito útil para cálculo diferencial e integral. A função "diff"
calcula derivadas. Para consultar um texto de ajuda (help), basta deixar
o cursor em cima da palavra/comando e digitar "F1".

(%i12) diff(sin(x)*cos(x), x);

Result

/*
"trigsimp" é uma função de simplificação trigonométrica, em outras :

(%i13) trigsimp(%);

Result

/*
No help se vê que "diff" é uma função com número variável de argumentos.
O 3o argumento diz a ordem da derivada, aqui é uma derivada 2a em relação
a x :

(%i14) diff(sin(x)*cos(x),x,2);

Result

/*
Uma derivada 5a em relação a x :

(%i15) diff(sin(x)*cos(x), x,5);

Result

/*
"trigreduce" é outra função de manipulação trigonométrica :

(%i16) trigreduce (sin(x)^5);

Result

/*
"integrate" calcula integrais indefinidas e definidas :

(%i17) integrate((x + 1)/(x^3 - 8), x);

Result

/*
Vemos que uma leve alteração no integrando acarreta um resultado
muito mais complexo. Notar a velocidade do cálculo simbólico :

(%i18) integrate((x + 1)/(x^4 - 8), x);

Result

/*
"assume" serve para atribuir "predicados" à variáveis, por exemplo
a propriedade m > 4 :

(%i19) assume(m>4);

Result

/*
Com tal definição de "m", temos que a integral abaixo tem solução bem definida :

(%i20) integrate(x^m*(a + b*x)^3, x);

Result

/*
Para se referir à entrada com o comando "trigreduce" acima, não basta citar a
entrada :

(%i21) %i16;

Result

/*
É necessário usar '' (2 apóstrofos, i.e., 2 vezes a tecla do lado da tecla 1,
que força o recálculo da entrada :

(%i22) ''%i16;

Result

/*
A atribuição de valores a variáveis no Maxima se faz com ":" (dois pontos)
ao invés de "=" (que é usado no Maxima para equações). Aqui a variável
"poli" (de polinômio) tem como valor um polinômio de 2o grau em x :

(%i23) poli: x^2 - x - 12;

Result

/*
"solve" resolve equações, aqui a equação é de 2o grau igualando o
polinômio a 0, e resolvendo em relação à incógnita "x". O resultado,
uma lista de soluções, é atribuído à variável "solucao" :

(%i24) solucao: solve(poli=0, x);

Result

/*
Para extrair um elemento de uma lista, usave colchetes, "[" e "]"
com o índice começando em 1. Aqui a 1a solução :

(%i25) solucao[1];

Result

/*
Aqui a 2a solução :

(%i26) solucao[2];

Result

/*
O cálculo de limites é feito com "limit", sendo usado tipicamente 3
argumentos. Aqui se lê : limite de (sin(x))/x quando x->0 :

(%i27) limit(sin(x)/x,x,0);

Result

/*
Limite de tan(x) para x->%pi/2 é indefinido, logo retorna "und" (de
"undefined"), vide help de "limit" :

(%i28) limit (tan(x), x, %pi/2);

Result

/*
Aqui temos o limite de tan(x) para x->%pi/2 pela direita (por isso o
"plus" no 4o argumento da função) é indefinido, logo retorna "und" (de
"undefined"), vide help de "limit" :

(%i29) limit (tan(x), x, %pi/2, plus);

Result

/*
Agora limite de tan(x) para x->%pi/2 pela esquerda (por isso o "minus") :

(%i30) limit (tan(x), x, %pi/2, minus);

Result

/*
Verificando que a derivada de uma anti-derivada (integral indefinida sem
constante) retorna o integrando :

(%i31) integrate(x/(x^3 + 1), x);

Result

/*
Parece não verificar, porém falta tentar simplificar :

(%i32) diff(%,x);

Result

/*
O que é feito pela função "ratsimp", útil para simplificar expressões racionais :

(%i33) ratsimp(%);

Result

/*
Para escrevermos equações diferenciais não basta usar "diff" para representar
derivadas de funções indefinidas :

(%i34) diff(y,x);

Result

/*
Para que "diff" não seja calculada explicitamente, basta preceder "diff" com
um apóstrofo (caracter ao lado da tecla 1) :

(%i35) 'diff(y,x);

Result

/*
Assim podemos escrever equações diferenciais, por exemplo, y'(x) = -y(x) :

(%i36) eq:'diff(y,x) = -y;

Result

/*
"ode2" resolve equações diferenciais ordinárias de 1a ou 2a ordem, retornando
a solução com constantes precedidas de "%", no caso aqui somente uma constante
pois a equação diferencial ordinária é de 1a ordem :

(%i37) ode2(eq,y,x);

Result

/*
"ic1", de "initial conditions" (condições iniciais) para equações diferenciais
de 1a ordem, obtém a solução com dadas condições iniciais :

(%i38) sol: ic1(%, x= 1, y= 8);

Result

/*
Agora definimos uma equação de 2a ordem, do tipo muito encontrada em problemas de
oscilador harmônico simples (onde k=w^2), etc :

/*
"ode2" agora retorna a solução com duas constantes :

(%i39) eq: 'diff(y, x, 2) + k*y = 0;

Result

/*
Vamos definir k como positivo, k > 0 :

(%i40) assume(k>0);

Result

/*
A solução de "ode2" agora retorna duas constantes e a solução é oscilante,
tal como esperado para um oscilador harmônico simples :

(%i41) ode2(eq,y,x);

Result

/*
A função "plot2d" faz gráficos de f(x) versus x, bidimensionais. Por
exemplo, sin(x) com x de 0 a 2%pi, sendo exibido em uma janela separada.
Dica no wxMaxima : pode-se clicar na entrada abaixo e selecionar o menu
"Gráficos / Gráfico 2d..." para selecionar interativamente os argumentos
e opções.

(%i42) plot2d(sin(x),[x,0,2*%pi]);

Result

/*
A função "wxplot2d" embute o gráfico no próprio arquivo da sessão, sem abrir
uma janela separada :

(%i43) wxplot2d([sin(x)*cos(3*x)], [x,0,3*%pi])$

Result

/*
A função "plot3d" faz gráficos de f(x,y) versus (x,y), sendo superfícies
tridimensionais. Exibe em uma janela separada.
Dica no wxMaxima : pode-se clicar na entrada abaixo e selecionar o menu
"Gráficos / Gráfico 3d..." para selecionar interativamente os argumentos
e opções.

(%i44) plot3d(x^2-y^2,[x,-2,2],[y,-2,2],[grid,12,12]);

Result

/*
A função "wxplot3d" embute o gráfico no próprio arquivo da sessão, sem abrir
uma janela separada :

(%i45) wxplot3d(x^2-y^2, [x,-2,2], [y,-2,2])$

Result

/*
A opção "plot_format" com o valor "openmath" permite escolher uma janela 3D
interativa, permitindo zoom, rotacionar o objeto 3D, etc :

(%i46) plot3d(x^2-y^2, [x,-5,5], [y,-5,5], [plot_format,openmath])$

(%i47)


Created with wxMaxima.