Python Livro
Python Livro
1 Introdução 3
2 Primeiros Contatos 4
2.1 Ambientes de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.1 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.1.2 Ipython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Diferenças entre Python 2.x e 3.x . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Importando Módulos de Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Comandos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Sequências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.2 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6.1 Definindo Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Controle de Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.2 If - Then - Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7.3 Laço For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7.4 Laço While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3 Numpy 20
3.1 Funções Matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.1 Funções Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.2 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 Criando Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Álgebra Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.1 Utilizando arrays como matrizes . . . . . . . . . . . . . . . . . . . . . 24
3.3.2 Produto Escalar e Vetorial . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4 Polinômios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5 Estatı́stica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4 Matplotlib 29
4.1 Gráficos Simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.1 Mudando Cores e Espessuras da linha . . . . . . . . . . . . . . . . . . 31
4.2 Gráficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Sympy 34
5.1 O que Computação Simbólica . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.2 Operações Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1 Substituições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1
SUMÁRIO 2
5.2.2 lambdify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.3 Simplificações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3.1 simplify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3.2 Funções de Simplificação Polinomial . . . . . . . . . . . . . . . . . . . 37
5.3.3 Simplificaçõs Trigonométricas . . . . . . . . . . . . . . . . . . . . . . 38
5.4 Cálculo Diferencial e Integral . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4.1 Derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4.2 Integrais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.5 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6 Exercı́cios de Fixação 41
Capı́tulo 1
Introdução
3
Capı́tulo 2
Primeiros Contatos
Ao iniciar o python, o terminal nos mostra a versão, que no caso é a 2.7.8, versão que
trabalharemos aqui. Hoje apesar de existir python 3.x a versão 2.x continua em desenvolvi-
mento, podendo então o usuário escolher qual versão lhe agrada.
Mais a frente haverá uma explicação das principais diferenças entre as duas versões.
Não preocupe-se com os comandos a princı́pio, o objetivo aqui é diferenciar os recursos
de cada ambiente.
4
CAPÍTULO 2. PRIMEIROS CONTATOS 5
(c) Matplotlib.
(d) Sympy
>>> 3+5
8
>>> a = 7
>>> for i in xrange (5) :
... print a * i
...
0
7
14
21
28
>>>
No terminal linux podemos utilizar alguns recursos interessantes como mostra a figura
2.3, mas não são apresentados outros recursos como listas de comandos e documentação
conforme o usuário digita.
2.1.2 Ipython
O Ipython é formidável. É muito versátil. Possui um console simples com os recursos de
um terminal.
Um console baseado em Qt com recursos de edição de texto, lista os comandos e exibe
a documentação dos comandos conforme o usuário digita, pode configurá-lo para impressão
matemática bonita via utf-8 ou latex, configurá-lo para mostrar os gráficos embutidos no
próprio console.
E o notebook que é um ambiente no navegador de internet a qual cada conjunto de
comando é separado por células, o usuário pode retornar as células anteriores para modi-
ficação, pode-se salvar o arquivo de trabalho para posterior edição, além dos outros recursos
mencionados nos consoles anteriores e muito mais.
CAPÍTULO 2. PRIMEIROS CONTATOS 7
2.1.3 Spyder
Spyder para computação cientı́fica, é o canivete suı́ço para o desenvolvedor python. Pos-
sui em um só programa, um console interativo, Ipython Qtconsole, editor de texto para
scripts, um explorador de documentação de bibliotecas, explorador de variáveis, explorador
de arquivos, explorador de histórico e outros recursos que aumentam a produtividade do
usuário.
Nas preferências, pode-se configurar para a importação das bibliotecas automaticamente
na inicialização, configurar atalhos, cores, diretório de trabalho, etc...
In [2]: math . pi
Out [2]: 3 .14159 265358 9793
In [14]: sy . var ( ’s t ’)
Out [14]: (s , t )
In [16]: sy . solve (a , s )
Out [16]: [2 + sqrt (13) , - sqrt (13) + 2]
In [4]: plot (x , y )
Out [4]: [ < matplotlib . lines . Line2D at 0 x7f7e940e6050 >]
In [5]: show ()
>>> 7+8
15
>>> (1+7 j ) +(3 -8 j )
(4 -1 j )
>>> 2**2
4
>>> 2 -5
-3
>>> 3**(0.5)
1.732050 80 75 68 87 72
Para usar funções e constantes matemáticas podemos usar o módulo math, para isso o
importamos da seguinte maneira:
1.0
Usando a função dir podemos podemos ver o diretório de objetos disponı́veis para o
módulo.
>>> a = 8
>>> b = 5
>>> a / b
1
>>> type ( a )
< type ’ int ’ >
>>> type ( b )
< type ’ int ’ >
>>> a = 8.
>>> b = 5.
>>> a / b
1.6
>>> type ( a )
< type ’ float ’ >
>>> type ( b )
< type ’ float ’ >
A situação acima mostrada pode causar confusão a princı́pio, porém atribuindo as variáveis
corretamente como mostrado acima ( a=8. , b=5.), obterá o resultado desejado. Neste caso
o ponto ”. ” fará com que o python interprete como tipo de ponto flutuante, sem o ponto
interpretará como inteiro.
CAPÍTULO 2. PRIMEIROS CONTATOS 12
Se precisar converter uma variável para inteiro basta usar a função int( ).
Pode também ser conveniente converter um inteiro em ponto flutuante usando a função
float( ).
A função round( ) é utilizado para arredondar o valor já que int( ) pega apenas o inteiro
do valor.
Atribuindo dados entre aspas ‘ ‘, estará avisando ao python que o dado a atribuir é uma
string.
Observe o exemplo abaixo:
>>> a = 3.5
>>> x = int ( a )
>>> type ( x )
< type ’ int ’ >
>>> x
3
>>> x = int ( round ( a ) )
>>> x
4
>>> b = ’8 ’
>>> type ( b )
< type ’ str ’ >
>>> y = float ( b )
>>> y
8.0
2.5 Sequências
Strings, listas e tuplas, são sequências. Elas podem ser indexados e divididos.
Tuplas e strings são imutáveis. Isso significa que não podemos mudar individualmente
elementos de uma tupla e nem caracteres de uma string. Já listas são mutáveis.
A tabela abaixo apresenta alguns comandos de sequências:
CAPÍTULO 2. PRIMEIROS CONTATOS 13
2.5.1 Strings
Strings são ( imutáveis) sequências de caracteres. Uma string pode ser definida usando
aspas simples, dupla ou tripla.
Utiliza-se ’ ’, para atribuir a variável uma string vazia.
O número de caracteres de uma string é obtida pelo comando len( ).
Como qualquer tipo de sequência em python é válido os comandos na tabela 2.1. Observe:
>>> x = ’ teste ’
>>> type ( x )
< type ’ str ’ >
>>> y = ’ este e um ’
>>> z = y + x
>>> z
’ este e um teste ’
>>> k = ’ ’
>>> k
’’
>>> len ( k )
0
>>> len ( z )
15
>>> z [2]
’t ’
>>> z [10:14]
’ test ’
>>> max ( z )
’u ’
>>> min ( z )
’ ’
Strings possui inúmeras funções úteis. Pode-se encontrar usando o comando dir( ) e help.
Não será discutido muitas funções em strings, pois não é o objetivo deste trabalho este
foco. Porém algumas funções são úteis, como: upper( ), split( ), join( ). Observe:
2.5.2 Listas
Listas são sequências mutáveis de objetos. Atribuı́mos uma lista a uma variável entre
colchetes, separando cada objeto por vı́rgula. Os objetos dentro de uma lista, podem ser de
qualquer tipo. Pode-se gerar uma lista vazia apenas por [ ].
Abaixo alguns exemplos:
>>> a = [0 ,1 ,2 ,3 ,4 ,5 ,6]
>>> b = [7 ,8 ,9]
>>> a + b
[0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]
>>> c = a [5:] + b
>>> c
[5 , 6 , 7 , 8 , 9]
>>> max ( b )
9
>>> min ( b )
7
>>> 6 in b
False
CAPÍTULO 2. PRIMEIROS CONTATOS 15
>>> 6 in a
True
>>> a = [1 ,2 ,3 ,4 ,5]
>>> a [0] = ’u ’
>>> a
[ ’u ’ , 2 , 3 , 4 , 5]
>>> a [4] = ’ python ’
>>> a
[ ’u ’ , 2 , 3 , 4 , ’ python ’]
Pode-se adicionar objetos ao fim de uma lista com o comando append( ), e remover o
primeiro objeto indicado com remove( ):
Um comando muito utilizado para gerar listas de inteiros é o range( ). Veremos adiante
que é muito útil para laços de repetição.
Quando digitamos apenas range( n), na qual n é um número inteiro qualquer, ele gera
uma lista de inteiros começando do 0 até n − 1 com incremento 1.
Com o range, também podemos gerar listas começando com m, terminado em n − 1, com
incremento i, com a sintaxe: range( n,m,i).
Se não indicarmos o incremento, o comando range assumirá 1.
Exemplos:
2.6 Funções
O significado de função na matemática e na programação possui significados diferen-
tes. Na programação significa uma nomeada sequência de operações que executa uma com-
putação.
CAPÍTULO 2. PRIMEIROS CONTATOS 16
>>> def f (x , y ) :
... return x **2 - 4* y **2 - 9
...
>>> f (15 , -2)
200
>>> f ( -20 , 10)
-9
>>> f ( -8 , 5)
-45
Exemplo 2: Defina funções para imprimir uma string centralizado entre asterisco.
>>> def r et or na r_ as te ri sc o ( n ) :
... return n * " * "
...
>>> def imp_string_ast ( string ) :
... comp_linha = 46
... ast_str = re to rn ar _a ste ri sc o (( comp_linha - len ( string ) ) /2)
... print ast_str + string + ast_str
...
>>> imp_string_ast ( ’ Hello World ’)
********* ****** ** Hello World *** ****** ****** **
CAPÍTULO 2. PRIMEIROS CONTATOS 17
>>> x = 30
>>> x > 15
True
>>> x > 42
False
>>> x == 30
True
>>> x == 42
False
>>> not x == 42
True
>>> x != 42
True
>>> x >= 30
True
>>> a = 17
>>> if a == 0:
... print " a é zero "
... elif a < 0:
... print " a é negativo "
... else :
... print " a é positivo "
...
a é positivo
O a declaração if pode também ter uma parte else, a qual é executado quando a condição
anterior não é satisfeita.
>>> a = 34
>>> if a > 0:
... print " a é positivo "
... else :
... print " a é negativo "
...
a é positivo
Finalmente, tem o elif a qual permite a análise de vários condicionais no mesmo bloco.
>>> a = 17
>>> if a == 0:
... print " a é zero "
... elif a < 0:
... print " a é negativo "
... else :
... print " a é positivo "
...
a é positivo
Junto com o comando range( ), pode-se iterar sobre listas de incrementos inteiros.
CAPÍTULO 2. PRIMEIROS CONTATOS 19
Exemplo 2)
Faça um programa para calcular o fatorial de um número inteiro positivo. Calcule o
fatorial do número 15.
Numpy
Exemplos:
>>> x = 2.* pi /3
>>> sin ( x )
0.86602 5 4 03 7 8 44 3 8 71
>>> cos ( x )
-0.49999999999999978
>>> sin ( x ) **2 + cos ( x ) **2
0.999999 9 9 99 9 9 99 9 8 9
>>> log (4)
1.386294 36 11 19 89 06
>>> log ( exp (1) )
1.0
>>> log10 (10)
1.0
>>> log2 (2)
1.0
20
CAPÍTULO 3. NUMPY 21
Exercı́cios
1. Calcule as seguintes funções para os valores (−11, 43, 8976, 0.00036).
a) sin(x) ex/2
cos(x)
b) ln(x) sin2 (x) + log2 (x)
c) ex log10 (x)
2. Faça uma função em python para resolver a Equação de Colebrook descrita abaixo,
sabendo que 0 < f ≤ 1, e que a função deverá ter como argumento mı́nimo as variáveis
D
, Re e f ( def Colebrook(ed, Re, f ))
1 /D 2, 51
√ = −2 log + √
f 3, 7 Re f
Teste sua solução. Para D
= 0.000375 e Re = 1, 37 104 , temos f = 0, 0291
>>> b = -5 -2 j
>>> a + b
( -2+4 j )
>>> a / b
( -0.9310344827586208 -0.8275862068965517 j )
>>> a * b
( -3 -36 j )
>>> c = [a , b ]
>>> c
[(3+6 j ) , ( -5 -2 j ) ]
>>> angle ( c )
array ([ 1.10714872 , -2.76108628])
>>> degrees ( angle ( c ) )
array ([ 63.43494882 , -158.19859051])
>>> real ( a ) + real ( b )
-2.0
>>> imag ( a ) + imag ( b )
CAPÍTULO 3. NUMPY 22
4.0
>>> conj ( a )
(3 -6 j )
Exercı́cios
1. Resolva as seguintes operações:
a) (2 - 5i) + (-3 + 3i)
(5 − 2i)
b) − (2 − 4i).(5 − 2i)
(5 − 6i)
(3 − 6i)2 + (5 + 4i)3
c)
(2 + 5i)2
2. Faça uma função que retorne um número complexo na forma polar. Esta função deverá
retornar um array de dois elementos ao qual o primeiro deverá ser o módulo e o segundo
seu ângulo em graus.
3.2 Arrays
Array é um tipo de conjunto de dados que comporta-se de forma semelhante a listas,
exceto pelo fato de que os elementos devem ser do mesmo tipo.
Exemplos:
Porém existem funções do numpy no qual retornam arrays. As principais estão descritas
na tabela abaixo:
empty( (l,c) ) Cria uma matriz vazia com as dimensões (l,c)
zeros( (l,c) ) Cria uma matriz de zeros com as dimensões (l,c)
ones( (l,c) ) Cria uma matriz de elementos de valor 1 com as dimensões (l,c)
eye( n ) Retorna uma matriz identidade de ordem n
identity( n ) Retorna uma matriz identidade de ordem n
Exemplos:
... a [i , j ]=3
... else :
... a [i , j ]=1
...
>>> a
array ([[ 3. , 1. , 1. , 1.] ,
[ 1. , 3. , 1. , 1.] ,
[ 1. , 1. , 3. , 1.] ,
[ 1. , 1. , 1. , 3.]])
Exercı́cios
1. Crie um array (10,10), com a seguinte condição:
a[i, j] = 5, i > j
a[i, j] = 10, i < j
a[1, j] = 0, i = j
Com o comando matrix(a) onde a é uma sequência como lista e tuplas, atribui-se ao objeto
o tipo matrix ao qual pode-se fazer operações matriciais com os operadores convencionais.
Exercı́cios:
1. Resolva o sistema de equações abaixo, sabendo que R X = Y =⇒ X = R−1 Y , onde
R é a matriz dos coeficientes das equações e Y é a matriz formada pelos números após
a igualdade.
−5x − 2y + 12z − w = −9
x + 3y − 2z + 4w = 10
−x − y − z = −7
3x − 3y + 7z + 9q = −6
Exemplos
>>> cross (v , u )
array ([ -55 , 72 , 23])
Exercı́cios
1. Resolva os produtos abaixo:
a) v × w
b) w · v
c) (v × w) · u
3.4 Polinômios
O módulo polinomial do numpy provê a capacidade de trabalhar com polinômios. Algu-
mas funções deste módulo são mostradas na tabela abaixo:
poly1d( c ou r ) Classe polinomial
polyval( p,x ) Calcula a função polinomial ao valor x
poly( seq de zeros ) Encontra os coeficientes do polinômio com dada sequência de raı́zes
roots( p ) Retorna as raı́zes do polinômio dado os coeficientes p
polyder( p,n ) Retorna a n-derivada do polinômio p
polyint( p,n ) Retorna a n-integral do polinômio p
polyadd( a1,a2 ) Retorna a soma de dois polinômios
polydiv( a1,a2 ) Retorna a divisão de dois polinômios
polymul( a1,a2 ) Retorna a multiplicação de dois polinômios
polysub( a1,a2 ) Retorna a subtração de dois polinômios
polyfit( x,y,n ) fita os dados em x e y com polinômio de grau n
Exemplos
-1.07434076+0. j ])
>>> y . r
array ([ 2 . 0 3 7 1 7 0 3 8 + 2 . 0 5 6 0 0 7 5 8 j , 2.03717038 -2.05600758 j ,
-1.07434076+0. j ])
>>> w = poly ([3 , -2 ,1 ,6])
>>> print w
[ 1 -8 7 36 -36]
>>> w = poly1d ( w )
>>> print w
4 3 2
1 x - 8 x + 7 x + 36 x - 36
>>> polydiv (w , y )
( poly1d ([ 1. , -5.]) , poly1d ([ -12. , 47. , 9.]) )
>>> polymul (w , y )
poly1d ([ 1 , -11 , 35 , -8 , -188 , 315 , 180 , -324])
>>> polyder ( y )
poly1d ([ 3 , -6 , 4])
>>> polyint ( y )
poly1d ([ 0.25 , -1. , 2. , 9. , 0. ])
3.5 Estatı́stica
O numpy fornece as seguintes funções para estatı́stica.
Porém, acaso necessitar de algo mais sofisticado, o python possui bibliotecas especializa-
das em estatı́stica como RPy e Pandas.
Exemplos
Exercı́cios
1. Sabendo que o comando (a−b)∗random sample((l,c)) + b gera um array com dimensões
(l,c), de dados aleatórios num intervalo de a até b. Obtenha um array com 500 dados
aleatórios distribuı́dos de 0 à 10000 e calcule a média aritmética, a variância e seu
desvio padrão.
Capı́tulo 4
Matplotlib
Matplotlib é uma biblioteca para plotagem de gráficos. Provavelmente uma das bibli-
otecas mais utilizadas do python no meio cientı́fico, devido a gráficos com qualidade de
publicação e muita versatilidade para produzir imagens de diferentes extensões.
Um exemplo de visualização de dados pode ser observado pelo último exemplo dado na
seção anterior. Vimos um algoritmo para fitar uma curva polinomial obtido através dos
dados em x e y dos pontos a fitar. Mas afinal como ficará o gráfico desta função? observem:
29
CAPÍTULO 4. MATPLOTLIB 30
1.0
dados
curva fitada
0.5
0.0
0.5
1.0
1.5
0 1 2 3 4 5
y
A seguir importamos o módulo pylab para gerar e mostrar o gráfico, com os comandos
plot( ) e show( ).
1.0
0.5
0.0
0.5
1.0 4 3 2 1 0 1 2 3 4
1.0
0.5
0.0
0.5
1.0 4 3 2 1 0 1 2 3 4
Com os parâmetros abaixo, pode-se limitar os limites dos eixos e alterar a identificação
dos pontos nos eixos:
>>> pl.xlim( X.min( ) * 1.1 , X.max( ) * 1.1 )
( -3.4557519189487729 , 3.4557519189487729 )
>>> pl.ylim( C.min( ) * 1.1 , C.max( ) * 1.1 )
CAPÍTULO 4. MATPLOTLIB 32
( -1.1000000000000001 , 1.0999165211263138 )
>>> pl.plot( X , S , color = ’green’, linewidth = 2.5 , linestyle = ’-’ )
>>> pl.plot( X , C , color = ’red’, linewidth = 2.5 , linestyle = ’-’ )
>>> pl.xticks( [ -np.pi, -np.pi/2, 0, np.pi/2, np.pi ], [ r’−π’, r’−π/2’, r’0’, r’+π/2’,
r’+π’ ] )
>>> pl.yticks( [ -1, 0, +1 ],[ r’−1’, r’0’, r’+1’ ] )
Figura 4.4: Alterando extremos das caixas e nomeando pontos sobre os eixos.
Com estas opções pode-se gerar eixos, retirar a caixa sobre o gráfico e criar legendas:
>>> ax = pl.gca()
>>> ax.spines[ ’right’ ].set color( ’none’ )
>>> ax.spines[ ’top’ ].set color( ’none’ )
>>> ax.xaxis.set ticks position( ’bottom’ )
>>> ax.spines[ ’bottom’ ].set position( ( ’data’ , 0 ) )
>>> ax.yaxis.set ticks position( ’left’ )
>>> ax.spines[ ’left’ ].set position( ( ’data’ , 0 ) )
>>> pl.plot( X , S , color = ’green’ , linewidth = 2.5 , linestyle = ’-’ , label = ’seno’ )
>>> pl.plot( X , C , color = ’red’ , linewidth = 2.5 , linestyle = ’-’ , label =
’cosseno’ )
>>> pl.legend( loc=’upper left’ )
Figura 4.5: Alterando extremos das caixas e nomeando pontos sobre os eixos.
CAPÍTULO 4. MATPLOTLIB 33
4.2 Gráficos 3D
Para gráficos 3D utiliza-se a função Axes3D do módulo mpl.toolkits.mplot3d, ob-
serve:
Sympy
>>> # Numpy
>>>
>>> poly1d ([1 , -4 , -9])
2
1 x - 4 x - 9
>>> y = poly1d ([1 , -4 ,9])
>>> y . r
[ 5.60555128 -1.60555128]
>>>
>>> # sympy
>>>
>>> import sympy as sy
>>> sy . var ( ’x ’)
>>> Y = x **2 -4* x -9
>>> sy . solve (Y , x )
>>> [2 + sqrt (13) , - sqrt (13) + 2]
O sympy nos oferece a possibilidade de trabalhar com integrais, derivadas, limites, resol-
ver equações, trabalhar com matrizes com elementos simbólicos, isto e muito mais.
34
CAPÍTULO 5. SYMPY 35
5.2.1 Substituições
Uma das coisas mais comuns que você pode querer fazer é a substituição. Como o próprio
nome diz, é a ação de substituir algo em uma expressão com outro valor ou outra expressão.
Faremos isso com o método subs.
Exemplos
a)
b)
>>> expr = x ** y
>>> expr
x ** y
>>> expr = expr . subs (y , x ** y )
>>> expr
x **( x ** y )
>>> expr = expr . subs (y , x ** x )
>>> expr
x **( x **( x ** x ) )
c)
evalf
Para avaliar uma expressão numérica como ponto flutuante (float), use evalf.
SymPy pode calcular uma expressão numérica com precisão arbitrária. Por padrão 15
digitos de precisão são usados, mas você pode usar qualquer número de precisão como argu-
mento ao evalf. Como exemplo vamos calcular os 100 primeiros digitos do π.
Para calcular numéricamente uma expressão simbólica substituindo às variáveis numeros
de ponto flutuantes, basta usar o evalf seguido do subs. Observem:
5.2.2 lambdify
subs e evalf são bons quando se quer um simples cálculo. Mas se você pretende calcular
uma função com muitos valores (utilizando um array) existem meios mais eficientes. Por
exemplo, se você deseja calcular uma função com uma sequência de milhares de elementos,
com SymPy provavelmente deverá ser muito lento, sendo uma ótima alternativa a utilização
das bibliotecas NumPy ou SciPy para resolvê-la.
O meio mais fácil de converter uma expressão SymPy em uma que pode ser numerica-
mente calculada é fazendo o uso da função lambdify. lambdify atua como um conversor a qual
troca-se a expressão SymPy para uma biblioteca numérica, usualmente NumPy ou SciPy.
A uilização da função lambdify é descrita no exemplo abaixo:
-0.95892427
-0.2794155 0.6569866 0.98935825 0.41211849]
5.3 Simplificações
Agora vamos começar a fazer uso de uma das habilidades mais interessantes da com-
putação simbólica, que é a simplificação de expressões matemáticas. O SymPy possui dezenas
de funções para executar vários tipos de simplificações. Aqui vamos conhecer as principais.
Para acesso a todas as funções de simplificações consulte http://docs.sympy.org/latest/tutorial
/simplification.html. Para continuar nesta seção vamos deixar algumas variáveis disponı́veis
para a utilização nos exemplos.
5.3.1 simplify
simplify é uma função geral que possui a habilidade de utilizar todas as funções de
simplificação inteligentemente para obter expressões simplificadas. Observem:
Mas tomem cuidado pois a função apenas tona as expressões simples e não a menor
possı́vel, para isso deve-se utilizar a função correta para cada caso. Por exemplo a função
x2 + 2x + 1 aplicada a simplify não retorna (x + 1)2 , mas factor sim. Vejam:
>>> y = x **2 + 2* x + 1
>>> simplify ( y )
x **2 + 2* x + 1
>>> factor ( y )
( x + 1) **2
factor
A função factor fatora a expressão polinomial.
colect
Esta função provê deixar em evidência algum fator na expressão.
apart
A função apart decompõe a expressão em frações parciais.
>>> expr = (4* x **3 + 21* x **2 + 10* x + 12) /( x **4 + 5* x **3 + 5* x **2
+ 4* x )
>>> expr
(4* x **3 + 21* x **2 + 10* x + 12) /( x **4 + 5* x **3 + 5* x **2 + 4* x )
>>> apart ( expr )
(2* x - 1) /( x **2 + x + 1) - 1/( x + 4) + 3/ x
expand trig
Para expandir funções trigonométricas com entidades de soma ou ângulos múltiplos.
diff pode efetuar derivadas múltiplas. Para efetuar derivadas múltiplas basta adicionar
n-vezes a variável como argumento, ou adicionar após o argumento da variável a quantidade
de vezes a qual deverá derivar.
Esta função também efetua derivadas de várias variáveis, bastando adicionar as variáveis
como argumento da função, lembrando que a ordem de derivação será seguida da esquerda
para a direita.
5.4.2 Integrais
Para calcular integrais usamos a função integrate. Podemos com a função, calcular uma
integral indefinida colocando como argumento apenas as variáveis, e também pode-se calcular
uma integral definida colocando como argumento uma sequência com a variável, o limite
inferior e o limite superior. Observe:
Também pode-se calcular integrais multiplas apenas adicionando as informações das ou-
tras variáveis como argumento. Vejam:
5.5 Limites
SymPy pode calcular o limite de expressões simbólicas como
lim f (x)
x→x0
Para calcular o limites laterais basta adicionar ”+”ou ”−”como um terceiro argumento
ao limite.
Exercı́cios de Fixação
1. Faça uma função para a conversão de milı́metro para polegada ou vice-versa. Faça a
função imprimir na tela semelhante a ” 1 polegada = 25,4 mm”, e faça as conversões
correspondentes.
a) Converta para polegada as medidas em milı́metros: 55,3 ; 689,2 ; 23,1 ; 98,35 ; 12,7
; 4985,22 ; 0,5432 ; 15549,13 ; 0,1
b) Converta para milı́metro as medidas em polegadas: 0,593 ; 2,5 ; 6,831 ; 38,476 ;
962,197 ; 49,434 ; 111,639 ; 726,3 ; 0,005
3. Uma análise muito importante para tratamento de água industrial é sı́lica solúvel
alto teor que é uma análise espectrofotométrica. Para se realizar análises de sı́lica
solúvel alto teor o analista deve primeiramente realizar a curva de calibração para o
espectrofotômetro e reagentes que irá utilizar. Um analista realizando uma curva de
calibração obteve os seguintes dados:
41
CAPÍTULO 6. EXERCÍCIOS DE FIXAÇÃO 42
4. A posição de uma partı́cula que se desloca ao longo de uma linha reta é definida pela
relação x = 0, 3 t3 − 1, 8/t2 − 4, 5 t + 12, onde x é expresso em metros e t em segundos.
Determine:
[1] PYTHON SCIENTIFIC LECTURE NOTES. In: EUROSCIPY 2012., 2012/3. Dis-
ponı́vel em: <http://scipy-lectures.github.com>. Acesso em: 21 nov de 2014.
[2] FANGOHR, H. Python for Computational Science and Engineering. 1. ed. Nova York:
Cambridge, 2006.
[4] MADRONA, F. E. Pressões em Silos Esbeltos com Descarga Excêntrica. 2008. Dis-
sertação (Mestrado em Engenharia de Estruturas) - Escola de Engenharia de São
Carlos, Universidade de São Paulo, São Carlos, 2008.
[5] KIUSALAAS, J. Numerical Methods in Engineering with Python. 1. ed. Nova York:
Cambridge, 2005.
[6] https://www.python.org/doc/essays/blurb/
43