4. Extras¶
Como a principal intenção do curso é prepará-los para o uso de SymPy
nas disciplinas que envolvem Cálculo, ao finalizar o capítulo anterior você deve estar pronto para resolver seus problemas utilizando esse módulo. Contudo, eu acredito que há muito a se falar sobre esse módulo. E, portanto, esse capítulo fará uma abordagem rápida sobre algumas coisas que são possíveis com ele.
4.1. Geometria¶
Isso mesmo, nós podemos resolver problemas de Geometria tanto de forma simbólica, como de forma numérica. A ideia principal não é ficar criando plots com o sistema completo, mas sim trabalhar matemáticamente (indo para o lado da Geometria Analítica).
Antes de começarmos essa seção e as próximas, faremos as devidas importações e definições:
from sympy import *
from sympy.geometry import * # Importante garantir que foi importado corretamente
x, y, z = symbols('x y z')
init_printing(use_unicode=True, use_latex='mathjax')
2D¶
Começando pela geometria em 2D, podemos seguir o processo de criar os pontos, as linhas (a partir dos pontos) e as formas 2D a partir dos segmentos. É bem simples e intuitivo, veja:
O = Point(0,0)
A = Point(1,2)
B = Point(3,-4)
C = Point(-2, 3)
Você pode fazer as operações padrões entre pontos normalmente.
B - A ## AB
Contudo, o indicado é utilizar as classes, que já terão suas propriedades a fácil acesso.
Segment(A,B) ## AB Simbólicamente
AC = Segment(A,C)
AC.slope ## inclinação
AC.length ## comprimento
AC.midpoint ## ponto médio
AC.contains(A) ## Contém A?
AC.distance(B) ## Menor distância ao ponto B
Nós podemos criar linhas também
Line(A,B)
l1 = Line(A,B)
l1.equation() ## Equação da reta = 0
l1.coefficients ## Coeficientes da reta
Podemos criar uma reta ao dar um ponto inicial e uma inclinação, lembrando que: \(y - y_0 = m(x-x_0)\)
l2 = Line(C, slope = 3)
l2.equation()
l3 = l2.perpendicular_line(A) ## Retorna uma reta perpendicular que passa pelo ponto dado
l3.equation()
l3.slope # -m^-1
E nós podemos ver a intersecção entre duas entidades geométricas.
intersection(l2,l3)
intersection(l1, l3) # Ponto A
Para plotar, de modo geral, fazemos o uso do que aprendemos no último capítulo, a função plot_implicit
.
plot_implicit(l1.equation())
<sympy.plotting.plot.Plot at 0x7f9593fee1d0>
Podemos criar figuras geométricas e encontrar suas áreas e verficiar intersecções. Veja os exemplos:
trig = Triangle(A,B,C) # Cria um Triângulo
trig
trig.area ## Não utiliza valores absolutos
abs(trig.area) ## Correto
trig.perimeter ## Perímetro
trig.orthocenter ## Centro Ortogonal
trig.circumcenter ## Circuncentro
trig.altitudes ## Alturas
trig.incircle ## Círculo interno
trig.incircle.equation()
trig.bisectors() ## Bissetrizes
trig.bisectors()[A] ## Bissetriz que passa no ponto A
trig.is_right() ## É triângulo retângulo?
False
trig.is_scalene() ## É triângulo escaleno?
True
circ = Circle(A, 3) ## Centro e Raio
circ
circ.equation()
circ.circumference
circ.area
intersection(trig,circ)
elips = Ellipse(B, 3, 2) ## Centro, Raio Horizontal, Raio Vertical
elips
elips.equation()
elips.circumference ## Não há formulas
elips.circumference.evalf() ## Valor numérico
elips.area
elips.eccentricity
elips.foci ## Focos
elips.focus_distance ## Distância Focal
D = Point(0,10)
quad = Polygon(A,B,C,D) ## Criando Polígono de N vértices
quad
abs(quad.area)
quad.angles
quad.angles[A] ## No ponto A
from sympy.physics.units import degree ## Importação das unidades
(quad.angles[A]/degree.scale_factor).evalf() ## Transforma em Graus
reg = RegularPolygon(A,1,4) # Centro, Raio, Qtd. Lados
reg
reg.angles # Retângulo
reg.vertices # Vértices
Para finalizar com a Geometria, é importante relembrar que é possível fazer tudo isso com valores simbólicos. Por exemplo, um quadrado em função de um lado \(x\):
sim_quad = Polygon(Point(x/2, x/2), Point(-x/2, x/2),Point(-x/2, -x/2),Point(x/2, -x/2))
sim_quad
sim_quad.area
3D¶
Para a terceira dimensão, podemos utilizar os Pontos com três coordenadas para gerar nossas formas.
M = Point(1, 2, 3)
N = Point(-2, 3, 4)
P = Point(5, -8, 10)
Line(M,N)
Line(M,N).equation()
Plane(M,N,P) # Plano
Plane(M,N,P).equation()
4.2. Reações em Vigas (Mecânica)¶
Nós podemos analisar as tensões em vigas utilizando o sympy.physics.continuum_mechanics
. Caso você procure aplicar carregamento em uma viga e então avaliar as reações e seus gráficos, certamente isso vai te auxiliar.
Veja um exemplo (no caso, para fazer sentido, leva os mesmos valores de um exemplo da documentação):
from sympy.physics.continuum_mechanics.beam import Beam
E, I = symbols('E I') ## Símbolos para o Módulo de Elasticidade e o Momento de Inércia
R1, R2 = symbols('R1 R2') ## Símbolos para as forças
b = Beam(50, 20, 30) ## Criando a viga (comprimento, E, I)
b.apply_load(R1, 0, -1) ## Aplicando carregamentos (intensidade, início, ordem)
###
### Momentos, order = -2
### Forças Pontuais, order =-1
### Forças distribuídas linearmente, order = 0
### Veja os outros na documentação
###
b.apply_load(R1, 10, -1)
b.apply_load(R2, 30, -1)
b.apply_load(90, 5, 0, 23)
b.apply_load(10, 30, 1, 50)
b.load ## Carregamento
b.shear_force() ## Força Cortante
b.bending_moment() ## Momento Fletor
p = b.draw()
p.show() ## Ilustração Gráfica
b.solve_for_reaction_loads(R1, R2) ## Solucionando
b.plot_bending_moment() ## Plot Momento Fletor
<sympy.plotting.plot.Plot at 0x7f9576b37cd0>
b.plot_shear_force() ## Plotando Força Cortante
<sympy.plotting.plot.Plot at 0x7f9576c90d50>
b.apply_support(50, 'pin') ## Criando apoios
b.apply_support(0, 'fixed')
b.apply_support(20, 'roller')
b.load
p = b.draw()
p.show()