Essa página tem como objetivo ilustrar a lista de exercícios para a aula de módulo de Weibull. Ela apresenta widgets interativos que em teoria carregam automaticamente. Entretanto, pode ser necessário clicar no botão abaixo para carregá-los:
ATENÇÃO: Pode demorar até 5 minutos para carregar devidamente todos os widgets. Se eles não estiverem respondendo à sua interação, reinicie a página.
Se tiver alguma falha técnica ou dúvida, por favor, não hesite em contactar:
Murilo Henrique Moreira - E-mail: moreira.murilo@gmail.com
Esta lista de exerícios tem como foco garantir que os objetivos principais da aula sobre estatística de Weibull foram alcançados e para fornecer desafios que levem a visualização e a prática dos conceitos passados. Para tanto, tomemos o ensaio de tração a seguir:
#@title
#HIDDEN
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from ipywidgets import interactive, widgets
from matplotlib.ticker import FormatStrFormatter
from scipy import stats
%matplotlib inline
def run_test(epsilon_i, E, sigma_f):
if epsilon_i * E < sigma_f:
epsilons = np.linspace(0, epsilon_i, 1000)
sigmas = E*epsilons
else:
epsilons = np.linspace(0, epsilon_i, 1000)
sigmas = E*epsilons
sigmas[sigmas>sigma_f] = np.zeros(sigmas[sigmas>sigma_f].shape[0])
return epsilons, sigmas
m=3
E=400e9
sigma_0=220e6
sigma_f_1 = 220e6 # np.random.weibull(m, 1)*sigma_0
def f(epsilon_i):
epsilons_1, sigmas_1 = run_test(epsilon_i, E, sigma_f_1)
epsilon_max = sigma_f_1/E
bar = np.array([0.09, 0.1, 0.11])
plt.text(0.0925, 215, 'Amostra')
plt.text(bar[0]*(1-epsilon_i*100)*0.9, 205, 'F')
plt.text(bar[2]*(1+epsilon_i*100)*1.06, 205, 'F')
plt.arrow(bar[0]*(1-epsilon_i*100), 200, -0.01, 0, head_width=10, head_length=0.005,
fc='k', ec='k', zorder=4)
plt.arrow(bar[2]*(1+epsilon_i*100), 200, 0.01, 0, head_width=10, head_length=0.005,
fc='k', ec='k', zorder=4)
if epsilon_i < epsilon_max:
plt.plot([bar[0]*(1-epsilon_i*100), bar[1],
bar[2]*(1+epsilon_i*100)], [200, 200, 200], lw=10, c='k', label='Amostra')
if epsilon_i >= epsilon_max:
plt.plot([bar[0]*(1-epsilon_i*100),
bar[1]*(1-(epsilon_i-epsilon_max)*100)-0.0021], [200, 200], lw=10, c='k')
plt.plot([bar[1]*(1+(epsilon_i-epsilon_max)*100)+0.0021,
bar[2]*(1+epsilon_i*100)], [200, 200], lw=10, c='k', label='Amostra')
plt.plot(epsilons_1*100, sigmas_1*1e-6, c='Navy')
plt.ylim(0, 300)
plt.xlim(0, 0.14e-2*100)
plt.ylabel('Tensão, $\sigma$ [MPa]')
plt.xlabel('Deformação, $\epsilon$ [%]')
plt.grid(lw=0.25)
plt.show()
int_plot = interactive(f,
epsilon_i=widgets.FloatSlider(value=0,
min=0,
max=1e-3,
step=1e-5,
description='𝜖',
readout_format='.2e',
orientation='horizontal')
)
int_plot.layout = widgets.Layout(display='flex',
flex_flow='column-reverse',
align_items='center',
align_content='center',
justify_content='center',
width='100%')
output = int_plot.children[-1]
output.layout.height = '300px'
style = 'p style="border-style: solid; border-width: 2px; border-radius: 5px; border-color:lightgrey; padding: 2px 5px;"'
caption = widgets.HTML(value=f'<{style}><b> Widget Interativo 1 : </b> Ensaio de Tração de uma amostra qualquer. \
Arraste o slider para a direita para aumentar a deformação.</p>',
layout=widgets.Layout(width='750px'))
box_layout = widgets.Layout(display='flex',
flex_flow='column',
align_items='center',
align_content='center',
justify_content='center',
width='100%')
widgets.VBox([int_plot, caption], layout=box_layout)
Realize os ensaios de tração para o Material 1 e o Material 2 (arraste o slider para a direita, ampliando a deformação - e consequentemente a tensão). Ao final do ensaio, será apresentada uma tabela com os valores de tensão de falha, σtrf, de cada amostra. Calcule o valor de módulo de Weibull, m, para cada um dos materiais.
#@title
#HIDDEN
#nbi:left
m_1 = 3
E = 400e9
sigma_0 = 75e6
sigma_f_1_1 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_2 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_3 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_4 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_5 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_6 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_7 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_8 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_9 = np.random.weibull(m_1, 1)*sigma_0
sigma_f_1_10 = np.random.weibull(m_1, 1)*sigma_0
def f_1(epsilon_i_per):
epsilon_i = epsilon_i_per / 100
epsilons_1, sigmas_1 = run_test(epsilon_i, E, sigma_f_1_1)
epsilons_2, sigmas_2 = run_test(epsilon_i, E, sigma_f_1_2)
epsilons_3, sigmas_3 = run_test(epsilon_i, E, sigma_f_1_3)
epsilons_4, sigmas_4 = run_test(epsilon_i, E, sigma_f_1_4)
epsilons_5, sigmas_5 = run_test(epsilon_i, E, sigma_f_1_5)
epsilons_6, sigmas_6 = run_test(epsilon_i, E, sigma_f_1_6)
epsilons_7, sigmas_7 = run_test(epsilon_i, E, sigma_f_1_7)
epsilons_8, sigmas_8 = run_test(epsilon_i, E, sigma_f_1_8)
epsilons_9, sigmas_9 = run_test(epsilon_i, E, sigma_f_1_9)
epsilons_10, sigmas_10 = run_test(epsilon_i, E, sigma_f_1_10)
plt.plot(epsilons_1*100, sigmas_1*1e-6, c='Navy', label='Amostra 1')
plt.plot(epsilons_2*100, sigmas_2*1e-6, c='blue', label='Amostra 2')
plt.plot(epsilons_3*100, sigmas_3*1e-6, c='orange', label='Amostra 3')
plt.plot(epsilons_4*100, sigmas_4*1e-6, c='crimson', label='Amostra 4')
plt.plot(epsilons_5*100, sigmas_5*1e-6, c='olive', label='Amostra 5')
plt.plot(epsilons_6*100, sigmas_6*1e-6, c='yellow', label='Amostra 6')
plt.plot(epsilons_7*100, sigmas_7*1e-6, c='pink', label='Amostra 7')
plt.plot(epsilons_8*100, sigmas_8*1e-6, c='brown', label='Amostra 8')
plt.plot(epsilons_9*100, sigmas_9*1e-6, c='C0', label='Amostra 9')
plt.plot(epsilons_10*100, sigmas_10*1e-6, c='olive', label='Amostra 10')
if epsilon_i * E >= sigma_f_1_1 and epsilon_i * E >= sigma_f_1_2 and epsilon_i * E >= sigma_f_1_3 and epsilon_i * E >= sigma_f_1_4 and epsilon_i * E >= sigma_f_1_5:
ytable = plt.table(cellText=[['Amostra 1', round(sigma_f_1_1[0]*1e-6, 2)],
['Amostra 2', round(sigma_f_1_2[0]*1e-6, 2)],
['Amostra 3', round(sigma_f_1_3[0]*1e-6, 2)],
['Amostra 4', round(sigma_f_1_4[0]*1e-6, 2)],
['Amostra 5', round(sigma_f_2_5[0]*1e-6, 2)],
['Amostra 6', round(sigma_f_2_6[0]*1e-6, 2)],
['Amostra 7', round(sigma_f_2_7[0]*1e-6, 2)],
['Amostra 8', round(sigma_f_2_8[0]*1e-6, 2)],
['Amostra 9', round(sigma_f_2_9[0]*1e-6, 2)],
['Amostra 10', round(sigma_f_2_10[0]*1e-6, 2)]],
colLabels=['Amostras', 'Tensão de Falha, $\sigma_f$'],
bbox=[-0.025, -1.2, 1.075, 0.875], cellLoc='center',
fontsize=18)
ytable.auto_set_font_size(False)
ytable.set_fontsize(16)
ytable.scale(4, 2)
plt.ylim(0, 100)
plt.xlim(0, 0.5e-3*100)
plt.ylabel('Tensão, $\sigma$ [MPa]')
plt.xlabel('Deformação, $\epsilon$ [%]')
plt.grid()
plt.legend(fontsize=14)
plt.show()
int_plot_1 = interactive(f_1,
# epsilon_i=(0, 1e-4, 0.1e-5),
epsilon_i_per=widgets.FloatSlider(value=0,
min=0,
max=5e-2,
step=1e-4,
description='𝜖 ',
readout_format='.2e')
)
output = int_plot_1.children[-1]
output.layout.height = '500px'
int_plot_1.layout = widgets.Layout(display='flex',
flex_flow='column',
align_items='center',
align_content='center',
justify_content='center',
width='100%')
int_plot_1
#@title
#HIDDEN
#nbi:left
m_2 = 15
E = 400e9
sigma_0 = 50e6
sigma_f_2_1 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_2 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_3 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_4 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_5 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_6 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_7 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_8 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_9 = np.random.weibull(m_2, 1)*sigma_0
sigma_f_2_10 = np.random.weibull(m_2, 1)*sigma_0
def f_2(epsilon_i_per):
epsilon_i = epsilon_i_per / 100
epsilons_1, sigmas_1 = run_test(epsilon_i, E, sigma_f_2_1)
epsilons_2, sigmas_2 = run_test(epsilon_i, E, sigma_f_2_2)
epsilons_3, sigmas_3 = run_test(epsilon_i, E, sigma_f_2_3)
epsilons_4, sigmas_4 = run_test(epsilon_i, E, sigma_f_2_4)
epsilons_5, sigmas_5 = run_test(epsilon_i, E, sigma_f_2_5)
epsilons_6, sigmas_6 = run_test(epsilon_i, E, sigma_f_2_6)
epsilons_7, sigmas_7 = run_test(epsilon_i, E, sigma_f_2_7)
epsilons_8, sigmas_8 = run_test(epsilon_i, E, sigma_f_2_8)
epsilons_9, sigmas_9 = run_test(epsilon_i, E, sigma_f_2_9)
epsilons_10, sigmas_10 = run_test(epsilon_i, E, sigma_f_2_10)
plt.plot(epsilons_1*100, sigmas_1*1e-6, c='Navy', label='Amostra 1')
plt.plot(epsilons_2*100, sigmas_2*1e-6, c='blue', label='Amostra 2')
plt.plot(epsilons_3*100, sigmas_3*1e-6, c='orange', label='Amostra 3')
plt.plot(epsilons_4*100, sigmas_4*1e-6, c='crimson', label='Amostra 4')
plt.plot(epsilons_5*100, sigmas_5*1e-6, c='olive', label='Amostra 5')
plt.plot(epsilons_6*100, sigmas_6*1e-6, c='yellow', label='Amostra 6')
plt.plot(epsilons_7*100, sigmas_7*1e-6, c='pink', label='Amostra 7')
plt.plot(epsilons_8*100, sigmas_8*1e-6, c='brown', label='Amostra 8')
plt.plot(epsilons_9*100, sigmas_9*1e-6, c='C0', label='Amostra 9')
plt.plot(epsilons_10*100, sigmas_10*1e-6, c='olive', label='Amostra 10')
if epsilon_i * E >= sigma_f_2_1 and epsilon_i * E >= sigma_f_2_2 and epsilon_i * E >= sigma_f_2_3 and epsilon_i * E >= sigma_f_2_4 and epsilon_i * E >= sigma_f_2_5:
ytable = plt.table(cellText=[['Amostra 1', round(sigma_f_2_1[0]*1e-6, 2)],
['Amostra 2', round(sigma_f_2_2[0]*1e-6, 2)],
['Amostra 3', round(sigma_f_2_3[0]*1e-6, 2)],
['Amostra 4', round(sigma_f_2_4[0]*1e-6, 2)],
['Amostra 5', round(sigma_f_2_5[0]*1e-6, 2)],
['Amostra 6', round(sigma_f_2_6[0]*1e-6, 2)],
['Amostra 7', round(sigma_f_2_7[0]*1e-6, 2)],
['Amostra 8', round(sigma_f_2_8[0]*1e-6, 2)],
['Amostra 9', round(sigma_f_2_9[0]*1e-6, 2)],
['Amostra 10', round(sigma_f_2_10[0]*1e-6, 2)]],
colLabels=['Amostras', 'Tensão de Falha, $\sigma_f$'],
bbox=[-0.025, -1.2, 1.075, 0.875], cellLoc='center',
fontsize=18)
ytable.auto_set_font_size(False)
ytable.set_fontsize(16)
ytable.scale(4, 2)
plt.ylim(0, 100)
plt.xlim(0, 0.5e-3*100)
plt.ylabel('Tensão, $\sigma$ [MPa]')
plt.xlabel('Deformação, $\epsilon$ [%]')
plt.grid()
plt.legend(fontsize=14)
plt.show()
int_plot_2 = interactive(f_2,
# epsilon_i=(0, 1e-4, 0.1e-5),
epsilon_i_per=widgets.FloatSlider(value=0,
min=0,
max=5e-2,
step=1e-4,
description='𝜖',
readout_format='.2e')
)
output = int_plot_2.children[-1]
output.layout.height = '500px'
int_plot_2.layout = widgets.Layout(display='flex',
flex_flow='column',
align_items='center',
align_content='center',
justify_content='center',
width='100%')
int_plot_2
# HIDDEN
#@title
style_2 = 'p style="border-style: solid; border-width: 2px; border-radius: 5px; border-color:lightgrey; padding: 2px 5px;"'
caption_2 = widgets.HTML(value=f'<{style_2}><b> Widget Interativo 2 : </b> Realize ensaios de tração nos Materiais 1 e 2.</p>',
layout=widgets.Layout(width='980px'))
tabs_box = widgets.VBox(children=[caption_2])
tabs_box