Maple
====================================================================
Maple é uma ferramenta de computação científica com as seguintes características gerais:
° Manipulador Simbólico
° Grande coleção de Funções Numéricas
° Capacidade gráfica em 2D e 3D
° Linguagem de programação avançada
° Sintaxes similar ao FORTRAN, PASCAL ou C
° Folha de Cálculo e Editor de Texto com saídas em Latex e HTML
° Maple
está
disponível para
DOS, Windows, MacOS, UNIX, Linux...
°
A
grande
vantagem : uma folha
de cálculo pode ser utilizada sobre qualquer plataforma sem
necessidade de ser alterada.
>
|
|
====================================================================
1.- Zona de Texto (Em cor preta)
2.- Zona de comandos (Em cor vermelha) (Cada comando debe finalizar com ; o com : )
3.- Zona de respostas (Em cor Azul)
> |
25! + 13^23; |
as líneas com comentários se colocam a continuação do símbolo #
> |
c^2 = a^2 + b^2 ; # Teorema de Pitágoras |
O seguinte comando reinicia a folha de cálculo
> |
restart; |
> |
|
====================================================================
Maple faz cálculos tanto com números inteiros como em Ponto Flutuante
> |
15 + 5^20; |
> |
15. + 5^20; |
Porém a ênfase radica nos cálculos exatos
> |
cos(Pi/12)^2 + ln(2/3+5)/7; |
> |
evalf(%); # EVALuate using Floating-point |
A % pode ser utilizado a última saída de Maple como entrada não comando seguinte.
Existe mais ordem de precedência para os operadores: + - * / ^
> |
1+2*3^2; |
> |
(1+2)*3^2; |
Porém, seu uso descuidado produz erros
> |
2^3^5; |
Error, `^` unexpected
> |
(2^3)^5; |
> |
2^-5; |
Error, `-` unexpected
> |
2^(-5); |
Constantes numéricas e letras gregas: Maple faz distinção entre maiúsculas e minúsculas
> |
evalf(Pi); |
> |
evalf(pi); |
A precisão pode ser controlada:
> |
sqrt( 68 ); sqrt( 68. ); evalf(sqrt(68),50 ); |
Se pode arredondar a uma fração
> |
convert(%,fraction); |
o simbolo % permite que a ultima saída se assine a uma nova instrução!
> |
restart; |
Para atribuir um objeto a uma variável se faz com o operador :=
> |
f := arctan( (2*x^2-1)/(2*x^2+1) ); |
> |
f; |
Entretanto que o símbolo = , se utiliza para mostrar uma relação entre variáveis
> |
h = x + y; |
> |
h; |
Por lo tanto, existem nomes que já estão definidos e por lo tanto não podes ser utilizados
> |
abs:= f*sin(x); |
Error, attempting to assign to `abs` which is protected
abs é a função valor absoluto
> |
abs(x-a); |
> |
restart; |
====================================================================
Se definem, se avaliam e se derivam funções abstratas
> |
f:= (x,y) -> exp(x^2+y^2)/(x-y); |
> |
f(a^(1/2),b^(1/2)); |
> |
f(2,3); |
> |
evalf(%); |
> |
diff( f(x,y) , x) + diff( f(x,y) , y) ; |
Conserva as expressões para a derivada interna
> |
f:= (t,r) -> g(c*t+r) + h(c*t-r); |
> |
diff(f(t,r),t$3); |
Para funções compostas se utiliza o operador @ e para derivar o operador D
> |
(cos@ln@sqrt)(x); |
> |
D(cos@ln@sqrt)(x); |
> |
diff(cos(ln(sqrt(x))),x); |
Limites:
> |
f:= (x) -> 1/(1+r/x)^x; |
> |
Limit(f(x),x=infinity) = limit(f(x), x=infinity); |
As maiúsculas a a esquerda ( Limit ) fornecem uma representação do Limite. as minúsculas ( limit ) sua execução.
Também podemos calcular limites a esquerda e a direita.
> |
g:= (x)-> tan(x + Pi) ; |
> |
Limit(g(x), x=Pi/2,right)=limit(g(x),x=Pi/2,right); |
Somatórios
> |
Sum((1+i)/i^2, i = 1..n) ; |
> |
value(%); |
Se tiver dúvidas
> |
?gamma |
> |
?Psi |
Integração:
> |
g:=(x)-> 1/( x*( b*x+c*x^2)^(1/2) ); |
> |
Int( g(x) , x ) = int( g(x) , x ); |
Avalia integrais definidas tanto analítica como numericamente
> |
f:=(x)-> exp(Pi*x); |
> |
Int( f(x) , x=1..3) = int( f(x) , x=1..3); |
Avalia integrais impróprias e as funções que resultam
> |
h:= (t)-> exp(-t)*t^(z-1); |
> |
Int(h(t),t=0..infinity) = int(h(t),t=0..infinity); |
> |
?GAMMA |
> |
GAMMA(0.5); # Função Gamma |
> |
Int(x/(x^2+2*x+2),x) = int(x/(x^2+2*x+2),x); |
Comprovemos que a solução é a correta
> |
diff(rhs(%),x); |
> |
simplify(%); |
> |
restart; |
====================================================================
4 Resolução de sistemas de equações Algébricas
Resolve sistemas de equações algébricas. O resultado fica armazenado em uma lista, e logo se deve atribuir esses valores ao "nome" das variáveis correspondentes para seguir operando.
> |
ecu1:= R[1]*i[1]+R[3]*i[3]+R[4]*i[4]-V[1]=0; |
> |
ecu2:= R[2]*i[2]-V[2]-R[3]*i[3]=0; |
> |
ecu3:= i[1]-i[2]-i[3]= 0; |
> |
solve({ecu1,ecu2,ecu3},{i[1],i[2],i[3]} ); assign(%); |
> |
i[1],i[2],i[3]; |
Agora para avaliar x, y, z nas equações ecu1 ... ecu3
> |
ecu1; ecu2; ecu3; |
> |
simplify(ecu1); simplify(ecu2); simplify(ecu3); |
Seguidamente procedemos a "limpar"o conteúdo das variáveis para poder utilizá-las em outras expressões.
> |
i[1]:='i[1]'; i[2]:='i[2]'; i[3]:='i[3]'; |
Soluções aproximadas para encontrar as raízes de um polinômio
> |
p:= x^3 - 3*x^2 = 17*x - 51; |
> |
sol:=solve(p,x); |
> |
evalf(%); |
> |
q:= x^5 +3*x^4 - 6*x^3 + x^2 + 12*x - 14=0; |
> |
solve(q , x); |
> |
?RootOf |
> |
fsolve(q,x); # fsolve utiliza Ponto-flotante |
> |
restart: |
====================================================================
> |
ED1:=diff(y(x),x)+y(x)/x=alpha/(x*y(x)^2); |
> |
dsolve(ED1,y(x)); |
> |
sols:=dsolve({ED1,y(1)=5},y(x)); |
Resolve equações diferencias, com e sem valores inicias por vários métodos. Séries . . .
> |
dsolve({ED1,y(1)=5},y(x),series); |
Sistemas de equações Diferencias. Mediante transformações de Laplace. . .
> |
sys:= diff(y(x),x)=z(x) , diff(z(x),x)=y(x); |
> |
fcns:={y(x),z(x)}; |
> |
s:=dsolve({sys,y(0)=0,z(0)=1},fcns,method=laplace); |
> |
s[1]; # Selecçãoo uma de as soluções |
Podemos tomar unicamente o lado direito da solução para uma posterior manipulação
> |
2*( rhs(s[1] )); # right hand sides |
equações diferenciais famosas: Bessel
> |
ED2:=x^2*diff(y(x),x$2)+x*diff(y(x),x)+(x^2-mu)*y(x)=0; |
> |
dsolve(ED2,y(x)); assign(%); |
> |
simplify(ED2); |
Se podem fazer gráficas para um conjunto de condições inicias
> |
y:=subs(mu=10, _C1=1/2, _C2=1/3 ,y(x)); |
> |
plot(y, x=0..20,-2..1 ,title=`y(x)`); |
Soluções Numéricas:
> |
de1 :={diff(g(t),t$2)=-f(t)-g(t),diff(f(t),t$2)= diff(g(t),t)+f(t)}; |
> |
init1 := {g(0)=1, D(g)(0)=0, f(0)=0, D(f)(0)=1}: |
> |
F := dsolve(de1 union init1, {g(t),f(t)},type=numeric); |
> |
F(0.0); |
> |
F:=dsolve(de1 union init1,{g(t),f(t)},type=numeric,output=array([0,1,2,3,4])); |
> |
with(plots): |
Warning, the name changecoords has been redefined
> |
odeplot(F,[t,g(t)],1..10,labels=[t,g]); |
> |
odeplot(F,[t,f(t)],1..10,labels=[t,f]); |
> |
with(DEtools): |
> |
S:=cos(xi)*diff(h(xi),xi$3)-diff(h(xi),xi$2)+Pi*diff(h(xi),xi)=h(xi)-xi; |
> |
DEplot(S,h(xi),xi=-2.5..1.4,[[h(0)=1,D(h)(0)=2,(D@@2)(h)(0)=1]],h=-4..5,stepsize=.05); |
> |
restart; |
====================================================================
Maple , automaticamente avalia e simplifica expressões
> |
p:=(a+b)^3*(a+b)^2; |
> |
expand(p); |
> |
factor(p); |
> |
t:=cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x); |
> |
simplify(t); |
> |
r:=alpha*(x^3-y^3)/(beta*(x^2+x-y-y^2)); |
> |
normal(r); |
> |
n:=numer(r); d:=denom(r); |
> |
n*d*delta; |
> |
expand(%); |
> |
collect(%,x); |
> |
coeff(%,x^3); |
> |
factor(%); |
pode converter muitos tipos de expressões em outras mais especificas
> |
expr1:=(a*x^2+b)/(x*(-3*x^2-x+4)); |
> |
expr2:=convert(expr1,parfrac,x); |
> |
expr3:=sin(x)*cos(x); |
> |
expr4:=convert(%,exp); |
Se podem isolar os argumentos das expressões
> |
op(3,expr2); op(3,expr4); |
> |
op(3,expr2)*op(3,expr4); |
> |
simplify(%); |
Não sempre todo funciona da maneira correta. a seguinte integral é trivial, Porém vejamos lo que sucede com Maple
> |
Int(2*x*(x^2+1)^24,x); |
> |
value(%); |
> |
factor(%); |
> |
factor(%+1/25); |
> |
restart; |
====================================================================
No todos os comandos são carregados na memoria quando Maple é iniciado. Só os comandos padrão são carregados automaticamente
> |
P:= x^5-24*x^4+85*x^3-108*x^2+166*x-120 ; |
> |
factor(P); |
> |
realroot(P); |
> |
readlib(realroot): |
> |
realroot(P,1); |
As Bibliotecas de Maple :
- a biblioteca padrão
- a biblioteca de miscelâneas
- Paquetes
> |
?index |
> |
?index,packages |
> |
?index,misc |
> |
restart: |
====================================================================
Una maior capacidade gráfica é obtida como paquete plots
> |
with(plots); |
Warning, the name changecoords has been redefined
Gráficos básicos em 2 e 3 Dimensões:
> |
f:=x-> exp(-x^2)*sin(Pi*x^3); |
> |
plot( f(x),x=-2..2,title=`f(x)`); |
> |
|
> |
g:=(x,y)-> f(x)*f(y); |
> |
plot3d(g(x,y),x=-1..1,y=-1..1); |
> |
|
> |
h:=(x) -> cos(sqrt(x^2+3*y^2))/(1+x^2/8); |
> |
j:= (x) -> 1/3 -(2*x^2+y^2)/19; |
> |
plot3d({h(x),j(x)},x=-3..3,y=-3..3,title=`Intersecção de h(x) e j(x)`); |
Mapas Topológicos
> |
with(plots): |
> |
contourplot(sin(x*y),x=-10..10,y=-10..10); |
Graficando Campos Vetoriais :
> |
phi[1]:=(x,y)->ln((x^2+2*x+1+y^2)^(1/2)); |
> |
phi[2]:=(x,y)->-ln((x^2-2*x+1+y^2)^(1/2)); |
> |
fieldplot([phi[1](x,y),phi[2](x,y)],x=-2..2,y=-2..2,arrows=SLIM,grid=[8,8]); |
> |
gradplot((-phi[1](x,y)-phi[2](x,y)),x=-2..2,y=-1..1,arrows=SLIM,grid=[10,10]); |
Animações:
> |
animate3d(cos(sqrt(t*x^2+t*y^2)),x=-5..5,y=-5..5,t=1..8); |
Com um pouco mais de complexidade
> |
tubeplot({[10*cos(t),10*sin(t),0,t=0..2*Pi,radius=2+cos(7*t),numpoints=120,tubepoint=24],[0,10+5*cos(t),5*sin(t),t=0..2*Pi,radius=1.5,numpoint=50,tubepoint=18]}); |
> |
|
====================================================================
Álgebra Linear
> |
restart: |
> |
with(linalg):# Leemoso paquete de A.L. |
Warning, the protected names norm and trace have been redefined and unprotected
> |
|
Criando Matrizes e Vetores
> |
A:=array( [ [a, b, c], [d, e, f ], [g, h, i ] ] ); |
> |
B:=array(antisymmetric,1..3,1..3): |
> |
B[1,2]:=x+a; B[1,3]:=y+b; B[2,3]:=z+c; |
> |
print(B); |
> |
v:= vector([1,2,3] ); |
> |
C:=matrix(4,4, (i,j) -> i^(j-1)); |
> |
M:=array(antisymmetric,1..3,1..3): |
> |
entermatrix(M); |
enter element 1,2 > |
2*alpha; |
> |
2*beta; |
> |
2*gamma: |
> |
N:=diag(mu,nu,lambda); |
> |
G:=diag(M,N); |
> |
|
a função "solve" para resolver um sistema de equações:
> |
ec1:= (c^2-1)*x+(c-1)*y = (1-c)^2 ; |
> |
ec2:=(c-1)*x+(c^2-1)*y=c-1; |
> |
sis:=({ec1,ec2}): |
> |
solve(sis,{x,y}); |
> |
|
Álgebra de matrizes para resolver o sistema de equações
> |
H:=genmatrix(sis,[x,y],'flag'); |
> |
A:=genmatrix(sis,[x,y]); |
> |
B:=delcols(H,1..2); |
para resolver a equação A X = B
> |
sol:= linsolve(A,B); |
> |
x:=sol[1,1]; y:=sol[2,1]; |
> |
simplify(ec1); simplify(ec2); |
> |
x:='x': y:='y': # Limpo as variáveis x e |
> |
|
Operações com matrizes
> |
S:=evalm(M+N); |
> |
evalm(3*M + 5/3*N); |
> |
evalm(M*N); |
Error, (in evalm/evaluate) use the &* operator for matrix/vector multiplication
> |
evalm(M &* N); |
> |
evalm(N &* M); |
> |
V:= vector([x,y,z]); |
> |
evalm(M &* V); |
> |
S1:= evalm( (M)^(3) ); |
> |
S1:= map(factor,S1); |
> |
print(S); |
> |
zeta:=inverse(S); |
> |
map(simplify,evalm(S &* zeta)); |
> |
trace(zeta); |
> |
det(zeta); |
> |
normal( trace(zeta) / det(zeta) ); |
> |
|
Cálculo de Autovetores e Autovalores
> |
K:=matrix([[sqrt(2),alpha,beta],[alpha,sqrt(2),alpha],[beta,alpha,sqrt(2)]]); |
> |
pc:=charpoly(K, lambda); # Polinômio Característico |
> |
factor(%); |
> |
solve(pc=0,lambda); |
> |
eigenvals(K); |
> |
eigenvects(K); |
O resultado é uma lista da forma:
[ e_i, m_i, { v[1,i],... v[n_i,i] } ]
onde:
e_i
= são os autovalores
m_i =
multiplicidade
{v[1,i],
..., v[n_i,i]} = conjunto de vetores bases
> |
print(K); |
> |
|
Solução de B x = v mediante Gauss-Jordan
> |
B:=matrix(3,3,[19,-50,88, 53,85,-49, 78, 17, 72] ); |
> |
v1:= vector( [3 ,5,-2] ): |
> |
v2:= vector( [4 ,-5,9] ): |
> |
v3:= vector( [21 ,4,7] ): |
> |
augment(B,v1,v2,v3 ); |
Construímos a matriz aumentada, e invocamos a solução
> |
gaussjord(%); |
> |
leastsqrs(B, v1); leastsqrs(B, v2);leastsqrs(B, v3); |
Funções teste
> |
beta := sqrt(2)*sqrt(5-sqrt(5)); |
> |
A:= matrix([[(sqrt(5)+beta +1)/4, -beta/2 ],[ beta/4 ,( sqrt(5) - beta+1)/4]]); |
> |
B:=matrix( [[(sqrt(5)+1)/4,-beta/4 ],[ beta/4,(sqrt(5)+1)/4 ] ]); |
Queremos verificar si A e B são similares, quer dizer, si existe uma matriz T, não singular, de maneira que
B = T A T^(-1).
> |
issimilar(A,B,'T'); |
> |
map(simplify,T); |
> |
|
Cálculo Vectorial.
Gradiente
> |
f:= 4*x*y*z - 5*y*x^3; |
> |
gradf:= grad(f,[x,y,z]); |
Vetores
> |
v:=vector([4*x-3*x^3*y,7*x*y*z^2+5*y^3,4*x^2*y^2+2*x]); |
Rotacionais
> |
curlv:= curl(v,[x,y,z] ); |
Jacobianos
> |
jacobian(%,[x,y,z]); |
Laplacianos
> |
laplacf:= laplacian(f,[x,y,z] ); |
Evaluação booleana de expressões
> |
evalb(laplacf = diverge(gradf,[x,y,z])); |
Diferentes tipos de coordenadas
> |
f := r*sin(theta)*z^2: v := [r, theta, z]: |
> |
gr:=grad(f, v, coords=cylindrical); |
> |
diverge(gr,v, coords=spherical); |
> |
laph= laplacian(f,v); |
> |
laph= laplacian(f,v,coords=bipolarcylindrical); |
> |
?coords |
> |
|
====================================================================
É possível utilizar Maple em um computador que funcione sob alguma das diferentes versões de sistemas operativos tipo UNIX, como por exemplo Linux. Quando não queremos utilizar o ambiente gráfico, podemos recorrer ao ambiente de texto escrevendo o comado maple
nodo5%> maple
| \ ^ / | Maple 9 (IBM INTEL LINUX)
._
| \
|
|
/ | _.
Copyright
(c) 2002 by Waterloo Maple Inc.
\ MAPLE
/
All
rights reserved. Maple is a registered trademark of
<____
____>
Waterloo
Maple
Inc.
|
Type
? for help.
> evalf(sqrt(Pi),100);
1.7724538509055160272981674833411451827975494561223871282138077898529112845\
91032181374950656738544665
> Int( tan(x), x ) = int( tan(x), x );
/
|
|
tan(x) dx =
-ln(cos(x))
|
/
Maple sobre UNIX utiliza os arquivos de entradas e saídas padrão para ler e imprimir informação: < , > , |
nodo5%> maple < archimap.txt
Com esta instrução Maple executará todos os comandos que se encontram não arquivo archimap.txt
Na seguinte instrução Maple executará todos os comandos que se encontram não arquivo archimap.txt e colocará os resultados não arquivo chamado archimap.out
nodo5%> maple < archimap.txt > archimap.out
Também se pode fazer que todos os comandos do arquivo sejam executados para logo ser enviados ao terminal
nodo5%> maple < archimap.txt | more
Maple pode ser detido temporariamente como comando Control_Z (^Z), de maneira que para colocar processos em "background" se procede da maneira usual:
nodo5%> maple -q < archimap > archimap.out
^Z
Suspended
nodo5%>
bg
[2] maple -q < archimap > archimap.out &
nodo5%>
Programa
Mint:
É um programa que permite verificar si um arquivo fonte de
Maple
tem erros de sintaxe
nodo5%> mint < archimap.txt
============================================
Desde que o padrão para incluir gráficos em documentos do Latex usa arquivos poscript, exportaremos os gráficos gerados no ambiente Maple para esse formato.
|
plot3d((1.3)^x*sin(y), x=-1..2*Pi, y=0..Pi, coords=spherical, style=patch);
|
criará uma cornucopia. Para criar o arquivo PostScript para este arquivo, execute o comando
|
plotsetup(postscript, plotoutput=`cornucopia.ps`, |
plot3d
novamente. Em vez de mostrar o gráfico na tela, Maple salva um arquivo Postcript. Abra o arquivo com ghostview.
Existem duas formas de gerar códigos em Latex. É possível converter uma folha inteira em um arquivo de Latex usando a opção
LaTeX
e Export As
que aparece no menu do File
do Maple.
latex(sin(x));
volta como resultado \sin(x)
.
|
|
\int _{0}^{1/4\,\pi }\!\sin(x){dx}