View
93
Download
22
Category
Preview:
DESCRIPTION
Gráficos, funções, solução de equações algébricas, simplificação de expressões, limites, somatórios, produtórios, diferenciação, integração, expansão em séries, cálculo vetorial, matrizes, etc.
Citation preview
OOOO OOOO
OOOO OOOO
OOOO OOOO
(2.1.1)(2.1.1)
AAAApppplllliiiiccccaaaaççççõõõõeeeessss ddddeeee MMMMaaaapppplllleeee eeeemmmm CCCCáááállllccccuuuulllloooo eeee ÁÁÁÁllllggggeeeebbbbrrrraaaa LLLLiiiinnnneeeeaaaarrrr
Fernando Deeke Sasse fsasse@alumni.uwaterloo.ca
Departamento de Matemática, UDESC - Joinville
1 Introdução O Maple foi criado nos anos 80 pelos matemáticos Keith Geddes e Gaston Gonnet, na Universidade Waterloo e é considerado uma plataforma de computação algébrica genérica com sólida base matemática. Computação algébrica é o mesmo que computação simbólica, ou seja, computação envolvendo a manipulação de símbolos. A computação numérica também pode ser realizada pelo Maple, embora de forma mais lenta do que programas tradicionais, como Fortran e C. A integração numérica/simbólica e a excelência da sua linguagem de programação, fazem com que o Maple sirva muito bem como uma ferramenta de criação de protótipos de programas. Há vários anos o Maple vem sendo desenvolvido em várias partes do mundo, graças ao fato dele ser construído sobre sua própria linguagem, não compilada. Somente um pequeno núcleo básico é compilado, por razões de velocidade.
2 Gráficos Esta seção foi baseada em parte nas worksheets de Peter Stone, School of Life and Physical Sciences, RMIT.
2.1 plot,implicitplot,with(plots),display,seq
O comando do Maple plot pode ser utilizado para traçar gráficos. Sua versatilidade reside no fato de que ele pode lidar com várias formas de parâmetros de entrada. Os seguintes comandos fazem o gráfico da função y = x
4K4 x3
C3 de x = K2 a x = 2. O intervalos que a variável x pode assumir é especificada na forma mostrada, utilizando dois pontos .. e constitui uma estrutura de dados do Maple denominada range. Inicialmente definimos a expressão:
restart:
y:=x^4-4*x^3+3;
y := x4K4 x3
C3
plot(y,x=-2..2);
OOOO OOOO
OOOO OOOO
xK2 K1 0 1 2
K10
10
20
30
40
50
Para rotular também o eixo vertical com um y, digitamos:
plot(y,x=-2..2,'y');
x
K2 K1 0 1 2
y
K10
10
20
30
40
50
Podemos restringir ou estender o gráfico na direção vertical digitando o intervalo de valores para y :
plot(y,x=-2..2,'y'=-10..10);
OOOO OOOO
xK2 K1 0 1 2
y
K10
K5
5
10
Podemos escolher a cor do gráfico adicionando uma opção do tipo color=??.ou colour=??.
plot(y,x=-2..2,'y',colour=magenta);
xK2 K1 0 1 2
y
K10
10
20
30
40
50
As escolhas para a opção colour são: aquamarine, black, blue, coral, cyan, brown, gold, green, grey, khaki, magenta, maroon, navy, orange, pink, plum, red, sienna, tan, turquoise,
OOOO OOOO
OOOO OOOO
violet, wheat, white, yellow.
Podemos escolher a cor definindo-a em termos de componentes de vermelho, verde e azul (RGB).
plot(y,x=-4..4,color=COLOR(RGB,.7,0,0.8));
xK4 K3 K2 K1 0 1 2 3 4
100
200
300
400
500
Podemos dar nome à cor:
purpura := COLOR(RGB,.7,0,1);
plot(x^2,x=-4..4,color=purpura);
purpura := COLOR RGB, 0.7, 0, 1
x
K4 K3 K2 K1 0 1 2 3 4
2
4
6
8
10
12
14
16
Alternativamente é possível usar uma macro.
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(2.1.2)(2.1.2)
macro(darkgreen=COLOR(RGB,0,0.6,0));
plot(x^2,x=-4..4,color=darkgreen);
darkgreen
x
K4 K3 K2 K1 0 1 2 3 4
2
4
6
8
10
12
14
16
Gráficos simultâneos podem ser construídos definindo uma lista de expressões, cujos gráficos queremos traçar:
[x^2,x+1];
x2, xC1
plot([x^2,x+1],x=-2..2,'y');
xK2 K1 0 1 2
y
K1
1
2
3
4
Podemos escolher as cores dos gráficos definindo a respectiva lista de cores: .
plot([x^2,x+1],x=-2..2,'y',color=[blue,green]);
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
xK2 K1 0 1 2
y
K1
1
2
3
4
Note que usamos aspas simples para retardar a avaliação de y, que já tem um valor atribuído. O seguinte exemplo mostra um tipo de erro devido ao fato da variável já ter um valor atribuído:
x := 5;
plot(2*x-x^2,x=-1..3);
x := 5
Error, (in plot) unexpected option: 5 = -1 .. 3
Este problema pode ser resolvido removendo a atribuição de x:
x := 'x':
plot(2*x-x^2,x=-1..3);
xK1 0 1 2 3
K3
K2
K1
1
Podemos atribuir nomes aos gráficos, para depois exibi-los. Antes disso devemos carregar a bibliteca plots:
with(plots):
g1:=plot(sin(x)^2,x=-Pi..Pi,color=blue):
g2:=plot(sin(x^2),x=-Pi..Pi):
OOOO OOOO
OOOO OOOO
OOOO OOOO
display([g2,g1]);
x
K3 K2 K1 1 2 3
K0.8
K0.6
K0.4
K0.2
0.2
0.4
0.6
0.8
1
Os gráficos são desenhados com a espessura de um pixel, a menos que uma espessura maior que 1seja especificada com a opção "thickness" .
plot(2*x-x^2,x=-1..3,thickness=2);
x
K1 0 1 2 3
K3
K2
K1
1
Para plotar funções parametrizadas o procedimento é o seguinte:
plot([t*cos(2*Pi*t), t*sin(2*Pi*t), t=0..4], scaling=
constrained, axes=box);
OOOO OOOO
OOOO OOOO
K3 K2 K1 0 1 2 3 4
K3
K2
K1
0
1
2
3
Gráficos de funções definidas implicitamente podem ser traçados com o comandoimplicitplot:
implicitplot(sin(x*y)+y=2,x=-6..6,y=0..4);
x1 1.5 2 2.5 3 3.5
x4K4 x3C3
0
1
2
3
4
implicitplot(sin(x*y)+y=2,x=-6..6,y=0..4,numpoints=10000);
OOOO OOOO
(2.1.3)(2.1.3)OOOO OOOO
x1 1.5 2 2.5 3 3.5
x4K4 x3C3
0
1
2
3
4
As coordenadas de um ponto podem ser representadas em Maple por meio de uma lista com dois números. Por exemplo, o ponto (1,2) é escrito como [1,2].
Definimos a seguir a lista de pontos dados por K2, 2 , K1, K2 , 1, 2 , 2, 3 .
mypoints := [[-2,2],[-1,-2],[1,2],[2,3]];
mypoints := K2, 2 , K1, K2 , 1, 2 , 2, 3
Podemos plotar estes pontos em gráfico usando plot.
plot(mypoints,style=point);
OOOO OOOO
K2 K1 0 1 2
K2
K1
1
2
3
As escolhas das cores são as mesmas que foram definidas para plotar gráficos. Os símbolos podem ser escolhidos como box, cross, circle, point, e diamond.Você pode também digiter estes tipos de pontos em maiúsculas, BOX,CROSS,CIRCLE,POINT,DIAMOND, mas não misture maiúsculas e minúsculas.
plot(mypoints,style=point,colour=blue,symbol=circle);
K2 K1 0 1 2
K2
K1
1
2
3
Mais informações sobre as opções para o procedimento plot podem ser obtidas na página helpassociada. .
• •
• •
OOOO OOOO
OOOO OOOO
(2.1.6)(2.1.6)
OOOO OOOO
• •
OOOO OOOO
OOOO OOOO
(2.1.5)(2.1.5)
(2.1.4)(2.1.4)
Os três modos de acesso à página de ajuda para as opções de plot são
Clique no hyperlink: plot[options].
Selecione a palavra plot[options] com o mouse e escolha Help on "plot[options]" que deve aparecer na segunda linha do menu help.
Digite ?plot[options] em uma linha de comando e execute.
?plot[options]
A sequência de números 1, 4, 9, 16, 25, . . . , 100 de todos os quadrados dos números de 1 a 10 podem ser construídos usando o procedimento seq.
seq(i^2,i=1..10);
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
Esta sequência pode ser transformada em uma lista colocando colchêtes em torno do comando
[seq(i^2,i=1..10)];
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
O seguintes comandos plotam os pontos 0, 1 , 1, 3 , 2, 5 , 3, 7 , 4, 9 , 5, 11 , 6, 13 . Estes pontos tem a forma k, 2 kC1 onde os parâmetro k toma valores todos os valores inteiros de t 0 a 6 inclusive, de modo que podemos usar seq. A opção view pode ser utilizada para especificar o intervalo vertical a ser empregado no plot.
point_list := [seq([k,2*k+1],k=0..6)];
point_list := 0, 1 , 1, 3 , 2, 5 , 3, 7 , 4, 9 , 5, 11 , 6, 13
plot(point_list,style=point,symbol=box,color=brown,view=0.
.13);
(2.2.1)(2.2.1)OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
0 1 2 3 4 5 60
2
4
6
8
10
12
2.2 pointplot,pointplot3d
Outro modo de fazer gráfico com pontos é através do comando pointplot:
restart:
with(plots):
pointlist:=[[1,2],[2,6],[4,4],[3,2]];
pointlist := 1, 2 , 2, 6 , 4, 4 , 3, 2
A opção connect=true pode ser utilizada para conectar os pontos por segmentos ou curvas:
pointplot(pointlist,color=blue,connect=true);
1 2 3 42
3
4
5
6
Também podemos fazer gráficos de pontos em três dimensões:
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
points:= [ seq([cos(Pi*T/40),sin(Pi*T/40),T/40],T=0..40) ]:
pointplot3d(points,axes=boxed,connect=true);
0.0
0.5
1.0-1
0
0.0 1
0.5
1.0
2.3 plot3d,implicitplot3d
Maple pode também plotar gráficos em 3D. A superfície pode ser girada com o mouse.
restart:
plot3d(x^2+y^2,x=-2..2,y=-2..2,axes=boxed);
-2-1
y
01
2-2-1
x
01
2
0
2
4
6
8
OOOO OOOO
(2.3.3)(2.3.3)
(2.3.1)(2.3.1)
(2.3.6)(2.3.6)
OOOO OOOO
OOOO OOOO
(2.3.5)(2.3.5)
OOOO OOOO
(2.3.4)(2.3.4)
OOOO OOOO
OOOO OOOO
(2.3.2)(2.3.2)
Quando temos uma função definida implicitamente, podemos utilizar o comamdo implictplot3D:
implicitplot3d(sin(x*y)+y*z^2-z,x=-1..1,y=-1..1,z=-1..1,
axes=boxed);
implicitplot3d sin x y Cy z2Kz, x = K1 ..1, y = K1 ..1, z = K1 ..1, axes = boxed
implicitplot3d(x^3+y^3+z^3+1=(x+y+z+1)^3, x=-2..2, y=-2..2,
z=-2..2, grid=[10,10,10],axes=frame);
implicitplot3d x3Cy
3Cz
3C1 = xCyCzC1 3, x = K2 ..2, y = K2 ..2, z = K2 ..2, grid
= 10, 10, 10 , axes = frame
No seguinte exemplo utilizamos coordenadas esféricas:
implicitplot3d(r=(3)^x*sin(y), r=0.1..5, x=-1..2*Pi, y=0..
Pi, coords=spherical);
implicitplot3d r = 3x sin y , r = 0.1 ..5, x = K1 ..2 π, y = 0 ..π, coords = spherical
Agora utilizamos coordenadas cilíndricas:
implicitplot3d(r^2+z^2=1, r=0..1, theta=-Pi..Pi, z=-1..1,
coords=cylindrical,axes=frame);
implicitplot3d r2Cz
2 = 1, r = 0 ..1, θ = Kπ ..π, z = K1 ..1, coords = cylindrical, axes
= frame
No seguinte exemplo tivemos que aumentar o número mínimo total de pontos utilizado para gerar gráfico para a obtenção de um resultado satisfatório (default 625 = 25^2):
implicitplot3d([y=sin(x*z+6), y=cos(-x*z)], x=-Pi..Pi, y=-
Pi..Pi, z=-1..1,color=[blue,red],axes=frame, numpoints=
2000);
implicitplot3d y = sin x zC6 , y = cos x z , x = Kπ ..π, y = Kπ ..π, z = K1 ..1, color
= blue, red , axes = frame, numpoints = 2000
No próximo exemplo usamos a opção scaling=constrained que faz com que as escalas dos diferentes eixos sejam as mesmas.
implicitplot3d([(x+2)^3+(y+2)^2+(z+2)^2=9, (x-2)^2+(y-2)^2+
(z-2)^2=15], x=-5..7, y=-8..8, z=-8..7, color=[blue,green],
scaling=constrained, axes=boxed);
implicitplot3d xC2 3C yC2 2
C zC2 2 = 9, xK2 2C yK2 2
C zK2 2
= 15 , x = K5 ..7, y = K8 ..8, z = K8 ..7, color = blue, green , scaling = constrained,
axes = boxed
Para ver a diferença, modifique esta opção para scaling=unconstrained (default).
2.3 polygonplot,polygonplot3d,with(plottools),animate
O procedimento polygonplot, que logo abaixo é utilizado para plotar o triângulo (cheio) com
OOOO OOOO
OOOO OOOO
OOOO OOOO
(2.4.1)(2.4.1)OOOO OOOO
(2.4.2)(2.4.2)
vértices em 0, 0 , 0, 1 , 1, 1 and 1, 0 :
with(plots);
animate, animate3d, animatecurve, arrow, changecoords, complexplot, complexplot3d,
conformal, conformal3d, contourplot, contourplot3d, coordplot, coordplot3d,
densityplot, display, dualaxisplot, fieldplot, fieldplot3d, gradplot, gradplot3d,
graphplot3d, implicitplot, implicitplot3d, inequal, interactive, interactiveparams,
intersectplot, listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d,
loglogplot, logplot, matrixplot, multiple, odeplot, pareto, plotcompare, pointplot,
pointplot3d, polarplot, polygonplot, polygonplot3d, polyhedra_supported,
polyhedraplot, rootlocus, semilogplot, setcolors, setoptions, setoptions3d,
spacecurve, sparsematrixplot, surfdata, textplot, textplot3d, tubeplot
triangle := [[0,0],[0,1],[.5,1]]:
polygonplot(triangle,axes=none,color=orange);
ngon := n -> [seq([cos(2*Pi*i/n), sin(2*Pi*i/n)], i = 1..n)
];
ngon := n/ seq cos2 π i
n, sin
2 π in
, i = 1 ..n
display([polygonplot(ngon(5)), textplot([0,0,`Octagon`])],
color=magenta);
OOOO OOOO
OctagonK0.8K0.6K0.4 0.2 0.4 0.6 0.8 1
K0.8
K0.6
K0.4
K0.2
0.2
0.4
0.6
0.8
O pacote plots também contém o procedimento polygonplot3d que pode ser usado da seguinte forma pra traçar um cubo:
plots[polygonplot3d]([[[0,0,0],[1,0,0],[1,1,0],[0,1,0]],
[[0,0,1],[1,0,1],[1,1,1],[0,1,1]],
[[0,0,0],[0,1,0],[0,1,1],[0,0,1]],
[[1,0,0],[1,1,0],[1,1,1],[1,0,1]],
[[0,0,0],[1,0,0],[1,0,1],[0,0,1]],
[[0,1,0],[1,1,0],[1,1,1],[0,1,1]]],
lightmodel=light4,scaling=constrained,style=patchnogrid);
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(2.4.3)(2.4.3)
OOOO OOOO
Alguns objetos geométricos em 3D, assim como as operações de reflexão, rotação e translação destes objetos são encontrados no pacote plottools. Note que este pacote deve ser carregado junto plots.
with(plottools);
arc, arrow, circle, cone, cuboid, curve, cutin, cutout, cylinder, disk, dodecahedron,
ellipse, ellipticArc, hemisphere, hexahedron, homothety, hyperbola, icosahedron,
line, octahedron, parallelepiped, pieslice, point, polygon, project, rectangle, reflect,
rotate, scale, semitorus, sphere, stellate, tetrahedron, torus, transform, translate, vrml
C1 := cone([0,0,0], 1/2, 2):
display( C1,axes=frame );
-0.5
0.0
0.5
-0.5
0.0
0.50.0
0.5
1.0
1.5
2.0
Note que a manipulação do gráfico admite dois graus de liberdade de rotação. No caso acima, nãoconseguimos fazer o vértice do cone apontar na direção horizontal. No entanto, ao aplicar uma
rotação de π
2 com relação a um dos eixos do plano ortogonal ao eixo de simetria do cone temos
C2:=rotate(C1,Pi/2,0,0):
display(C2,axes=frame,scaling=unconstrained);
OOOO OOOO
OOOO OOOO
0.0
0.5
1.0
1.5
2.0
-0.5
-0.25
0.0
0.25
0.5-0.5
-0.25
0.0
0.25
0.5
Mesmo com dois graus de liberdade somente podemos agora fazer o vértice apontar em qualquer uma das três direções espaciais . Por quê ? Façamos um objeto composto:
sorvete := cone([0,0,-2],0.7,2,color=tan),
sphere([0,0,0.1],0.68,color=wheat):
plots[display](sorvete, scaling=constrained);
OOOO OOOO f := dodecahedron([0,0,0],0.8), torus([1,1,1], 0.5, 1.4):
plots[display](f,orientation=[45,0],scaling=constrained);
Tente colocar o dodecaedro no centro do toro.
2.4 animate
OOOO OOOO
OOOO OOOO
Gráficos podem ser animados.
animate( 3*exp(-0.2*t-x^2)*sin(Pi*(x+t)),x=-5..5,t=0..20,
view=[-3..3,-3..3],axes=normal, frames=50,numpoints=500);
x
K3 K2 K1 0 1 2 3
K3
K2
K1
1
2
3
Este comando pode ser utilizado também em 3D:
animate( plot3d, [sin(t)*(x^2+y^2), x=-2..2, y=-2..2], t=0.
.2*Pi,axes=boxed );
OOOO OOOO
-2
-1y
0
1
2
-2
-1
0x
1
2-8
-3
2
7
t = 0.
;
2.5 Exercícios
1. Plote a curva y = x4K4 x3
Kx2C5 xK1 para mostrar as principais características do gráfico.
Em particular, certifique-se que todas as intersecções e pontos de retorno apareçam no figura. A equação x4
K4 x3Kx
2C5 xK1 = 0 possui alguma solução inteira? Explique.
2. (a) Plote o gráfico de y = x sin 60 x no intervalo de x = 0 a x = 3 π usando a opção "numpoints" , se necessário, para obter um bom resultado.
(b) Plote as curvas y = x sin 60 x , y = x e y = K x simultaneamente para mostrar como a
curva y = x sin 60 x está "presa" entre as curvas y = x e y = K x .
3. Plote the gráficos dados pelas equações abaixo. Em cada caso escolha um intervalo conveniente que mostre as principais características do gráfico. I(a) y = x
2K5 xK3
(b) y = x3Kx
(c) y2 = x (d) x2
Ky2 = 2
Para o gráfico em (d), mostre também as assíntotas y = x e y = Kx .
(3.1.2)(3.1.2)OOOO OOOO
(3.1.1)(3.1.1)
OOOO OOOO
4. Plote as funções y = x2K5 xC6 e y =
1
xK2 2 juntas. Experimente diferentes intervalos
para y de modo que ambos gráficos sejam mostrados de forma satisfatória.
5. Faça o mesmo com f x = sec x C4 no intervalo 0, 2 π .
6. Estime graficamente onde as funções definidas por f x = 20Kx e h x = 1.012x se interceptam. 7. Faça gráficos comparativos das funções y = x
n , para diferentes valores de n. Faça uma animação.
8. Faça o gráfico simultâneo das superfícies definidas por sin x y Ccos z C2 = 0 e xC2 yKx = 3.
9. Faça o gráfico das seguintes funções parametrizadas:
(a) r t =t2K1
t2C1
,2 t
t2C1
, para t pertencendo a KN ..N .
(b) r t =4 t3
9K
14 t2
9C
t
9C1, K
4 t3
9K
t2
9C
14 t9
, para t pertencendo a (0,1)
10. Desenhe um pentágono inscrito numa circunferência.
11. Desenho um toro que possa ser interativamente orientado em qualquer direção espacial.
12. Plote o Folium, que é definido como o gráfico em coordenadas polares de seguinte função
radial: cos θ 4 sin θ2K1 . Utilize a opção coords=polar (veja exemplos no menu help)
para traçar o gráfico em coordenadas polares.
3 Expressões e Funções
3.1 Seta, eval Ao usar Maple é importante distinguir cuidadosamente expressões e funções. Por exemplo,
x2K4 xC3 and x C2 são funções na variável x.
Elas são introduzidas como já fizemos antes, atribuindo nomes se necessário:
x^2-4*x+3;h:=sqrt(x)+2;
x2K4 xC3
h := x C2
Em matemática utilizamos tais expressões para definir funções, como f x = x2K4 xC3 e
g x = x C2.Em Maple as funções f e g devem ser entendidas agora de uma forma bastante precisa, comonomes de ações ou procedimentos associados com valores computados destas expressões para um dado número de entrada x. No Maple funções são facilmente definidas utilizado a seta. Por exemplo,
f := x -> x^2-4*x+3;
f := x/x2K4 xC3
(3.1.3)(3.1.3)
(3.1.4)(3.1.4)OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(3.1.6)(3.1.6)
OOOO OOOO
(3.1.5)(3.1.5)
Uma vez que tal comando foi executado a função f pode ser utilizada durante a seção como qualquer outra função definida previamente. Assim,
f(1/2);
54
f(3);
0
Entradas simbólicas também podem ser utilizadas.
f(s);
s2K4 sC3
f(s+1);
sC1 2K4 sK1
A função pode plotada:
plot(f(x),x=0..4);
x1 2 3 4
K1
0
1
2
3
ou
plot(f,0..4);
(3.1.7)(3.1.7)
OOOO OOOO
OOOO OOOO
1 2 3 4
K1
0
1
2
3
Outras funções podem ser definidas em termo de f:
g := x -> f(x-1);
h := x -> f(x-2);
g := x/f xK1
h := x/f xK2
plot([f(x),g(x),h(x)],x=0..6,y=-1..3,color=[red,aquamarine,
gold],thickness=2);
x
1 2 3 4 5 6
y
K1
0
1
2
3
Uma vez que a função foi definida, o Maple lembrará desta função durante toda a seção. É possível sobrescrever a definição de uma função com uma nova definição.
Por exemplo, se queremos mudar a definição da função f x =x
x2C1
, devemos digitar e
executar o comando:
OOOO OOOO
OOOO OOOO
(3.1.9)(3.1.9)
(3.1.12)(3.1.12)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(3.1.11)(3.1.11)
(3.1.8)(3.1.8)
OOOO OOOO
(3.1.14)(3.1.14)
OOOO OOOO
(3.1.10)(3.1.10)
OOOO OOOO
(3.1.13)(3.1.13)
f := x -> x/(x^2+1);
f := x/x
x2C1
A presente (nova) definição da função f pode ser confirmada da seguinte forma:
f(x);
x
x2C1
ou, utilizando o comando de avaliação,
eval(f);
x/x
x2C1
Digitando simplesmente f; em uma linha de comando não é suficiente:
f;
f
Note: Note que com a nova definição de f, g e h també, mudam:
g(x);
xK1
xK1 2C1
h(x);
xK2
xK2 2C1
No entanto, a aplicação de eval a g confirma as definições de g in termos de f, mas não diz nada sobre f:
eval(g);
x/f xK1
plot([f(x),g(x),h(x)],x=-5..7,color=[red,aquamarine,gold],
thickness=2);
(3.2.1)(3.2.1)
(3.2.3)(3.2.3)
OOOO OOOO
OOOO OOOO
(3.2.5)(3.2.5)
(3.2.2)(3.2.2)
OOOO OOOO
OOOO OOOO
(3.2.4)(3.2.4)
OOOO OOOO
(3.1.15)(3.1.15)
OOOO OOOO
OOOO OOOO
xK4 K2 0 2 4 6
K0.4
K0.2
0.2
0.4
Para limpar a atribuição de f sem redefini-lo fazemos
f := 'f';
f := f
Um certo número de funções, digamos, f, g, h, podem ter suas atribuições limpadas simultaneamente:
unassign('f','g','h');
Para economizar memória é sempre bom limpar as atribuições de funções e variáveis, ao iniciar um novo problema. Alternativamente podemos sempre usarrestart; para limpar tudo da memória.
3.2 unapply, mapUma expressão como
F:= x^2-4*x+3;
F := x2K4 xC3
pode ser transformada em uma função com o comando unapply:
f:=unapply(F,x);
f := x/x2K4 xC3
Podemos calcular o valor da função em x = 3, por exemplo, de dois modos.
f(3);
0
eval(F,x=3);
0
O comando subs pode ser também usado para avaliar a expressão num dado ponto:
subs(x=3,F);
0
OOOO OOOO
(3.2.6)(3.2.6)
OOOO OOOO
(3.2.7)(3.2.7)
OOOO OOOO
(3.3.1)(3.3.1)
OOOO OOOO
OOOO OOOO
OOOO OOOO
O procedimento de Maple map é um exemplo de procedimento que funciona somente com funções e não expressões.
g := x -> x^2;
map(g,[1,2,3,4,5,6]);
g := x/x2
1, 4, 9, 16, 25, 36
O comando evalf avalia um número em dígitos flutuantes até uma precisão especificada. Vamos então construir a função:
evalf15 := x -> evalf(x,15);
evalf15(Pi);
evalf15 := x/evalf x, 15
3.14159265358979
3.3 procOutro modo de definir funções é através de procedimentos:
h:=proc(a,b)
if a<0 then print(erro) else
plot(sqrt(x)+1,x=a..b)
end if;
end;
h := proc a, b
if a ! 0 then print erro else plot sqrt x C1, x = a ..b end if
end proc
h(0,1);
(3.3.5)(3.3.5)
(3.3.4)(3.3.4)
OOOO OOOO
OOOO OOOO
(3.3.7)(3.3.7)
OOOO OOOO
(3.3.6)(3.3.6)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(3.3.3)(3.3.3)
(3.3.2)(3.3.2)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
x0 0.2 0.4 0.6 0.8 1
1
1.2
1.4
1.6
1.8
2
h(b);
Error, (in h) cannot determine if this expression is true or false: b <
0
Podemos também definir funções de várias variáveis:
g:=(x,y)->x*y^2+x-y^2;
g := x, y /x y2CxKy
2
ou
F:=proc(x,y)
x*sin(y)+x^2
end;
F := proc x, y x * sin y Cx^2 end proc
F(1,2);
sin 2 C1
Ff:=proc(x,y)
evalf(x*sin(y)+x^2)
end;
Ff := proc x, y evalf x * sin y Cx^2 end proc
Ff(Pi,Pi);
9.869604404
seq(map(Ff, [1,2,3], 1+i),i=1..3);
1.909297427, 5.818594854, 11.72789228 , 1.141120008, 4.282240016,
9.423360024 , 0.2431975047, 2.486395009, 6.729592514
OOOO OOOO
(4.1.6)(4.1.6)
OOOO OOOO
(4.1.1)(4.1.1)
OOOO OOOO
(4.1.5)(4.1.5)
OOOO OOOO
OOOO OOOO
(4.1.2)(4.1.2)
(4.1.3)(4.1.3)
OOOO OOOO
OOOO OOOO
(4.1.7)(4.1.7)
(4.1.4)(4.1.4)
OOOO OOOO
3.4 Exercícios 2
1 (a) Construa a função f x =x
3C3 x2
K1
x4C4
usando a notação seta.
(b) Determine f K1 , f 0 e f 1 .(c) Faça o gráfico de f sobre o intervalo de x = K4 a x = 4.
(d) Use o procedimento eval para avaliar a expressão x
3C3 x2
K1
x4C4
para x = K1, x = 0 e x = 1.
2 Construa uma função cuja entrada é uma lista qualquer e cuja saída é uma lista que avalia o senode cada elemento da lista de entrada.
4. Solução de Equações Algébricas
4.1 solve, fsolve
restart:
Vamos agora considerar equações algébricas do tipo
eq1:=a*x^2+b*x+c=0;
eq1 := a x2Cb xCc = 0
Podemos resolver esta equação para x:
sol:=solve(eq1,x);
sol :=12
KbC b
2K4 a c
a, K
12
bC b
2K4 a c
a
sol[1];
12
KbC b
2K4 a c
a
sol[2];
K12
bC b
2K4 a c
a
Consideremos algumas equações mais específicas, dando valores às constantes a, b e c :
eq2:=subs(a=1,b=3,c=-4/5,eq1);
eq2 := x2C3 xK
45
= 0
sol:=solve(eq2,x);
sol := K32
C1
10 305 , K
32
K1
10 305
Em pontos flutuantes,
evalf(sol);
0.246424920, K3.246424920
OOOO OOOO
OOOO OOOO
OOOO OOOO
(4.1.14)(4.1.14)
(4.1.15)(4.1.15)
(4.1.9)(4.1.9)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(4.1.11)(4.1.11)
OOOO OOOO
OOOO OOOO
(4.1.8)(4.1.8)
OOOO OOOO
(4.1.17)(4.1.17)
OOOO OOOO
(4.1.10)(4.1.10)
(4.1.12)(4.1.12)
(4.1.13)(4.1.13)
(4.1.16)(4.1.16)
Poderíamos ter escrito desde o início,
evalf(solve(eq2,x));
0.246424920, K3.246424920
ou
fsolve(eq2,x);
K3.246424920, 0.2464249197
printlevel:=1;
printlevel := 1
Estas duas formas não sempre equivalentes, no entanto. Consideremos, por exemplo,
eq3:=x^3-x^2+1;
eq3 := x3Kx
2C1
evalf(solve(eq3));
K0.7548776667, 0.8774388331K0.7448617670 I, 0.8774388331C0.7448617670 I
fsolve(eq3);
K0.7548776662
Para que o comando fsolve possa encontrar também raízes complexas o argumento complex deve ser dado:
fsolve(eq3=0,x,complex);
K0.7548776662, 0.8774388331K0.7448617666 I, 0.8774388331C0.7448617666 I
Vejamos outro exemplo com uma equação não polinomial:
eq4:=sin(x)+x^(1/2)-3/2;
eq4 := sin x C x K32
evalf(solve(eq4,x));
0.7141134004
fsolve(eq4);
3.530173727
Para esclarecer este dilema façamos um gráfico:
plot(eq4,x=0..14);
(4.1.18)(4.1.18)
(4.1.20)(4.1.20)OOOO OOOO
(4.1.19)(4.1.19)OOOO OOOO
OOOO OOOO
x
2 4 6 8 10 12 14
K1
0
1
2
3
Portanto, ambos comandos dão resultados corretos mas incompletos. O conhecimento do gráfico nos dá uma indicação da localização das raízes e fsolve pode ser utilizado para determinar os seus valores exatos:
r1:=fsolve(eq4,x,0..2);
r1 := 0.7141134004
r2:=fsolve(eq4,x,2..4);
r2 := 3.530173727
r3:=fsolve(eq4,x,4..6);
r3 := 5.338242169
4.2 Exercícios 3Resolva as equações abaixo e ilustre graficamente
1 sin x Csin 2 x KxC12
= 0,
2 x3Kex = 0,
4 3 x5K3 x4
K7 x3C4 x2
KxC3=0.
5. Simplificando ExpressõesO problema de simplificação de expressões é um problema clássico de computação algébrica, e também é um dos mais difíceis. Embora heuristicamente seja fácil ter uma noção sobre o que é a forma mais simples de uma expressão, quando se trata de traduzir este procedimento em termos de algoritmos, formidáveis dificuldades de programação aparecem. Em Maple há certos comandos destinados a simplificação de expressões. Como veremos nas Seções seguintes, cabe ao usuário decidir qual comando de simplificação utilizar em cada momento.
Comando factor
(5.1.11)(5.1.11)
(5.1.4)(5.1.4)
OOOO OOOO
(5.1.1)(5.1.1)
OOOO OOOO
(5.1.6)(5.1.6)
OOOO OOOO
(5.1.2)(5.1.2)
OOOO OOOO
(5.1.5)(5.1.5)
(5.1.7)(5.1.7)
(5.1.9)(5.1.9)
OOOO OOOO
OOOO OOOO
(5.1.10)(5.1.10)
OOOO OOOO
(5.1.3)(5.1.3)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.1.8)(5.1.8)
Vamos supor que temos a seguinte expressão algébrica:
restart:
q:=(x^2-x-2);
q := x2KxK2
O comando factor, como o nome sugere, fatoriza esta expressão:
factor(q);
xC1 xK2
Do mesmo modo, se
p:=(x^2-1);
p := x2K1
temos
factor(p);
xK1 xC1
Portanto, numa expressão tal como
f:=p/q;
f :=x
2K1
x2KxK2
O comando factor produz uma simplificação:
factor(f);
xK1xK2
Consideremos agora a expressão
ex1:=(x^2-2*x+1)^2+(y^2+2*y+1)^2;
ex1 := x2K2 xC1
2C y
2C2 yC1
2
Aplicando o comando factor obtemos
factor(ex1);
x4K4 x3
C6 x2K4 xC2Cy
4C4 y3
C6 y2C4 y
o que não simplificou o problema. Notemos agora o seguinte:
op(1,ex1);
x2K2 xC1
2
op(2,ex1);
y2C2 yC1
2
Ou seja, o comando op extrai os operandos da expressão. Portanto, podemos fatorar ex1 eficientemente fazendo
factor(op(1,ex1))+factor(op(2,ex1));
xK1 4C yC1 4
(5.2.1)(5.2.1)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.2.4)(5.2.4)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.1.13)(5.1.13)
(5.2.7)(5.2.7)
(5.2.2)(5.2.2)
OOOO OOOO
OOOO OOOO
(5.1.12)(5.1.12)
OOOO OOOO
OOOO OOOO
(5.2.6)(5.2.6)
(5.2.3)(5.2.3)
(5.2.5)(5.2.5)
(5.1.14)(5.1.14)
OOOO OOOO
Se tivéssemos uma expressão muito longa este método seria trabalhoso. Um modo mais eficiente para resolver este problema é utilizando o comando map :
map(factor,ex1);
xK1 4C yC1 4
O comando factor aplicado à expressão definida por
g:=(x^30-1)/(x-1);
g :=x
30K1
xK1
produz consequências desastrosas:
factor(g);
xC1 x2CxC1 x
2KxC1 x
4Cx
3Cx
2CxC1 x
4Kx
3Cx
2KxC1 x
8
Kx7Cx
5Kx
4Cx
3KxC1 x
8Cx
7Kx
5Kx
4Kx
3CxC1
Resolveremos este problema através do comando normal.
Comando normalO comando normal é similar ao comando factor. A diferença é que normal, ao encontrar uma razão entre duas expressões, limita-se a procurar fatores comuns entre numerador e denominador. Por exemplo,
q;
x2KxK2
normal(q);
x2KxK2
p;
x2K1
normal(p);
x2K1
Entretanto,p/q;
x2K1
x2KxK2
normal(p/q);
xK1xK2
produzindo neste caso o mesmo resultado que factor. No entanto, a diferença reaparece se no casomais geral
g;
x30K1
xK1
normal(g);
(5.3.5)(5.3.5)
OOOO OOOO
(5.3.1)(5.3.1)OOOO OOOO
OOOO OOOO
(5.2.10)(5.2.10)
OOOO OOOO
(5.3.6)(5.3.6)
(5.2.11)(5.2.11)
OOOO OOOO
(5.3.4)(5.3.4)
(5.3.7)(5.3.7)
OOOO OOOO
OOOO OOOO
(5.2.9)(5.2.9)
OOOO OOOO
(5.3.2)(5.3.2)
(5.2.8)(5.2.8)
OOOO OOOO
OOOO OOOO
(5.3.3)(5.3.3)
1Cx29Cx
28Cx
27Cx
26Cx
25Cx
24Cx
23Cx
22Cx
21Cx
20Cx
19Cx
18Cx
17Cx
16
Cx15Cx
14Cx
13Cx
12Cx
11Cx
10Cx
9Cx
8Cx
7Cx
2CxCx
4Cx
3Cx
6Cx
5
Ou seja, normal procurou no numerador o fator comum ao denominador e expandiu o fator restante. Em quais casos há vantagem de se usar normal em lugar de factor ? Consideremos o seguinte exemplo:
h:=1/(1-x^20)+1/(1-x^10);
h :=1
1Kx20 C
1
1Kx10
factor(h);
K x10C2 xK1 xC1 x
4Cx
3Cx
2CxC1 x
4Kx
3Cx
2KxC1 x
2
C1 x8Kx
6Cx
4Kx
2C1
normal(h);
Kx
10C2
K1Cx10 x
10C1
Como podemos ver, factor obteve o mínimo múltiplo comum entre os denominadores e fatorizou cada expressão em termos de fatores irredutíveis. O comando normal fez o mesmo, mas não tentou fatorizar os termos no denominador, gerando uma expressão mais simples.
Comando expandQuando uma expressão é gerada em Maple, por meio de uma entrada do usuário, ou por meio de um cálculo, esta expressão é mantida na sua forma original, até que o usurio determine o contrário. Ou seja, expressões algébricas são mantidas na forma em que foram fornecidas. Por exemplo, uma expressão fatorada é mantida nesta forma até que sua expansão seja ordenada:
f1:=(x-a)^6;
f1 := xKa6
expand(f1);
x6K6 x5 aC15 x4 a2
K20 x3 a3C15 x2 a4
K6 x a5Ca
6
factor(%);
aKx6
O comando factor pode ser usado também para expandir funções trigonométricas, logarítmicas exponenciais, especiais, etc.:
f2:=cos(omega*t+delta);
f2 := cos ω tCδ
expand(f2);
cos ω t cos δ Ksin ω t sin δ
f3:=ln(x^2*y);
f3 := ln x2 y
expand(f3);
ln x2 y
OOOO OOOO
(5.3.11)(5.3.11)
OOOO OOOO
(5.3.10)(5.3.10)
(5.3.15)(5.3.15)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.3.18)(5.3.18)
OOOO OOOO
(5.3.13)(5.3.13)
(5.3.14)(5.3.14)
OOOO OOOO
(5.3.8)(5.3.8)
(5.3.9)(5.3.9)
(5.3.16)(5.3.16)
(5.3.17)(5.3.17)
(5.3.12)(5.3.12)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
Psi(4*x);
Ψ 4 x
expand(%);
2 ln 2 C14
Ψ x C14
Ψ xC14
C14
Ψ xC12
C14
Ψ xC34
onde Ψ x é a função digamma. Em determinados casos desejamos expandir somente parte de uma expressão. Vamos supor que
f4:=(sin(alpha+beta)+x)^2;
f4 := sin αCβ Cx2
expand(f4);
sin α2 cos β
2C2 sin α cos β cos α sin β C2 sin α cos β x
Ccos α2 sin β
2C2 cos α sin β xCx
2
Caso não queiramos expandir a função sin, procedemos da seguinte forma:
expand(f4,sin);
sin αCβ2C2 sin αCβ xCx
2
Vejamos outro exemplo:
f5:=sin(omega*(t-t0)+delta);
f5 := sin ω tK t0 Cδ
expand(f5);
sin ω t cos ω t0 cos δ Csin ω t sin ω t0 sin δ Kcos ω t sin ω t0 cos δ
Ccos ω t cos ω t0 sin δ
expand(f5,t-t0);
sin ω tKt0 cos δ Ccos ω tK t0 sin δ
Consideremos agora a atuação de expand sobre funções racionais:
f6:=(x-y)^2/(x+y)^3;
f6 :=xKy
2
xCy3
expand(f6);
x2
xCy3 K
2 x y
xCy3 C
y2
xCy3
Ou seja, o denominador não foi expandido. Para fazer isso devemos proceder da seguinte forma:
normal(f6,expanded);
x2K2 x yCy
2
x3C3 x2 yC3 x y2
Cy3
(5.4.7)(5.4.7)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.4.8)(5.4.8)
OOOO OOOO
(5.4.6)(5.4.6)
(5.4.12)(5.4.12)
OOOO OOOO
OOOO OOOO
(5.4.5)(5.4.5)
OOOO OOOO
(5.4.10)(5.4.10)
OOOO OOOO
(5.4.4)(5.4.4)
(5.4.2)(5.4.2)
OOOO OOOO
(5.4.13)(5.4.13)
(5.4.11)(5.4.11)
(5.4.1)(5.4.1)
(5.4.9)(5.4.9)
(5.4.3)(5.4.3)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
Comando combineA operação realizada por expand é baseada num algoritmo simples. Por outro lado, a operação inversa de fatorizaçãoé um processo complexo baseado em um longo e complexo procedimento envolvendo técnicas sofisticadas de álgebra. Portanto, embora seja fácil obter a expansão de qualquer função, a fatorização requer maior cuidado e interação do usuário com o sistema. Por exemplo,
g1:=sin(alpha+beta)+cos(omega+delta);
g1 := sin αCβ Ccos ωCδ
expand(g1);
sin α cos β Ccos α sin β Ccos ω cos δ Ksin ω sin δ
factor(%);
sin α cos β Ccos α sin β Ccos ω cos δ Ksin ω sin δ
Ou seja, factor não foi capaz fazer com que pudéssemos recuperar a expressão original. Para isso é necessário especificar o tipo de fatorização que desejamos. O comando combine é útil neste caso:
combine(%,trig);
sin αCβ Ccos ωCδ
Vejamos outros exemplos:
g2:=(x+a)^n*(x+a)^s;
g2 := xCan xCa
s
combine(g2,power);
xCanC s
g3:=exp(2*x)*exp(b);
g3 := e2 x eb
combine(g3,exp);
e2 xCb
g4:=exp(sin(alpha)*cos(beta))*exp(cos(alpha)*sin(beta));
g4 := esin α cos β ecos α sin β
combine(g4,exp);
esin α cos β Ccos α sin β
combine(%,trig);
esin αCβ
Podemos executar a simplificação acima, de uma só vez, da seguinte forma:combine(g4,[trig,exp]);
esin αCβ
Simplificações envolvendo ln necessitam o parâmetro adicional "simbolic". Por exemplo,g5:=3*ln(x)+2*ln(y);
g5 := 3 ln x C2 ln y
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.5.6)(5.5.6)
(5.5.9)(5.5.9)
OOOO OOOO
(5.6.1)(5.6.1)
OOOO OOOO
OOOO OOOO
(5.5.7)(5.5.7)
(5.6.2)(5.6.2)
(5.4.14)(5.4.14)
OOOO OOOO
(5.5.3)(5.5.3)
OOOO OOOO
(5.5.8)(5.5.8)
(5.5.4)(5.5.4)
OOOO OOOO
(5.5.2)(5.5.2)
(5.5.1)(5.5.1)
OOOO OOOO
(5.5.5)(5.5.5)
OOOO OOOO
OOOO OOOO
combine(g5,ln,symbolic);
ln x3 y2
Comando convertEmbora o comando convert seja de utilidade mais geral, ele pode ser utilizado em simplificações, como veremos nos próximos exemplos. Sua sintaxe é convert(expressão, forma)onde onde argumento "forma" pode ser um dos seguintes: trig, tan, ln, exp expln, expsincos, rational, parfrac, radians, degree, GAMMA, factorial, etc. Por exemplo,
m1:=(exp(I*theta)+exp(-I*theta))/2;
m1 :=12
eI θC
12
eKI θ
convert(m1,trig);
cos θ
convert(%,exp);
12
eI θC
12
eKI θ
m2:=arcsinh(x);
m2 := arcsinh x
convert(m2,ln);
ln xC x2C1
convert(n!,GAMMA);
Γ nC1
convert(%,factorial);
n!
expand(%);
n!
convert(binomial(n,k),factorial);
n!k! nKk !
Comando simplifyO comando simplify é um comando geral de simplificação, que busca funções dentro de uma expressão que podem ser simplificadas utilizando propriadades pré-definidas no sistema. Entretanto, podemos usar este comando de forma selecionada, como no exemplo:
n1:=(sin(x)^2+2*cos(x)^2)*exp(y)/exp(y+x);
n1 :=sin x
2C2 cos x
2 ey
exCy
simplify(n1);
eKx cos x2C1
simplify(n1,trig);
OOOO OOOO
(5.6.9)(5.6.9)
OOOO OOOO
(5.6.12)(5.6.12)
(5.6.6)(5.6.6)
(5.6.3)(5.6.3)
OOOO OOOO
(5.6.5)(5.6.5)
(5.6.4)(5.6.4)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(5.6.8)(5.6.8)
OOOO OOOO
(5.6.11)(5.6.11)
OOOO OOOO
(5.6.7)(5.6.7)
(5.6.10)(5.6.10)
OOOO OOOO
ey cos x2C1
exCy
Ou seja, somente simplifícações trigonométricas foram efetuadas no último comando. Os argumentos em simplify podem ser trig, hypergeom, radical, power, exp, ln, sqrt, Bessel, BesselJ,BesselK, BesselY, Ei, GAMMA, RootOf, LambertW, dilog, polylog, pg, pochhammer e atsign. O comando simplify pode muito útil na simplificação de expressões envolvendo vínculos. Por exemplo, vamos supor que a expressão
n2:=x^2+2*x*y+y^3;
n2 := x2C2 x yCy
3
está sujeita aos vínculosvinculos:={x+y+z=3, x^2+y=1, x-y+z^2=0};
vinculos := x2Cy = 1, xKyCz
2 = 0, xCyCz = 3
simplify(n2,vinculos);
K35 x2C23 xC17 x3
K14
Outra utilidade de simplify é na substituição de produtos em expressões por outras expressões ou múmeros. Por exemplo, suponhamos que
n3:=x^2*y^5*z;
n3 := x2 y5 z
Se queremos examinar o resultado da substituição z = 1 na expressão acima utilizamos o comando subs
subs(z=1,n3);
x2 y5
Entretanto, se quisermos substituir x2 y4 = z sin z na expressão n3, o comando subs é inefetivo:
subs(x^2*y^4=sin(z)*z,n3);
x2 y5 z
Podemos utilizar simplify onde x2 y4 = z sin z é considerado como um vínculo:
simplify(n3,{x^2*y^4=sin(z)*z});
z2 y sin z
Podemos fazer com que o comando simplify assuma as hipóteses feitas utilizando o comando assume. Por exemplo,
p1:=(x^2*y^4)^(1/2);
p1 := x2 y4
simplify(p1,assume=nonneg);
x2 y4
Acima, a opção assume=nonneg fez com que todas as variáveis sejam declaradas temporariamente não-negativas.
6. Cálculo Diferencial e Integral
(6.1.7)(6.1.7)OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.1.5)(6.1.5)
OOOO OOOO
(6.1.1)(6.1.1)
(6.1.4)(6.1.4)
(6.1.2)(6.1.2)
(6.1.8)(6.1.8)
(6.1.6)(6.1.6)
(6.1.3)(6.1.3)
OOOO OOOO
OOOO OOOO
6.1 Limites, Somatórios e Produtórios
O comando que calcula o limite de uma função quando ela tende a algum valor é feito pelo comando limit. Ele é capaz de realizar o cálculo de limites mesmo quando a direta inserção do
valor crítico na função é um resultado indefinido (por exemplo, N
N ). Quando o comando é
executado com a primeira letra maiúscula (Limit), ele assume a forma inerte e nenhum cálculo é feito. Esta forma é muito usada para visualizar a expressão antes que o cálculo seja realmente feito com a auxílio do value.
Limit((sqrt(1+x)-1)/x,x=0);
limx/0
1Cx K1x
value(%);
12
Limit(tan(Pi/4+x)^cot(2*x),x=0)=limit(tan(Pi/4+x)^cot(2*x),
x=0);
limx/0
tan14
πCxcot 2 x
=e
Limit(x!/x^x,x=infinity)=limit(x!/x^x,x=infinity);
limx/N
x!
xx
= 0
O resultado é avaliado simbolicamente sempre que possível, mesmo quando a expressão possui variáveis desconhecidas.
f:=(x^a-x^(-a))/(x-1/x);
f :=x
aKx
Ka
xK1x
limit(f,x=1);
a
O limite também pode ser calculado com funções multivariáveis. Para isso o coordenada em que se quer calcular o limite deve ser especificada da forma {x=x0,y=y0,...}.
limit( (x+y)/x + (x+y)/y , {x=0,y=1} );
undefined
Quando queremos calcular o limite da função 1
x2 quando x/0 o Maple não encontra dificuldade
de dizer que é N, porém para a função 1x
veja o resultado:
Limit(1/x^2,x=0)=limit(1/x^2,x=0);
(6.1.13)(6.1.13)
(6.1.12)(6.1.12)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.1.11)(6.1.11)
(6.1.8)(6.1.8)
(6.1.16)(6.1.16)
(6.1.14)(6.1.14)
(6.1.10)(6.1.10)
(6.1.9)(6.1.9)
OOOO OOOO
(6.1.15)(6.1.15)
OOOO OOOO
limx/0
1
x2
= N
Limit(1/x,x=0)=limit(1/x,x=0);
limx/0
1x
= undefined
O motivo deste resultado é que o Maple reconhece que o limite desta função para este valor depende da direção de aproximação.
Limit(1/x,x=0,left)=limit(1/x,x=0,left);
limx/0K
1x
= KN
Limit(1/x,x=0,right)=limit(1/x,x=0,right);
limx/0C
1x
= N
Para representar somatórios usa-se o comando sum: o primeiro parâmetro representa a função e o segundo contém o intervalo da variável do somatório. Assim como no limite este comando também possui a sua forma inerte.
Sum(1/x^n,n=1..5);
>n = 1
51
xn
value(%);
1x
C1
x2C
1
x3C
1
x4C
1
x5
Se a variável já possui um valor previamente associado então esta variável deve estar entre aspas simples (') e o todo primeiro parâmetro também.
z:=10;
z := 10
Sum(1/z^3,z=1..5)=sum(1/z^3,z=1..5);
Error, (in sum) summation variable previously assigned, second argument
evaluates to 10 = 1 .. 5
Sum('1/z^3','z'=1..5)=sum('1/z^3','z'=1..5);
>z = 1
51
z3 =
256103216000
Quando se desejar fazer um somatório infinito basta especificar no intervalo.
Sum(1/2^n,n=1..infinity)=sum(1/2^n,n=1..infinity);
>n = 1
N
1
2n= 1
OOOO OOOO
OOOO OOOO
(6.1.20)(6.1.20)
(6.2.1)(6.2.1)
(6.1.21)(6.1.21)
OOOO OOOO
(6.1.23)(6.1.23)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.1.19)(6.1.19)
(6.1.18)(6.1.18)OOOO OOOO
(6.1.17)(6.1.17)
(6.2.2)(6.2.2)
(6.1.22)(6.1.22)
OOOO OOOO
OOOO OOOO
OOOO OOOO
Se você quiser construi somatórios de algumas variáveis pode-se colocar um somatório dentro de outro. O exemplo seguinte mostra como o sum é usado para construir uma fórmula que usa elementos de uma matriz como coeficiente.
Sum(Sum(k[i,j]*y^(i+j),i=1..3),j=1..3);
>j = 1
3
>i = 1
3
ki, j yiC j
value(%);
k1, 1 y2Ck2, 1 y
3Ck3, 1 y
4Ck1, 2 y
3Ck2, 2 y
4Ck3, 2 y
5Ck1, 3 y
4Ck2, 3 y
5Ck3, 3 y
6
A mesma sintaxe do sum pode ser usada para o comando product que calcula o produtório especificado no primeiro parâmetro.
Product(x,x=1..5);
?x= 1
5
x
value(%);
120
Product(1+1/x^2,x=1..10)=product(1+1/x^2,x=1..10);
?x= 1
10
1C1
x2 =
2200962205658409472
product( 1+1/x^2 , x=1..infinity );
sinh π
π
evalf(%);
3.676077910
6.2 Diferenciação
Esta seção trata dos comandos relacionados ao cálculo de derivadas. O comando que calcula a derivada é o diff. Funções definidas por equações também podem ser derivads pelo comandoimplicitdiff. O operador relacionado com a derivada é a letra d maiúscula (D). Para o comando de derivada deve-se passar a função e a variável de derivação como argumentos tanto para a forma normal como para a forma inerte.
restart;
Diff(x^3+x^2+x,x);
ddx
x3Cx
2Cx
value(%);
3 x2C2 xC1
(6.2.6)(6.2.6)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.2.3)(6.2.3)
OOOO OOOO
(6.2.11)(6.2.11)
(6.2.9)(6.2.9)
OOOO OOOO
OOOO OOOO
(6.2.4)(6.2.4)
(6.2.7)(6.2.7)
OOOO OOOO
OOOO OOOO
(6.2.8)(6.2.8)
(6.2.10)(6.2.10)
(6.2.5)(6.2.5)
Diff(x^3+x^2+x,x,x)=diff(x^3+x^2+x,x,x);
d2
dx2
x3Cx
2Cx = 6 xC2
Para derivadas de ordem superiores a dois convém utilizar o operador dólar ($) responsável pelas repetições.
Diff(x^3+x^2+x,x$3)=diff(x^3+x^2+x,x$3);
d3
dx3 x
3Cx
2Cx = 6
Obviamente o Maple conhece todas as regras de derivação como regra da cadeia, regra do produtoe da divisão de derivadas.
Diff(sin(cos(x)),x)=diff(sin(cos(x)),x);
ddx
sin cos x = Kcos cos x sin x
Para funções não definidas, o operador D é usado no resultado.
Diff(f(g(x)),x)=diff(f(g(x)),x);
ddx
f g x = D f g x ddx
g x
É possível derivar em função de qualquer variável da epressão.
Diff((x^2+y^3)^4,x,y)=diff((x^2+y^3)^4,x,y);
v2
vy vx x
2Cy
3 4= 72 x
2Cy
3 2 x y2
Para derivadas de funções definidas implitamente poderia ser feito o seguinte procedimento:
diff(x^2+y(x)^2=1,x);
2 xC2 y x ddx
y x = 0
solve(%,diff(y(x),x));
Kx
y x
Porém o comando implicitdiff já resolve diretamente.
implicitdiff(x^2+y^2=1,y,x);
Kx
y
Enquanto o diff é usado para funções, o D é usado para calcular a derivada de operadores.
D(sin);
cos
OOOO OOOO
(6.2.13)(6.2.13)
OOOO OOOO
(6.2.12)(6.2.12)
OOOO OOOO
OOOO OOOO
(6.2.16)(6.2.16)
(6.2.18)(6.2.18)
OOOO OOOO
(6.2.14)(6.2.14)
(6.2.15)(6.2.15)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.2.17)(6.2.17)
OOOO OOOO
(6.2.19)(6.2.19)
OOOO OOOO
D(sin@cos);
Kcos 2 sin
Quando a função tem vários parâmetros devemos colocar entre colchetes o número correspondente à várivel sobre a qual se deseja derivar.
f:=(x,y)->sin(x)+cos(y)+sin(x*y);
f := x, y /sin x Ccos y Csin y x
D[1](f);
x, y /cos x Ccos y x y
D[2](f);
x, y /Ksin y Ccos y x x
Podemos, ainda, passar novos valores a serem substituídos na expressão do resultado.
D[2](f)(alpha,beta);
Ksin β Ccos β α α
Algumas vezes o formato D é mais desejado, outras o diff se torna mais conveniente. Para mudar de um para outro pode ser usado o comando convert. E o lprint auxilia na visualização da estruturainterna da expressão. Sendo que no Release 5 este comando se torna obsoleto, pois a estrutura interna de uma expressão no format output pode ser obtido no format input posicionando o cursor no próprio resultado e pressionando [Enter].
restart;
diff(f(x,y,z),x,y,z$2);
v4
vz2 vy vx
f x, y, z
convert(%,D);
D1, 2, 3, 3 f x, y, z
lprint(%);
(D[1, 2, 3, 3](f))(x, y, z)
convert(%,diff);
v4
vz2 vy vx
f x, y, z
lprint(%);
diff(diff(diff(diff(f(x, y, z), x), y), z), z)
6.3 Integração
Do ponto de vista matemático, a integração simbólica é mais complexa do que a derivação pois não há um método único que resolva todas as integrais. Existem regras de integração capazes de reduzir expressões em formas de integrais conhecidas ou tabeladas. O Maple possui um extenso acervo de solução algébrica de integrais, mas certamente não resolve todas aquelas existentes na
(6.3.2)(6.3.2)
(6.3.1)(6.3.1)
OOOO OOOO
OOOO OOOO
(6.3.4)(6.3.4)
(6.3.6)(6.3.6)
OOOO OOOO
(6.3.3)(6.3.3)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.3.5)(6.3.5)
matemática. Quando encontrarmos uma dessas é possível encontrar a sua solução numérica.Para fazer uma integração simbólica o comando utilizado é o int sendo que, assim como nos comandos vistos neste capítulo, quando a primeira letra é maiúscula, o comando assume a sua forma inerte.
Int(x^2+x^3,x);
x2Cx
3 dx
value(%);
13
x3C
14
x4
Int(x^2+x^3,x=a..b)=int(x^2+x^3,x=a..b);
a
b
x2Cx
3 dx =13
b3K
13
a3C
14
b4K
14
a4
Para fazer a integral numérica, od limites devem estar definidos
Int(x^2+x^3,x=2..3)=int(x^2+x^3,x=2..3);
2
3
x2Cx
3 dx =27112
O Maple não encontra dificuldade quando o integrando possui uma descontinuidade no intervalo de integração.
f:=cos(x)/sqrt(1-sin(x));
f :=cos x
1Ksin x
plot(f,x=0..2*Pi,discont=true,color=black);
x1 2 3 4 5 6
K1
K0.5
0
0.5
1
Int(f,x=0..2*Pi)=int(f,x=0..2*Pi);
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.3.12)(6.3.12)
(6.3.8)(6.3.8)
(6.3.6)(6.3.6)
OOOO OOOO
(6.3.9)(6.3.9)
OOOO OOOO
(6.3.11)(6.3.11)
(6.3.7)(6.3.7)
(6.3.10)(6.3.10)
0
2 πcos x
1Ksin xdx = 0
O Maple reconhece a função degrau (Heaviside) e a função delta de Dirac (Dirac) durante o processo de integração
Int(g(x)*Heaviside(x-2),x=0..5)=int(g(x)*Heaviside(x-2),x=
0..5);
0
5
g x Heaviside xK2 dx =2
5
g x dx
Diff(Heaviside(x),x)=diff(Heaviside(x),x);
ddx
Heaviside x = Dirac x
Int(sin(x)*Dirac(x-Pi/4),x=-infinity..infinity)=int(sin(x)*
Dirac(x-Pi/4),x=-infinity..infinity);
KN
N
sin x Dirac xK14
π dx =12
2
Para representar integrais múltiplas é necessário colocar um comando de integral dentro de outro.
Int(Int(x^2,x=0..2),x=0..3)=int(int(x^2,x=0..2),x=0..3);
0
3
0
2
x2 dx dx = 8
Freqüentemente encontramos integrais que não possuem solução algébrica. Quando o Maple não consegue encontrar uma solução algébrica é retornado a integral na forma inerte. Para encontrar a solução numérca utiliza-se o copmando evalf.
int(sin(1/x^3),x=1..2);
1
2
sin1
x3
dx
evalf(%);
0.3548334332
6.4 Expansão em Séries
O comando que faz a expansão em séries é series. Dependendo da expressão do primeiro parâmetro, este comando pode gerar expansão em Taylor, Laurent ou séries de potência genérica. O segundo parâmetro é o ponto de expansão e o terceiro, a máxima potência da série. Este último é opcional e ser for omitido, o Maple usa o valor da variável global Orderque é inicializado com 6.
(6.4.3)(6.4.3)
OOOO OOOO
(6.4.4)(6.4.4)
OOOO OOOO
OOOO OOOO
(6.4.5)(6.4.5)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.4.2)(6.4.2)
(6.4.1)(6.4.1)
series(log(x),x=1);
xK1K12
xK1 2C
13
xK1 3K
14
xK1 4C
15
xK1 5CO xK1 6
series(sin(x),x=0,10);
xK16
x3C
1120
x5K
15040
x7C
1362880
x9CO x
10
O tipo da saída obtido é series que caracterizado por um truncamento (O xK1 6). Por este motivo, os resultados obtidos pelo comando serires não podem ser processados em seguida. Para converter a expansão para um polinômio usa-se o comando convert.
whattype(%);
series
pol:=convert(%%,polynom);
pol := xK16
x3C
1120
x5K
15040
x7C
1362880
x9
O gráfico seguinte mostra a função sin x e a sua expansão em séries até potência 9.
plot([pol,sin(x)],x=0..2*Pi,-1..1,color=black);
x
1 2 3 4 5 6
K1
K0.5
0
0.5
1
O comando mtaylor calcula a expansão em série de Taylor para funções multi-variáveis, pois oseries só efetua o cálculo para apenas uma. As suas sintaxes são iguais, sendo que para a expansãocom muitas variáveis o segundo parâmetro deve ser uma lista de pontos sobre os quais se deseja realizar a expansão. Antes de usar o comando é necessário carregá-lo com readlib.
### WARNING: persistent store makes one-argument readlib
obsolete
readlib(mtaylor);
proc ... end proc
(6.4.6)(6.4.6)
(6.4.7)(6.4.7)
(6.4.11)(6.4.11)
OOOO OOOO
(6.4.10)(6.4.10)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.4.12)(6.4.12)
OOOO OOOO
OOOO OOOO
(6.4.13)(6.4.13)
(6.4.9)(6.4.9)
OOOO OOOO
(6.4.8)(6.4.8)
OOOO OOOO
mtaylor(log(x+y),[x=1,y=Pi],3);
ln 1Cπ CxK1
1CπC
yKπ
1CπK
12
xK1 2
1Cπ2K
yKπ xK1
1Cπ2
K12
yKπ
2
1Cπ2
O pacote powseries contém comandos auxiliares para o processamento de séries. Pode ser usado para manipular series que possuem uma regra geral de expansão realizando adições, subtrações, multiplicações, divisões, derivações e inversões destas séries. Devemos carregar o pacote com o comando with.
with(powseries);
compose, evalpow, inverse, multconst, multiply, negative, powadd, powcos, powcreate,
powdiff, powexp, powint, powlog, powpoly, powsin, powsolve, powsqrt, quotient,
reversion, subtract, tpsform
Suponha que queremos calcular a série cuja fórmula geral é:
p(n)=(1+(-1)^(n+1))/2*(-1)^((n-1)/2)/n!;
p n =12
1C K1 nC1 K1
12
nK12
n!
O comando que cria a série é o powcreate que não mostra nenhuma saída mas faz a atribuição a variável p que não pode ter nenhum conteúdo neste momento. O comando tpsform é usado para visualizar a série gerada.
powcreate(%);tpsform(p,x,9);
xK16
x3C
1120
x5K
15040
x7CO x
9
Veja como executar uma operação matemática ou uma inversão com a série criada e compare o resultado obtido com o comando series.
q:=evalpow(p*p):tpsform(q,x,9);
x2K
13
x4C
245
x6K
1315
x8CO x
9
series(sin(x)^2,x,9);
x2K
13
x4C
245
x6K
1315
x8CO x
10
r:=reversion(p):tpsform(r,x,9);
xC16
x3C
340
x5C
5112
x7CO x
9
series(arcsin(x),x,9);
xC16
x3C
340
x5C
5112
x7CO x
9
(6.5.6)(6.5.6)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.5.5)(6.5.5)
(6.5.2)(6.5.2)
(6.5.4)(6.5.4)
(6.5.1)(6.5.1)
OOOO OOOO
OOOO OOOO
(6.5.3)(6.5.3)
OOOO OOOO
6.5 O Pacote student: Ferramentas de Cálculo
O pacote student possue ferramentas úteis para o aluno iniciante de cálculo pois demonstram conceitos elementares e fundamentais para o seu apredizado. Ele deve ser carregado com o comando with, que seguido de ponto-e-vírgula imprimie todos os seus comandos.
with(student);
D, Diff, Doubleint, Int, Limit, Lineint, Product, Sum, Tripleint, changevar,
completesquare, distance, equate, integrand, intercept, intparts, leftbox, leftsum,
makeproc, middlebox, middlesum, midpoint, powsubs, rightbox, rightsum,
showtangent, simpson, slope, summand, trapezoid
O exemplo abaixo soluciona uma integral pelo método de substituição de variável que o Maple não consegue resolver sem esta manipulação. Porém outras integrais podem ser resolvidas com este comando para mostrar o procedimento do método.
A:=Int(tan(1/3*arctan(x)),x=0..1);
A :=0
1
tan13
arctan x dx
value(%);
0
1
tan13
arctan x dx
changevar(1/3*arctan(x)=theta,A,theta);
0
112
π
tan θ 3C3 tan 3 θ2
dθ
value(%);
118
1
sin5
12 π
2
4 sin5
12 π
2
K3
K60 sin5
12 π
4
C69 sin5
12 π
2
C32 ln 4 sin5
12 π
2
K3 sin5
12 π
4
C48 ln sin5
12 π sin
512
π2
K24 ln 4 sin5
12 π
2
K3 sin5
12 π
2
K64 ln sin5
12 π sin
512
π4
K9
Foi visto anteriormente que uma integral dupla pode ser definida pela inserção em cascata do comando int. No pacote student existem os comandos Doubleint e Tripleint para representar integrais duplas e triplas respectivamente.
inter:=-infinity..infinity;
(6.5.7)(6.5.7)
(6.5.6)(6.5.6)
(6.5.8)(6.5.8)
(6.5.9)(6.5.9)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.5.11)(6.5.11)
OOOO OOOO
OOOO OOOO
(6.5.10)(6.5.10)
OOOO OOOO
inter := KN ..N
Doubleint(exp(-x^2-y^2),x=inter,y=inter);
KN
N
KN
N
eKx2Ky2 dx dy
value(%);
π
Para mostrar como uma aproximação numérica de integrais opera podemos utilizar os comandoleftbox, middlebox ou rightbox. Com eles pode-se visualizar os retângulos representando as áreas que serão somadas na aproximação.
leftbox(sqrt(x),x=1..3,8);
x1 1.5 2 2.5 3
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
O valor da aproximação é calculado com leftsum, middlesum ou rightsum que pode ser expresso por um somátório e por ponto flutuante. Compare o resultado com a integração numérica do Maple.
leftsum(sqrt(x),x=1..3,8)=evalf(leftsum(sqrt(x),x=1..3,8));
14
>i = 0
7
1C14
i = 2.704829825
1/4*Sum(sqrt(1+1/4*i),i = 0 .. 7) =
2.704829825827190957978159653324903678488;
14
>i = 0
712
4Ci = 2.704829825827190957978159653324903678488
Int(sqrt(x),x=1..3)=int(sqrt(x),x=1..3.0);
1
3
x dx = 2.797434948
(6.6.1)(6.6.1)
(6.6.7)(6.6.7)
(6.6.2)(6.6.2)
(6.6.9)(6.6.9)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.6.5)(6.6.5)
(6.6.6)(6.6.6)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.6.3)(6.6.3)
(6.6.8)(6.6.8)
OOOO OOOO
(6.6.4)(6.6.4)
OOOO OOOO
6.6 Cálculo Vetorial
As operações gradiente, divergente, rotacional e laplaciano estão programadas no Maple como as funções grad, diverge, curl e laplacian. Estes comandos devem ter no mínimo dois argumentos, onde o primeiro é uma função, ou melhor, uma expressão que depende de certas variáveis, e o segundo uma lista de variáveis que representam as coordenadas. O sistema de coordenadasdefault é o sistema cartesiano. Vamos dar uma apelido para a expressão f(x,y,z), e calcular o gradiente, divergente o laplaciano desta função:
restart;with(linalg):
alias(f=f(x,y,z));
f
v:=[x,y,z]; # lista das coordenadas
v := x, y, z
grad(f,v);
v
vx f
v
vy f
v
vz f
diverge(%,v);
v2
vx2
fCv2
vy2
fCv2
vz2
f
laplacian(f,v);
v2
vx2
fCv2
vy2
fCv2
vz2
f
O rotacional deve ser aplicado a uma função vetorial. Assim, vamos dar apelidos para g(x,y,z) e h(x,y,z):
alias(g=g(x,y,z),h=h(x,y,z));
f, g, h
curl([f,g,h],v);
v
vy hK
v
vz g
v
vz fK
v
vx h
v
vx gK
v
vy f
Podemos confirmar que o divergente do rotacional é zero:
diverge(%,v);
0
e, da mesma forma, confirmar que o rotacional do gradiente é o vetor nulo:
curl(grad(f,v), v);
0 0 0
Todas estas operações podem ser feitas em sistemas de coordenadas não-cartesianos. Vamos ver um exemplo de cálculo de gradiente no sistema de coordenadas esféricas:
OOOO OOOO
(6.6.12)(6.6.12)
OOOO OOOO
OOOO OOOO
(6.7.3)(6.7.3)
OOOO OOOO
OOOO OOOO
(6.7.2)(6.7.2)
(6.7.4)(6.7.4)
(6.7.5)(6.7.5)
OOOO OOOO
(6.6.11)(6.6.11)OOOO OOOO
(6.7.1)(6.7.1)
OOOO OOOO
OOOO OOOO
(6.6.10)(6.6.10)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
f1 := r^2*sin(theta)*cos(phi);
f1 := r2 sin θ cos φ
v:= [r, theta, phi];
v := r, θ, φ
grad(f1, v, coords=spherical);
2 r sin θ cos φ r cos θ cos φ Kr sin φ
Além de coordenadas cartesianas, esféricas e cilíndricas que são as mais utilizadas, o Maple conhece mais de 40 sistemas de coordenadas em 2 e 3 dimensões. Para ter acesso a lista completa destes sistemas, pedimos ajuda da forma ?coords.
6.7 Exercícios1. Explique porque os seguintes comandos chegam a zero em vez de 2 xC2 yC2 z
F:=[x^2,y^2,z^2]:
X:=[x,y,z]:
sum('diff(F[i],X[i])',i=1..3);
2 xC2 yC2 z
for i to 3 do diff(F[i],X[i]); od;
2 x
2 y
2 z
2. Seja f x = x3Csin arctan x Ktan arcsin x .
(a) Encontre a primeira e a segunda derivadas de menores ordens que possuem um valor não nulo em x = 0 e os seus valores correspondentes.
f:= x^3+sin(arctan(x))-tan(arcsin(x));
f := x3C
x
1Cx2
Kx
1Kx2
i:=1;
i := 1
f[0]:=f;
f0 := x3C
x
1Cx2
Kx
1Kx2
g:=0:
while g=0 do
f[i]:=diff(f[i-1],x):
g:=subs(x=0,f[i]):
i:=i+1:
(6.7.7)(6.7.7)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.10)(6.7.10)
OOOO OOOO
(6.7.8)(6.7.8)
OOOO OOOO
OOOO OOOO
(6.7.9)(6.7.9)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.6)(6.7.6)
OOOO OOOO
od:
'i'=i-1;
i = 7
f[i+1]:=diff(f[i],x):
diff('f(x)',x$i)=f[i-1];
d8
dx8
f x =291060 x6
1Cx2 13/2
K198450 x4
1Cx2 11/2
C44100 x2
1Cx2 9/2
K1575
1Cx2 7/2
K135135 x8
1Cx2 15/2
K291060 x6
1Kx2 13/2
K198450 x4
1Kx2 11/2
K44100 x2
1Kx2 9/2
K1575
1Kx2 7/2
K135135 x8
1Kx2 15/2
i:=9:
g:=0:
while g=0 do
f[i]:=diff(f[i-1],x):
g:=subs(x=0,f[i]):
i:=i+1:
od:
'i'=i-1;
i = 9
(b) Deduza a regra geral para a ordem das derivadas não nulas em x = 0.(c) Plote f x nos intervalo x=-10..10 e x = K0.001 ..0.001.
3. Com o auxílio do Maple resolva as seguintes integrais:
(a) 1
x
15Kx
13
dx
(b) x ln 2 xC 1Cx2 dx
A:=int(x*ln(2*x+sqrt(1+x^2)),x);
A := x ln 2 xC 1Cx2 dx
u:=op(1,A)/x;
u := ln 2 xC 1Cx2
OOOO OOOO
OOOO OOOO
(6.7.16)(6.7.16)
(6.7.15)(6.7.15)
OOOO OOOO
(6.7.14)(6.7.14)
OOOO OOOO
OOOO OOOO
(6.7.13)(6.7.13)
(6.7.11)(6.7.11)
OOOO OOOO
(6.7.12)(6.7.12)
diff(u,x);
2Cx
1Cx2
2 xC 1Cx2
v:=x^2/2;
v :=12
x2
A2:=u*v-int(v*diff(u,x),x);
A2 :=12
ln 2 xC 1Cx2 x2
K14
x2K
112
ln 3 x2K1 C
13
arcsinh x
C1
12 arctanh
34
83
K23
3 xC13
3 3
9 xC13
32
K6 3 xC13
3 C12
K1
12 arctanh
34
83
C23
3 xK13
3 3
9 xK13
32
C6 3 xK13
3 C12
Outro procedimento utilizando o pacote student:
with(student);
D, Diff, Doubleint, Int, Limit, Lineint, Product, Sum, Tripleint, changevar,
completesquare, distance, equate, integrand, intercept, intparts, leftbox, leftsum,
makeproc, middlebox, middlesum, midpoint, powsubs, rightbox, rightsum,
showtangent, simpson, slope, summand, trapezoid
intparts(Int(x*ln(2*x+sqrt(1+x^2)),x),ln(2*x+sqrt(1+x^2)));
12
ln 2 xC 1Cx2 x2
K12
x2 2C
x
1Cx2
2 xC 1Cx2
dx
value(%);
12
ln 2 xC 1Cx2 x2
K14
x2K
112
ln 3 x2K1 C
13
arcsinh x
C1
12 arctanh
34
83
K23
3 xC13
3 3
9 xC13
32
K6 3 xC13
3 C12
OOOO OOOO
(6.7.20)(6.7.20)
(6.7.19)(6.7.19)
OOOO OOOO
(6.7.21)(6.7.21)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.17)(6.7.17)
(6.7.18)(6.7.18)
OOOO OOOO
(6.7.22)(6.7.22)
K1
12 arctanh
34
83
C23
3 xK13
3 3
9 xK13
32
C6 3 xK13
3 C12
(c) K1
0
x2Kx
4 dx
4. Use o Maple para decidir se as séries convergem ou divergem:
(a)>n = 2
N
1ln n
sum(1/ln(n),n = 2 .. infinity);
>n = 2
N
1ln n
value(%);
>n = 2
N
1ln n
(b)>n = 1
N
n!2 n !
S:=Sum(n!/(2*n)!,n = 1 .. infinity);
S := >n = 1
N
n!2 n !
value(S);
K14
4 e
14 π K1Cerfc
12
(c)>n = 1
N
sin1n
S:=Sum(sin(1/n),n = 1 .. infinity);
S := >n = 1
N
sin1n
value(S);
>n = 1
N
sin1n
OOOO OOOO
(6.7.23)(6.7.23)
OOOO OOOO
OOOO OOOO
(6.7.24)(6.7.24)
(6.7.26)(6.7.26)
OOOO OOOO
(6.7.25)(6.7.25)
OOOO OOOO
5. calcule a derivada da função f x = max x3, x .
f:=max(x^3,x);
f := max x, x3
plot(f,x=-2..2);
x
K2 K1 0 1 2
K2
2
4
6
8
diff(f,x);
1 x !K1
undefined x = K1
3 x2x ! 0
undefined x = 0
1 x ! 1
undefined x = 1
3 x2 1 ! x
6. Seja a função y x definida implicitamente por x C y = 1. Calcule a derivada y' e a segundaderivada y''.
eq:=sqrt(x)+sqrt(y) = 1;
eq := x C y = 1
implicitdiff(eq,y,x);
Ky
x
7. Seja a função de duas variáveis z x, y implicitamente definida por h x, y, z = 0, para uma
função de três variáveis h. Determine a fórmula para
(6.7.32)(6.7.32)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.28)(6.7.28)
(6.7.27)(6.7.27)
OOOO OOOO
(6.7.33)(6.7.33)
(6.7.31)(6.7.31)
(6.7.29)(6.7.29)
OOOO OOOO
(6.7.30)(6.7.30)
v
vx z e
v2
vy vx z. Qual é o resultado para
h = x C y C z K1?
restart:
d1:=implicitdiff(h(x,y,z),z(x,y),x);
d1 := KD1 h x, y, z
D3 h x, y, z
d2:=implicitdiff(h(x,y,z),z(x,y),x,y);
d2 :=1
D3 h x, y, z3
KD1, 2 h x, y, z D3 h x, y, z2CD1, 3 h x, y, z D2 h x,
y, z D3 h x, y, z CD1 h x, y, z D2, 3 h x, y, z D3 h x, y, z KD1 h x, y,
z D3, 3 h x, y, z D2 h x, y, z
h := sqrt(x)+sqrt(y)+sqrt(z)-1:
d1:=implicitdiff(h,z,x);
d1 := Kz
x
d2:=implicitdiff(h,z,x,y);
d2 :=1
2 x y
8. Calcule as seguintes integrais definidas:
(a)
1
10
4 x4C4 x3
K2 x2K10 xC6
x5C7 x4
C16 x3C10 x2
dx
Int((4*x^4+4*x^3-2*x^2-10*x+6)/(x^5+7*x^4+16*x^3+10*x^2),x
= 1 .. 10);
1
10
4 x4C4 x3
K2 x2K10 xC6
x5C7 x4
C16 x3C10 x2
dx
value(%);
2750
C30825
arctan 4 K15950
ln 2 K30825
arctan 13 K1950
ln 5 C145
ln 11
evalf(%);
2.366004897
OOOO OOOO
OOOO OOOO
(6.7.36)(6.7.36)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.34)(6.7.34)
OOOO OOOO
(6.7.35)(6.7.35)
OOOO OOOO
(6.7.37)(6.7.37)
(6.7.38)(6.7.38)
(b) 0
π
2
x4 sin x cos x dx
(c)
17
15
1
x 5 x2K6 xC1
dx
(d) K2
K11x
dx
9. Calcule as seguintes integrais definidas:
(a)
0
1
1
1Kx2
dx
(b) 0
N
eKa x cos b x 2 dx, para um número real positivo a.
Int(exp(-a*x)*cos(b*x)^2,x = 0 .. infinity);
0
N
eKa x cos b x 2 dx
assume(a>0):
value(%);
a~2C2 b2
a~2C4 b2 a~
(c) 0
N
eKx ln x dx
int(exp(-x)*ln(x),x = 0 .. infinity);
Kγ
evalf(%);
K0.5772156649
restart:
(d)
0
N
eK t
t
14 1KeK t
dt
int(exp(-sqrt(t))/(t^(1/4)*sqrt(1-exp(-sqrt(t)))),t = 0 ..
infinity);
OOOO OOOO
(6.7.40)(6.7.40)
OOOO OOOO
(6.7.42)(6.7.42)
(6.7.43)(6.7.43)
(6.7.41)(6.7.41)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(6.7.38)(6.7.38)
(6.7.39)(6.7.39)
OOOO OOOO
0
N
eK t
t1/4 1KeK t
dt
(e)
1
N
1
x4K1
dx
int(1/sqrt(x^4-1),x = 1 .. infinity);
12
2 EllipticK12
2
(f) 0
π
2
tan x dx
int(sqrt(tan(x)),x = 0 .. Pi/2);
12
π 2
(g) 0
N1
cosh a xdx, para um número real positivo a.
10. Calcule 0
Nln x
xCa xK1dx, para a positivo.
int(ln(x)/((x+a)*(x-1)),x = 0 .. infinity);
undefined a ! 0
12
π
2Cln
1a
2
1Caotherwise
11. Calcule ln x
2C1
x2C1
dx.
A:=Int(ln(x^2+1)/(x^2+1),x);
A :=ln x
2C1
x2C1
dx
with(student):
intparts(A,ln(x^2+1),x);
OOOO OOOO
(6.7.44)(6.7.44)
(6.7.50)(6.7.50)
OOOO OOOO
(6.7.48)(6.7.48)
OOOO OOOO
(6.7.45)(6.7.45)
(6.7.43)(6.7.43)
(6.7.49)(6.7.49)
(6.7.46)(6.7.46)
(6.7.47)(6.7.47)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
ln x2C1 arctan x K
2 x arctan x
x2C1
dx
12. Calcule o produto dos primeiros 32 números primos.
nextprime(2);
3
restart:
product(ithprime(i),i=1..32);
525896479052627740771371797072411912900610967452630
13. Calcule os seguintes limites:
(a) limx/0
sin x
x
limit(sin(x)/x,x = 0);
1
(b) limx/0
sin x
1x
limit(sin(x)^(1/x),x = 0);
undefined
(c) limx/0
1Kcos x
x
limit((1-cos(x))/x,x = 0);
0
(d) limx/N
1Cπ
x
x
limit((1+Pi/x)^x,x = infinity);
eπ
(e) limx/0
xsin x
limit(x^sin(x),x = 0);
1
(f) limx/N
2xC3x
1x
14. Calcule os seguintes limites:
(a) limx/N
ln x
x
(b) limx/N
ln x
ex
(c) limx/N
x2Csin x
2 x2Ccos 4 x
OOOO OOOO
(7.1.1)(7.1.1)OOOO OOOO
OOOO OOOO
(6.7.51)(6.7.51)OOOO OOOO
OOOO OOOO
(6.7.52)(6.7.52)
(d) limx/0
1
1CeK
1x
limit(1/(1+exp(-1/x)),x = 0);
undefined
(e) limx/N
sinh tanh x Ktanh sinh x
limit(sinh(tanh(x))-tanh(sinh(x)),x = infinity);
12
e K12
eK1K1
7. Álgebra linear
7.1 IntroduçãoOs comandos de Álgebra Linear formam um pacote chamado linalg, que deve ser carregado com o comando with:
restart;
with(linalg):
Normalmente, terminarmos o comando de carregar pacotes com dois pontos para que as funções do pacote não sejam mostradas. Somente as mensagens de aviso de redefinição de comandos serão mostradas. Isto é o que acontece com os comandos norm e trace, que servem primeiramente para calcular norma de polinômios e para correção de procedimentos, respectivamente. Após o pacote linalg ser carregado, eles passam a calcular norma de vetores e traço de matrizes. No presente contexto, queremos saber quais são estas funções:
with(linalg);
BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian,
addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout,
blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion,
concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge,
dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal,
exponential, extend, ffgausselim, fibonacci, forwardsub, frobenius, gausselim,
gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert,
htranspose, ihermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszero,
jacobian, jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor,
minpoly, mulcol, mulrow, multiply, norm, normalize, nullspace, orthog, permanent,
pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace,
rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector,
(7.2.1)(7.2.1)
(7.2.5)(7.2.5)
(7.2.3)(7.2.3)
(7.2.2)(7.2.2)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(7.2.4)(7.2.4)
OOOO OOOO
OOOO OOOO
sumbasis, swapcol, swaprow, sylvester, toeplitz, trace, transpose, vandermonde,
vecpotent, vectdim, vector, wronskian
7.2 Definindo matrizes
Os comandos do pacote linalg para definir matrizes são: matrix, entermatrix, genmatrix, randmatrix, band e diag. A título de exemplo, vamos definir duas matrizes e gravá-las nas variáveis A e B:
A := matrix( [ [1,2,3], [4,5,6] ] );
A :=1 2 3
4 5 6
B := matrix(3, 2, [a,1,1,d,e,1] );
B :=
a 1
1 d
e 1
Na primeira matriz, entramos os elementos fornecendo cada linha na forma de uma lista. Neste caso, não é necessário especificar as dimensões da matriz. Na segunda, primeiro estipulamos as dimensões da matriz como sendo 3x2, depois fornecemos todos os elementos numa única lista. O próprio Maple separa as linhas de acordo com as dimensões da matriz.
Podemos declarar C como matriz e depois definir as componentes:
C:=matrix(2,2);
C := array 1 ..2, 1 ..2,
C[1,1]:=1;C[1,2]:=3;C[2,2]:=4;C[2,1]:=-2;
C1, 1 := 1
C1, 2 := 3
C2, 2 := 4
C2, 1 := K2
Após a matriz ter sido definida, é possível trocar um elemento. Temos que atribuir o novo valor ao elemento correspondente. Por exemplo, vamos trocar 1/6 por 1/7 na posição <2,2> da matrizC:
C[2,2] := 1/7;
C2, 2 :=17
Vamos verificar que a mudança foi feita com sucesso. Para ver os elementos de uma matriz temos que usar algum comando de avaliação, por exemplo evalm:
evalm(C);
(7.2.6)(7.2.6)
(7.2.7)(7.2.7)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(7.2.9)(7.2.9)
(7.2.8)(7.2.8)
1 3
K217
As operações de soma e potenciação de matrizes são feitas com os operadores ``+'' e ``^'' usuais de soma e potenciação de números. A multiplicação de matrizes, não sendo comutativa, é feita pelo operador ``&*'' (ampersand vezes). As expressões matriciais devem ser envolvidas pelo comando evalm, acrônimo de evaluate in matrix context. Por exemplo:
evalm((A&*B + C)^(-1));
K71C35 d
125 aC21 a dK66K63 dC81 eK21 e d,
7 7C2 d125 aC21 a dK66K63 dC81 eK21 e d
,
7 4 aC3C6 e125 aC21 a dK66K63 dC81 eK21 e d
,
K7 aC3C3 e
125 aC21 a dK66K63 dC81 eK21 e d
A potenciação por um número negativo, quer dizer a inversão da matriz, e subseqüente potenciação pelo módulo do número. A inversa também pode ser encontrada através do comandoinverse:
inverse(matrix([[a,b],[c,d]]));
d
a dKb cK
b
a dKb c
Kc
a dKb ca
a dKb c
Quando uma matriz tem uma regra de formação, é possível repassar esta regra como terceiro argumento do comando matrix. Os dois primeiros argumentos devem ser as dimensões da matriz. Suponha que queiramos definir uma matriz de dimensão 3x4, onde o elemento <i,j> é dado por i
j:
matrix(3, 4, (i,j) -> i/j);
112
13
14
2 123
12
332
134
Existem várias matrizes especiais que são usadas com frequência em Álgebra Linear. Muitas delas têm comandos específicos para gerá-las. Por exemplo, as matrizes diagonais quadradas
OOOO OOOO
OOOO OOOO
(7.2.12)(7.2.12)
OOOO OOOO
(7.2.14)(7.2.14)
OOOO OOOO
(7.2.11)(7.2.11)
OOOO OOOO
OOOO OOOO
(7.2.10)(7.2.10)
(7.2.13)(7.2.13)
(7.2.15)(7.2.15)
podem ser geradas através do comando diag. Neste caso, é bem mais econômico entrar os elementos através deste comando do que com o comando matrix, pois neste último, teríamos que fornecer os zeros fora da diagoanal. Vejamos alguns exemplos:
diag(1,2,3,4);
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
diag(a$3);
a 0 0
0 a 0
0 0 a
O comando a$3 gera uma sequência de três elementos a, de forma que o último comando dado acima é equivalente a diag(a,a,a). Podemos também criar matrizes diagonais em bloco. Vamos usar a matriz C, definida acima com o comando entermatrix, para criar a seguinte matriz:
diag(C,C);
1 3 0 0
K217
0 0
0 0 1 3
0 0 K217
Um caso particular de matriz diagonal é a matriz identidade. Ela pode ser criada com o comandodiag, da seguinte forma: diag(1$n), onde n é a dimensão da matriz identidade. Existem outras formas não equivalentes de definir a matriz identidade. Podemos definí-la com o comando array com a função de indexação identity. Por exemplo:
ID := array(identity, 1..3, 1..3);
ID := array identity, 1 ..3, 1 ..3,
evalm(ID);
1 0 0
0 1 0
0 0 1
Existe uma forma mais abstrata da matriz identidade no Maple que é ``&*( )''. Esta forma assume a repesentação usual dependendo do contexto. Por exemplo:
evalm(C - &*()*lambda);
(7.2.19)(7.2.19)
OOOO OOOO
(7.2.16)(7.2.16)
OOOO OOOO
(7.2.17)(7.2.17)
OOOO OOOO
(7.2.18)(7.2.18)
OOOO OOOO
(7.2.15)(7.2.15)1Kλ 3
K217
Kλ
Neste exemplo, a matriz ``&*( )'' assumiu a dimensão 2 porque ela está somada a matriz C que tem dimensão 2. Na maioria dos casos, não é necessário usar a matriz identidade, pois o Maple assume que, quando um número está somando a uma matriz, este número está multiplicado pela matriz identidade de dimensão conveniente. De forma que o comando acima é equivalente ao comando evalm(C-lambda).
Vamos ver outras matrizes especiais. Se a matriz for uma faixa em torno da diagonal, podemos usar o comando band:
band([-1,1,2],4);
1 2 0 0
K1 1 2 0
0 K1 1 2
0 0 K1 1
O último argumento é a dimensão da matriz. O primeiro argumento é a lista dos elementos da faixa.
A matriz de Toeplitz é gerada pelo comando toeplitz:toeplitz([alpha,1,beta,2]);
α 1 β 2
1 α 1 β
β 1 α 1
2 β 1 α
A matriz Jacobiana é criada pelo comando jacobian. O exemplo a seguir mostra claramente como os elementos são calculados. O comando alias foi usado para expressar a dependência das funçõesf, g e h em relação às variáveis x, y e z.
alias(f=f(x,y,z),g=g(x,y,z),h=h(x,y,z));
f, g, h
jacobian([f,g,h],[x,y,z]);
v
vx f
v
vy f
v
vz f
v
vx g
v
vy g
v
vz g
v
vx h
v
vy h
v
vz h
(7.3.4)(7.3.4)
(7.3.2)(7.3.2)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(7.3.3)(7.3.3)
OOOO OOOO
(7.3.1)(7.3.1)
(7.2.20)(7.2.20)
OOOO OOOO
Para criar matrizes com valores randômicos o comando randmatrix é usado. Como parâmetro adicional pode ser usado sparse, symmetric, unimodular e entries. No exemplo abaixo limitamos ointervalo de escolha aleatória dos números de 0 a 10, quando esta opção é omitida os valores podem estar entre -99 e 99.
randmatrix(2,2,entries=rand(0..10));
6 9
5 1
O comando hilbert cria a matriz de Hilbert. O comando sylvester cria a matriz de Sylvester a partir de dois polinômios, e o comando frobenius cria a matriz na forma canônica racional de outra matriz. Podemos citar ainda os comandos como hessian, hermite e smith entre outros.
7.3 Manipulação de matrizes
Os principais comandos para manipulação estrutural com matrizes são: addcol, addrow, augment, col, row, coldim, rowdim, concat, copyinto, delcols, delrows, extend, mulrow, mulcol, stack, submatrix, swapcol e swaprow. A maioria dos nomes dos comandos falam por si só. As terminações ou prefixos row e col se referem a linha e coluna, respectivamente. O comandocoldim, por exemplo, fornece o número de colunas da matriz. O comando swaprow troca duas linha de uma matriz. Vejamos alguns exemplos. Primeiro, vamos criar duas matrizes genéricas A e B:
A := matrix(2,3, (i,j) -> A.i.j);
Error, recursive assignment
B := matrix(2,3, (i,j) -> beta.i.j);
B :=β 2 β 3 β
2 β 4 β 6 β
Podemos juntar as matrizes A e B lateralmente com o comando augment, e verticalmente com o comando stackmatrix:
augment(A,B);
1 2 3 β 2 β 3 β
4 5 6 2 β 4 β 6 β
stackmatrix(A,B);
1 2 3
4 5 6
β 2 β 3 β
2 β 4 β 6 β
Podemos extrair uma sub-matriz de uma matriz com o comando submatrix:submatrix(%,2..3,1..2);
(7.3.9)(7.3.9)
OOOO OOOO
OOOO OOOO
(7.3.7)(7.3.7)
(7.3.6)(7.3.6)
(7.3.4)(7.3.4)
OOOO OOOO
(7.3.10)(7.3.10)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(7.3.5)(7.3.5)
(7.3.11)(7.3.11)
OOOO OOOO
(7.3.8)(7.3.8)
4 5
β 2 β
Podemos multiplicar uma determinada coluna de uma matriz por um escalar:
mulcol(A,1,alpha);
α 2 3
4 α 5 6
Usando o último resultado, podemos apagar uma ou mais linha com o comando delrows:delrows(%,2..2);
α 2 3
A manipulação aritméticas de matrizes, além dos comandos de soma e ponteciação vistos, abrange os comandos transpose, det, trace, rank e map entre outros.
A:=matrix([[1,2,3],[4,-5,6],[9,8,7]]);
A :=
1 2 3
4 K5 6
9 8 7
O comando transpose calcula a transposta.
transpose(A);
1 4 9
2 K5 8
3 6 7
O determinante é calculado pelo det.det(A);
200
O trace retorna o traço da matriz.
trace(A);
3
A matriz inversa de A pode ser obtida da seguinte forma:
evalm(A^(-1));
(7.3.15)(7.3.15)
(7.3.13)(7.3.13)
OOOO OOOO
(7.3.14)(7.3.14)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(7.3.16)(7.3.16)
(7.3.12)(7.3.12)OOOO OOOO
(7.3.11)(7.3.11)
K83
2001
2027
200
13100
K1
103
100
77200
120
K13
200
O rank mostra o número de linhas ou de colunas linearmente indepententes existentes na matriz (posto):
rank(A);
3
rank([[1,2],[3,6]]);
1
O map será visto em maiores detalhes na parte de programação mas por enquanto nos serve para realizar a mesma operação para todos os elementos da matriz.
map(x->x^2,A);
1 4 9
16 25 36
81 64 49
O maple também é capaz de resolver um sistemas de equação em forma de matriz. O comando é olinsolve que encontra o vetor solução x do sistema A*x = b.
b:=vector([14,12,46]);
b := 14 12 46
linsolve(A,b);
1 2 3
8. Programação básicaA linguagem de programação do Maple e a linguagem que o usuário emprega quando está fazendo um cálculo para resolver um certo problema, são as mesmas. Os comandos para resolver um problema específico poderão ser usados no momento da elaboração de um programa. E vice-versa, qualquer comando de programação pode ser usado no modo interativo. Existem alguns comandos que são frequentemente utilizados em programas e que raramente são utilizados de modo interativo. Por exemplo, o comando for do od para gerar iterações, em geral, só é empregado em programação.O Maple é uma linguagem interativa, porque ele permite que cada comando venha imediatamente acompanhado de sua resposta. Isso não quer dizer que não seja possível agrupar uma série de comandos, cuja resposta é dada por bloco. Na verdade, é isso que faz um programa. Estamos chamando de ``uso interativo'', o modo comando-resposta que geralmente é empregado para resolver problemas específicos. A título de exemplo, vamos resolver dois problemas simples usando o modo interativo. A partir da solução particular, vamos transformá-la em um programa, que é capaz de resolver o problema proposto e qualquer outro do mesmo tipo.
(8.1.1)(8.1.1)
OOOO OOOO
(8.1.3)(8.1.3)
(8.1.2)(8.1.2)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
Um programa de Maple é essencialmente um grupo de comandos pré-definidos que o Maple sempre executa em conjunto. O modo mais simples para criar um programa de Maple (ou procedimento) é encapsular a sequência de comandos que seriam usados de modo interativo. Vamos inicialmente ver os procedimentos iterativos.
Iterações (Renato Portugal)Existem duas formas de executar iterações através do comando for:for contador from valor_inicial by intervalo to valor_final while expressão_booleanado comando_1; comando_2; comando_3; ... od;efor variável in expressão while expressão_booleanado comando_1; comando_2; comando_3; ... od;Vejamos um exemplo da primeira forma. Os números pares podem ser gerados da seguinte forma.
restart:
for i to 5 do 2*i; od;
2
4
6
8
10
Na ausência do comando from, o valor inicial do contador é 1. Um forma quase equivalente do mesmo comando é
for i from 2 by 2 to 10 do i; od;
2
4
6
8
10
Segue um exemplo da segunda forma de executar iterações. Seja L uma lista de funções.
L:=[exp(x^2),x^3,ln(x)];
L := ex2, x3, ln x
Queremos calcular uma aproximação para integral definida de 1 a 2 dessas funções.
for i in L do Int(i,x=1..2)=evalf(int(i,x=1..2)); od;
1
2
ex2 dx = 14.98997601
OOOO OOOO
(8.1.7)(8.1.7)
OOOO OOOO
(8.1.4)(8.1.4)
OOOO OOOO
(8.1.5)(8.1.5)
(8.1.10)(8.1.10)
(8.1.11)(8.1.11)
(8.1.8)(8.1.8)
OOOO OOOO
(8.1.6)(8.1.6)
OOOO OOOO
(8.1.9)(8.1.9)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
1
2
x3 dx = 3.750000000
1
2
ln x dx = 0.386294361
Note que o contador i no comando acima recebe funções como valor. Vejamos o valor final de i.
i;
ln x
Considere o seguinte problema. Suponha que temos uma lista de funções na variável x.
L := [ x^2, g(x), sin(x), a*exp(x^2)];
L := x2, g x , sin x , a ex2
Queremos construir a lista das derivadas. O próximo comando não resolve o problema.
for i in L do diff(i,x); od;
2 x
ddx
g x
cos x
2 a x ex2
A solução através do uso do comando de iteração requer primeiramente a inicialização de uma lista nula.
derivadas := [ ];
derivadas :=
Agora vem a iteração.
for i in L do
derivadas := [ op(derivadas), diff(i, x) ];
od:
Note que terminamos o comando for do od com dois pontos para que nada seja mostrado na tela. Os comandos dentro da iteração podem terminar com dois pontos ou ponto e vírgula. Isso não tem efeito algum em termos de mostrar resultados na tela. Vejamos o resultado.
derivadas;
2 x,ddx
g x , cos x , 2 a x ex2
O valor que o contador assume no final da iteração pode ser importante, como é o caso no seguinte problema. Qual é o maior número primo menor que 808?
for i from 808 by -1 while not isprime(i) do od;
O valor do contador contém a informação que desejamos:
i;
797
Exceto o do od, todos os outras partes são opcionais. Vejamos um exemplo do comando while. Suponha que N tem o valor 68.
N := 68;
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.1.12)(8.1.12)
(8.1.16)(8.1.16)
(8.1.14)(8.1.14)
(8.1.17)(8.1.17)
(8.1.11)(8.1.11)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.1.15)(8.1.15)
(8.1.13)(8.1.13)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
N := 68
Queremos dividir N por 2 enquanto N for par.
while type(N,even) do N := N/2 od;
N := 34
N := 17
Existem dois nomes especiais para serem usados dentro de iterações que são break e next. A variável break faz com que a iteração seja imediatamente interrompida. Por exemplo, no comandoseguinte conseguimos interromper a iteração sem que o contador tenha um valor final.
i:=0;
i := 0
do
i:=i+1;
if i=2 then break fi;
od;
i := 1
i := 2
A variável next por sua vez não interrompe a iteração, mas quando avaliada faz com que uma volta seja pulada. Vamos imprimir os números ímpares da seguinte forma.
for i to 10 do
if type(i,odd) then next fi;
print(i);
od;
2
4
6
8
10
Existem três formas particulares do comando for que são seq, add e mul. A sintaxe desses comandos são iguais, de forma que vamos apenas descrever o comando add que executa um somatório. A sua sintaxe é uma das seguintes formas
add f, i = a ..badd f, i = Londe f é uma expressão que geralmente depende do índice i. Na primeira forma, o índice i assume valores inteiros de a até b, onde a e b tem que ser numéricos. Na segunda forma o índice assume valores da expressão ou estrutura de dados L. Por exemplo
add( a[i]*x^i, i=0..5 );
a0Ca1 xCa2 x2Ca3 x
3Ca4 x
4Ca5 x
5
add( sin(i), i=[theta,omega,tau]);
sin θ Csin ω Csin τ
OOOO OOOO
OOOO OOOO
(8.2.1)(8.2.1)
(8.2.2)(8.2.2)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
ProcedimentosJá vimos procedimentos que definem funções. Vamos examinar agora como dar um nome e encapsular de forma eficiente uma sequência de comandos. Vamos construir um procedimento, chamado plotdif que plota uma expressão f(x), junto com sua derivada f '(x), no intervalo a, b . Interativamente podemos computar a derivada da função utilizando diff e plotar as duas funções utilizando plot . Por exemplo:
y:=x^3-4*x^2-3*x-4;
y := x3K4 x2
K3 xK4
dy:=diff(y,x);
dy := 3 x2K8 xK3
plot([y,dy],x=-2..7,color=[red,blue]);
x
K2 K1 0 1 2 3 4 5 6 7
K20
20
40
60
80
100
120
O seguinte procedimento combina a sequência de passos1. Gráficos simultâneos
plotdiff:=proc(y,x,a,b)
local dy;
dy:=diff(y,x);
OOOO OOOO
OOOO OOOO
(8.2.3)(8.2.3)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
plot([y,dy],x=a..b,color=[blue,black]);
end;
plotdiff := proc y, x, a, b
local dy;
dy := diff y, x ; plot y, dy , x = a ..b, color = blue, black
end proc
plotdiff(x*sin(x),x,-2,2);
x
K2 K1 0 1 2
K1
K0.5
0.5
1
1.5
Este procedimento pode agora ser utilizado em outras rotinas. A declaração local assegura que dy é uma variável local, ou seja, este nome não terá qualquer atribuição fora do procedimento.Vários dos comando iterativos apresentados na seção anterior podem ser reescritos na forma de procedimentos. Consideremos no próximo exemplo um procedimento que devolve o valor absoluto de um número, que vamos chamar de ABS (para distinguir de abs, que já está definido pelo Maple) 2.Valor absoluto de um número
ABS:=proc(x)
if x<0 then
-x;
OOOO OOOO
(8.2.6)(8.2.6)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.2.5)(8.2.5)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.2.10)(8.2.10)
OOOO OOOO
(8.2.9)(8.2.9)
(8.2.8)(8.2.8)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.2.7)(8.2.7)OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.2.4)(8.2.4)
OOOO OOOO
OOOO OOOO
else
x;
fi;
end;
ABS := proc x if x ! 0 then Kx else x end if end proc
ABS(-4.3);
4.3
ABS(3);
3
O procedimento ABS não pode lidar com uma entrada não-numérica:
ABS(a);
Error, (in ABS) cannot determine if this expression is true or false: a
< 0
Como o sistema não sabe nada sobre a, não sabe o que fazer com ele. Em tais casos o procedimento deveria ser capaz de retornar a entrada não avaliada. Para obter isso notemos o seguinte exemplo:
'ABS'(A);
ABS A
Estas aspas simples fazem com que a avaliação de ABS seja retardada. Portanto, podemos modificar o procedimento ABS para a seguinte forma;
ABS:=proc(x)
if type(x,numeric) then
if x<0 then -x else x fi;
else
'ABS'(x);
fi
end;
ABS := proc x
if type x, numeric then if x ! 0 then Kx else x end if else 'ABS' x end if
end proc
ABS(a);
ABS a
3. Raízes de um polinômio
Vamos construir um procedimento que plota raízes reais e complexas de um polinômio
raizplot:=proc(p::polynom(constant,x))
local R, points;
R:=[fsolve(p,x,complex)];
points:=map(z->[Re(z),Im(z)],R);
plot(points,style=point,symbol=circle);
end;
(8.2.12)(8.2.12)
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(8.2.10)(8.2.10)
(8.2.11)(8.2.11)
raizplot := proc p:: polynom constant, x
local R, points;
R := fsolve p, x, complex ;
points := map z/ Re z , Im z , R ;
plot points, style = point, symbol = circle
end proc
y:=x^8-3*x^4+4*x^3-x^2+x-5;
y := x8K3 x4
C4 x3Kx
2CxK5
raizplot(y);
K1.5 K1 K0.5 0 0.5 1
K1
K0.5
0.5
1
O comando randpoly gera um polinômio randômico:
y:=randpoly(x,degree=120);
y := 87 x115K56 x76
K62 x25C97 x10
K73 x2
raizplot(y);
K1 K0.5 0 0.5 1
K1
K0.5
0.5
1
9. Apêndice: Referências Básicas
WorksheetsNos microcomputadores com o Maple instalado, a worksheet é disparada clicando-se no ícone do programa. Em outros sistemas, ela é disparada pelo comando xmaple (ou maple) dado no sinal de pronto do sistema operacional. Ela é o principal meio para gravar e ler os trabalhos desenvolvidos no Maple.
A worksheet utiliza os recursos de janelas para facilitar interação do usuário com o Maple. Por exemplo, um comando batido errado pode ser facilmente corrigido voltando-se o cursor para a posição do erro e substituindo os caracteres errados. Não há necessidade de digitar todo o comando novamente. Na worksheet, um usuário pode desenvolver a solução de um problema usando o Maple, tecer comentários, colar gráficos e gravar todo o conjunto em um arquivo para ser lido e eventualmente modificado posteriormente. A worksheet pode ser impressa selecionando-se a opção print ou pode ser automaticamente convertida em um arquivo Latex. Umexemplo de uso das worksheets é esse curso. Ele foi apresentado e as notas impressas a partir de worksheets.
A worksheet é um caderno virtual de anotações de cálculos. A vantagem do caderno virtual é que qualquer coisa já escrita pode ser modificada sem necessidade de fazer outras alterações. O resto do trabalho se ajusta automaticamente às mudanças. Essa idéia é a mesma dos processadores de textos que vêm gradativamente substituindo as máquinas de escrever. A worksheet não é um processador de textos. Ela funciona de maneira satisfatória como um editor de textos, e a parte referente ao processamento de textos pode ser feita no Latex, pois a worksheet tem interface com este processador. No desenvolvimento de um trabalho usando a worksheet, é importante que ele seja feito em ordem e que todo rascunho seja apagado assim que cumprido seu objetivo. O comando restart pode encabeçar o trabalho. Depois de gravar a worksheet, o usuário
pode sair do Maple. No momento em que a worksheet é lida novamente, os resultados que aparecem na tela não estão na memória ativa do Maple. É necessário processar os comandos novamente para ativar os resultados.
A worksheet tem quatro tipos de linhas que são: as linhas de entrada de comando, geralmente precedidas pelo sinal de pronto ``>'', as linhas de saída dos comandos, as linhas de texto e as linhas de gráfico. Algumas dessas linhas podem ser convertidas umas nas outras. Em geral, as linhas de entrada, de saída e de texto podem ser convertidas entre si. As versões de worksheet para estações de trabalho e para microcomputadores não são iguais entre si, porém na grande maioria dos casos, tudo o que um usuário faz na worksheet de uma estação de trabalho pode ser feita na worksheet de um micro e vice-versa.
As linhas de saída usam os recursos gráficos das janelas para escrever as letras, os símbolos e desenhar os gráficos. O sinal de integral aparece na tela como int, o somatório como sum e as letras gregas como alpha, beta, gamma, ... . Existe uma opção que faz com que as linhas de saídasusem os mesmos caracteres do teclado. Essa opção é útil para gravar resultados em um arquivo ASCII (acrônimo de American Standard Code for Information Interchange). A worksheet pode ser gravada com a terminação .mws, sendo ela própria é um arquivo ASCII. Isso significa que ela pode ser enviada por correio eletrônico. É claro que a pessoa que recebe tem que editá-la e retirar o cabeçalho do correio para que ela seja lida corretamente pelo Maple. Se a worksheet for salva com o a terminação .m , ela é salva no formato interno do Maple. A versão V Release 4 e 5 e a versão 6 possuem diversos recursos para escrever textos. É possível criar seções e sub-seções. As letras podem ter diversos tamanhos e estilos, podem ser em itálico ou em negrito. É possível criar hiperlinks que conectam diversas worksheets. A partir desses hiperlinks pode-se navegar através das worksheets.
Na próxima seção faremos uma breve exposição sobre a manipulação de worksheets.
Noções básicas sobre a manipulação de worksheetsO ambiente de worksheet do Maple consiste em um conjunto de construtos de documentação:grupos de execução, spreadsheets (planilhas), parágrafos, seções e hyperlinks.
Grupos de execução e spreadsheets ajudam o usuário a interagir com a máquina computacional do Maple. Eles fornecem os meios primários pelos quais o Maple é requisitado para executar tarefas específicas e mostrar os resultados. Parágrafos, seções e hyperlinks existem para ajudar o usuário a documentar e organizar os resultados.
Interagindo com Maple
Grupos de execuçãoSequencias de comandos de Maple, chamadas grupos de execução, servem para dar uma descrição algorítmica de como um particular problema matemático é resolvido. Os grupos de execução dão os elementos fundamentais de computação da worksheet. Seu objetivo primário é combinar um ou mais comandos de Maple e seus resultados em uma única unidade reexecutável. Ele é fácilmente reconhecível pelo grande colchete imediatamente à esquerda do prompt de comando. Um grupo de execução é criado através do menu insert . Exemplo1. Quando o cursor é colocado em qualquer ponto do grupo de execução, e o comando enter é dado, as as operações evidentes na expressão de entrada abaixo são
OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(9.2.1.1.1)(9.2.1.1.1)
realizadas em sequencia e o resultado é apresentado no final :
restart:
y:=expand((x+4*a)^2-(x+4*a)^3+x^3);
y := x2C8 x aC16 a2
K12 x2 aK48 x a2K64 a3
O cursor é levado automaticamente para uma nova linha de comando em outro grupo de execução. Note que para modificar os polinômios envolvidos na expressão acima, basta levar o cursor novamente à linha de comando no grupo de execução, fazer as modificações e dar enter. Exercício1. Modifique o lado direito da expressão anterior.Exemplo2. Um grupo de execução pode conter vários comandos, na mesma ou em diferentes linhas de comando:
y:=diff(sin(x)^x,x); z:=int(sin(x)^2,x);
plot(y+z,x=1..3);
y := sin xx ln sin x C
x cos x
sin x
z := K12
sin x cos x C12
x
x1 1.5 2 2.5 3
0.2
0.4
0.6
0.8
1.0
1.2
1.4
Exercício2. (a) Volte ao Exemplo1 e faça um gráfico y(x), para algum valor específico de do parâmetro a, utilizando o prompt em aberto. Não esqueça de definir y novamente no grupo de execução anterior, casa contrário a expressão para y será aquela definida no Exemplo 2. (b) Coloque estes dois comandos em um mesmo grupo de execução utilizando a opção join execution groups (ou F4) no menu Edit.
SpreadsheetsSpreadsheets ou planilhas similares às do Excell são disponíveis nas versões W98, NT e Macintosh do Maple. Uma planilha simbólica pode ser criada através do menu insert. Ela vai aparecer dentro de um grupo de execução. Como exemplo vamos construir uma tabela
(9.2.1.3.2.1)(9.2.1.3.2.1)
(9.2.1.3.2.2)(9.2.1.3.2.2)
OOOO OOOO
OOOO OOOO
para integrais envolvendo ex .
Exercício 3. Reconstrua a planilha acima. As fórmulas nas células podem ser transportadas para linhas de comando da worksheet através de copy/paste e vice versa.
Construindo e executando comandosHá três modos básicos para criar comandos e resultados em Maple
Comandos digitados e paletasLinhas de comando vazias podem ser criadas inserindo um grupo de execução (utilizando o menu insert ou o símbolo [> no menu de ferramentas). Os comandos são executados escrevendo-os no prompt do Maple e pressionando enter. Algumas operações e símbolos, assim como matrizes, podem ser introduzidos através de três paletas. Elas podem ser ativadas a partir do menu View/Palletes.Exercício 4. Utilize o comando inverse(A) do Maple para inverter a matriz
4 5 0
K1 3 5
9 6 6
.
Nota: Para que esta operação seja possível é necessário carregar antes o pacote de álgebra linear linalg, o que pode ser feito com o comando with(linalg) .
Utilizando menus de contextoResultados de Maple já existentes podem ser utilizados para sugerir e construir novas ações. Para obter na tela uma lista de ações sugeridas, marque e pressione o botão direito do mouse sobre o objeto (um resultado). A lista de ações resultante é chamada um menu de contexto, e está customizada para refletir as propriedades do objeto selecionado.Exercício 5. Reproduza em uma worksheet separada o procedimento abaixo. No caso selecionamos a segunda solução e, escolhendo a opção copy transformamos-la para o formato de entrada (paste). O nome s1 foi adicionado manualmente.
solve(a*x^2-3*x+a,x);
12
3C 9K4 a2
a, K
12
K3C 9K4 a2
a
s1:=1/2*(2-2*sqrt(1-a^2))/a;
s1 :=12
2K2 1Ka
2
a
Exercício 6.(a) Considere resultado do primeiro grupo de execução do Exercício 5. Utilize o menu de contexto para determinar a integral das duas soluções com relação a a. Faça com elas tenham respectivamente os nomes int1 e int2.(b) Considere o resultado do segundo grupo de execução acima. Utilize o menu de
OOOO OOOO
contexto para converter a igualdade para o formato LaTex (neste caso, em que a expressão aparece sozinha, não é necessário marcar a expressão). Exercício 7. Utilize o menu de contexto para obter o gráfico da função y = sin x z .
Dragging e Dropping
restart:
Fórmulas podem ser transportadas entre linhas de comando de qualquer worksheet diretamente por seleção e arraste. Uma expressão no formato de saída pode ser convertida para o formato de entrada simplesmente selecionando a expressão e arrastando-a para uma linha de comando vazia. .Gráficos simultâneos podem ser construídos arrastando-se a expressão no formato de se saída do Maple até o ambiente gráfico existente, anteriormente criado via smartplots. Exercício 8. Selecione o lado esquerdo da expressão que define s1, no formato de saída, no Exercício 5 e arraste-o até uma linha de comando vazia. Repita o mesmo procedimento selecionando agora a expressão inteira. Qual a diferença ?
Exercício 9a. Utilize o menu de contexto para gerar o gráfico de y :=v
vx cos x
2Cz .
(Arraste a expressão acima para uma worksheet e depois a recupere com undo). Em seguida arraste o gráfico para uma linha vazia sem o prompt. Modifique a expressão e arraste de volta a expressão para o ambiente gráfico. Este procedimento só funciona para smartplots 3D.Exercício 9b. Gere gráficos simultâneos em 2D utilizando arraste .Este procedimento só funciona com smartplots.
Organizando documentosDocumentos consistem de uma sequencia de parágrafos descritivos, grupos de execução, spreadsheets e gráficos. Estes componentes podem ser reorganizados em uma estrutura hierárquica baseada em seções de subseções. Marcadores de referências, chamados bookmarks, podem ser colocados ao longo do documento e hyperlinks podem ser usados para saltar de um lugar a outro dentro de um documento. Trataremos esses tópicos com detalhe a seguir
3.2.1 Parágrafos e textoUm parágrafo em uma worksheet é análogo ao parágrafo encontrado em um típico processador de textos. Parágrafos podem conter texto com estilos particulares, modo matemático e gráficos, incluindo cópias de saídas de Maple. Um parágrafo pode estar contido em um grupo de execução . Parágrafos podem ser criados clicando Insert na barra de menus. O estilo dos parágrafos pode ser personalizado escolhendo Styles, do menuFormat. Estilos em trechos selecionados podem escolhidos na barra de contexto. Dentro das áreas de texto é possível inserir equações formatadas e gráficos. Exemplo 2. É possível escrever:
Para calcular a integral definida simbólica 0
β
ex2 dx em Maple, digite:
> int(exp(x^2),x = 0 .. beta);
O modo matemático pode ser acionado escolhendo-se Maple input (Crtl+M) no menuInsert. Temos aqui algumas diferenças importantes nas duas últimas versões de Maple. Maple V:
Note que a equação é digitada de acordo com a sintaxe do Maple, em um campo dentro da barra de contexto. A expressão formatada aparecerá depois de enter . Para voltar ao modo texto escolhe-se Text input (Crtl+T). Caso o usuário preferir, é possível digitar a expressãodesejada numa linha de comando, convertê-la para o modo matemático escolhendo x na barra de contexto. A expressão pode então ser selecionada e arrastada ou copiada para o local desejado do texto. É possivel também arrastar a expressão diretamente no formato deentrada do Maple para um local onde o modo matemático já esteja acionado dentro do texto(Crt-M).Maple 6:Note no menu Insert, que para reproduzir os resultados descritos no parágrafo anterior, deveríamos selecionar Standard Math ou Crt-R, para criar uma entrada em modo matemático dentro do texto. No entanto, o procedimento mais simples neste caso para digitar uma equação é utilizar Maple Input ou Crt-M, que faz com que a equação apareça no formato de entrada do Maple no próprio texto, em vermelho. Em seguida a expressão pode ser convertida para o formato matemático clicando em x à esquerda na barra de contexto. Como no caso do Maple V, os modos de entrada ou saída podem ser alternados clicando-se no maple verde. Ou seja, os caracteres em vermelho são de entrada, não importando o formato (Maple input ou Standard Math input), são executáveis clicando-se em ! na barra de contexto.Exercício 10. Reproduza o Exemplo 2.
3.2.2 SeçõesO que você acabou de expandir agora é uma seção (section). No menu Insert, a escolha deSection abre outra seção. Subsection abre uma subseção dentro desta. Para transformar uma seção num parágrafo simples, no menu Format escolha Outdent. Use Indent para inserir um dado parágrafo dentro da seção Exercício 11. Reproduza os cabeçalhos desta worksheet. Inclua subseções. Exercício 12. Expanda e colapse todas as seções desta worksheet através do menu View.
3.2.3 HyperlinksUm hyperlink é uma pedaço de texto que faz uma conexão, quando você dá um clic sobre ele, para uma outra parte da mesma worksheet, de outra worksheet ou de uma página de ajuda, sendo portanto uma ferramenta de navegação. Por default, Maple mostra os hyperlinks como um texto sublinhado na cor cyan. Por exemplo, clicando aqui o cursor é levado para seção 2.1.2 sobre spreadsheets. Selecionando um nome de bookmark leva o cursor a um ponto especificado da worksheet. Um pré-requisito para hyperlinks são bookmarks. Um bookmark é um nome que identificauma particular localização na worksheet. Podemos acessar uma lista de bookmarks da worksheet corrente selecionando Bookmarks no menu View. A seleção de um nome de bookmark move o cursor a uma posição especificada da worksheet. Um hyperlink deve estar associado a um nome de bookmark. Por exemplo, vamos supor que queremos fazer um hyperlink para a seção 2.2.1. O primeiro passo é definir o bookmark. Para isso devemoslevar o cursor para a linha da seção 2.2.1 desta worksheet, selecion Bookmarks no menuView e selecionar Edit Bookmark. Um nome adequado deve então ser digitado. Em seguida devemos inserir o texto que deve aparecer no hyperlink. No menu Insert selecionamos Hyperlink, digitamos o texto e escolhemos da lista o nome adequado entre todos os bookmarks. Exercício 13. Faça um hyperlink para alguma seção desta worksheet.
Regras de sobrevivênciaEsta seção oferece dicas sobre como evitar alguns enganos aos quais inciantes estão sujeitos a cometer. Mesmo para aqueles que já utilizaram o Maple mais de uma vez, ler este seção será de alguma utilidade. Ela poderá parecer um pouco redundante mas, por outro lado, vai poupar
(9.3.2)(9.3.2)
OOOO OOOO
OOOO OOOO
(9.3.3)(9.3.3)
OOOO OOOO
(9.3.4)(9.3.4)
OOOO OOOO
(9.3.1)(9.3.1)OOOO OOOO
(9.3.5)(9.3.5)
esforços na tentativa de encontrar erros de sintaxe futuramente. Os problemas aqui descritos serãovistos nos capítulos seguintes, porém estarão inseridos em contextos diferentes que vão supor que o leitor já os conheça.
Os comandos do Maple normalmente terminam com um ponto-e-vírgula (;) seguido da tecla [Enter]. Com isso o Maple avalia a entrada, faz o cálculo e imprime o resultado na tela. Ao invés de usar o ponto-e-vírgula, pode ser usado os dois pontos (:) no final do comando. Neste caso, o cálculo é feito como anteriormente, mas o resultado não é colocado na tela. Seu uso previne que comandos executados como passos intermediários de um estudo não ocupem muitas páginas com fórmulas de pouco interesse em relação ao resultado final.
Pode-se colocar alguns comandos na mesma linha. Estes comandos podem ser separados tanto porponto-e-vírgula (;) como dois-pontos (:). É possível separar os cálculos com vírgulas (,) sem que se faça associações à variável. O Maple executa os cálculos um após o outro e coloca os resultados lado a lado. Para resultados curtos, este método possue a vantagem de economizar espaço na tela e permite a comparação de resultados numa mesma linha.
Por exemplo:
2+3;
5
a:=3; b:=5;
a := 3
b := 5
a*b, a+b, a^b;
15, 8, 243
a*b; a+b; a^b;
15
8
243
O resultado de até três cálculos anteriores podem ser acessados pelos comandos %, %% e %%%. Se após o um cálculo, você mover o cursor para uma posição diferente na worksheet, o símbolo de percentagem não irá se refrir ao comando exatamente acima e sim ao último cálculo executado.
(c+d)^3: % = expand (%);
cCd3 = c
3C3 c2 dC3 c d2
Cd3
A expressão anterior mostra uma expansão do cubo da soma de duas variáveis. O primeiro comando apenas formula a expressão a ser expandida e não imprime o resultado na tela. No segundo comando o resultado é acessado duas vezes, primeiro sem expandir e depois expandindo.
É preciso tomar cuidado ao usar os símbolos de percentagem. Para pessoas poucou familiarizadas com estes operadores é aconselhável associar o resultado obtido à uma variável. Desta forma a variável pode ser acessada posteriormente quantas vezes quiser e não apenas três.
No exemplo a seguir é mostrado duas formas de ser fazer a associação das soluções de uma equação do segundo grau a uma variável:
(9.3.13)(9.3.13)
(9.3.8)(9.3.8)
OOOO OOOO
(9.3.9)(9.3.9)
(9.3.7)(9.3.7)
(9.3.10)(9.3.10)
OOOO OOOO
(9.3.12)(9.3.12)OOOO OOOO
OOOO OOOO
OOOO OOOO
OOOO OOOO
(9.3.11)(9.3.11)
(9.3.6)(9.3.6)
OOOO OOOO
OOOO OOOO solve(x^2+x-1,x);
K12
C12
5 , K12
K12
5
solucoes1:=%;
solucoes1 := K12
C12
5 , K12
K12
5
solucoes2:=solve(x^2+x-1,x);
solucoes2 := K12
C12
5 , K12
K12
5
A manipulação de uma parte do resultado fica mais fácil ao associá-lo a uma variável. Esta necessidade ocorre frequentemente em comandos como o solve que retorna mais de uma solucao. Um meio de acessar os elementos do resultado é colocando o índice da solução desejada entre colchetes ([]).
x1:=solucoes1[1];
x1 := K12
C12
5
A princípio esta é uma forma aparentemente boa, porém pode dar problemas depois: a ordem das soluções retornadas pelo comando solve não é fixa. Portanto executando o comando novamente, pode ser que a ordem venha trocada. Neste caso se tivermos interesse, por exemplo, na solução demenor valor, poderíamos usar o comando min. Para isto todas as variáveis da expressão deverão estar definidas.
x1:=min(solucoes1);
x1 := K12
K12
5
O Maple VR5 e 6 distingue as aspas duplas (") das aspas simples (') do plique (`) - ou acento grave. O primeiro serve para representar strings de caracteres. O segundo é usado para retardar uma avaliação matemática e o terceiro também representa strings porém de utilidade diversificada em relação ao primeiro.O Maple avalia expressões matemáticas automaticamente:
x:=Pi;
x := π
sin(x/2);
1
Neste exemplo, a variável x foi imediatamente substituída pelo seu valor. Algumas vezes não é desejado que isto aconteça. As aspas simples servem para impedir que esta avaliação se efetue. E neste caso pode ser feito de duas formas: retardando a avaliação de x ou de toda a expressão sin(x):
expr1:=sin('x'/2);expr2:='sin(x/2)';
expr1 := sin12
x
(9.3.16)(9.3.16)
OOOO OOOO
(9.3.18)(9.3.18)
OOOO OOOO
OOOO OOOO
OOOO OOOO
(9.3.22)(9.3.22)
OOOO OOOO
(9.3.17)(9.3.17)OOOO OOOO
(9.3.14)(9.3.14)
(9.3.21)(9.3.21)
OOOO OOOO
(9.3.23)(9.3.23)
OOOO OOOO
(9.3.13)(9.3.13)
(9.3.15)(9.3.15)
(9.3.19)(9.3.19)
(9.3.20)(9.3.20)
OOOO OOOO
OOOO OOOO
expr2 := sin12
x
Nos cálculos subsequentes a avaliação será efetuada e o valor da variável será subtituído.
expr1; expr2;
1
1
Pode-se colocar quantos níveis de retardo se desejar porém não é comum utilizar mais de um. Seria mais simples limpar o conteúdo da variável x em vez de colocar várias aspas simples juntas.
''x'';
'x '
%;
x
%;
π
À primeira vista, a função do plique pode parecer igual às aspas simples.
'x+1';
xC1
`x+1`;
xC1
Porém só quando forçamos uma avaliação é que percebemos a diferença.
eval('x+1');
πC1
eval(`x+1`);
xC1
Os caracteres contidos entre pliques não são interpretados como expressões matemáticas, mas como um conjunto de caracteres. A avaliação não só não é retardada, como se torna impossível. Os pliques são normalmente usados para criar nomes de variáveis que usem caracteres especiais.
`x/aux`:=3;
x/aux := 3
As aspas duplas, enfim, determinam um conjunto de caracteres associados a um texto tal como o título de um gráfico, uma mensagem a ser impressa na tela ou o nome de um arquivo no qual se deseja gravar algum resultado.
print(`Mensagem na tela!`);
Mensagem na tela!
Alguns problemas frequentemente ocorrem por causa de variáveis que foram inicializadas e foram
OOOO OOOO
OOOO OOOO
OOOO OOOO
(9.3.24)(9.3.24)
OOOO OOOO
(9.3.25)(9.3.25)OOOO OOOO
usadas em expressões posteriormente. Ao tentarmos resolver uma equação em x ocorre o seguinte problema.
solve(x^2-2*x,x);
Error, (in solve) a constant is invalid as a variable, Pi
Se olharmos algumas páginas antes vamos perceber que a variável x recebeu o valor π. Em nenhum momento esta variável teve o seu conteúdo apagado e, consequentemente, ele se mantém.Uma forma de limpar o conteúdo de uma variável é associar esta variável a ela mesma com um nível de retardo. Se preferir apagar o conteúdo de todas as variáveis usadas até o momento, o comanto restart executa esta tarefa.
x:='x';
x := x
Ou equivalentemente:
unassign('x');
Agora podemos resolver a equação em x.
solve(x^2-2*x,x);
0, 2
Cartão de referência de comandosdenom( ) Selects the denominator of a fractiondisplay( ) Combines graphs of functions and points (require with( plots) )evalf(expr) Numercially evaluates the given expression to the default number of digits (10).evalf(expr,n) Numercially evaluates the given expression to n digitsexpand(expr) Expands the given expressionfactor(expr) Factors the given expression fsolve(eqn) Finds numerical (approximate) solutions to equations. fsolve(x^2=cos(x)+4,x=0..5)ifactor(n) Gives prime integer factorization for a given integer lhs(eqn ) Selects the left hand side of an equationimplicitplot( ) Plots implicitly defined functions implicitplot(x^2/25 +y^2/9=1 , x=-5 . . 5,y=-5 . . 5,scaling=constrained);numer( ) Selects the numerator of a fractionplot( ) Plots functions defined by an algebraic expression: plot(3*x^2-8 , x=-5 . . 5 , y = -20 . . 40 ); Plots more than one function at a time: plot( [ 3*x^2-8 , sin(x) , cos(x) ] ,x=-5 . . 5 , y=-20 .. 40 ); Plots points: plot 2, 3 , K2, 5 , 1, K4 , x = K7 ..7, y = K7 ..7, style = point Plots parametric equations : plot( [cos(t), sin(t), t=0 . . 2*Pi] , x=-2..2, y=-2..2);rationalize(expr) Rationalizes the denominator of a given expressionrestart Clears Maple's memory of all definitionsrhs(eqn ) Selects the right hand side of an equationsimplify(expr) Simplifies the given expressionsolve(eqn) Finds exact solutions to equations, including literal equations and linear
systems.subs(x= v,expr) Substitutes the value v for x in the expression subs(x=4,3*x^2+8);with( ) Brings in additional libraries of functions.
The standard constants are:Pi π Caution: Do not use "pi", capital "P" is required exp(1) e
I K1
The names of the standard functions are:
sqrt(x) x abs(x) x
exp(x) ex
ln(x) natural loglog(x) common log (base 10)sin(x), cos(x), tan(x), cot(x), sec(x), csc(x) sine of x, etc.arcsin(x), arccos(x), arctan(x) the inverse trig functions
Recommended