Material de Apoio Aula 6   Gravação Aula 6 (09/04/2021)   Gravação Aula 6 (24/09/2021) Ajuda
×

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:


Show widgets

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

Lista de Exercícios - Aula 6 - Estatística de Weibull

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, $\sigma_f^{tr}$, 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