Cinemática Aplicando ecuaciones diferenciales

>

_

Ruth Sibia Chura

UNIVERSIDAD NACIONAL MICAELA BASTIDAS DE APURÍMAC

 

FACULTAD DE INGENIERÍA

ESCUELA ACADÉMICA PROFESIONAL DE INGENIERÍA INFORMÁTICA Y SISTEMAS

 

 La Mecánica se ocupa de las relaciones entre los movimientos de los sistemas materiales y las causas que los producen. Se divide en tres partes: Cinemática que describe el movimiento, Dinámica que estudia el movimiento y sus causas y Estática que estudia las fuerzas y el equilibrio de los cuerpos.

A nivel matemático, la cinemática indica cómo cambian las coordenadas de posición de un cuerpo en función del tiempo. Dicha trayectoria puede ser descripta mediante una función matemática que depende de la aceleración (el cambio de la velocidad en el tiempo) y la velocidad (el tiempo en el cual modifica su posición el cuerpo).


"""
#instalacion
pip install sympy
pip install numpy
pip install matplotlib
"""
from sympy import *
import matplotlib.pyplot as plt
from matplotlib.widgets import Button, TextBox, RadioButtons
import numpy as np

class Cinematica:
	def __init__(self):
		self.xt = None #funcion posicion
		self.vt = None #funcion velocidad
		self.at = None #funcion aceleracion
		self.t = Symbol('t')

	def inicializar_en_posicion(self,xstr):#xstr = str ('2*t**2')
		t = self.t
		self.xt = eval(xstr)
		self.vt = self.xt.diff(self.t)#derivada
		self.at = self.vt.diff(self.t)#derivada

	def inicializar_en_velocidad(self,vstr):#vstr = str ('2*t**2')
		t = self.t
		self.vt = eval(vstr)
		self.xt = integrate(self.vt,self.t)#integral
		self.at = self.vt.diff(self.t)#derivada

	def inicializar_en_aceleracion(self,astr):#astr = str ('2*t**2')
		t = self.t
		self.at = eval(astr)
		self.vt = integrate(self.at,self.t)#integral
		self.xt = integrate(self.vt,self.t)#integral
	
	def posicion_t(self,ti):
		xte = lambdify(self.t, self.xt)
		return xte(ti)

	def velocidad_t(self,ti):
		vte = lambdify(self.t, self.vt)
		return vte(ti)

	def aceleracion_t(self,ti):
		ate = lambdify(self.t, self.at)
		return ate(ti)

	def resolver_posicion_0(self):
		return solve(self.xt,self.t)

	def resolver_velocidad_0(self):
		return solve(self.vt,self.t)

	def resolver_aceleracion_0(self):
		return solve(self.at,self.t)

#---------------------------------
#clase
ci =None
#---
texto_xt = None
fxt=None
#lienzos
l1 = None
l2 = None
l3 = None
#legend
le = None
#valor radio
ra ='x'
#valores en instantes de tiempo
texto_x_t=None
texto_v_t=None
texto_a_t=None
#
text_box=None
def evaluar(event):
	global fxt
	global l1
	global l2
	global l3
	global le
	global ci
	global ra
	ci = Cinematica()
	if ra=='v':
		ci.inicializar_en_velocidad(fxt)
	elif ra=='a':
		ci.inicializar_en_aceleracion(fxt)
	else:
		ci.inicializar_en_posicion(fxt)
	#graficar
	t = np.array(range(10))
	text_xt = str(ci.xt)
	text_vt = str(ci.vt)
	text_at = str(ci.at)
	fx = eval(text_xt)
	fv = eval(text_vt)
	fa = eval(text_at)
	l1.set_ydata(fx)
	le.get_texts()[0].set_text('x(t) = '+r'$'+text_xt.replace('**','^')+'$')
	l2.set_ydata(fv)
	le.get_texts()[1].set_text('v(t) = '+r'$'+text_vt.replace('**','^')+'$')
	l3.set_ydata(fa)
	le.get_texts()[2].set_text('a(t) = '+r'$'+text_at.replace('**','^')+'$')
	plt.draw()

def submit(text):
    global texto_xt
    global fxt
    global ra
    fxt = text
    if ra=='v':
    	texto_xt.set_text('v(t) = '+r'$'+text.replace('**','^')+'$')
    elif ra=='a':
    	texto_xt.set_text('a(t) = '+r'$'+text.replace('**','^')+'$')
    else:
    	texto_xt.set_text('x(t) = '+r'$'+text.replace('**','^')+'$')
    plt.draw()

def submit_value(text):
	global texto_x_t
	global texto_v_t
	global texto_a_t
	global ci
	texto_x_t.set_text('x('+text+') = '+ str(ci.posicion_t(eval(text))))
	texto_v_t.set_text('v('+text+') = '+ str(ci.velocidad_t(eval(text))))
	texto_a_t.set_text('a('+text+') = '+ str(ci.aceleracion_t(eval(text))))
	plt.draw()

def radio_click(label):
	global ra
	global text_box
	ra = label[0].lower()
	plt.draw()
def main():
	"""
	eq = input('ingrese la ecuacion en funcion al tiempo (2*t+5)')
	t = Symbol('t')
	f = eval(eq)
	f_prima = f.diff(t)#derivada respecto al tiempo
	#analizando valores
	f1 = lambdify(t, f)
	f_prima1 = lambdify(t, f_prima)
	print('f(3) = '+str(f1(3)))
	print("f'(3) = "+str(f_prima1(3)))
	#igualamos a 0
	solucion_0 = solve(f_prima,t)
	print("f'= 0 es"+str(solucion_0))
	#----------------------------------
	integrate(f, x) returns the indefinite integral -> indefinido
	integrate(f, (x, a, b)) returns the definite integral ->definido en un rango de "a" a "b"
	"""
	global ci
	#---------
	global l1
	global l2
	global l3
	global le
	#-----
	global text_box
	ci = Cinematica()
	ci.inicializar_en_posicion('2*t**3 + 3*t -2')
	#graficar
	t = np.array(range(10))
	text_xt = str(ci.xt)
	text_vt = str(ci.vt)
	text_at = str(ci.at)
	fx = eval(text_xt)
	fv = eval(text_vt)
	fa = eval(text_at)
	#-----
	plt.subplots_adjust(bottom=0.5)
	# Create the plot

	l1, = plt.plot(t,fx,label='x(t) = '+r'$'+text_xt.replace('**','^')+'$')
	l2, = plt.plot(t,fv,label='v(t) = '+r'$'+text_vt.replace('**','^')+'$')
	l3, = plt.plot(t,fa,label='a(t) = '+r'$'+text_at.replace('**','^')+'$')

	# Add a title
	plt.title('Cinematica')

	# Add X and y Label
	plt.xlabel('tiempo (t)')
	#plt.ylabel('y axis')

	# Add a grid
	plt.grid(alpha=.4,linestyle='--')

	# Add a Legend
	le = plt.legend()

	#----- add radio butom
	rax = plt.axes([0.1, 0.27, 0.23, 0.15])
	radio = RadioButtons(rax, ('Posicion', 'Velocidad', 'Aceleracion'))
	radio.on_clicked(radio_click)
	#------------------------
	#----- add textbox
	axbox = plt.axes([0.1, 0.21, 0.3, 0.050])
	text_box = TextBox(axbox, 'f(t)', initial='2*t**3 + 3*t -2')
	text_box.on_submit(submit)

	#------add text
	global texto_xt
	texto_xt =  plt.text(1.2,0.21 , '', fontsize=10)
	#texto.set_text("cambiado texto")

	#----- add button
	axbtn = plt.axes([0.1, 0.145, 0.18, 0.055])
	bprev = Button(axbtn, 'Evaluar')
	bprev.on_clicked(evaluar)

	#----- textbox para calcular valores
	global texto_x_t
	global texto_v_t
	global texto_a_t
	axbox_x = plt.axes([0.1, 0.08, 0.12, 0.050])
	text_box_x = TextBox(axbox_x, 't =', initial='2')
	text_box_x.on_submit(submit_value)

	texto_x_t =  plt.text(1.2,0.2 , '', fontsize=10)
	texto_v_t =  plt.text(2.4,0.2 , '', fontsize=10)
	texto_a_t =  plt.text(3.6,0.2 , '', fontsize=10)
	# Show the plot
	plt.show()
	#-------------------------------
if __name__ == '__main__':
	main()

Presentación del código

Deslizar abajo para ver todo el codigo

Para lo cual demostraremos:

2.Aceleración

v−vo = ∫a⋅dt
a = dv/dt
∫ dv = ∫a.dt
v = vo + ∫a.dt
a = dv/dt
v = vo + a ∫dt

Cuando la aceleración

no es contante

v = vo + at

3.Velocidad

v = dx/dt
∫dx = ∫vdt
x-xo = ∫vdt
x = xo +∫ vdt

Sustituyendo

x = xo +∫ (vo + at)dt
x = xo + vot + a∫tdt
x = xo + vot + at^2/2

3.Ejercicio

se tiene una escopeta, en la cual tiene un cañón de una longitud promedio. Se realiza un disparo  bala sale, llega hasta el final de la escopeta.

v(t) = -5*10⁷ t² + 3*10⁵t

  1. Determinar la velocidad final  de la bala

  2. Determinar el tiempo que demora la bala pasar por el cañón de la escopeta

  3. La longitud de el cañon

4.Ejercicio

5.CONTINUANDO

{
  "title": "My Deck",
  "width": 1024,
  "height": 576,
  "transition": "slide",
  "slides": [
    {
      "notes": "Top secret speaker notes",
      "blocks": [
        {
          "type": "text",
          "value": "Hello world"
        },
        {
          "type": "iframe",
          "value": "https://slides.com/news/groups/embed"
        }
      ]
    }
  ]
}

Cuánto tiempo le demora a la bala llegar

donde

6.Aplicacion

HTML

CSS

JS

Made with Slides.com