Our research is centered on a network of springs, built by Jeff Hokansen and Dr. Mark Embree for use in the CAAM 335 Lab. Over the table, we set up a webcam on a beam and connected it to a computer running MATLAB. Springs are connected to pennies (nodes), two of which are fixed to the table. Along the outside pennies, strings run over pullies set along the edge of the table and are attached to hooks, upon which we hang masses. These masses cause the nodes to move. We use the webcam to capture an image of the network, then use a MATLAB script to find the center of each node; the pennies have been painted red to make it easier for MATLAB to detect them. This gives us the displacement of each node, from which we can compute the elongation of each spring. We also know the force applied to each node (
A Forward Problem
In the forward problem, we seek to compare results from our physical model to the results predicted by solving a linear system of equations. Specifically, we wish to predict our displacements, given we know the load forces and spring constants in our system of springs.
Let us begin with an easier system of just two springs, three nodes, and two forces. Since only two of the nodes are moving, we will have two horizontal displacements denoted in the vector x. There are two elongations, one for each spring, denoted in the vector e.
![]() |
Each spring elongation is a linear combination of node displacements. The equations can be written in the following manner.
Now we have our adjacency matrix, A. This translates us from node displacement to spring elongation. It will have one more property which will we shall see shortly. Now let us consider finding the restoring force, y, which will have one component for each spring.
We assume that each spring follows Hooke's Law,
The final step is to translate these restoring forces into the load forces acting on each node, denoted by vector f.
Now we can see the second feature of the adjacency martrix. The transpose of A performs the reverse translation from edges to nodes. The final product of this example is the equation just shown:
![]() |
For this system, we have 16 strings and 7 seven nodes. So we will be working with vectors x, e, y, and f which contain the following information:
x: displacement of nodes
e: elongation of springs
y: restoring force in each spring
f: load force at each node
Since there are 7 nodes, each with a horizontal and vertical displacement, vectors x and f with be vectors of length 14. The 2n-1 entry will correspond to the horizontal displacement or load force on node n and the 2n entry will correspond to the vertical displacement or load force on node n. Since there are 16 springs, y and e will be vectors of length 16 with each entry corresponding to the restoring force or displacement of that spring.
As for the matrices translating us from one vector to the next, we will be working with A and K. A will have fourteen columns relating to the 14 degrees of freedom of the nodes of system, and it will have 16 rows, corresponding to the springs of the system. K will be a square matrix, 16x16. Diagonal elements of K will correspond to the stiffnesses of each spring
To construct A, we use a pattern of three linear approximations. The first two assume that the elongation of horizontal springs will be approximately equal to the horizontal displacements of the two adjacent nodes. The same will hold true for vertical nodes. The third recurring equation in the adjacency matrix approximates the diagonal elongation with a first order Maclaurin expansion. This elongation is equal to
Now that we have created our adjacency matrix for the system and know the relation
An Inverse Problem
We move now to our inverse problem: given the applied forces and the displacements of nodes in our network, can we determine the stiffnesses of the springs? Although the problem may at first appear trivially similar to the forward problem, we can see that this is not the case. From the previous section, we know that our calculations involve force vector f and displacement vector x,
for 14 degrees of freedom. However, the spring constants involved are
for 16 springs. This dimensional mismatch leads to an underdetermined system when we attempt to solve for K.
Our solution to this problem involves experimental stacking. Due to the fact that our experiment is easily repeatable under different conditions, we can arrive at more observations by simply altering the forces acting on the table. This, however, should not alter any of the spring constants. By doing so, we generate a second set of data which is still dependent on the spring constants. We are left with 16 springs, but we now have 28 degrees of freedom: an overdetermined system. The experiment can be repeated s times to minimize experimental error as well, yielding 14s degrees of freedom and the same 16 values in K.
With this experimental technique in hand, we can revisit our primary equation:
In order to solve for K, we re-express part of our equation:
This simple substitution lets us rewrite our equation as
which allows us to solve for k.
At this point, we can apply our experimental technique of stacking. Using s experiments, we may construct the appropriate matrices such that
We now recall Hooke's Law:
With f and B, we are now ready to solve for k. However, due to the fact that our system is overdetermined, there does not have to be a unique solution. To find the solution of best fit, then, we turn to the least squares method so as to find k that satisfies
We go about this using the standard method of normal equations: we multiply both sides of the Hooke equation by BT:
This allows us to use the Moore-Penrose psuedoinverse of B solve for k, our vector of spring constants:
Bar graphs of k are presented from a laboratory implementation of this technique. Figure 3 shows the calculated spring constants using the first two experiments from Data Set A. These spring constants have 246.7% error (see "Notes: Our Data Sets, Measuring Spring Constants, and Error" for notes on data sets and calculating error). Figure 3 shows the measured spring constants.
|
Due to our technique stacking of s experiments, our solution should minimize experimental error. However, it should be clear that, due to the amount of experimental error involved, we are extremely unlikely to arrive at an exact solution to the problem. It is important to note that, though wildly inaccurate, we can correctly identify the stiff spring in the system.
Our Question
In theory, this works out beautifully. Unfortunately, our experiments are carried out in the real world, so the entire process is rife with error. Measurements of both the masses and the positions of the nodes may be imprecise, and the alignment of the webcam may be off (See Figure 4), introducing the keystone effect, all of which dirties the displacement data. The forces may not be perfectly aligned along the horizontal and vertical (See Figure 4), and the masses we hang may not be exactly what we believe, introducing error in the force vector. Furthermore, Hooke's Law is an approximation, valid only in a certain range (although we keep our forces within that range). We also assume that the springs lie at angles of 0,
|
Ideally, we think we are solving the equation
where α, ϵ, κ, and γ are error due to either the measurements or the model. We would like to use statistical inference to find a solution.
Applications
Our experiment is designed to test the elastic properties of a very simple network by stretching it in two dimensions. This is an instance of the biaxial test, which is used to study the properties of polymers, plastics, and tissue by material scientists and physicians. Our setup simulatesa biopsy that seeks to identify a flaw in an otherwise homogeneous material.
Notes: Our Data Sets, Measuring Spring Constants, and Error
We ran two large sets of experiments. Data Set A consists of 104 experiments on Network g (see "Conditioning" for a list of all networks). All the even experiments have (theoretically) identical forces; all the odd experiments have another set of (theoretically) identical forces. We are confident of the magnitude of the forces; we are less confident of the alignment. These 104 experiments are actually just two experiments, each repeated 52 times. Data Set B consists of 120 unique experiments on Network a. No set of forces was repeated. These two data sets will allow us to explore which sets of experiments produce the best results, a most important question for applications. Data Set A will allow us to approach the problem statistically.
In order to be able to say which set of experiments or computational method gives us the “best” results, we need to know the actual values of the spring constants. We would like each spring of a particular class (horizontal/vertical, diagonal, stiff) to have the same k, but because these springs were purchased at our local hardware store, we have no guarantee of that and much measure each spring individually.
To measure k for a particular spring, we attach the spring to one of the fixed nodes, with a penny and string on the other end. We begin with only the 50g hook on the string and use the webcam and MATLAB to take the position. Next, we add 10g to the hook at a time, taking the position after adding each mass, until 100g are on the hook. This gives us 11 data points to work with. We plot these, then find the line of best fit through these points using three different methods: MATLAB's polyfit function; the least squares approach, MATLAB's backslash, which forms the normal equations
| k, (N/m) | |||
| Spring | Least Squares | Total Least Squares | Normal Equations |
| 1 | 190.3 | 191.8 | 191.5 |
| 2 | 285.0 | 276.3 | 273.7 |
| 3 | 153.0 | 170.2 | 165.7 |
| 4 | 166.8 | 176.6 | 173.3 |
| 5 | 230.9 | 237.1 | 236.6 |
| 6 | 187.9 | 278.0 | 252.6 |
| 7 | 200.0 | 219.6 | 217.4 |
| 8 | 915.0 | 1064.2 | 1005.4 |
| 9 | 240.3 | 254.0 | 252.5 |
| 10 | 208.9 | 321.4 | 249.8 |
| 11 | 196.1 | 202.7 | 200.0 |
| 12 | 233.3 | 238.7 | 236.4 |
| 13 | 197.5 | 167.4 | 162.2 |
| 14 | 223.1 | 218.1 | 215.9 |
| 15 | 181.2 | 173.2 | 171.5 |
| 16 | 249.0 | 227.3 | 225.3 |
The least squares approach to calculating the actual values of k fits the experimental data best. We run the calculations described in "An Inverse Problem" three times, using the values of k from each of these approaches as the actual value once. The error from each of these methods is recorded in Table 2.
| Method | % Error |
| Least Squares | 235.4 |
| Total Least Squares | 237.9 |
| Normal Equations | 246.6 |
Mathematically, the total least squares approach should be the most accurate (again, see "Total Least Squares" for a description of this approach), but the least squares approach gives the least error. The computations for total least squares and the normal equations both require subtracting off the first entry from the displacement and force vector from the rest of the vectors, so these two computations work with one less data point. This may result in less accurate results, so we will use the values of k that we compute with the least squares approach when we need the “measured” values of k, such as when we compute percent error.
Throughout this report, we will refer to the “percent error” in the results of a particular method. To compute this, we consider first the percent error in each spring,































