Página de Maxima
Introdução ao Maxima
Autor: Sadao Massago
instituição: DM-UFSCar
web: http://www.dm.ufscar.br/~sadao
data: 2010-06-19
site do maxima e manual
http://maxima.sourceforge.net/
http://maxima.sourceforge.net/documentation.html
Um dos manuais mais recomendado é
http://maxima.sourceforge.net/docs/manual/en/maxima.html
A versão em PDF em
http://maxima.sourceforge.net/docs/manual/en/maxima.pdf
A versão em português (um pouco desatualizado) em
http://maxima.sourceforge.net/docs/manual/pt/maxima.html
Para executar
<cntrl><ENTER> executa o bloco de comandos onde o cursor está
<ctrl>R executa todo arquivo
Para acrescentar codigos e comentários
F5 abre o campo de comando
F6 abre o campo de comentário (texto)
Estes e outros comandos estão no menu "cell".
F1 abre a ajuda do Maxima. Se o cursor estiver sobre a palavra,
procurara por esta paravra na ajuda.
1 O que é maxima
O sistema maxima é uma versão de código aberto
do sistema macsyma desenvolvido para manipulação simbólica,
similar ao sistema comercial como Maple, Mathematica e Derive.
Por ser de código aberto, o maxima pode ser obtido e usado gratuitamente,
incluindo o uso comercial e é um dos mais completos sistemas
de matemática simbólica de código aberto.
A interface gráfica
A interface gráfica mais popular é o wxmaxima que é instalado
junto a maxima na versão windows e distribuido
como pacote opcional para linux.
Formato de arquivo suportado pelo wxmaxima são
wxm → formato no modo texto que pode ser editado ou executado fora do wxmaxima,
pois parte de texto e TAG's especificos para wxmaxima estão como
comentário do maxima.
No entanto, arquivos alterados fora do wxmaxima que não estiver com
formatação adequada, pode não ser mais compativeis com o wxmaxima.
Neste formato, a saída de maxima não serão salvas.
wxmx → O formato de arquivo em XML.
Não pode ser executado pelo maxima sem intermedio de wxmaxima.
Neste formato, o resultado da execussão também serão salvas.
mac → formato modo texto para maxima.
A parte de texto ficam como comentário e os TAG's especificos
para formatação no wxmaxima serão eliminados.
Parte do comando é igual ao do wxm, mas parte de comentário
ficam bem mais limpos.
O wxmaxima pode executar o formato mac, mas não abre para a edição.
Obs.: wxmaxima pod esportar no formato HTML para disponibilizar na página web.
Tambem existe a interface gráfica clássica que é xmaxima,
mas não é focado na edição de arquivos, mas para execução de comandos.
O maxima, wxmaxima e sua documentação estão sendo distribuidos
gratuitamente pelo site oficial
http://maxima.sourceforge.net/
http://maxima.sourceforge.net/documentation.html
WXMAXIMA gera comandos pelo menu
O wxmaxima permite gerar diversos comandos
tais como manipulação das expressoes, diferenciação e integração,
gráficos, etc.
Para isso, basta escolher o item desejado no menu da interface.
Neste tutorial, será apresentado os conceitos básicos
necessários para resolução de problemas mais complexas,
mas para tarefas simples, o uso do menu para gerar comandos
permite efetuar diversas tarefas sem precisar conhecer
a linguagem macsyma (usado pelo maxima)
2 Expressões
Expressão é similar a outros sistemas computacionais
"+", "-", "*" e "/' são usados para adição, subtração, multiplição e divisão.
"^" para potenciação.
"!" e "!!" para fatorial e duplo fatorial.
Obs.: Para produto e potenciação não comutativa
como o produto e ptenciação de matrizes, usa-se o "." e "^^"
A expressão terminado em ";" sera exibido na tela
A expressão terminado em "$" só sera executado e não será exibida na tela
Para abrir uma nova linha, pressione ENTER
Para executar, presione <ctrl>ENTER
| (%i2) |
2+3^2; 3+4$ |
As funções podem ser usadas, mas atente ao fato de que o seno é "sin" e não "sen". Mesmo vale para seno hiperbolico que é "sinh" As letras podem ser usadas como variaveis
| (%i3) | cos(x)*sin(x); |
Constantes "pi", "e", "i", "phi" e "gamma" são precedidas de "%". Note que log é o logaritmo natural e exp é exponencinal
| (%i7) |
cos(%pi/2); atan(1); log(%e); exp(1); |
O último resultado pode ser referenciado pelo "%" Note que "%" é o resultado do último comando executado e não da linha anterior, a menos que seja executado em sequências Portanto, evite de usar "%" para resultado anterior a menos que seja do mesmo bloco de comandos (mesmo campo de entrada)
| (%i9) |
exp(1); log(%); |
O valor aproximado como ponto flutuante (decimal) pode ser obtido pelo comando "float"
| (%i11) |
exp(1); float(exp(1)); |
O maxima faz distinção entre maiúsculo e minúsculo. Portanto, tomar cuidado "sqrt(2)" é raiz quadrada de 2, mas "Sqrt(2)" ou "SQRT(2)" não é
| (%i14) |
sqrt(2); Sqrt(2); SQRT(2); |
3 Comentários
O comentário é a parte que não será executado
No maxima, comentário é a parte delimitado entre "/*" e "*/"
CUIDADO: no maxima, não pode finalizar o campo de comando com o comentário.
Por isso, o wxmaxima sempre grava um string no final do arquivo,
o que não é exibido na tela (se abrir o wxm no editor de texto,
terá um string no final do arquivo)
CUIDADO quando usa wxmaxima
---------------------------
O presente implementação do wxmaxima (2010),
acrescenta automaticamente o ";" após a primeira execussão
quando o último item do campo de comando for comentário.
Isto não causa problemas desde que sejam executados
dentro do wxmaxima.
No entanto, se exportar o código e executar diretamente no maxima,
ou carregar como um pacote, isto dará erro.
Por exemplo
sqrt(2); /* sqrt calcula a raiz quadrada */
Após a primeira execussão torna
sqrt(2); /* sqrt calcula a raiz quadrada */;
que é inválido, pois tem ";" sem ter comando
(comentário não é comando).
Se tiver algum comando após o comentário, não ocorre tais problemas.
sqrt(2); /* sqrt calcula a raiz quadrada */ float(sqrt(2));
não causa problemas, pois o último item não é comentario
Uma forma de finalizar após comentário na última
posição do campo de comando sem alterar o comportamento
do programa como o valor do último resultado
(acessado por "%") é colocar "%$"
Assim,
sqrt(2); /* sqrt calcula a raiz quadrada */ %$
sempre será valida.
| (%i17) |
sqrt(2); /* sqrt calcula a raiz quadrada */ float(sqrt(2)); /* obtem aproximação decimal */ %$ |
4 Armazenando as expressões
Podemos armazenar as expressões nas variaveis para serem utilizados mais tarde
Para atribuir (guardar) uma expressão ou valor, usa-se o ":"
Tome cuidado que "=" é reservado para equações (comparacao)
e ":=" é reservado para definir uma função.
Usando o ev(), poderá calcular a expressão com valores substituídas
Para ter a expressão (não o valor substituído),
coloca-se o apóstrofo (') antes da expressão
Não confundir apóstrofos com o acênto agúdo.
O apóstrofo (') deixa de evaluar somente o que segue imediatamente.
Para não substituir na expressão inteira,
coloque a expressão entre parenteses, precedidos de apóstrofos.
| (%i22) |
x : 2; ev(x+1); 'x+x^2; 'x+'x^2; '(x+x^2); |
O comando display() imprime a variável e valor, útil para "ver" o que está armazenado na variável, mas como será expresso na forma de variavel=valor, não deve usar para outros propósitos.
| (%i28) |
x : 1; y : x+1; z : '(x+1); display(x); display(y); display(z); |
O maxima exibe o resultado final quando o comando termina em ";"
e a forma como exite tal resultado final
quando não tem ev() nem apóstrofos
depende da configuração (valor da variavel globel referente).
Dentro do wxmaxima, é configurado para
efetuar substituição no resultado final de exibicao.
Na execussão pelo comando de linha é configurado
para exibir a expressão ou o que está armazenado na variável.
em resumo, para a exibição, use
- Para exibir o que foi armazenado exatamente, use o display()
- Para exibir o resultado da substituição, use o ev()
- Para exibir a expressão sem substituir, use '()
| (%i33) |
x : 1; ev(x+1); /* substitui para exibir */ '(x+1); /* não substitui na exibição */ x+1; /* depende da configuração */ %$ |
Quando não é exibição do resultado final
como no caso de armazenar expressão,
o padrão e efertuar substituição.
NÃO use display() exceto para exibir resultado na tela.
| (%i43) |
x : 1; y : x^2+1; /* substitui */ display(y); z : '(x^2+1); /* não substitui */ display(z); ev(z); /* efetua substituição agora */ x : 2; /* troca o valor de x */ ev(y); /* não atualiza o y, pois y não é expressão */ ev(z); /* atualiza o z, pois é expressão */ %$ |
Tomar cuidado do fato do maiúsculo e minúsculo ser considerado diferentes
| (%i46) |
x : 2; ev(X + 10); /* X não é x */ ev(x + 1); |
Quando usa a variável que ainda não tem valor,
cria uma expressão em termos deste variável
Quando troca o valor da variável, poderá efetuar a
substituição para ver o valor novo.
| (%i51) |
y : t^2+1; t : 1; ev(y); t : 2; ev(y); |
Quando tiver dúvida de que a variável já tem o valor
e quer usar como a variável,
precisará colocar apóstorfos antes do nome de cada variável.
Se não precisar mais do valor armazenado na variável,
é mais pratico liberar a variavel referente com o comando kill()
para dispensar o uso de apostrofos.
Note que "kill(all)" remove todas as variáveis atribuidas,
sendo útil para limpar os resíduos da execussão anterior
antes de iniciar o programa.
Também poderá voltar o valor das variáveis globais como padrão,
usando "reset()".
| (%i62) |
/* não sabe se t ja tem valor */ y : 't^2+'t+1; /* usando apóstrofos em cada t */ display(y); kill(t); /* se não vai precisar mais do valor de t, poderá liberar o t */ y : t^2+1; /* e usar normalmente */ display(y); t : 1; ev(y); t : 2; ev(y); kill(t,y); /* liberando t e y para uso futuro */ %$ |
Atribuir valor a variáveis usados na expressão deverá ser cautelosa,
pois poderá tentar usar como variáveis mais para frente
e colocar apóstorfos em cada variável ou usar
kill após cada uso é tediosa.
O recomendado é não "gastar" variáveis desnecessariamente
para obter valor temporário, ou usar o kill após o uso para
deixar a variavel livre, o que evita a confusão mais tarde.
O uso de "at()" ou "subst()" permite efetuar substituição local
sem gastar variáveis.
at(y, x=a) troca "x" por "a" na expressão de "y"
subst(a,x, y) troca "x" por "a" na expressão de "y"
subst(lista, y) troca seguindo a equacao da lista na expressão de "y"
| (%i75) |
kill(x,y,z); /* libera x, y e z */ y : x^2+1; at(y,x=2); ev(y); at(y, x=t+1); ev(y); subst(2,x,y); ev(y); subst(t+1,x,y); ev(y); subst([a=b, b=c], a+b); /* trocando vários valores */ kill (y); /* liberando o único que recebeu atrivuição */ %$ |
Outro exemplo
| (%i83) |
kill(x,y,z); /* libera x, y e z */ y : x^2+1; /* y depende de x */ display(y); z : 'y*sin('y); /* z depende de y. Como não pode liberar y, usando apóstrofos */ display(z); at(ev(z), x=2); /* efetua substituição e atribui valor a x */ kill (y,z); /* liberando os que receberam atribuição */ %$ |
5 Alguns exemplos de manipulação da expressão
Poderá efetuar diversas manipulações sobre as expressões. A seguir, alguns exemplos ilustrativos.
expandindo o produto
| (%i84) | expand((x+y)^2); |
Fatorando
| (%i85) | factor(x^2+2*x+1); |
simplificando
| (%i86) | ratsimp((x^2-y^2)/(x+y)); |
simplificação trigonométrica
| (%i87) | trigsimp(cos(x)^2+sin(x)^2); |
6 Definindo uma função
Para facilitar o cálcuo, é interessante definir uma função. Na função, a substituição dos valores ocorre de forma natural sem a necessidade do uso de at ou subst Uma função é definida de forma similar a usado na matemática, com a diferença de usar ":= " em vez de "=". Veja um exemplo.
| (%i88) | f(x) := x^2+1; |
Uma função pode ser usado como é de costume na matemática
| (%i93) |
f(x) := sin(x)+1; display(f(2)); display(f(x)); display(f(1-t)); display(f(f(x))); |
7 Trabalhando com expressões e funções
Para ter a expressão da função, basta calcular numa variavel que não tenha o valor atribuido
| (%i95) |
f(x) := cos(x); display(f(t)); |
Para usar uma expressão armazenada como expressão da função é mais prático usar define() em vez de ":=".
Definindo corretamente a função usando a expressão armazenada (usando define)
| (%i102) |
kill (x); /* liberando x */ y : x^2+1; display(y); define(f(x), y); /* definindo usando a expressão armazenada */ display(f(x)); define(g(x), cos(x)*sin(x)); /* definindo diretamente */ display(g(x)); |
Se usar ":=" para atribuir expressão armazenada na expressao, gera a função que provavelmente nao é o que maioria das pessoas espeream, pois a variável da expressão não será o argumento da função
O uso indevido da expressão armazenada para definir função (tentando definir diretamente)
| (%i108) |
kill (x); /* limpando o x */ y : x^2+1; f(x) := y; display(f(2)); x : 1; display(f(2)); |
Tambem ficar atento ao fato de que, quando a função é definido diretamente, nao ha problema de variaveis mas quando usa a expressão armazenada, precisa que a variavel usada esteja livre.
| (%i116) |
kill (x); /* limpando o x */ y : x^2+1; x : 1; f(x):= x^2+1; /* OK */ display(f(t)); /* define(g(x), y); */ /* Errado: x não está livre */ kill(x); /* libera x */ define (g(x), y); /* agora OK */ display(g(t)); |
Outros exemplos Se tem variáveis atribuidas da expressão, tomar cuidados.
| (%i126) |
y : x^2+1; x : 1; /* se x já tem valor */ define(f('x), 'y); /* ERRADO, pois queremos o conteudo de y */ ev(f(2)); define(g('x), 'x^2+1); /* OK */ %$ ev(g(2)); /* forma ERRADA */ define(dg('x), '(diff(g(x), x)) ); /* ev(dg(2)); */ /* resulta em erro */ /* forma CORRETA */ define(dg('x), diff(g('x), 'x)); ev(dg(2)); |
8 listas (vetores, matrizes e similares)
Lista será delimitado pelo "[" e "]" e seus elementos serão separados pela virgula. Vetores são representados como listas.
| (%i127) | [1,2,3]; |
Matriz é gerado por matrix, cuja argumentos são vetors linhas separados pela virgula
| (%i128) | matrix([1,2],[3,4]); |
Calculando o determinate da matriz
| (%i129) | determinant(matrix([1,2],[3,4])); |
Para resolver Ax=b, basta calcular \[ x = A^{-1} b \]
onde b é matriz coluna (transposta de uma linha).
Note que o produto matricial é feito por "." e não por "*".
Analogamente, potência de uma matiz é indicado por "^^" e não por "^".
| (%i132) |
A : matrix([1,2],[3,4]); b : transpose([2, 3]); x : invert(A) . b; /* mesmo que x : A^^(-1) . b; */; |
Os elementos da lista é acesssado por índice delimitado em "[" e "]" Note que os índices começa em 1 e não em 0 como de costume em várias linguagens de programação. Assim, os elementos da lista com n elementos são indexados de 1 a n
| (%i136) |
v : [-1, 1, 0]; v[2]; M : matrix([1,2],[3,4]); M[2,1]; |
Primeiro elemento até o décimo elemento também podem ser acessados por first, second, thrird, ..., tenth
| (%i138) |
v : [-1, 1, 0]; ev(second(v)); |
9 Equações
Para definir equação, usa-se o "="
| (%i140) |
kill(x,y); /* limpando x e y */ x^2+y^2=1; |
O lado esquerdo e direito da equação pode ser extraido por lhs e rhs respectivamente
| (%i143) |
eq : x^2+y^2=1; lhs(eq); rhs(eq); |
Uma equação pode ser resolvido pelo solve Em geral, devolve tanto a solução real como a solução complexa. Fique atendo se tem "%i" ou não, para distinguir solução real da solução complexa.
| (%i144) | solve(x^2+x+1=0); |
A solução sempre será devolvido na forma de lista de soluções Para ter o valor da solução desejada, deverá obter a solução da posição desejada (isolando a variavel, se necessário) e retirar o lado direito da equação.
| (%i147) |
sol : solve(x^2+2*x=0); rhs(sol[1]); rhs(sol[2]); |
Para isolar uma variável da equação, resolva em relação a variável desejada
Encontrando y em termos de x
| (%i148) | solve(x^2+y^2=1,y); |
Para resolver um sistema de equações, passe a lista de equações
| (%i149) | solve([x^2+y^2=1,y=x^2]); |
Outro exemplo Encontrando y e z em termos de x (isolando y e z)
| (%i151) |
kill(x,y,z); solve([x^2+y^2+z^2=1,z=x^2+x^2],[y,z]); |
10 Gráficos
Gráfico da função pode ser obtido pelo
plot2d e plot3d, dependendo da dimensão.
O maxima costuma usar o gnuplot para desenhar
o gráfico e criar uma janela independente
com recurso de iteratividade como zoom e rotação do grafico tridimensional com o mouse.
Dentro do wxmaxima, a familia destes comandos podem ser precedidos de "wx"
como em wxplot2d, wxplot3d, etc que correspondem ao plot2d, plot3d, etc
Tais comandos redirecionam a saida do gnuplot para arquivo
(em vez da janela separada) e carrega diretamente dentro
da area de trabalho do wxmaxima, o que mantém os gráficos na posição
correspondente ao comando gráfico que gerou.
Note que estes graficos não podem ser rotacionados
e podem apresentar qualidade inferior ao gerado pelos plot's correspondentes.
Também não funciona fora do ambiente wxmaxima, como no caso de
executar diretamente no maxima.
Os exemplos a seguir são feitos pela versão "wx".
Se quer rodar diretamente no maxima (fora do wxmaxima),
remova o wx no comeco do comando
wxplot2d, wxplot3d, etc para ficar como plot2d, plot3d, etc
antes de salvar no formato mac (ou wxm).
Grafico 2D da função real de uma variável Usando a função
| (%i153) |
f(x) := x^2; wxplot2d(f, [x,-2,2], [y,0,4])$ |
Grafico 2D da função de uma variavel Usando a expressão
| (%i154) | wxplot2d(sin(x), [x,-2*%pi,2*%pi], [y,-2,2])$ |
Usando a função convertida em expressão
| (%i156) |
f(x) := exp(x); wxplot2d(f(x), [x,-2,2], [y,0,6])$ |
Mesma escala em xy
| (%i157) | wxplot2d(2*x^2, [x,-1,1],[y, -0.1,1], same_xy); |
\[\mathrm{\tt (\%o157) }\quad \]
Apesar de poder omitir o limite para segunda variavel y, é recomendável que especifique para evitar gráficos indesejados que surge no modo automático
| (%i158) | wxplot2d(1/x, [x,-2,2])$ |
Delimitando o y, terá visão melhor
| (%i159) | wxplot2d(1/x, [x,-2,2],[y,-10,10])$ |
Para gráfico de mais de uma função, basta passar lista de expressões
| (%i160) | wxplot2d([sin(x),cos(x)],[x,-2*%pi,2*%pi],[y,-2,2], same_xy)$ |
Poderá esboçar as curvas paramétricas Atente na difêrença de passagem de parámetros
| (%i161) | wxplot2d([parametric, sin(x),cos(x),[x,-2*%pi,2*%pi]],same_xy)$ |
Gráfico 3D da função de duas variáveis
| (%i163) |
f(x,y) := x^2+y^2; wxplot3d(f(x,y), [x,-5,5], [y,-5,5])$ |
Curvas de níveis da função de duas variáveis
| (%i165) |
f(x,y) := x^2+y^2; wxcontour_plot(f(x,y), [x,-5,5], [y,-5,5])$ |
Para escolher os níveis desejados, deverá passar parámetro para o gnuplot [gnuplot_preamble,"set cntrparam levels discrete <niveis>] onde <niveis> são os níveis separados pela vírgura. Isto informa ao gnuplot, qual das curvas de níveis devem ser desenhados.
| (%i166) | wxcontour_plot(x^2+y^2, [x, -2, 2], [y, -2, 2],[gnuplot_preamble,"set cntrparam levels discrete 0, 1, 4"]); |
\[\mathrm{\tt (\%o166) }\quad \]
A curva implícita pode ser expresso como curvas de nível
da função de duas variaveis.
Uma forma natural é passar toda expressão para um lado,
escrevendo como curvas de nível no nível 0
Por exemplo,
x^2+y^2=1
torna x^2+y^2-1=0
Para especificar o nível (o valor do lado direito da equação),
precisará passar parámetro para gnuplot
O parámetro
set cntrparam levels discrete 0
faz com que o gnuplot desenhe a curva de nível somente no nível 0
set size ratio -1
configurará para usar mesma escala tanto para eixo x como y
| (%i167) | wxcontour_plot(x^2+y^2-1, [x, -1, 1], [y, -1, 1],[gnuplot_preamble,"set cntrparam levels discrete 0;set size ratio -1"]); |
\[\mathrm{\tt (\%o167) }\quad \]
Note que no exemplo acima, foi usado somente os comandos básicos do maxima.
Para trabalhar com gráficos de forma mais eficiente,
deverá usar as funções draw2d() e draw3d()
fornecido pelo pacote adicional "draw"
A seção de "pacotes adicionais" tem alguns exemplos destes.
Campo de vetores. No exemplo, é o campo F(x,y) = [y, -x]
com -1 ≤ x ≤ 1 e -1 ≤ y ≤ 1
plotdf não tem a versão wx e será desenhado na janela separada.
Se clicar dentro desta janela, traçará a trajetória do campo partindo deste ponto.
O plotdf() nao tem a versao wx.
Note que existe o drawdf() do pacote drawdf
que tem a funcionalidade similar e tem também a versão wx.
| (%i168) | plotdf([y,-x],[x,-1,1], [y,-1,1]); |
11 Pacotes adicionais
Para cada finalidade, existem pacotes na qual precisam ser carregados explicitamente pelo comando load. Uma vez carregado, poderá usar as funções definidas no pacote. Não é necessário especificar o pacote mais de uma vez.
Campo de vetores Exemplo de campo de vetores F(x,y)=(y,-x) Para mais exemplos de campo de vetores, veja http://maxima.sourceforge.net/docs/manual/en/maxima_71.html
| (%i170) |
load("drawdf"); wxdrawdf([y,-x],[x,-1,1], [y,-1,1],proportional_axes = xy); |
\[\mathrm{\tt (\%o170) }\quad 0\]
Exemplo de obter o gradiente da função de duas variáveis que é o caso especial de jacobiana
| (%i172) |
load("linearalgebra"); jacobian([x^2+y^2], [x,y]); |
Como o pacote de álgebra linear já está carregada, poderá continuar usando Gerando o matriz de Vandermonde de três variáveis
| (%i173) | vandermonde_matrix ([x, y, z]); |
Método simplex para aotimização linear minimizar a função objetiva x+y sujeito à condição 3*x+2*y>2 x+4*y>3
| (%i175) |
load("simplex")$ minimize_lp(x+y, [3*x+2*y>2,x+4*y>3]); |
Definindo a norma euclidiana O pacote "eigen" contém função inprod() para produto interno (produto escalar)
| (%i178) |
load("eigen"); /* contém o produto interno */ norm(v) := sqrt(inprod(v,v)); /* definindo a norma euclidiana */ norm([1,2]); |
O pacote "draw" contem função que permite usar recursos gráficos
2D (draw2d) e 3D (draw3d) sofisticados usando o gnuplot
O exemplo a seguir, desenha três curvas juntas
- curva implicita: circulo x^2+y^2=1
- curva paramétrica: cuspede (t^2,t^3)
- gráfico da função: sqrt(x)
Usando a versão com "wx' para manter na área de trabalho do wxmaxima
| (%i179) |
/* pacote gráfico adicional */ load("draw"); |
| (%i180) |
wxdraw2d(color=blue,implicit(x^2+y^2=1, x, -1,1, y, -1,1), color=red,parametric(t^2, t^3,t,-1,1), color=green,explicit(sqrt(x),x,0,1),proportional_axes = xy); |
\[\mathrm{\tt (\%o180) }\quad \]
Desenhando a superfície de nível
| (%i181) |
wxdraw3d(implicit((x-1)^2+y^2+(z+1)^2=1, x,-2,2,y,-2,2,z,-2,2), surface_hide = true,proportional_axes = xyz)$ |
Curvas implícitas
| (%i183) |
load(implicit_plot); wximplicit_plot(x^2+y^2=1, [x,-1.2, 1.2], [y, -1.2, 1.2],same_xy); |
\[\mathrm{\tt (\%o183) }\quad \]
No caso de programa a ser executado diretamente no maxima,
o comando para finalizar o maxima é
quit();
Nao esquecer de parenteses, assim como ";"