In [1]:
import numpy as np

Dynamic Testing

Experimental Data

In [2]:
p0 = 4000.0 # N

freq  = np.array((4, 5, 6, 7))*2*np.pi      # rad/s
rho   = np.array((177, 218, 300, 517))*1E-6 # m
theta = np.array((5, 8, 14, 29))*np.pi/180  # rad

Linear System

The unknowns are $k$ an $m$, the matrix of coefficients follows from

$$ 1\cdot k - \omega_i^2\cdot m, \qquad i=1,\ldots,\text{no. of tests.}$$
In [3]:
A = np.vstack((np.ones(len(freq)),-freq**2)).T
print(A)
[[  1.00000000e+00  -6.31654682e+02]
 [  1.00000000e+00  -9.86960440e+02]
 [  1.00000000e+00  -1.42122303e+03]
 [  1.00000000e+00  -1.93444246e+03]]

The known term is given by

$$\frac{p_0}{\rho_i}\,\cos\theta_i, \qquad i=1,\ldots,\text{no. of tests.}$$
In [4]:
b = p0*np.cos(theta)/rho
print(b/1E6, 'kN/mm')
[ 22.51287453  18.17005631  12.93727635   6.76688361] kN/mm

We have (fortunately) an overdetermined linear system, we can solve it using a least squares approximation.

In [5]:
k, m = np.linalg.lstsq(A, b)[0]
wn = np.sqrt(k/m)
print(' k =', k)
print(' m =', m)
print('wn =', wn)
 k = 30118326.8961
 m = 12079.3781839
wn = 49.9336292207

Estimation of $\zeta$

We can derive a formula for $\zeta$ using only one measurement, but we use all the measurements using again least squares (note that, in this case, the least squares estimate is just the mean value of the individual estimates).

In [6]:
Ones = np.ones(4)[:,None]
beta = freq/wn
zs   = p0*np.sin(theta)/(rho*k)/(2*beta)
z    = np.linalg.lstsq(Ones, zs)[0][0]
print('  Individual estimates of zeta, %:', zs*100)
print('Least Squares estimate of zeta, %:', z*100)
  Individual estimates of zeta, %: [ 6.49643605  6.7381585   7.09275712  7.06960359]
Least Squares estimate of zeta, %: 6.84923881552