14.1. Reliability index \(\beta\)#

In section Structural safety we have seen the definition of the reliability factor \(\beta\), using a symbolic approach. Now, we will show some examples with values as well as python-implementation to produce graphs and show dynamic graphs. For the first example, we have chosen the average strength R to be \(\mu_{R}=227\), and have assumed this strength has a normal distribution with standard deviation \(\sigma_{R}=17.46\). The unit is not relevant for the example; it could be any unit of force or stress, as long as Effects E and Resistance R are expressed in the same unit. Now let’s also assume this fictitious structure is loaded by some Effect E that results in force in stress in our structure. Of E we assume that its’ average is \(\mu_{E}=70\) and SD is \(\sigma_{E}=23.5\). For the structure being sufficiently safe, E should be smaller than or equal to R with sufficiently high probability.

../../_images/E_R_curves_highgamma_uc0.81_Z_values.png

Fig. 14.1 E, R, and Z function with numerical example#

We see that \(\beta=5.36\), which, according to Table 2.1, represents a probability of failure \(P_f\) between \(10^{-7}\) and \(10^{-8}\). Now try for yourself:

Exercise

If \(\mu_E = 100\), \(\sigma_E = 20\), \(\mu_R = 240\) and \(\sigma_R = 20\), what are \(\mu_Z\), \(\sigma_Z\) and \(\beta\)?

You might want to download some code cells or the full .ipynb page and put code in there to perform the calculations, and plot the graphs.

Code to generate reliability function Z#

Using the Python code below, you play with the numerical values yourself:

import numpy as np
import math
import matplotlib.pyplot as plt
from scipy.stats import norm
import statistics
def plot_Z(meanE, sdE, meanR, sdR):
    
    # define lower and upper values of Effect E and Resistance R
    Elower = 0.5*meanE
    Eupper = 1.5*meanE
    E = np.arange(Elower, Eupper, 1)
    Rlower = 0.85*meanR
    Rupper = 1.15*meanR
    R = np.arange(Rlower, Rupper, 1)

    # Plot x-axis range with 1 steps
    x_axis = np.arange(-50, 450, 1)

    # figure size in inches
    plt.figure(figsize=(10, 6))

    # Calculating statistics
    probE = (1 / (sdE * math.sqrt(2 * math.pi))) * math.exp(-((0) ** 2) / (2 * sdE ** 2))
    probErep = (1 / (sdE * math.sqrt(2 * math.pi))) * math.exp((-(1.64 * sdE) ** 2) / (2 * sdE ** 2))
    
    probR = (1 / (sdR * math.sqrt(2 * math.pi))) * math.exp(-((0) ** 2) / (2 * sdR ** 2))
    probRrep = (1 / (sdR * math.sqrt(2 * math.pi))) * math.exp((-(1.64 * sdR) ** 2) / (2 * sdR ** 2))
        
    # calculation reliability function
    meanZ = meanR-meanE
    sdZ=math.sqrt(sdE**2+sdR**2)
    probZ=(1/(sdZ*math.sqrt(2*math.pi)))*math.exp(-((0)**2)/(2*sdZ**2))
    beta=meanZ/sdZ

    # plot normal distribution curves for E (blue) and R (red) and Z (green)
    plt.plot(x_axis, norm.pdf(x_axis, meanE, sdE), 'b')
    plt.plot(x_axis, norm.pdf(x_axis, meanR, sdR), 'r')
    plt.plot(x_axis, norm.pdf(x_axis, meanZ, sdZ), 'g')

    # plot averages with dash-dotted red/blue lines
    plt.plot([meanR, meanR], [0, probR], 'r-.')
    plt.plot([meanE, meanE], [0, probE], 'b-.')
    plt.plot([meanZ,meanZ],[0,probZ], 'g-.')
    
    plt.text(meanE + 5, probE, 'E', fontsize=15)
    plt.text(meanR + 5, probR, 'R', fontsize=15)
    plt.text(meanZ-10, probZ+0.001, 'Z=R-E', fontsize=15)

    # arrows for beta
    plt.plot([0,0],[0,probZ], 'k-.')
    plt.plot([0,meanZ],[0.75*probZ,0.75*probZ], 'k-')
    plt.plot([0,15],[0.75*probZ,0.80*probZ], 'k-')
    plt.plot([0,15],[0.75*probZ,0.70*probZ], 'k-')
    plt.plot([meanZ,meanZ-15],[0.75*probZ,0.80*probZ], 'k-')
    plt.plot([meanZ,meanZ-15],[0.75*probZ,0.70*probZ], 'k-')
    plt.text(meanZ/2, 0.8*probZ, "$\\mu_Z = \\beta \\cdot \\sigma_Z $", fontsize=10)
    plt.text(meanR*1.25, 0.8*probZ, "$\\mu_Z = \\mu_R - \mu_E =$ "+'{0:.1f}'.format(meanZ), fontsize=10)
    plt.text(meanR*1.25, 0.60*probZ, "$\\sigma_Z = \sqrt{\sigma_R^2 + \sigma_E^2} =$ "+'{0:.1f}'.format(sdZ), fontsize=10)
    plt.text(meanR*1.25, 0.40*probZ, "$\\beta = \\mu_Z / \\sigma_Z = $"+'{0:.2f}'.format(beta), fontsize=10, fontweight='bold')


    plt.xlabel("Reliability function Z")
    plt.ylabel("Probability")

    # plt.savefig("Z_curve.pdf", format="pdf", bbox_inches="tight")
    plt.show()

Initializing example with data#

Using the functions and numerical values defined above, now plots can be generated:

meanE = 70
sdE = 23.52
meanR = 227
sdR = 17.46
plot_Z(meanE, sdE, meanR, sdR)
../../_images/bd26e54e218596c80b5c42b7525bb47b8c01d03d9da0e104cb59019ce0c359fb.png

Dynamic graphs of \(\beta\) and u.c.#

Using the dynamic graphs below, you can see what the influence is of modifying the values for \(\mu_R\) or \(\sigma_R\) on the magnitude of \(\beta\) and the unity check u.c.:

The dynamic graph illustrates the following: if the average of the blue R-function shifts to a lower value, the reliability index \(\beta\) becomes smaller, and the unity check becomes larger. If the average of the blue R-function shifts to a higher value, the reliability index \(\beta\) becomes larger, and the unity check becomes smaller.

The dynamic graph above illustrates the following: if the performance (capacity, resistance) of a material becomes more uncertain, e.g. due to a wider spread of test results of material properties or due to a wider spread of cross-sectional dimensions, \(\sigma_R\) becomes larger. Even without change of the average value \(\mu_R\), the safety of the structure will become lower (value of \(\beta\) drops and u.c. increases). Vice versa, with smaller spread of R, safety will increase.