Tre er et naturlig material, med naturlig mye variasjon.
Det er utført 3-punkt bøyeprøving av 16 antatt like bjelker av tre og følgende viser rådata av last versus deformasjon (nedbøying):
import os
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
path='files/wood3ptest/'
testfiles=os.listdir(path)
fig,ax = plt.subplots(figsize=(8,5))
ax.set_xlabel('Deformation [mm]')
ax.set_ylabel('Load [N]')
ax.grid(True)
v=[]
for f in testfiles:
table=np.genfromtxt(fname=path+f,skip_header=1,delimiter=',',filling_values=0.0)
disp,load=table[:,2],table[:,1]
ax.plot(disp,load,label=f)
v.append(max(load))
plt.legend()
plt.show()
Nå ser jo ikke dette pent ut, og det er ingen grunn til å ha med data etter maks last/brudd, så vi rydder opp med følgende hendige funksjon og plotter på nytt:
def slettEtterMaksLast(disp,load):
maksindeks = np.argmax(load)
return disp[0:maksindeks], load[0:maksindeks]
fig,ax = plt.subplots(figsize=(8,5))
ax.set_xlabel('Deformation [mm]')
ax.set_ylabel('Load [N]')
ax.grid(True)
v=[]
for f in testfiles:
table=np.genfromtxt(fname=path+f,skip_header=1,delimiter=',',filling_values=0.0)
disp,load=table[:,2],table[:,1]
disp,load=slettEtterMaksLast(disp,load)
ax.plot(disp,load,label=f)
v.append(max(load))
plt.legend()
plt.show()
Det er også mer ryddig å nullstille hver serie (siden de som testet greiene ikke har vært så nøye med dette). Følgende funksjon nullstiller ved å først finne første datapunkt som faktisk har signifikant last over null, for så å forskyve langs x-aksen:
def nullstill(disp,load):
startindex=np.argmax(load > 0.1)
disp = disp[startindex:-1]
load = load[startindex:-1]
disp = disp - [disp[0]]
return disp,load
fig,ax = plt.subplots(figsize=(8,5))
ax.set_xlabel('Deformation [mm]')
ax.set_ylabel('Load [N]')
ax.grid(True)
v=[]
for f in testfiles:
table=np.genfromtxt(fname=path+f,skip_header=1,delimiter=',',filling_values=0.0)
disp,load=table[:,2],table[:,1]
disp,load=slettEtterMaksLast(disp,load)
disp,load=nullstill(disp,load)
ax.plot(disp,load,label=f)
v.append(max(load))
plt.legend()
plt.show()
Kurvene virker lineære opp til en deformasjon på 2 mm, eventuelt opp til en last på 50 N, så vi sjekker begge alternativ:
k_2mm = []
k_50N = []
for f in testfiles:
table=np.genfromtxt(fname=path+f,skip_header=1,delimiter=',',filling_values=0.0)
disp,load=table[:,2],table[:,1]
disp,load=slettEtterMaksLast(disp,load)
disp,load=nullstill(disp,load)
ind=np.argmax(disp > 2)
k_2mm.append(load[ind]/disp[ind])
ind=np.argmax(load > 50)
k_50N.append(load[ind]/disp[ind])
for k1, k2 in zip(k_2mm, k_50N):
print('{:.1f} , {:.1f}'.format(k1,k2))
Det er lite eller ingen forskjell, men siden vi er i gang, la oss definere bøyestivheten som gjennomsnittet:
k = []
for k1, k2 in zip(k_2mm, k_50N):
k.append((k1+k2)/2)
Deretter statistikk på bøyestivhet for de 16 paralelle testene:
n = len(k)
vmin = np.amin(k)
vmax = np.amax(k)
vmean= np.mean(k)
vstd = np.std(k,ddof=1)
vcov = 100*vstd/vmean
print('Sample size:',n)
print('Min: ',vmin)
print('Max: ',vmax)
print('Mean: ',vmean)
print('Stdev: ',vstd)
print('COV%: ',vcov)
b = []
for f in testfiles:
table=np.genfromtxt(fname=path+f,skip_header=1,delimiter=',',filling_values=0.0)
disp,load=table[:,2],table[:,1]
disp,load=slettEtterMaksLast(disp,load)
disp,load=nullstill(disp,load)
b.append(max(load))
for bi, no in zip(b,range(1,17)):
print('Bruddlast for test {:0>{}}: {:.2f} N'.format(no,2,bi))
n = len(b)
vmin = np.amin(b)
vmax = np.amax(b)
vmean= np.mean(b)
vstd = np.std(b,ddof=1)
vcov = 100*vstd/vmean
print('')
print('Sample size:',n)
print('Min: ',vmin)
print('Max: ',vmax)
print('Mean: ',vmean)
print('Stdev: ',vstd)
print('COV%: ',vcov)