This is a sample problem from “Statics”, by J.L. Meriam, John Wiley & Sons, 1966; #105, p. 88.
It is called a Howe truss – or, sometimes, a double Howe truss. Here’s a link that will give you the names of some trusses so you can look for more information. There’s a lot to be had, but it doesn’t seem all that standardized.
And here’s a link to some class notes, in case you want more explanation than I have been providing. And, since this is the third post about trusses, you could go look at my first truss post and my second truss post.
Anyway, we see that it is fixed at points A and G… and it has three external loads, each of 2 kips (a kip is a kilogram-force), at points B, C, I.
FYI, we have the following:
We can assign coordinates to the points.
Here are the coordinates… and a set of labels for them…
Why did I use a lowercase i? Because uppercase I is Mathematica’s symbol for the imaginary unit – no big deal, right? Wrong. I’m going to Sort later on, so that I only have, for example, f[A,B] instead of both f[A,B] and f[B,A]. Unfortunately, Mathematica sorts the complex unit ahead of regular symbols A, B, C, etc. It would give me f[I,A] instead of f[A,I].
And if you know that E is Mathematica’s symbol for the number e… well, no, it doesn’t sort E ahead of A thru D, so I can use uppercase E for a label.
Let’s draw what we have:
fixed at A and G, so reactions are both vertical and horizontal (in principle). Let’s check the count of beams and joints and reactions: we have 12 joints (j = 12) and 21 beams.
2j = 24 = 21 + 3.
Interesting. In his case, since the external forces are all vertical, there will be only two reaction forces, both vertical. But in principle we should allow the truss to be fixed at only one point, so there would be 3 possible reaction forces in general. (That is, instead of having it fixed at A and G, we could show it free to roll sideways at G.)
Instead, we will have 24 equations, but only 23 unknowns. But it will work out.
Now is a good time to point out that the equation and variable count is independent of the applied external loads. Having set up this Howe truss once, I could use the same setup with different external loads – and I am planning to, in a later post.
Assembling the pieces
Get all possible vectors. Instead of displaying the 12×12 table, I’m going to just show the upper left 5×5 sub-table.
Of all those vectors, turn the nonzero ones into unit vectors. Again, I’m going to display only the upper-left 5×5 sub-table involving joints A-E.
Now, there is a force – possibly zero – at the tail of every nonzero vector. let f denote the magnitude, F the vector… As I have done before, I sort f, so that I get, for example, f_AC for both f_AC and f_CA. (We know they are equal. I’m just getting rid of the superfluous variables as early as possible.) As before, just show the 5×5 upper left sub-table:
Let me point out that F is indexed by my labels, rather than by integers, because it appeared inside the Table command.
Now get rid of everything I don’t need. In two sections only for display. That is, set f = 0 whenever there is no beam joining two points.
I will show you a shorter alternative later. Instead of setting a long list to zero, we can set a shorter list to 1. You might notice that this list gets easier as we go further along… at J, for example, the only possible pairs of labels are JK and JL – something like JF was taken care of earlier, as FJ.
With many values of f zeroed out, our array F has fewer nonzero values (but this is still only the 5×5 sub-table):
Let me point out that t1 acts like a matrix, indexed by integers, while F does not; they are, however, different representations of the same data. The 1,2 entry of t1
corresponds precisely to the A,B entry of F:
The difference was caused by having t1 outside the Table command that created it.
Let me also emphasize that because I set many of the f_ij to zero, I have zeroed out many entries in F, such as
Let me save a copy of t1, for comparison with the alternative to be shown later.
Now, as before, I get the equations in two stages. First I just add some things up. This, now, is the full set of beam forces F at each joint, with 24 entries, two for each of the 12 points (joints).
I also have loads and reactions. Because the external loads are all vertical, the reactions must be vertical, so there are only two of them – at A and at G.
In what follows, by adding the beam forces to the external forces, I am declaring that each f_ij is the force exerted by the beam ij, i.e. the internal force. This means that a positive f_ij says that the beam is pulling its end joints together – so it’s in tension, as a cable would be.
Here are the x- and y-components of the total forces at each of the 12 joints:
The equations and their solution
Now I set all 24 forces to zero. Here are our 24 equations, in only 23 unknowns. (As I said, we will see it work out.)
It’s time to try solving that system of equations. (The “Flatten” inside the Solve command gets one set of 24 equations instead of two sets of 12; the second “Flatten” command gets rid of an extraneous set of braces around the solution.)
Looking at the solution
Global balance? It turns out there’s an easy way to check it:
Did that really do what I think it did? Let’s look at a small example.
Yes: it added up the corresponding components. So my answer of (0,0) says that the total forces on the truss in the x- and y-directions are zero.
Now, all the text wanted us to find was DJ. (This was 1966. You don’t want to know how long it took to write, debug, and run a computer program in college!)
The value is correct and the positive sign says “tension” – which agrees with the text.
The book provided the vertical reaction force of 3.67 kip at A… but I have computed it. Do we agree? I got
… which is his answer. Let’s look at the numbers he computed along the way. One was CJ:
The negative sign says “compression”… we agree.
Another was CD:
Again, compression, and we agree.
I have decided that I want to draw the external forces on the beams rather than the internal forces. I will, as before, define F1 as a scaled version of F – and I’m going to change the sign, too. I set F1 = -F/2 Note that I have not changed the signs of F or of f – only of F1, which is what I’m using for the drawings.
Here is the scaling by 1/2 and the change of sign:
Try looking at all the beams:
That’s not very informative. Well, that there are no arrows in funny places suggests that all the forces are along beams.
Let’s look at some of the top beams. All of them at once is still too many:
Well, maybe you would believe they are all in compression. But let me do three different colors, by combining three different plots, each using a subset of the labels.
It was the Show command at the end of the last drawing commands that gave me the picture. It appears to me that every beam on the top chord is in compression. So let’s see if all those values of f are less than zero. Yes:
Let’s look at the bottom chord the same way, taking small subsets of the labels and combining the results.
Look at the pairs of arrowheads. The red set around AL shows that AL is in tension… the blue set around LK shows that LK is in tension… similarly for the black set around KJ… the red set around JI… the blue set around IH… the black set around HG. All of the relevant f_ij should be positive… and they are…
Let’s try some of the vertical beams: BL, DJ, FH:
Whoa! Are BL and FH really unstressed? Yes:
Oh, DJ is in tension (positive):
(Yes, we saw that long ago. It was the first thing we looked at after we got the solution.)
Let’s look at the other interior beams:
Not too useful. OK, specify exactly what forces I want to see:
Interesting. BK, CJ, and EJ appear to be in compression (negative?) … CK and EI appear to be in tension (positive?)… and FI is unstressed (zero?). Do the signs agree? Yes:
The text suggests that we can figure out tension/compression by looking at moments. Even though we don’t use them explicitly in solving the truss, we used them implicitly: they told us that the forces at the ends of each beam were equal and opposite, and actually pointed along the beam.
Alternative: declaring the beams that exist
Let me close by showing you an alternative to listing all the f that are zero.
I am going to create an array, m, indexed by the labels rather than by integers, and I am going to specify that some of its entries are 1.
Here is the result:
Ah, we’re not done. I need the other half. Now, if m were truly a matrix (indexed by integers), I could just call for its transpose. But it isn’t, and I can’t. Fine: I construct the transpose, m1, explicitly:
… and then I add m + m1 (and call the result m, again):
Now i can multiply F_ij by m_ij term by term. It might help if you think of m as a mask, rather than as a matrix – I’m not doing a matrix multiplication.
Recall the upper left corner of F, before some f were zeroed out:
Now I want to zero out some elements of F, so I form the products m_ij * F_ij, and call the result F_ij again.
Now I resume, doing just what I did before, creating t1 as a matrix form of F (and, as before, display only the upper-left 5×5 sub-table):
Is my new t1 the same as my old t1 (which I saved as t0)? Yes.
Furthermore, I do get exactly the same solution setting it up this way.
So… I do a lot of work setting up the truss, but in exchange, I get the complete solution in one fell swoop.
I love it.