Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.93 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Dec 15 15:28:28 2016
  4.  
  5. @author: Alberto Camjayi
  6. """
  7.  
  8. # Parámetros del problema
  9. g = 9.8                 # aceleración de la gravedad
  10. m = 1                  # masa de los péndulos
  11. l_largos = 1           # largo de los primeros péndulos
  12. l_cortos = 0.5         # idem de los del final de la cadena
  13. k = 5                  # constante de los resortes
  14. Gama = 0.1             # constante de amortiguamiento
  15. N_largos = 30          # número de péndulos largos
  16. N_cortos = 200         # número de péndulos cortos
  17. F0_sobre_m = 4         # fuerza sobre la primera masa
  18. Omega = 3              # frecuencia angular de forzado
  19. # ----------------------------------------------------------------
  20. # Importamos algunas herramientas necesarias
  21. from scipy import *
  22. from scipy.linalg import eigh
  23. from scipy.sparse import spdiags, hstack, vstack, bmat, dia_matrix
  24. from pylab import figure, grid, plot, axis, xlabel, ylabel, title, legend, show
  25.  
  26. def get_M(N1,l1,N2,l2):             # Aquí construímos la matriz
  27.     Nm = N1+N2
  28.     diag0 = zeros(Nm); diag1 = zeros(Nm)
  29.     diag0[:N1] = g/l1+2*k/m          # Elementos de la diagonal
  30.     diag0[N1:] = g/l2+2*k/m          # Elementos de la diagonal
  31.     diag1[1:] = -k/m                 # Elementos extradiagonales
  32.  
  33.     Mi = spdiags([diag0,diag1],[0,1],Nm,Nm)
  34.     return Mi
  35.  
  36. def get_sol_estacionaria(w0,Fm,Omega):
  37.     Aes = zeros(w0.size)
  38.     Bes = zeros(w0.size)
  39.  
  40.     Aes =         Omega*Gama*Fm/((w0**2-Omega**2)**2 + Omega**2*Gama**2)
  41.     Bes = (w0**2 - Omega**2)*Fm/((w0**2-Omega**2)**2 + Omega**2*Gama**2)
  42.  
  43.     return Aes, Bes
  44.  
  45.  
  46. M = get_M(N_largos,l_largos,N_cortos,l_cortos).toarray()
  47. w0_cuadrado, Dmatrix = eigh(M,lower=False)
  48.  
  49. F = zeros(N_largos+N_cortos); F[0] = F0_sobre_m
  50.  
  51. F_en_modos = dot(transpose(Dmatrix),F)
  52.  
  53.  
  54. for i in range(7):
  55.     Omega = Omega + i*3
  56.  
  57.     A_en_modos, B_en_modos = get_sol_estacionaria(w0_cuadrado,F_en_modos,Omega)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement