Advertisement
ivodevweb

Untitled

Jan 20th, 2023
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.00 KB | Software | 0 0
  1. import streamlit as st
  2. import matplotlib.pyplot as plt
  3. import pandas as pd
  4. import math
  5.  
  6. st.set_option('deprecation.showPyplotGlobalUse', False)
  7. # Cabeçalho do programa
  8. st.header("EfolioB de Fisica")
  9. # Titulo do programa
  10. st.title("Simulador Grafico de um Pendulo ")
  11.  
  12.  
  13. st.sidebar.title("Valores a Simular:")
  14.  
  15. # Entrada de texto para massa da esfera
  16. massa_input = st.sidebar.text_input("Informe a massa da esfera (g)", "2.6")
  17.  
  18. # Slider para massa da esfera
  19. massa_slider = st.sidebar.slider("Massa da esfera (g)", 1.0, 10.0, 2.6) # Massa em g
  20.  
  21. try:
  22.     # Converte a entrada de texto para float
  23.     massa = float(massa_input) if massa_input.strip() else massa_slider
  24.     # Converte massa para kg
  25.     m = massa/1000 # Massa em kg
  26. except ValueError:
  27.     st.warning("Por favor, insira um número válido para a massa.")
  28.     m = massa_slider/1000  # Massa em kg
  29.  
  30.  
  31.  
  32.  
  33. L = st.sidebar.slider("Comprimento do fio (m)", 0.5, 3.0, 1.0)  # Comprimento da corda em metros
  34. R = st.sidebar.slider("Raio da esfera (cm)", 1.0, 20.0, 30.0)  # raio da esfera em cm
  35.  
  36. #carrega gif animado com pendulo no sidebar
  37. gif_pendulo = "small-angle.gif"
  38. st.sidebar.image(gif_pendulo, width=300)
  39.  
  40. def run_simulation():
  41.     # constants
  42.     ra = R/100 # raio da esfera em m
  43.     cd = 0.1 # Coeficiente de arrasto aerodinâmico para uma esfera
  44.     rho = 1.28 # Massa específica do ar em kg/m^3
  45.     g = 9.81
  46.  
  47.    
  48.     # Área frontal do pêndulo
  49.     A = math.pi * ra**2
  50.    
  51.     # Calcula o coeficiente de arrasto aerodinâmico
  52.     b = 1/2 * rho * cd * A
  53.  
  54.     theta0 = 0.05 # Ângulo inicial em radianos
  55.     w0 = 0.0      # Velocidade angular inicial em rad/s
  56.     t0 = 0.0      # Tempo inicial em s
  57.     h = 0.1       # Passo de tempo em s
  58.    
  59.     # Listas para armazenar resultados
  60.     t = [t0]
  61.     theta = [theta0]
  62.     w = [w0]
  63.     k1x_ = 0
  64.     k1v_ = 0
  65.     k2x_ = 0
  66.     k2v_ = 0
  67.     k1x = [k1x_] * len(t)
  68.     k1v = [k1v_] * len(t)
  69.     k2x = [k2x_] * len(t)
  70.     k2v = [k2v_] * len(t)
  71.    
  72.     # Loop do tempo
  73.     while t[-1] < 100.0:
  74.       # Cálculo dos valores intermediários
  75.         k1x_ = w[-1]
  76.         k1v_ = -math.copysign(1, w[-1]) * (((b*L)/m) * w[-1]**2) - (g / L) * theta[-1]
  77.         k2x_ = w[-1] + k1v_ * h
  78.         k2v_ = -math.copysign(1, w[-1] + k1v_ * h) * (((b*L)/m )* (w[-1] + k1v_ * h)**2) - (g / L) * (theta[-1] + k1x_ * h)
  79.      
  80.         # Atualização dos valores de θ e w
  81.         theta.append(theta[-1] + ((k1x_ + k2x_) / 2.0)*h)
  82.         w.append(w[-1] + ((k1v_ + k2v_) / 2.0)*h)
  83.      
  84.         # Atualização do tempo
  85.         t.append(t[-1] + h)
  86.        
  87.         # Atualiza novos valores para os arrays k1x, k1v, k2x e k2v
  88.         k1x.append(k1x_)
  89.         k1v.append(k1v_)
  90.         k2x.append(k2x_)
  91.         k2v.append(k2v_)
  92.        
  93.    
  94.         fig, ax = plt.subplots()
  95.         # Cria o gráfico para θ com a linha vermelha
  96.         ax.plot(t, theta, 'r')
  97.        
  98.         # Adiciona uma linha para w com a linha azul
  99.         ax.plot(t, w, 'b')
  100.        
  101.         # Adiciona uma legenda
  102.         ax.legend(['theta (rad)', 'w (rad/s)'])
  103.        
  104.         # Adiciona títulos aos eixos
  105.         ax.set_xlabel('Tempo (s)')
  106.         ax.set_ylabel('Theta (rad), w (rad/s)')
  107.    
  108.     # Crie um dataframe das listas t, theta , w , e tambem k1x, k1v, k2x e k2v      
  109.     df = pd.DataFrame({'t (s)': t, 'theta (rad)': theta, 'w (rad/s)': w, 'k1x': k1x, 'k1v': k1v, 'k2x': k2x, 'k2v': k2v})
  110.    
  111.     # Salva o dataframe em um arquivo CSV
  112.     df.to_csv('pendulum_results_full_heun_Final.csv', index=False)
  113.    
  114.     # Exibe o gráfico  
  115.     st.pyplot(fig)
  116.    
  117.     dfe=pd.read_csv("pendulum_results_full_heun_Final.csv")
  118.    
  119.     # Mostra as primeiras linhas do Dataframe
  120.     st.title("Tabela ")
  121.    
  122.     #imprime tabela direto do array
  123.     st.write(df)
  124.      
  125.     #imprime tabela que carrega ficheiro
  126.     # st.write(dfe)  
  127.  
  128. if st.button("Simular Grafico"): # Cria o botão para simular o grafico e a tabela
  129.     run_simulation()
  130.    
  131.     st.text(" Realizado por: Ivo Baptista  ") # texto no final
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement