Computação Científica Usando Python
Computação Científica Usando Python
Computação Científica Usando Python
net/publication/307925106
CITATIONS READS
0 8,879
2 authors:
All content following this page was uploaded by Rosevaldo de Oliveira on 08 September 2016.
1a Edição
Rondonópolis
Edição do Autor
2016
Sumário
Sumário . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1 PRIMEIROS CONTATOS . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 Ambientes de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1 Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.2 Ipython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3 Spyder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Diferenças entre Python 2.x e 3.x . . . . . . . . . . . . . . . . . . . . . 8
1.3 Importando Módulos de Bibliotecas . . . . . . . . . . . . . . . . . . . . 9
1.4 Comandos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Sequências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.2 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.6.1 Definindo Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.7 Controle de Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.7.1 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.7.2 If - Then - Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.7.3 Laço For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.7.4 Laço While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2 NUMPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1 Funções Matemáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1 Funções Gerais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1.1 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.1.2.1 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 Criando Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.1.1 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Álgebra Linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.1 Utilizando arrays como matrizes . . . . . . . . . . . . . . . . . . . . . . . . 27
2.3.1.1 Exercı́cios: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.3.2 Produto Escalar e Vetorial . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.2.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.2.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.4 Polinômios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4.0.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.5 Estatı́stica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.0.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.5.0.2 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3 MATPLOTLIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1 Gráficos Simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1.1 Mudando Cores e Espessuras da linha . . . . . . . . . . . . . . . . . . . . . 35
3.2 Gráficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4 SYMPY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.1 O que Computação Simbólica . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 Operações Básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1 Substituições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1.1 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.1.2 Convertendo Strings em Expressões SymPy . . . . . . . . . . . . . . . . . . . . 41
4.2.1.3 evalf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.2 lambdify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 Simplificações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.1 simplify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3.2 Funções de Simplificação Polinomial . . . . . . . . . . . . . . . . . . . . . . 43
4.3.2.1 expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.2.2 factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.2.3 colect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.2.4 apart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.3 Simplificaçõs Trigonométricas . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.3.1 trigsimp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3.3.2 expand trig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4 Cálculo Diferencial e Integral . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4.1 Derivadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.4.2 Integrais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.5 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5 EXERCÍCIOS DE FIXAÇÃO . . . . . . . . . . . . . . . . . . . . . . . 48
REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
1 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.
(a) Numpy. (b) Scipy.
(c) Matplotlib.
(d) Sympy
No terminal linux podemos utilizar alguns recursos interessantes como mostra a figura 3,
mas não são apresentados outros recursos como listas de comandos e documentação conforme
o usuário digita.
1.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.
(a) Console do Ipython. (b) Qt console do Ipython.
1.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 [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:
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.
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
1.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:
1.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 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:
1.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
>>> 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:
1.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.
Um exemplo é a função sqrt( ) do módulo math, a qual computa a raiz quadrada do
argumento inserido entre parêntesis.
a) x=15 e y=-2
b) x=-20 e y=10
c) x=-8 e y=5
>>> 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 *** ****** ****** **
>>> 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.
Exemplo 2)
Faça um programa para calcular o fatorial de um número inteiro positivo. Calcule o
fatorial do número 15.
sin( x ) arctan2( x )
cos( x ) degrees( x )
tan( x ) radians( x )
arcsin( x ) unwrap( x )
arccos( x ) deg2rad( x )
arctan( x ) rad2deg( x )
hypot( x1 , x2 ) sinh( x )
cosh( x1 ) tanh( x )
arcsinh( x ) arccos( x )
arctanh( x ) exp( x )
log( x ) log10( x )
log2( x ) sqrt( x )
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
>>> hypot (3 ,4)
5.0
2.1.1.1 Exercı́cios
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 )
4.0
>>> conj ( a )
(3 -6 j )
2.1.2.1 Exercı́cios
2.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:
2.2.1.1 Exercı́cios
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.
2.3.1.1 Exercı́cios:
−5x − 2y + 12z − w = −9
x + 3y − 2z + 4w = 10
−x − y − z = −7
3x − 3y + 7z + 9q = −6
2.3.2.1 Exemplos
2.3.2.2 Exercı́cios
2.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:
2.4.0.1 Exemplos
2.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.
2.5.0.1 Exemplos
2.5.0.2 Exercı́cios
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:
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( ).
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 )
( -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’ ] )
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 10 – Alterando extremos das caixas e nomeando pontos sobre os eixos.
3.2 Gráficos 3D
Para gráficos 3D utiliza-se a função Axes3D do módulo mpl.toolkits.mplot3d, ob-
serve:
>>> # 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.
4.2 Operações Básicas
Discutiremos aqui algumas das mais básicas operações a qual precisaremos para a mani-
pulação de expressões matemáticas com o sympy.
Vamos começar importando todas as funções da biblioteca, e também gerando os objetos
simbólicos.
4.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.
4.2.1.1 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)
>>> expr = x **3 + 4* x * y - z
>>> expr . subs ([( x , 2) , (y , 4) , (z , 0) ])
40
A função sympify pode ser utilizado para converter strings em uma expressão sympy.
Veja:
4.2.1.3 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:
4.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.
4.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
expand é uma das mais comuns funções de simplificação do SymPy. Ele tem muitos
escopos, por agora nos atentaremos a expandir expressões polinomiais.
4.3.2.2 factor
4.3.2.3 colect
4.3.2.4 apart
>>> 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
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.
Também pode-se calcular integrais multiplas apenas adicionando as informações das ou-
tras variáveis como argumento. Vejam:
4.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.
1. Faça uma função para a conversão de milı́metro para polegada e vice-versa. Faça a
função imprimir na tela mensagem 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:
Determine:
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/