IPython Notebook
1 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
Vetores em Python
Disciplina "Introdução à Computação em Física" (ICF) da UFES/Alegre
Curso de Licenciatura em Física - Turma 2012/2
Autoria : Prof. Roberto Colistete Jr., em 04/2013.
Listas em Python puro não são vetores matemáticos :
Listas são coleção de objetos em Python :
In [1]: vetor1 = [1,2,3]
In [2]: vetor1[0]
Out[2]:
1
In [3]: vetor1[1]
Out[3]:
2
In [4]: vetor1[0:2]
Out[4]:
[1, 2]
In [5]: vetor1[-1]
Out[5]:
3
In [6]: len(vetor1)
Out[6]:
3
"append" na verdade é um método do objeto vetor1 que é da classe list. Um pouquinho de OOP (Object Oriented
Programming)...
In [7]: vetor1.append("ola")
In [8]: vetor1
Out[8]:
[1, 2, 3, 'ola']
19-04-2013 00:51
IPython Notebook
2 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
"del" permite apagar elementos de uma lista :
In [9]: del vetor1[-1]
In [10]: vetor1
Out[10]:
[1, 2, 3]
Listas são usadas pela estrutura de repetição "for" :
In [11]: for i in vetor1:
print 2**i
2
4
8
Mas listas não se comportam como vetores matemáticos :
In [12]: 1 + vetor1
--------------------------------------------------------------------------TypeError
Traceback (most recent call last)
<ipython-input-12-40437d7529f1> in <module>()
----> 1 1 + vetor1
TypeError: unsupported operand type(s) for +: 'int' and 'list'
In [13]: vetor1 + vetor1
Out[13]:
[1, 2, 3, 1, 2, 3]
In [14]: vetor1 * 3
Out[14]:
[1, 2, 3, 1, 2, 3, 1, 2, 3]
Usando NumPy para vetores numéricos :
Com NumPy temos "array" que permite definir vetores (e matrizes, etc) matemáticos, incluindo produto escalar, etc. A
limitação é que só para valores numéricos.
In [15]: import numpy as np
A função "array" do NumPy define um vetor numérico :
19-04-2013 00:51
IPython Notebook
3 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
In [16]: vetor2 = np.array([1, 2, 3])
In [17]: vetor2
Out[17]:
array([1, 2, 3])
In [18]: vetor2[0]
Out[18]:
1
In [19]: 1 + vetor2
Out[19]:
array([2, 3, 4])
In [20]: vetor2
Out[20]:
array([1, 2, 3])
In [21]: vetor2 + vetor2
Out[21]:
array([2, 4, 6])
In [22]: vetor2 * 3
Out[22]:
array([3, 6, 9])
In [23]: vetor2**2
Out[23]:
array([1, 4, 9])
In [24]: np.sin(vetor2)
Out[24]:
array([ 0.84147098,
0.90929743,
0.14112001])
In [25]: vetor3 = np.array([4, 5, 6])
Produto escalar (interno) é via função "dot" do NumPy :
In [26]: np.dot(vetor2, vetor3)
Out[26]:
32
In [27]: np.sqrt(np.dot(vetor2, vetor2))
Out[27]:
3.7416573867739413
19-04-2013 00:51
IPython Notebook
4 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
In [28]: np.linalg.norm(vetor2)
Out[28]:
3.7416573867739413
O produto via "*" não é produto escalar, e sim o produto de termo a termo de cada vetor :
In [29]: vetor2*vetor3
Out[29]:
array([ 4, 10, 18])
Produto vetorial é via função "cross" do NumPy :
In [30]: np.cross(vetor2, vetor3)
Out[30]:
array([-3,
6, -3])
In [31]: np.cross(vetor2, vetor2)
Out[31]:
array([0, 0, 0])
Usando SymPy (Matrix) para vetores com termos simbólicos :
In [32]: from sympy import *
Função "Matrix" define um vetor (que é um caso específico de uma matriz, aqui um vetor coluna 3x1) :
In [33]: vetor4 = Matrix(3,1,[1,2,3])
In [34]: vetor4
Out[34]:
[1]
[2]
[3]
"dot" é um método do vetor para calcular o produto escalar :
In [35]: vetor4.dot(vetor4)
Out[35]:
14
"cross" é um método do vetor para calcular o produto vetorial :
19-04-2013 00:51
IPython Notebook
5 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
In [36]: vetor4.cross(vetor4)
Out[36]:
[0, 0, 0]
Vetores com elementos simbólicos :
In [37]: t, R, omega = symbols("t, R, omega")
Vetor posição de um movimento circular uniforme em 2D :
In [38]: r = Matrix(2,1,[R*cos(omega*t),R*sin(omega*t)])
In [39]: r
Out[39]:
[R*cos(omega*t)]
[R*sin(omega*t)]
In [40]: r.dot(r)
Out[40]:
R**2*sin(omega*t)**2 + R**2*cos(omega*t)**2
In [41]: simplify(r.dot(r))
Out[41]:
R**2
Vetor velocidade é a derivada do vetor posição em relação ao tempo t, onde "diff" é um método do vetor :
In [42]: v = r.diff(t); v
Out[42]:
[-R*omega*sin(omega*t)]
[ R*omega*cos(omega*t)]
In [43]: simplify(v.dot(v))
Out[43]:
R**2*omega**2
Vetor posição r é ortogonal ao vetor velocidade v :
In [44]: r.dot(v)
Out[44]:
0
Vetor aceleração é a derivada do vetor velocidade em relação ao tempo t :
19-04-2013 00:51
IPython Notebook
6 de 6
http://127.0.0.1:8888/320ef90b-f34f-4a03-a174-382e132ecd51/...
In [45]: a = v.diff(t); a
Out[45]:
[-R*omega**2*cos(omega*t)]
[-R*omega**2*sin(omega*t)]
In [46]: simplify(a.dot(a))
Out[46]:
Ou seja, a
R**2*omega**4
= v 2 /R :
In [47]: simplify(v.dot(v))/R
Out[47]:
R*omega**2
Vetor velocidade v é ortogonal ao vetor aceleração a :
In [48]: v.dot(a)
Out[48]:
0
19-04-2013 00:51
Download

vetor velocidade