<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>And now it’s all this</title>
	<atom:link href="https://leancrew.com/all-this/feed/" rel="self" type="application/rss+xml" />
	<link>https://leancrew.com/all-this/</link>
	<description>I just said what I said and it was wrong. Or was taken wrong.</description>
	<lastBuildDate>Tue, 30 Jun 2026 02:42:51 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0</generator>
  <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>
  <atom:link rel="hub" href="http://aniat.superfeedr.com"/>

<item>
<title>Ohio jewel box bank 1</title>
<link>https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/</link>
<pubDate>Tue, 30 Jun 2026 02:42:51 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/ohio-jewel-box-bank-1/</guid>
<description>
  <![CDATA[Last year, around Labor Day, I visited five of <a href="https://scholarworks.uni.edu/sullivanjewel_images/">Louis Sullivan’s jewel box banks</a>:]]>
</description>
<content:encoded>
  <![CDATA[<p>Last year, around Labor Day, I visited five of <a href="https://scholarworks.uni.edu/sullivanjewel_images/">Louis Sullivan’s jewel box banks</a>:</p>
<ul>
<li><a href="https://leancrew.com/all-this/2025/08/wisconsin-jewel-box-bank/">Farmers and Merchants Union Bank</a> in Columbus, Wisconsin</li>
<li><a href="https://leancrew.com/all-this/2025/08/minnesota-jewel-box-bank/">National Farmers’ Bank</a> in Owatonna, Minnesota</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-1/">Henry Adams Building</a> in Algona, Iowa</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-2/">Merchant’s National Bank</a> in Grinnell, Iowa</li>
<li><a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-3/">People’s Savings Bank</a> in Cedar Rapids, Iowa</li>
</ul>
<p>These all fit in with a little driving circuit that included visiting my daughter and my younger son. This year, I headed east to pick up the last three.</p>
<p>This morning’s bank was the <a href="https://en.wikipedia.org/wiki/People%27s_Federal_Savings_and_Loan_Association">People’s Federal Savings and Loan Association</a> in Sidney, Ohio. Despite what that Wikipedia page says, it’s now operated by <a href="https://www.fm.bank/">F&amp;M Bank</a>, which bought out People’s in 2022. You can sort of tell by the large but tasteful “F&amp;M Bank” lettering on the front (north) façade.</p>
<p><img alt="North facade" class="ss" src="https://leancrew.com/all-this/images2026/20260629-North%20facade.jpg" title="North facade" width="100%"/></p>
<p>F&amp;M could have used a font in which their <em>F</em> was a better match to the <em>F</em> in the original THRIFT lettering, but you can’t expect bank executives to notice things like that. At least they didn’t go with the sans serif font they use in their logo. The horizontal line of slightly damaged bricks is where the old name of the bank used to be.</p>
<p>The bank was built in 1917, which puts it second to last in the sequence, younger than all the other jewel boxes except the <a href="https://leancrew.com/all-this/2025/08/wisconsin-jewel-box-bank/">Farmers and Merchants Bank</a>. The date of construction is prominent on the west façade.</p>
<p><img alt="West facade" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20facade.jpg" title="West facade" width="100%"/></p>
<p>You’ll probably need to zoom in to see the date; it’s not only small, but I was shooting into the sun, so the contrast isn’t great. The 1886 date you see at the left end is when People’s Federal Savings and Loan was founded.</p>
<p>While we’re on the west side, let’s check out some of the details.</p>
<p><img alt="West window details" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20window%20details.jpg" title="West window details" width="80%"/></p>
<p><img alt="West end decoration" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20end%20decoration.jpg" title="West end decoration" width="100%"/></p>
<p><img alt="Block above west window" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Block%20above%20west%20window.jpg" title="Block above west window" width="100%"/></p>
<p><img alt="Southwest corner lion" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Southwest%20corner%20lion.jpg" title="Southwest corner lion" width="80%"/></p>
<p>The lion with the shield on top of a pilaster is at the southwest corner of the building, off the right edge of my west façade photo. You may recognize him—he’s basically the same as the entranceway lions at the <a href="https://leancrew.com/all-this/2025/09/iowa-jewel-box-bank-2/">Merchant’s National Bank</a>.</p>
<p>Each of the lion heads that appear along the bottom of the windows has a copper pipe in its open mouth. Clearly this is to drain rainwater that collects on the sills, although I don’t know if the pipes are still working. Sullivan undoubtedly considered this a “form follows function” thing.</p>
<p>Most of the decorative elements on this building are organic, but there are geometric features along the cornice at the top of the building and around the arch on the north façade.</p>
<p><img alt="North top center" class="ss" src="https://leancrew.com/all-this/images2026/20260629-North%20top%20center.jpg" title="North top center" width="100%"/></p>
<p>Sullivan “signed” this building in the architrave above the entrance. Not just in the little LOUIS SULLIVAN ARCHITECT in the lower left corner, but in the big stylized LSA at the center of the piece.</p>
<p><img alt="Entranceway" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Entranceway.jpg" title="Entranceway" width="100%"/></p>
<p>Just inside the entrance is the landmark designation plaque.</p>
<p><img alt="Landmark plaque" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Landmark%20plaque.jpg" title="Landmark plaque" width="100%"/></p>
<p>After seeing the lovely exterior, I have to say I was a little disappointed when I went through the foyer into the interior. It’s nice enough, but I was ready to be hit by something like the interior of the <a href="https://leancrew.com/all-this/2025/08/minnesota-jewel-box-bank/">National Farmers’ Bank</a>. No such luck. The lines are clean, there’s a good view of the west windows, and there’s a gorgeous skylight running down the center of the ceiling, but no murals or hanging lights.</p>
<p><img alt="Interior looking south" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Interior%20looking%20south.jpg" title="Interior looking south" width="80%"/></p>
<p><img alt="West windows interior" class="ss" src="https://leancrew.com/all-this/images2026/20260629-West%20windows%20interior.jpg" title="West windows interior" width="100%"/></p>
<p><img alt="Skylight" class="ss" src="https://leancrew.com/all-this/images2026/20260629-Skylight.jpg" title="Skylight" width="80%"/></p>
<p>One of the tellers told me there used to be stencils of some sort running along the tops of the walls, but they were painted over. An odd decision, given how well the rest of the building has been preserved, but maybe they couldn’t be saved—or weren’t original.</p>
<p>Another small disappointment was the lack of documentation. Other banks had small shrines to their buildings, with displays of drawings, old photographs, or even pieces of original terra cotta and brickwork. F&amp;M had a little pamphlet and a visitors’ signature book, but that was it.</p>
<p>I don’t want to be too hard on this bank. It really is beautiful and in great shape. I guess my expectations for the interior were just too high after walking around and photographing the north and west façades. F&amp;M can’t be blamed if the previous owner didn’t keep the original drawings. Also, it’s a pretty small space—no second floor or mezzanine for a shrine.</p>]]>
</content:encoded>
</item>

<item>
<title>Classic</title>
<link>https://leancrew.com/all-this/2026/06/Classic/</link>
<pubDate>Wed, 24 Jun 2026 22:52:10 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/Classic/</guid>
<description>
  <![CDATA[<a href="https://relay.fm/upgrade/624">This week’s episode of <em>Upgrade</em></a> (which I listened to on a longish drive yesterday) has a preview of Jason Snell and Myke Hurley’s upcoming <a href="https://www.kickstarter.com/projects/designedincalifornia/designed-in-california-an-apple-history-podcast"><em>Designed in California</em> podcast</a>. No, not the “Road to the Apple II” series they’ve been squeezing into the <em>Upgrade</em> feed these past few weeks. This sneak preview—with special guest John Siracusa—is about the state of the classic Mac OS in the late 90s.]]>
</description>
<content:encoded>
  <![CDATA[<p><a href="https://relay.fm/upgrade/624">This week’s episode of <em>Upgrade</em></a> (which I listened to on a longish drive yesterday) has a preview of Jason Snell and Myke Hurley’s upcoming <a href="https://www.kickstarter.com/projects/designedincalifornia/designed-in-california-an-apple-history-podcast"><em>Designed in California</em> podcast</a>. No, not the “Road to the Apple II” series they’ve been squeezing into the <em>Upgrade</em> feed these past few weeks. This sneak preview—with special guest John Siracusa—is about the state of the classic Mac OS in the late 90s.</p>
<p>In a word, the state was sorry. This was largely due to some expedient decisions made in the early 80s that were necessary to get the Mac out the door. Unfortunately, those decisions made the Mac a less and less stable computing environment as the years went on.</p>
<p>The instability had to do with memory and multitasking. Jason and John cover it well in the podcast, so there’s no need for me to get into it. I will say, though, that if you listen to the podcast and think Jason is exaggerating when he says that he would often have to reboot his Mac a dozen or so times per day, I can assure you that’s no exaggeration. The frustration of using a Mac back then was the reason I abandoned it for Linux at the end of 1996.</p>
<p>The problem with the Mac was that it had a great user interface for multitasking but a lousy infrastructure. In the mid-80s, the lousy infrastructure didn’t matter so much because computer users were used to doing one thing at a time, which the Mac handled well. But the windowing OS, the consistency of Mac applications, and the multitasking tease of desk accessories slowly got users hungry to run many apps simultaneously and switch between them at will. The infrastructure couldn’t handle that.</p>
<p>I want to emphasize how important the consistency was. For example, all Mac apps had cut, copy, and paste, and those commands were always in the Edit menu and they always had the ⌘X, ⌘C, and ⌘V keyboard shortcuts.<sup id="fnref:early"><a href="#fn:early" rel="footnote">1</a></sup> Similarly for Save and ⌘S. DOS programs—and before Windows 95, most PC users were running DOS—didn’t have that consistency. I remember reading back in ’85 or ’86 that Mac users tended to regularly use many more applications than PC users. There were lots of PC users, especially in the workplace, who basically used one program; their computers were configured to boot into WordPerfect or Lotus 1-2-3, and that would be the only program they used until they turned off their machine at the end of the day.</p>
<p>Mac users weren’t like that. Because the Mac had a consistent language, users felt comfortable taking on new apps. They didn’t have to start at ground zero to learn a new set of commands. And when you’re comfortable using three, four, or more programs, you want them all running and available at a moment’s notice. <a href="https://en.wikipedia.org/wiki/MultiFinder">MultiFinder</a>, incorporated into the Finder itself in System 7, offered you the promise of being able to do that, but the underlying deficiencies of the OS reneged on that promise. Classic Mac OS was Lucy and you were Charlie Brown.</p>
<p><img alt="Lucy and Charlie Brown" class="ss" src="https://leancrew.com/all-this/images2026/20260624-Lucy%20and%20Charlie%20Brown.jpg" title="Lucy and Charlie Brown" width="100%"/></p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:early">
<p>OK, in the <em>very</em> early days, not every app had keyboard shortcuts for Cut, Copy, and Paste, but that didn’t last long. <a href="#fnref:early" rev="footnote">↩</a></p>
</li>
</ol>
</div>]]>
</content:encoded>
</item>

<item>
<title>Short memories</title>
<link>https://leancrew.com/all-this/2026/06/short-memories/</link>
<pubDate>Fri, 19 Jun 2026 17:46:18 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/short-memories/</guid>
<description>
  <![CDATA[I’ve been thinking about 1984 lately—the year, not the novel. What got me thinking about it was the reduction in <a href="https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&amp;s=emm_epm0_pte_nus_dpg&amp;f=w">gas prices</a> over the past few weeks,]]>
</description>
<content:encoded>
  <![CDATA[<p>I’ve been thinking about 1984 lately—the year, not the novel. What got me thinking about it was the reduction in <a href="https://www.eia.gov/dnav/pet/hist/LeafHandler.ashx?n=pet&amp;s=emm_epm0_pte_nus_dpg&amp;f=w">gas prices</a> over the past few weeks,</p>
<p><img alt="Gasoline prices" class="ss" src="https://leancrew.com/all-this/images2026/20260619-Gasoline%20prices.png" title="Gasoline prices" width="100%"/></p>
<p>and <a href="https://www.nytimes.com/2026/06/13/us/politics/trump-white-working-class-voters-economy.html?searchResultPosition=1">this article</a> in the <em>New York Times</em> about Donald Trump’s declining poll numbers among white working-class voters and how that might affect November’s elections.<sup id="fnref:access"><a href="#fn:access" rel="footnote">1</a></sup></p>
<p>Forgive me for not being especially optimistic, but one of my distinct memories from 1984 makes me think the polls are lagging.</p>
<p>A news story on one of the networks back in 1984 included short interviews with prospective voters. One of the voters was a young white man (he was about my age at the time) who said he was voting for Ronald Reagan. When asked why, he said “He got me my job back.”</p>
<p>Of course, the man had been laid off early in the Reagan administration,<sup id="fnref:recession"><a href="#fn:recession" rel="footnote">2</a></sup> but that didn’t enter into his reasoning. The only thing that mattered was that he was working again. It was my introduction to the short memories of American voters.</p>
<p><img alt="Dali's The Persistence of Memory" class="ss" src="https://leancrew.com/all-this/images2026/20260619-The%20Persistence%20of%20Memory.jpg" title="Dali's The Persistence of Memory" width="100%"/></p>
<p class="caption">via <a href="https://www.moma.org/collection/works/79018">MoMA</a></p>
<p>I can’t help but think we’ll see the same thing this November. As long as the price of gas—like the unemployment rate in 1984—keeps going down, it won’t matter whether it gets back to where it had been or who caused it to go up in the first place. White working-class voters (especially men) will credit Trump with bringing gas prices down and vote Republican again, regardless of what they told pollsters recently. Only another major fuckup close to the election will get them to vote blue or just stay home in large numbers.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:access">
<p>If, like me, you don’t have a subscription to the <em>Times</em>, see if your local library gives you access to it. Mine does. <a href="#fnref:access" rev="footnote">↩</a></p>
</li>
<li id="fn:recession">
<p>Constant Republican propaganda has people thinking the Reagan years were all about prosperity, but the recession early in his first term was the worst economic downturn since the Great Depression, a distinction it held until 2008. <a href="#fnref:recession" rev="footnote">↩</a></p>
</li>
</ol>
</div>]]>
</content:encoded>
</item>

<item>
<title>World Cup combinatorics again</title>
<link>https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/</link>
<pubDate>Wed, 17 Jun 2026 03:12:47 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/</guid>
<description>
  <![CDATA[At the end of yesterday’s post about <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the combinatorics of the World Cup group stage</a>, I said “this is good enough for me.” Turns out that was a lie. Today I rewrote some of the code to come up with a slightly more detailed result.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics-again/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>At the end of yesterday’s post about <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the combinatorics of the World Cup group stage</a>, I said “this is good enough for me.” Turns out that was a lie. Today I rewrote some of the code to come up with a slightly more detailed result.</p>
<p>The last bit of work in that post was to generate the 40 unique point totals that can come from a group. These are the possible totals, with no regard for which team gets which total:</p>
<pre><code>9 6 3 0     7 6 3 1     7 3 2 2     5 5 3 2
9 6 1 1     7 6 2 1     6 6 6 0     5 5 3 1
9 4 4 0     7 5 4 0     6 6 4 1     5 5 2 2
9 4 3 1     7 5 3 1     6 6 3 3     5 4 4 3
9 4 2 1     7 5 2 1     6 5 4 1     5 4 4 2
9 3 3 3     7 4 4 1     6 5 2 2     5 4 3 2
9 2 2 2     7 4 3 3     6 4 4 3     5 3 3 2
7 7 3 0     7 4 3 2     6 4 4 2     4 4 4 4
7 7 1 1     7 4 3 1     5 5 5 0     4 4 4 3
7 6 4 0     7 4 2 2     5 5 4 1     3 3 3 3
</code></pre>
<p>As discussed early in yesterday’s post, there are <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mn>3</mn><mn>6</mn></msup><mo>=</mo><mn>729</mn></mrow></math> ways the six games of a group can turn out, so today’s script associates each of the above totals with the game results that add up to that total. I built a dictionary in which the keys are the totals shown above—expressed as tuples, like <code>(7, 7, 1, 1)</code>—and the values are lists of lists of game result lists, like</p>
<pre><code>[[[3, 0, 0, 0],
  [3, 0, 0, 0],
  [1, 0, 0, 1],
  [0, 1, 1, 0],
  [0, 0, 0, 3],
  [0, 0, 0, 3]],
 [[3, 0, 0, 0],
  [1, 0, 1, 0],
  [3, 0, 0, 0],
  [0, 0, 3, 0],
  [0, 1, 0, 1],
  [0, 0, 3, 0]],
 [[0, 3, 0, 0],
  [0, 0, 3, 0],
  [1, 0, 0, 1],
  [0, 1, 1, 0],
  [0, 3, 0, 0],
  [0, 0, 3, 0]],
 [[0, 3, 0, 0],
  [1, 0, 1, 0],
  [0, 0, 0, 3],
  [0, 3, 0, 0],
  [0, 1, 0, 1],
  [0, 0, 0, 3]],
 [[1, 1, 0, 0],
  [3, 0, 0, 0],
  [3, 0, 0, 0],
  [0, 3, 0, 0],
  [0, 3, 0, 0],
  [0, 0, 1, 1]],
 [[1, 1, 0, 0],
  [0, 0, 3, 0],
  [0, 0, 0, 3],
  [0, 0, 3, 0],
  [0, 0, 0, 3],
  [0, 0, 1, 1]]]
</code></pre>
<p>The innermost lists in this output are the points accumulated in a single game. For example, <code>[1, 1, 0, 0]</code> represents a game in which the first two teams in the group played to a draw. So the above result tells us that there are six ways the six games in a group can lead to a <code>(7, 7, 1, 1)</code> table at the end of the stage.</p>
<p>Here’s the Python code that built the dictionary and printed out a summary of the results:</p>
<pre><code>python:
 1:  #!/usr/bin/env python3
 2:  
 3:  from itertools import product
 4:  from collections import defaultdict
 5:  import numpy as np
 6:  
 7:  # Possible point distributions from each game.
 8:  game1 = [[3, 0, 0, 0], [0, 3, 0, 0], [1, 1, 0, 0]]
 9:  game2 = [[3, 0, 0, 0], [0, 0, 3, 0], [1, 0, 1, 0]]
10:  game3 = [[3, 0, 0, 0], [0, 0, 0, 3], [1, 0, 0, 1]]
11:  game4 = [[0, 3, 0, 0], [0, 0, 3, 0], [0, 1, 1, 0]]
12:  game5 = [[0, 3, 0, 0], [0, 0, 0, 3], [0, 1, 0, 1]]
13:  game6 = [[0, 0, 3, 0], [0, 0, 0, 3], [0, 0, 1, 1]]
14:  
15:  # Enumerate all possible six-game results, and put them in a dictionary.
16:  # The keys are the sorted point totals and the values are the list of
17:  # game results.
18:  games = defaultdict(list)
19:  results = np.array(list(product(game1, game2, game3, game4, game5, game6)))
20:  for r in results:
21:    points = tuple(sorted(r.sum(axis=0).tolist(), reverse=True))
22:    games[points].append(r.tolist())
23:  
24:  # Show how many game results lead to each tuple of sorted point totals.
25:  count = 0
26:  p = sorted(games.keys(), reverse=True)
27:  for k in p:
28:    count += len(games[k])
29:    print(f'({" ".join(str(p) for p in k)}): {len(games[k]):3d}')
30:  print(f'    Total: {count:3d}')
</code></pre>
<p>The output is</p>
<pre><code>(9 6 3 0):  24
(9 6 1 1):  12
(9 4 4 0):  12
(9 4 3 1):  24
(9 4 2 1):  24
(9 3 3 3):   8
(9 2 2 2):   4
(7 7 3 0):  12
(7 7 1 1):   6
(7 6 4 0):  24
(7 6 3 1):  24
(7 6 2 1):  24
(7 5 4 0):  24
(7 5 3 1):  24
(7 5 2 1):  24
(7 4 4 1):  36
(7 4 3 3):  24
(7 4 3 2):  24
(7 4 3 1):  24
(7 4 2 2):  24
(7 3 2 2):  12
(6 6 6 0):   8
(6 6 4 1):  24
(6 6 3 3):  24
(6 5 4 1):  24
(6 5 2 2):  12
(6 4 4 3):  36
(6 4 4 2):  24
(5 5 5 0):   4
(5 5 4 1):  24
(5 5 3 2):  12
(5 5 3 1):  12
(5 5 2 2):  12
(5 4 4 3):  24
(5 4 4 2):  24
(5 4 3 2):  24
(5 3 3 2):  12
(4 4 4 4):   6
(4 4 4 3):   8
(3 3 3 3):   1
    Total: 729
</code></pre>
<p>where the numbers after the colons are the number of ways the games can go to result in the given totals. There is, for example, only one way to get <code>(3, 3, 3, 3)</code>, which is for every game to end in a draw.</p>
<p>The code is not clever in any way. I build the <code>games</code> dictionary (actually a <a href="https://docs.python.org/3/library/collections.html#collections.defaultdict"><code>defaultdict</code></a>) one step at a time via the loop in Lines 20–22. As with yesterday’s script, I generate all the 729 game results using the <a href="https://docs.python.org/3.13/library/itertools.html#itertools.product"><code>product</code> function</a> from the <code>itertools</code> library and use NumPy’s <a href="https://numpy.org/doc/stable/reference/generated/numpy.sum.html"><code>sum</code> function</a> to add up the points from each of those results. The output comes from Lines 25–30.</p>
<p>If I run this script in an interactive environment, like <a href="https://ipython.readthedocs.io/en/stable/">IPython</a> or <a href="https://jupyter-console.readthedocs.io/en/latest/">Jupyter</a>, I can pull out the games that lead to any set of points. I think the <code>(5, 4, 3, 2)</code> total is fun because it’s the only straight among the 40 possibilities. After some reformatting, here’s what <code>games[(5, 4, 3, 2)]</code> returns:</p>
<pre><code>(3 0 0 0) (0 0 3 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(3 0 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(3 0 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 1 1) 
(3 0 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 3 0 0) (0 0 1 1) 
(0 3 0 0) (3 0 0 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(0 3 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(0 3 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 1 1) 
(0 3 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 0 0 3) (0 0 1 1) 
(1 1 0 0) (3 0 0 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(1 1 0 0) (3 0 0 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 1 1) 
(1 1 0 0) (3 0 0 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 3 0) 
(1 1 0 0) (0 0 3 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 1 1) 
(1 1 0 0) (0 0 3 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 1 1) 
(1 1 0 0) (0 0 3 0) (1 0 0 1) (0 1 1 0) (0 1 0 1) (0 0 0 3) 
(1 1 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 0 0 3) (0 0 1 1) 
(1 1 0 0) (1 0 1 0) (3 0 0 0) (0 1 1 0) (0 1 0 1) (0 0 0 3) 
(1 1 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 3 0 0) (0 0 1 1) 
(1 1 0 0) (1 0 1 0) (0 0 0 3) (0 1 1 0) (0 1 0 1) (0 0 3 0) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 0 0 3) (0 0 1 1) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 3 0 0) (0 1 0 1) (0 0 3 0) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 3 0 0) (0 0 1 1) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 0 3 0) (0 1 0 1) (0 0 0 3) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 3 0 0) (0 0 0 3) 
(1 1 0 0) (1 0 1 0) (1 0 0 1) (0 1 1 0) (0 0 0 3) (0 0 3 0) 
</code></pre>
<p>Notice that in every set of six games (i.e., each row), there are two games that end in a win and four that end in a draw. The team with five points has a win and two draws; the team with four points has a win, a draw, and a loss; the team with three points has three draws; and the team with two points has two draws and a loss.</p>
<p>OK, <em>now</em> I’m done.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>World Cup combinatorics</title>
<link>https://leancrew.com/all-this/2026/06/world-cup-combinatorics/</link>
<pubDate>Tue, 16 Jun 2026 01:54:48 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/world-cup-combinatorics/</guid>
<description>
  <![CDATA[We’re in the middle of the first set of games in the group stage of the <a href="https://www.fifa.com/en/tournaments/mens/worldcup/canadamexicousa2026/scores-fixtures?country=US&amp;wtw-filter=ALL">2026 World Cup</a>, and I’ve been thinking about how many ways the points can be distributed among the teams in a given group. I used Python to help with the enumeration.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/world-cup-combinatorics/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re in the middle of the first set of games in the group stage of the <a href="https://www.fifa.com/en/tournaments/mens/worldcup/canadamexicousa2026/scores-fixtures?country=US&amp;wtw-filter=ALL">2026 World Cup</a>, and I’ve been thinking about how many ways the points can be distributed among the teams in a given group. I used Python to help with the enumeration.</p>
<p>Here’s a quick summary of how the group stage works: The teams are split into groups of four. Within each group, all the teams play each other once. A team gets three points for a win and one point for a draw in each of the three games it plays. The teams are ranked by their point totals within their group when this stage is over.<sup id="fnref:advances"><a href="#fn:advances" rel="footnote">1</a></sup></p>
<p>Six games are played in each group. You can calculate that number in several ways, but it’s easy enough to just list them all. Let’s say the teams in our group are Alpha, Beta, Gamma, and Delta. Then the six games are:</p>
<pre><code>Alpha vs. Beta
Alpha vs. Gamma     Beta vs. Gamma
Alpha vs. Delta     Beta vs. Delta     Gamma vs. Delta
</code></pre>
<p>Since there are three possible outcomes in each game (W–L, L–W, and D–D), there are</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mn>3</mn><mn>6</mn></msup><mo>=</mo><mn>729</mn></mrow></math>
<p>possible results for the six games of the group stage.</p>
<p>We can get the point distribution among the teams for each of these possible results with this bit of Python code:</p>
<pre><code>python:
 1:  #!/usr/bin/env python3
 2:  
 3:  from itertools import product
 4:  import numpy as np
 5:  
 6:  # Possible point distributions from each game.
 7:  game1 = [[3, 0, 0, 0], [0, 3, 0, 0], [1, 1, 0, 0]]
 8:  game2 = [[3, 0, 0, 0], [0, 0, 3, 0], [1, 0, 1, 0]]
 9:  game3 = [[3, 0, 0, 0], [0, 0, 0, 3], [1, 0, 0, 1]]
10:  game4 = [[0, 3, 0, 0], [0, 0, 3, 0], [0, 1, 1, 0]]
11:  game5 = [[0, 3, 0, 0], [0, 0, 0, 3], [0, 1, 0, 1]]
12:  game6 = [[0, 0, 3, 0], [0, 0, 0, 3], [0, 0, 1, 1]]
13:  
14:  # Enumerate all possible six-game results, add up the points, and sort.
15:  games = np.array(list(product(game1, game2, game3, game4, game5, game6)))
16:  points = games.sum(axis=1)
17:  points = points.tolist()
18:  points.sort(reverse=True)
19:  print(f'Number of point arrangements: {len(points)}')
</code></pre>
<p>The output is</p>
<pre><code>Number of point arrangements: 729
</code></pre>
<p>which matches our calculation above.</p>
<p>Lines 7–12 give the three possible point allocations for each of the games, where the inner lists are the points given to Alpha, Beta, Gamma, and Delta—in that order. Line 15 uses the <a href="https://docs.python.org/3.13/library/itertools.html#itertools.product"><code>product</code> function</a> from the <code>itertools</code> library to build all 729 outcomes. It turns them into a NumPy array because I wanted to use the <a href="https://numpy.org/doc/stable/reference/generated/numpy.sum.html"><code>sum</code> function</a> (Line 16) to add up the points from each game without any laborious looping. After this step, <code>points</code> is a 729×4 NumPy array.</p>
<p>Line 17 then turns <code>points</code> into a list of lists, and Line 18 sorts the 729 entries. It looks like this:</p>
<pre><code>[[9, 6, 3, 0],
 [9, 6, 1, 1],
 [9, 6, 0, 3],
 [9, 4, 4, 0],
 [9, 4, 3, 1],
    .
    .
    .
 [0, 4, 5, 7],
 [0, 4, 4, 9],
 [0, 3, 9, 6],
 [0, 3, 7, 7],
 [0, 3, 6, 9]]
</code></pre>
<p>There are repeats among these results. For example, there are two ways to get the result</p>
<pre><code>[5, 5, 4, 1]
</code></pre>
<p>This set of points can come from either</p>
<pre><code>Alpha draws Beta       [1, 1, 0, 0]
Alpha beats Gamma      [3, 0, 0, 0]
Alpha draws Delta      [1, 0, 0, 1]
Beta draws Gamma       [0, 1, 1, 0]
Beta beats Delta       [0, 3, 0, 0]
Gamma beats Delta      [0, 0, 3, 0]
</code></pre>
<p>or</p>
<pre><code>Alpha draws Beta       [1, 1, 0, 0]
Alpha draws Gamma      [1, 0, 1, 0]
Alpha beats Delta      [3, 0, 0, 0]
Beta beats Gamma       [0, 3, 0, 0]
Beta draws Delta       [0, 1, 0, 1]
Gamma beats Delta      [0, 0, 3, 0]
</code></pre>
<p>Sum down the columns to prove to yourself that this yields point totals of</p>
<pre><code>[5, 5, 4, 1]
</code></pre>
<p>OK, so how many unique point total results can there be? To answer this, I added the following code:</p>
<pre><code>python:
21:  # Unique points, team-by-team.
22:  unique_team_points = [ list(q) for q in set(tuple(p) for p in points) ]
23:  unique_team_points.sort(reverse=True)
24:  print(f'Number of unique point arrangements: {len(unique_team_points)}')
</code></pre>
<p>which output</p>
<pre><code>Number of unique point arrangements: 556
</code></pre>
<p>Unlike the 729 results we got earlier, I have no formula for calculating this number, and I have no interest in trying to come up with one. This is one of those situations where brute force programming is the best use of my time.</p>
<p>Line 22 uses the common Python trick of turning a list into a set to eliminate duplicates and then turns the set back into a list. The less-common trick is that it first turns the inner lists into tuples. This is needed because something like</p>
<pre><code>set(points)
</code></pre>
<p>returns this error:</p>
<pre><code>TypeError: cannot use 'list' as a set element (unhashable type: 'list')
</code></pre>
<p>In these 556 results, we kept the teams separated. In other words, we considered results</p>
<pre><code>[9, 6, 3, 0]
[9, 6, 0, 3]
[9, 3, 6, 0]
[9, 3, 0, 6]
[9, 0, 6, 3]
[9, 0, 3, 6]
    etc.
</code></pre>
<p>to be different because the team scores were different. But what if we just wanted to know the possible point combinations without regard to which team got which point total? Again, I have no formula for this, but it was easy to work it out in code:</p>
<pre><code>python:
26:  # Unique points without regard to team.
27:  sorted_points = sorted((sorted(p, reverse=True) for p in points), reverse=True)
28:  unique_points = [ list(q) for q in set(tuple(p) for p in sorted_points) ]
29:  unique_points.sort(reverse=True)
30:  print(f'Number of unique sets of points: {len(unique_points)}')
31:  print()
32:  point_strings = [ f'{p[0]} {p[1]} {p[2]} {p[3]}' for p in unique_points ]
33:  print('\n'.join(point_strings))
</code></pre>
<p>The first line of output is</p>
<pre><code>Number of unique sets of points: 40
</code></pre>
<p>which is quite a reduction. The number is now small enough to show all of them. Reshaping the 40 output lines that follow into four columns of ten gives</p>
<pre><code>9 6 3 0     7 6 3 1     7 3 2 2     5 5 3 2
9 6 1 1     7 6 2 1     6 6 6 0     5 5 3 1
9 4 4 0     7 5 4 0     6 6 4 1     5 5 2 2
9 4 3 1     7 5 3 1     6 6 3 3     5 4 4 3
9 4 2 1     7 5 2 1     6 5 4 1     5 4 4 2
9 3 3 3     7 4 4 1     6 5 2 2     5 4 3 2
9 2 2 2     7 4 3 3     6 4 4 3     5 3 3 2
7 7 3 0     7 4 3 2     6 4 4 2     4 4 4 4
7 7 1 1     7 4 3 1     5 5 5 0     4 4 4 3
7 6 4 0     7 4 2 2     5 5 4 1     3 3 3 3
</code></pre>
<p>These are the point totals for the 40 different ways a group stage can end. The two levels of sorting in Line 27 are the key to bringing the results down from 729.</p>
<p>You can go to <a href="https://www.espn.com/soccer/standings/_/league/FIFA.WORLD/season/2022">ESPN’s World Cup table for 2022</a> to show which of these 40 results occurred that year. There’s a popup menu button on the page that lets you check 2018, 2014, 2010, and 2006, too.</p>
<p>I’m sure serious soccer fans have been digging into the math behind this year’s change from eight groups to twelve. I’m not a serious fan, so this is good enough for me.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:advances">
<p>I won’t be going through the rules of how teams advance to the next stage—they start out simple but can get complicated quickly, especially now that the tournament has expanded. <a href="#fnref:advances" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

<item>
<title>Missing miles</title>
<link>https://leancrew.com/all-this/2026/06/missing-miles/</link>
<pubDate>Sun, 14 Jun 2026 02:21:04 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/missing-miles/</guid>
<description>
  <![CDATA[I took a bike ride this morning on a portion of the <a href="https://bikeiandm.com/">I&amp;M Canal Trail</a> from Romeoville to Joliet and back. It’s a fairly short ride, eight miles each way, and that distance got me thinking about using Mathematica to do some calculations after I got back home.]]>
</description>
<content:encoded>
  <![CDATA[<p>I took a bike ride this morning on a portion of the <a href="https://bikeiandm.com/">I&amp;M Canal Trail</a> from Romeoville to Joliet and back. It’s a fairly short ride, eight miles each way, and that distance got me thinking about using Mathematica to do some calculations after I got back home.</p>
<p>The trail has mile markers with little snippets of information about the canal and the surrounding area. Here are the markers I passed this morning:</p>
<p><a href="https://leancrew.com/all-this/images2026/20260613-Mileage%20markers%2027%20through%2031.jpg"><img alt="Mileage markers 27 through 31" class="ss" src="https://leancrew.com/all-this/images2026/20260613-Mileage%20markers%2027%20through%2031.jpg" title="Mileage markers 27 through 31" width="100%"/></a></p>
<p>The mileage figures on the markers increase as you go south and west, which is downstream. There are several more markers in Lockport, where they’re graduated in tenths of a mile, but these will do for our purposes.</p>
<p>My ride started nearly a mile before Marker 27 and continued about a mile after Marker 31, which would lead you to believe I rode six miles, not eight. But the trip is definitely eight miles. I have my Fitness app set to record in kilometers, and it always tells me this trip is 13 kilometers one way. And as we know from the <a href="https://leancrew.com/all-this/2024/11/kilometers-miles-fibonacci-and-lucas/">Fibonacci conversion</a>, 13 km = 8 mi.</p>
<p>As I passed Marker 27 on the way south, I was reminded of this anomaly and decided to use the trip to figure out why the markers and the mileage don’t match up. I checked my Workout screen on my watch as I passed each marker and learned that there were two miles between Markers 28 and 29 and between Markers 30 and 31. After turning around in the parking lot of the <a href="https://www.reconnectwithnature.org/preserves-trails/preserves/joliet-iron-works-historic-site">Joliet Iron Works</a>, I decided to take a photo of each marker on the way back north and use the photos to calculate distances.</p>
<p>I already knew about Mathematica’s <a href="http://reference.wolfram.com/language/ref/GeoDistance.html"><code>GeoDistance</code> function</a>, and I figured it must have a way of extracting the latitude and longitude of photos from their EXIF data. That turned out to be the <a href="http://reference.wolfram.com/language/ref/Import.html"><code>Import</code> function</a>, and I was able to put the two together to make this short notebook:</p>
<iframe height="700" src="https://www.wolframcloud.com/obj/mark80/Published/mile-markers.nb?_embed=iframe" width="100%"></iframe>
<p>As you can see, the distances between the photos (and therefore between the markers) were:</p>
<table>
<thead>
<tr>
<th align="center">Markers</th>
<th align="right">Distance</th>
</tr>
</thead>
<tbody>
<tr>
<td align="center">27–28</td>
<td align="right">1.019 mi</td>
</tr>
<tr>
<td align="center">28–29</td>
<td align="right">1.886 mi</td>
</tr>
<tr>
<td align="center">29–30</td>
<td align="right">1.041 mi</td>
</tr>
<tr>
<td align="center">30–31</td>
<td align="right">1.939 mi</td>
</tr>
</tbody>
</table>
<p>These are <a href="https://en.wikipedia.org/wiki/Geodesic">geodesic</a> or “as the crow flies” distances. The canal and its trail are pretty straight, but there are a couple of doglegs between Markers 28 and 29, which explains why the distance between them is over a tenth of a mile off from two miles.</p>
<p>As you can see near the bottom of the notebook, I used the <a href="http://reference.wolfram.com/language/ref/GeoListPlot.html"><code>GeoListPlot</code> function</a> to make a map with the marker positions on it. I combined that in <a href="https://flyingmeat.com/acorn/">Acorn</a> with the map from my iPhone’s Fitness app to make this image:</p>
<p><a href="https://leancrew.com/all-this/images2026/20260613-Mathematica%20and%20Fitness%20app%20maps.jpg"><img alt="Mathematica and Fitness app maps" class="ss" src="https://leancrew.com/all-this/images2026/20260613-Mathematica%20and%20Fitness%20app%20maps.jpg" title="Mathematica and Fitness app maps" width="100%"/></a></p>
<p>It took some trial and error with the <a href="http://reference.wolfram.com/language/ref/GeoRange.html"><code>GeoRange</code> option</a> to get the scales to match up reasonably well, but I think it was worth it. You can see where the mile markers fall on my route, and it’s clear that the distances between Markers 28 and 29 and Markers 30 and 31 are about twice as far as the other distances. Also, you can see how the geodesic distance between Markers 28 and 29 cuts the corners, making it less than two miles.</p>
<p>So I’ve solved the six-mile/eight-mile mystery, but I still don’t understand why the mileage on the markers is wrong.</p>]]>
</content:encoded>
</item>

<item>
<title>Fourier series in Mathematica</title>
<link>https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/</link>
<pubDate>Mon, 08 Jun 2026 16:35:18 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/</guid>
<description>
  <![CDATA[After <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">my last post</a>—the one about using Fourier series—I started thinking about how to use Mathematica to develop Fourier series.<sup id="fnref:cheating"><a href="#fn:cheating" rel="footnote">1</a></sup> I could, of course, use the <a href="http://reference.wolfram.com/language/ref/Integrate.html"><code>Integrate</code></a> function to determine the Fourier coefficients, but Mathematica has other functions that can do the job directly once you understand how they work.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/fourier-series-in-mathematica/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>After <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">my last post</a>—the one about using Fourier series—I started thinking about how to use Mathematica to develop Fourier series.<sup id="fnref:cheating"><a href="#fn:cheating" rel="footnote">1</a></sup> I could, of course, use the <a href="http://reference.wolfram.com/language/ref/Integrate.html"><code>Integrate</code></a> function to determine the Fourier coefficients, but Mathematica has other functions that can do the job directly once you understand how they work.</p>
<p>Mathematica has several Fourier functions, but I’m going to stick with the ones associated with sine series, <a href="http://reference.wolfram.com/language/ref/FourierSinCoefficient.html"><code>FourierSinCoefficient</code></a> and <a href="http://reference.wolfram.com/language/ref/FourierSinSeries.html"><code>FourierSinSeries</code></a>. They’re meant to be easy to use, and they are, but you need to know how they’re defined.</p>
<p>The coefficients used in both of these functions are defined this way:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>f</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>π</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>π</mi></msubsup><mi>f</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mi>n</mi><mi>x</mi><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>This doesn’t match up exactly with the definition I used for getting the Fourier coefficients of a loading function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>L</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>n</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>To use the Mathematica functions to get the <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>n</mi></msub></math>, we have to do a change of variable. Let</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>z</mi><mo>=</mo><mfrac><mrow><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>so</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>x</mi><mo>=</mo><mfrac><mrow><mi>L</mi><mi>z</mi></mrow><mi>π</mi></mfrac><mspace width="1.0em"></mspace><mtext mathvariant="normal">and</mtext><mspace width="1.0em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><mfrac><mi>L</mi><mi>π</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>z</mi></mrow></math>
<p>(Here, <em>z</em> is just another variable name; I’m not using it to represent a complex number.)</p>
<p>This changes the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>n</mi></msub></math> to</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>π</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>π</mi></msubsup><mi>q</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mi>L</mi><mi>z</mi></mrow><mi>π</mi></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mo form="prefix" stretchy="false">(</mo><mi>n</mi><mi>z</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mi>d</mi><mi>z</mi></mrow></math>
<p>which means we can use the Mathematica functions as long as we substitute <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>L</mi><mi>z</mi><mi>/</mi><mi>π</mi></mrow></math> in for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math> in the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>q</mi></math>.</p>
<p>Let’s give it a try on this parabolic loading function:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo>=</mo><mn>4</mn><mspace width="0.167em"></mspace><msub><mi>q</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub><mi>x</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo>−</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>
<p>It shouldn’t take many Fourier terms to get a good approximation of this.</p>
<p><img alt="Parabolic loading" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Parabolic%20loading.png" title="Parabolic loading" width="100%"/></p>
<p>Here are the Mathematica commands I used:</p>
<pre><code>q = 4 qmax x (L - x)
qn = FourierSinCoefficient[q /. x -&gt; L z/Pi, z, n]
</code></pre>
<p>You can see the substitution in the first argument to <code>FourierSinCoefficient</code>.</p>
<p>After simplification, the results were</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>n</mi></msub><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: left"><mfrac><mrow><mn>32</mn><mspace width="0.167em"></mspace><msup><mi>L</mi><mn>2</mn></msup><msub><mi>q</mi><mi>m</mi></msub><mi>a</mi><mi>x</mi></mrow><mrow><msup><mi>n</mi><mn>3</mn></msup><msup><mi>π</mi><mn>3</mn></msup></mrow></mfrac><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for odd </mtext><mspace width="0.333em"></mspace></mrow><mi>n</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><mn>0</mn><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for even </mtext><mspace width="0.333em"></mspace></mrow><mi>n</mi></mtd></mtr></mtable></mrow></mrow></math>
<p>We could also get the series (through <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>n</mi><mo>=</mo><mn>7</mn></mrow></math>) directly with <code>FourierSinSeries</code>:</p>
<pre><code>qapprox2 = FourierSinSeries[q /. x -&gt; L z/Pi, z, 7] /. z -&gt; Pi x /L
</code></pre>
<p>where the inverse substitution comes at the end to put the expression back in the form we want. Here’s a screenshot from the Mathematica notebook:</p>
<p><img alt="Mathematica notebook screenshot of Fourier series" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Mathematica%20notebook%20screenshot%20of%20Fourier%20series.png" title="Mathematica notebook screenshot of Fourier series" width="100%"/></p>
<p>You can see that the coefficients match what we got earlier.</p>
<p>A quick plot of the difference between this truncated Fourier series and the original parabolic function shows that, as expected, the series does a good job of replicating the original. The largest error, near the ends, is just 0.3% of <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></math>, and that’s with only four terms.</p>
<p><img alt="Error of Fourier series estimate" class="ss" src="https://leancrew.com/all-this/images2026/20260608-Error%20of%20Fourier%20series%20estimate.png" title="Error of Fourier series estimate" width="100%"/></p>
<p>If you’re interested, here’s the entire Mathematica notebook:</p>
<iframe height="800" src="https://www.wolframcloud.com/obj/mark80/Published/Fourier%20parabola.nb?_embed=iframe" width="100%"></iframe>
<p>Now that I understand the way these functions work, I can do more complicated Fourier analysis in Mathematica without questioning myself on whether I’m using them correctly.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:cheating">
<p>Something I couldn’t do in any of the posts in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">that series</a>, as that would be breaking the rules I had set up for myself. <a href="#fnref:cheating" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—Fourier series solution of the ODE</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/</link>
<pubDate>Sat, 06 Jun 2026 20:36:43 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/</guid>
<description>
  <![CDATA[We’re finally here, at the end of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">all things</a>. In this post, we’ll use a Fourier series to get the formula for the center deflection of a simply supported beam with a uniformly distributed load. We’ll see some of the same math that we saw in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">previous Fourier series solution</a>, but the fundamental approach will be different.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-fourier-series-solution-of-the-ode/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re finally here, at the end of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">all things</a>. In this post, we’ll use a Fourier series to get the formula for the center deflection of a simply supported beam with a uniformly distributed load. We’ll see some of the same math that we saw in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">previous Fourier series solution</a>, but the fundamental approach will be different.</p>
<p>Let’s start with the fourth-order ordinary differential equation for a beam with a general loading function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>E</mi><mi>I</mi><msup><mi>y</mi><mrow><mi>i</mi><mi>v</mi></mrow></msup><mo>=</mo><mi>q</mi></mrow></math>
<p>The simple supports at both ends give us these boundary conditions:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mn>0</mn><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mi>″</mi><mo form="prefix" stretchy="false">(</mo><mn>0</mn><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>y</mi><mi>″</mi><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mn>0</mn></mrow></math>
<p>Let’s work out the solution for a loading condition we haven’t considered before, a distributed load in the form of a sine wave:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>where <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>m</mi></math> is a positive integer and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>q</mi><mi>m</mi></msub></math> is some constant amplitude. Given the form of the governing ODE and the boundary conditions, it seems likely that the solution will look like this:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><msub><mi>y</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>It satisfies the boundary conditions, and if we plug it and the expression for <em>q</em> into the governing ODE, we get</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>E</mi><mi>I</mi><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mspace width="0.167em"></mspace><msub><mi>y</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac><mo>=</mo><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mi>L</mi></mfrac></mrow></math>
<p>which is a solution for all values of <em>x</em> if</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>y</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mspace width="0.167em"></mspace><msub><mi>q</mi><mi>m</mi></msub></mrow></math>
<p>This will work for any value of <em>m</em> that’s a positive integer.</p>
<p>Since the governing ODE is linear, if <em>q</em> is the sum of several sine terms, the solution will be the sum of several sine terms. Returning to our favorite problem,</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>we now have a path for expressing the solution as a sum of sines, as long as we can express the constant function, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mi>w</mi></mrow></math>, as a sum of sines.</p>
<p>And of course we can. The Fourier sine series expression that fits a constant is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>q</mi><mo form="prefix" stretchy="false">(</mo><mi>x</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn></mrow><mo accent="false">∞</mo></munderover><msub><mi>q</mi><mi>m</mi></msub><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mo>=</mo><mi>w</mi></mrow></math>
<p>where</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>q</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>2</mn><mi>L</mi></mfrac><mspace width="0.167em"></mspace><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mi>w</mi><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi><mi>x</mi></mrow><mi>L</mi></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right"><mfrac><mrow><mn>4</mn><mspace width="0.1em"></mspace><mi>w</mi></mrow><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mspace width="1.0em"></mspace><mrow><mtext mathvariant="normal">for odd </mtext><mspace width="0.333em"></mspace></mrow><mi>m</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><mn>0</mn><mspace width="1.0em"></mspace><mrow><mtext mathvariant="normal">for even </mtext><mspace width="0.333em"></mspace></mrow><mi>m</mi></mtd></mtr></mtable></mrow></mrow></math>
<p>This result comes from the orthogonality of the sine function. The Fourier coefficients are the same as those for a <a href="https://mathworld.wolfram.com/FourierSeriesSquareWave.html">square wave</a>.</p>
<p>Plugging this result into the expression for <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>y</mi><mi>m</mi></msub></math>, we get</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>y</mi><mi>m</mi></msub><mo>=</mo><mfrac><mn>1</mn><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi></mrow><mrow><mi>m</mi><mi>π</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>m</mi><mn>5</mn></msup><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>for odd <em>m</em>. Therefore,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>,</mo><mi>…</mi></mrow><mo accent="false">∞</mo></munderover><mfrac><mn>1</mn><msup><mi>m</mi><mn>5</mn></msup></mfrac><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mn>2</mn></mfrac></mrow></math>
<p>You may recall from <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">our earlier post</a> that there’s a closed-form solution for this sum:</p>
<p><img alt="Simitses Table A-2" class="ss" src="https://leancrew.com/all-this/images2026/20260527-Simitses%20Table%20A-2.jpg" title="Simitses Table A-2" width="100%"/></p>
<p>The last entry in this table with <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>x</mi><mo>=</mo><mi>π</mi><mi>/</mi><mn>2</mn></mrow></math> gives us</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><munderover><mo>∑</mo><mrow><mi>m</mi><mo>=</mo><mn>1</mn><mo>,</mo><mn>3</mn><mo>,</mo><mn>5</mn><mo>,</mo><mi>…</mi></mrow><mo accent="false">∞</mo></munderover><mfrac><mn>1</mn><msup><mi>m</mi><mn>5</mn></msup></mfrac><mspace width="0.167em"></mspace><mrow><mi mathvariant="normal">sin</mi><mo>⁡</mo></mrow><mfrac><mrow><mi>m</mi><mi>π</mi></mrow><mn>2</mn></mfrac></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><msup><mi>π</mi><mn>4</mn></msup><mn>96</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>−</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><msup><mi>π</mi><mn>2</mn></msup><mn>48</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>3</mn></msup><mo>+</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>96</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><msup><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mn>4</mn></msup></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><msup><mi>π</mi><mn>5</mn></msup></mrow><mn>1536</mn></mfrac></mtd></mtr></mtable></math>
<p>Substituting the closed-form solution in for the sum yields our old friend:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><msup><mi>π</mi><mn>5</mn></msup><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><msup><mi>π</mi><mn>5</mn></msup></mrow><mn>1536</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p></p>
<hr/>
<p>The purpose of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series of posts</a>—apart from a bit of showing off—was to demonstrate why I love structural analysis. It has, even in the simplest of problems, a depth that rewards those who study it. And when you’re confronted with problems that aren’t so simple, you can draw on that depth to understand and solve them.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—Newmark’s method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/</link>
<pubDate>Sat, 06 Jun 2026 12:44:17 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/</guid>
<description>
  <![CDATA[This would have been the last post in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">the series</a> if I hadn’t realized recently that another method deserved a post. So this is the penultimate. It was described in <a href="https://engineering.purdue.edu/~ce474/Docs/Newmark_calculating%20deflections%20moments%20buckling%20loads_1942.pdf">this 1943 paper</a> by <a href="https://cee.illinois.edu/about/history/history-excellence/nathan-m-newmark">Nathan Newmark</a> and is known—or was known—as <em>Newmark’s method</em>.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-newmarks-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>This would have been the last post in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">the series</a> if I hadn’t realized recently that another method deserved a post. So this is the penultimate. It was described in <a href="https://engineering.purdue.edu/~ce474/Docs/Newmark_calculating%20deflections%20moments%20buckling%20loads_1942.pdf">this 1943 paper</a> by <a href="https://cee.illinois.edu/about/history/history-excellence/nathan-m-newmark">Nathan Newmark</a> and is known—or was known—as <em>Newmark’s method</em>.</p>
<p>I say <em>was</em> because this method is dead. How dead? Forty-five years ago, when I was an undergraduate taking structural analysis courses, Newmark’s method wasn’t being taught in the department that he had been the head of for decades and whose <a href="https://cee.illinois.edu/about/buildings">main building is named after him</a>. That’s dead.</p>
<p>Which isn’t to say it wasn’t a good method. Some of my professors talked about using it when they were young, and it was a practical technique when engineers used slide rules and desk calculators, but it was clear by the 80s that its time had passed. Still, it’s desncribed in the textbook I used as an undergrad, and I did eventually learn it well after I was out of school, so here it is.</p>
<p>Newmark’s method is basically a way of doing double integration, so you can use it to go from loading to bending moments or from bending moments to deflection. As Newmark says in the introduction to his paper,</p>
<blockquote>
<p>The numerical procedure is approximate, but leads to exact moments (or deflections) when the loading diagram (or diagram of “angle changes”) is made up of segments that are bounded by straight lines or by arcs of parabolas.</p>
</blockquote>
<p>For our simply supported, uniformly loaded beam, the “angle change” diagram—which we’ve been calling a curvature diagram—is a parabola, so we can get an exact solution.</p>
<p>Let’s say we have a beam with any kind of support conditions and some general distributed loading:</p>
<p><img alt="Beam with generic loading" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Beam%20with%20generic%20loading.png" title="Beam with generic loading" width="100%"/></p>
<p>The fundamental trick of Newmark’s method is to imagine a set of simply supported beams inserted between the load and the real beam.</p>
<p><img alt="Insertion of simply supported beams" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Insertion%20of%20simply%20supported%20beams.png" title="Insertion of simply supported beams" width="100%"/></p>
<p>The small imaginary beam segments are all of the same length, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>λ</mi></math>, and the analysis proceeds by calculating the reaction forces at the ends of these beams and then building a table of loads, shears, and moments based on these reactions (reversed in direction) acting on the large original beam.</p>
<p>Here’s a figure from the paper that explains how to calculate the reaction forces for parabolically distributed loading:</p>
<p><img alt="Equivalent concentrated loads for parabolas" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Equivalent%20concentrated%20loads%20for%20parabolas.png" title="Equivalent concentrated loads for parabolas" width="100%"/></p>
<p>There are simpler formulas if the loading is distributed linearly.</p>
<p>You may have noticed the double curvature in the right drawing, which means that the load shown there is not parabolic. Newmark suggests using the formulas in this figure even if the loading curve is of higher order—the parabolic formulas are close enough if you divide the beam into several segments.</p>
<p>I’ve focused here on the process of going from loads to bending moments because I think the mechanics of that is easier to understand. But the same process applies to going from curvature to deflection. We went through that in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-conjugate-beam-method/">conjugate beam post</a>.</p>
<p>In fact, Newmark does our problem in the paper. He uses the constant <em>q</em> as the intensity of the load and splits the beam into four segments:</p>
<p><img alt="Newmark four-segment solution" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Newmark%20four-segment%20solution.png" title="Newmark four-segment solution" width="100%"/></p>
<p>This may look impenetrable, but we can simplify it by using only two segments and explaining each step. Here’s the table, starting with the moment diagram:</p>
<p><img alt="Newmark two-segment solution" class="ss" src="https://leancrew.com/all-this/images2026/20260605-Newmark%20two-segment%20solution.png" title="Newmark two-segment solution" width="100%"/></p>
<p>The row labeled <em>Moment</em> is the value of the bending moment at each point. The <em>Curvature</em> row is just the moment at each point divided by <em>EI</em> and with the sign reversed. Those are the easy ones.</p>
<p>The <em>Angle change</em> row is based on the curvature values and the formulas in Figure 5 above. The value at the left end is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow><mn>24</mn></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mn>7</mn><mo>⋅</mo><mn>0</mn><mo>+</mo><mn>6</mn><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>8</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>−</mo><mn>0</mn><mo form="postfix" stretchy="true">]</mo></mrow><mo>=</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>64</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>where we’ve used <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>λ</mi><mo>=</mo><mi>L</mi><mi>/</mi><mn>2</mn></mrow></math>. This is also the value at the right end.</p>
<p>The value at the center is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow><mn>12</mn></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mn>0</mn><mo>+</mo><mn>10</mn><mrow><mo form="prefix" stretchy="true">(</mo><mi>−</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>8</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>+</mo><mn>0</mn><mo form="postfix" stretchy="true">]</mo></mrow><mo>=</mo><mi>−</mi><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>96</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>We start the <em>Average slope</em> row with the knowledge that the slope at the center of the beam is zero, so if the angle change across the center is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>96</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>then the average slope must go from</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="2.0em"></mspace><mtext mathvariant="normal">to</mtext><mspace width="1.75em"></mspace><mo>−</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>as we move from the left half of the beam to the right half.</p>
<p>(If you’re having trouble with this, remember that angle change is analogous to shear and think of a beam with an antisymmetric shear diagram. If the change in shear across the centerline is <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mi>F</mi></mrow></math>, then the shear must be <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>F</mi><mi>/</mi><mn>2</mn></mrow></math> in the left half of the beam and <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>−</mi><mi>F</mi><mi>/</mi><mn>2</mn></mrow></math> in the right half.)</p>
<p>For the <em>Deflection</em> row, we know that the deflection is zero at the left and right ends. Since the average slope in the left half of the beam is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></math>
<p>the deflection at the center must be</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>192</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>an answer we’ve now seen twelve times.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—dummy unit load method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/</link>
<pubDate>Fri, 05 Jun 2026 12:51:46 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/</guid>
<description>
  <![CDATA[We’re in the home stretch of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a>, so ANIAT will soon go back to complaining about Apple’s UI choices.<sup id="fnref:baker"><a href="#fn:baker" rel="footnote">1</a></sup> Next week’s WWDC keynote should provide some inspiration.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-dummy-unit-load-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>We’re in the home stretch of <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a>, so ANIAT will soon go back to complaining about Apple’s UI choices.<sup id="fnref:baker"><a href="#fn:baker" rel="footnote">1</a></sup> Next week’s WWDC keynote should provide some inspiration.</p>
<p>But today’s post covers our eleventh method for deriving the center deflection of a uniformly loaded simply supported beam: the dummy unit load method. When I was an undergraduate, this was the method we used to determine the deflections of truss structures, but it’s more general than that. My favorite explanation of why it works is in <a href="https://lccn.loc.gov/56006503">Nicholas J. Hoff’s <em>The Analysis of Structures</em></a>. I have the original Wiley hardcover of this book, but you can apparently get both <a href="https://www.amazon.com/Analysis-Structures-Principles-Principle-Displacements/dp/1036837793">paperback</a> and <a href="https://www.amazon.com/Analysis-Structures-Principles-Principle-Displacements/dp/0265807344">hardcover</a> reprints.</p>
<p>Hoff uses the <a href="https://en.wikipedia.org/wiki/Virtual_work">principle of virtual work</a> in his explanation, and I’d like to quote him here, but unfortunately his explanation is split between one section on the analysis of trusses and another on the analysis of beams. I couldn’t figure out a nice way to put them together coherently, so you’re just going to have to trust me.</p>
<p>For a beam, you can get the deflection at a particular point by following these steps:</p>
<ol>
<li>Work out an equation for the bending moment, <em>M</em>, in the beam for the given set of applied loads.</li>
<li>Imagine that same beam with those loads removed (this is the dummy structure) and a concentrated unit load placed at the point at which we want the deflection. By definition, the magnitude of a unit load is one. The unit load points in the direction of the deflection we want to calculate.</li>
<li>Work out an equation for the bending moment, <em>m</em>, in the dummy beam with the unit load.</li>
<li><p>The desired deflection is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>δ</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><mrow><mi>m</mi><mi>M</mi></mrow><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math></li>
</ol>
<p>Let’s apply this simple principle to our problem:</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>The bending moment is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>M</mi><mo>=</mo><mfrac><mi>w</mi><mn>2</mn></mfrac><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>L</mi><mi>x</mi><mo>−</mo><msup><mi>x</mi><mn>2</mn></msup><mo form="postfix" stretchy="false">)</mo></mrow></math>
<p>where the <em>x</em> coordinate starts at the left end of the beam and increases to the right, as usual.</p>
<p>This same structure with just a unit load at the center is</p>
<p><img alt="Beam with dummy unit load" class="ss" src="https://leancrew.com/all-this/images2026/20260604-Beam%20with%20dummy%20unit%20load.png" title="Beam with dummy unit load" width="100%"/></p>
<p>Its bending moment is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>m</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mspace width="0.1em"></mspace><mi>x</mi><mspace width="2.0em"></mspace><mrow><mtext mathvariant="normal">for </mtext><mspace width="0.333em"></mspace></mrow><mn>0</mn><mo>≤</mo><mi>x</mi><mo>≤</mo><mfrac><mi>L</mi><mn>2</mn></mfrac></mrow></math>
<p>and <em>m</em> is symmetric about the center of the beam.</p>
<p>Therefore,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>δ</mi><mo>=</mo><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><mrow><mi>m</mi><mi>M</mi></mrow><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>and we can take advantage of symmetry to say</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><mi>y</mi><mrow><mo form="prefix" stretchy="true">(</mo><mfrac><mi>L</mi><mn>2</mn></mfrac><mo form="postfix" stretchy="true">)</mo></mrow></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>w</mi></mrow><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><msubsup><mo>∫</mo><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup><mo form="prefix" stretchy="false">(</mo><mi>L</mi><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><msup><mi>x</mi><mn>3</mn></msup><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mi>w</mi><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><msubsup><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><mn>1</mn><mn>3</mn></mfrac><mspace width="0.167em"></mspace><mi>L</mi><msup><mi>x</mi><mn>3</mn></msup><mo>−</mo><mfrac><mn>1</mn><mn>4</mn></mfrac><mspace width="0.167em"></mspace><msup><mi>x</mi><mn>4</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mi>w</mi><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>24</mn></mfrac><mo>−</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>64</mn></mfrac><mo form="postfix" stretchy="true">]</mo></mrow></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd></mtr></mtable></math>
<p>You can pretty much do this problem in your head if you’re good at figuring out least common multiples. I’m not, but after writing things out, I did realize that the LCM of <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>24</mn></math> and <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>64</mn></math> is <math xmlns="http://www.w3.org/1998/Math/MathML"><mn>192</mn></math>.</p>
<div class="footnotes">
<hr/>
<ol>
<li id="fn:baker">
<p>Heads up, though. I recently thought of a thirteenth method that’s different enough from the others to merit another post. Sorry about that. <a href="#fnref:baker" rev="footnote">↩</a></p>
</li>
</ol>
</div>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—finite element method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-finite-element-method/</link>
<pubDate>Wed, 03 Jun 2026 13:24:13 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-finite-element-method/</guid>
<description>
  <![CDATA[The biggest problem I face when writing posts in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a> is deciding how much background explanation to put in. If I included only the stuff I do to get the answer, the posts would be very terse: one sketch and a dozen or fewer lines of math. A full explanation, though, could easily turn into several semesters’ worth of structural analysis theory. I’m trying to get close to the former while adding just enough background so readers with engineering experience can follow along. Even if you haven’t used the method of a particular post, you should be able to take what’s in the post and find the whatever further information you need to fill in the inevitable gaps.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-finite-element-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>The biggest problem I face when writing posts in <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">this series</a> is deciding how much background explanation to put in. If I included only the stuff I do to get the answer, the posts would be very terse: one sketch and a dozen or fewer lines of math. A full explanation, though, could easily turn into several semesters’ worth of structural analysis theory. I’m trying to get close to the former while adding just enough background so readers with engineering experience can follow along. Even if you haven’t used the method of a particular post, you should be able to take what’s in the post and find the whatever further information you need to fill in the inevitable gaps.</p>
<p>This problem is most acute in describing today’s analysis. The <a href="https://en.wikipedia.org/wiki/Finite_element_method">finite element method</a>—more precisely called matrix structural analysis or the <a href="https://en.wikipedia.org/wiki/Direct_stiffness_method">direct stiffness method</a> when applied to structures made of beam, truss, or frame elements—has many analytical parents: the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">Rayleigh-Ritz method</a>, the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-slope-deflection-equation/">slope-deflection equation</a>, and matrix math. Presenting it without at least some of its antecedents would be a crime. But I will try to keep the introductory material to a minimum.</p>
<p>The fundamental piece of this analysis is the beam bending element. This is a length of beam with no interior loading, and its behavior can be described completely by four parameters, called its <em>degrees of freedom</em>. The DOF are the the displacements and rotations at the two ends (or <em>nodes</em>) of the element, usually numbered and directed as follows:</p>
<p><img alt="Beam element with DOF" class="ss" src="https://leancrew.com/all-this/images2026/20260601-Beam%20element%20with%20DOF.png" title="Beam element with DOF" width="70%"/></p>
<p>The DOF are often called <em>generalized displacements</em>, and we’ll refer to them as <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>u</mi><mn>1</mn></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>u</mi><mn>2</mn></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>u</mi><mn>3</mn></msub></math>, and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>u</mi><mn>4</mn></msub></math>. The deflected shape of this beam is completely determined by the sum of the products of these generalized displacements and a set of <em>shape functions</em> that look like this:</p>
<p><img alt="Finite element beam shape functions" class="ss" src="https://leancrew.com/all-this/images2026/20260601-Finite%20element%20beam%20shape%20functions.png" title="Finite element beam shape functions" width="70%"/></p>
<p>Each shape function is a cubic curve that has a unit displacement corresponding to one of the DOFs and zero displacement corresponding to the other three DOFs. Apart from the sign convention, these are the same shapes we saw in our discussion of the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-slope-deflection-equation/">slope-deflection equation</a>.</p>
<p>There is a <em>generalized force</em> associated with each DOF; these are the forces and moments at the two ends of the beam, and we’ll call them <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mn>1</mn></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mn>2</mn></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mn>3</mn></msub></math>, and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>f</mi><mn>4</mn></msub></math>. Note that when we multiply a <em>u</em> term by an <em>f</em> term, we get an energy expression. For DOF 1 and 3, that’s a displacement multiplied by a force; for DOF 2 and 4, that’s a rotation multiplied by a moment.</p>
<p>For this element, we can write a matrix equation for the relationship between the generalized displacements and generalized forces,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi mathvariant="bold-italic">𝒌</mi><mspace width="0.167em"></mspace><mi mathvariant="bold-italic">𝒖</mi><mo>=</mo><mi mathvariant="bold-italic">𝒇</mi></mrow></math>
<p>where</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi mathvariant="bold-italic">𝒖</mi><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>u</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>u</mi><mn>2</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>u</mi><mn>3</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>u</mi><mn>4</mn></msub></mtd></mtr></mtable><mo form="postfix" stretchy="true">}</mo></mrow><mo>,</mo><mspace width="2.0em"></mspace><mi mathvariant="bold-italic">𝒇</mi><mo>=</mo><mrow><mo form="prefix" stretchy="true">{</mo><mtable><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>f</mi><mn>1</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>f</mi><mn>2</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>f</mi><mn>3</mn></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right"><msub><mi>f</mi><mn>4</mn></msub></mtd></mtr></mtable><mo form="postfix" stretchy="true">}</mo></mrow></mrow></math>
<p>and</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi mathvariant="bold-italic">𝒌</mi><mo>=</mo><mfrac><mrow><mi>E</mi><mi>I</mi></mrow><msup><mi>L</mi><mn>3</mn></msup></mfrac><mspace width="0.2em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd style="padding-right: 1em"><mn>12</mn></mtd>
<mtd style="padding-right: 1em"><mn>6</mn><mspace width="0.-5em"></mspace><mi>L</mi></mtd>
<mtd style="padding-right: 1em"><mi>−</mi><mn>12</mn></mtd>
<mtd><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
</mtr>
<mtr>
<mtd style="padding-right: 1em"><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd style="padding-right: 1em"><mn>4</mn><mspace width="0.05em"></mspace><msup><mi>L</mi><mn>2</mn></msup></mtd>
<mtd style="padding-right: 1em"><mi>−</mi><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd><mn>2</mn><mspace width="0.05em"></mspace><msup><mi>L</mi><mn>2</mn></msup></mtd>
</mtr>
<mtr>
<mtd style="padding-right: 1em"><mi>−</mi><mn>12</mn></mtd>
<mtd style="padding-right: 1em"><mi>−</mi><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd style="padding-right: 1em"><mn>12</mn></mtd>
<mtd><mi>−</mi><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
</mtr>
<mtr>
<mtd style="padding-right: 1em"><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd style="padding-right: 1em"><mn>2</mn><mspace width="0.05em"></mspace><msup><mi>L</mi><mn>2</mn></msup></mtd>
<mtd style="padding-right: 1em"><mi>−</mi><mn>6</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd><mn>4</mn><mspace width="0.05em"></mspace><msup><mi>L</mi><mn>2</mn></msup></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">]</mo></mrow></mrow></math>
<p>Each column is the set of generalized forces that correspond to that shape function.</p>
<p>You may notice that the terms in the second row of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">𝒌</mi></math> match the coefficients in the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-slope-deflection-equation/">slope-deflection equation</a> before the <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>y</mi><mi>A</mi></msub></math> and <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>y</mi><mi>B</mi></msub></math> terms were combined into the <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>ψ</mi></math> span rotation term.</p>
<p>What should we do when, as in our case of a beam with a distributed load, there <em>is</em> interior loading? We convert that internal loading into what are called <em>consistent loads</em> at the ends. These are equal in magnitude and opposite in direction to the reaction forces and moments that would occur if the interior loads were applied to a beam with both ends fixed: <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>w</mi><mi>L</mi><mi>/</mi><mn>2</mn></mrow></math> for DOF 1 and 3 and <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup><mi>/</mi><mn>12</mn></mrow></math> for DOF 2 and 4.</p>
<p>To solve a problem by the finite element method, we assemble the structural stiffness matrix, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">𝑲</mi></math>, and the structural force vector, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">𝑭</mi></math> from all the individual elements and then solve the structural equation,</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi mathvariant="bold-italic">𝑲</mi><mspace width="0.167em"></mspace><mi mathvariant="bold-italic">𝑼</mi><mo>=</mo><mi mathvariant="bold-italic">𝑭</mi></mrow></math>
<p>for the vector of structural displacements, <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">𝑼</mi></math>. As you can see, I tend to use lower-case letters for the element terms and upper-case for the structural terms. That’s a reasonably common, but by no means universal, notation.</p>
<p>In general, this assembly and solution of a matrix equation can be quite complex, which is why the finite element method is typically thought of as a process that requires a computer. But our problem is simple enough to do by hand.</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>Recall that in both the <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-slope-deflection-equation/">slope-defection</a> and <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-the-Myosotis-method/">Myosotis</a> solutions, we took advantage of symmetry and considered just half the beam. We’ll do that again here.</p>
<p><img alt="Half beam for finite element analysis" class="ss" src="https://leancrew.com/all-this/images2026/20260601-Half%20beam%20for%20finite%20element%20analysis.png" title="Half beam for finite element analysis" width="60%"/></p>
<p>This half-beam has just two DOF, the rotation at the left end and the deflection at the right end. In the assembly process, element DOF 2 matches structural DOF 1 and element DOF 3 matches structural DOF 2. The other element DOF don’t appear in the structural matrix equation because their <em>U</em> terms are zero. Here’s an illustration of the assembly process for the stiffness matrix, accounting for the fact that the beam element has a length of <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></math>:</p>
<p><img alt="Assembly of stiffness matrix" class="ss" src="https://leancrew.com/all-this/images2026/20260603-Assembly%20of%20stiffness%20matrix.png" title="Assembly of stiffness matrix" width="100%"/></p>
<p>I took a class in matrix structural analysis (CE 361) from <a href="https://cee.illinois.edu/directory/profile/jghabous">Prof. Jamshid Ghaboussi</a> in the fall of 1981. He used the phrase <em>destination array</em> for the list of structural DOF that the element DOF go to. I’ve always thought that was a particularly good description and have used it ever since, even though I don’t think I’ve ever seen it in any finite element textbook. Note again that DOF 1 and 4 in the element have no destination because those displacements are zero in the structure.</p>
<p>When the assembly of both the stiffness matrix and force vector (which is done in a similar way) are complete, we get this equation:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mn>8</mn><mspace width=".1em"></mspace><mi>E</mi><mi>I</mi></mrow><msup><mi>L</mi><mn>3</mn></msup></mfrac><mspace width="0.2em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd style="padding-right: 1em"><msup><mi>L</mi><mn>2</mn></msup></mtd>
<mtd><mi>−</mi><mn>3</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
</mtr>
<mtr>
<mtd style="padding-right: 1em"><mi>−</mi><mn>3</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd><mn>12</mn></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">]</mo></mrow>
<mspace length=".2em"></mspace>
<mrow><mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd><msub><mi>U</mi><mn>1</mn></msub></mtd>
</mtr>
<mtr>
<mtd><msub><mi>U</mi><mn>2</mn></msub></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">}</mo></mrow>
<mo>=</mo>
<mrow><mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" displaystyle="true" style="text-align: right">
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mn>48</mn></mfrac></mtd></mtr></mtable></mrow>
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mi>w</mi><mi>L</mi></mrow><mn>4</mn></mfrac></mtd></mtr></mrow>
<mo form="postfix" stretchy="true">}</mo>
</math>
<p>There are different ways to solve this, but because a 2×2 matrix is easy to invert, that’s how I did it. Premultiplying each side by the inverse of <math xmlns="http://www.w3.org/1998/Math/MathML"><mi mathvariant="bold-italic">𝑲</mi></math> gives us</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow>
<mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd><msub><mi>U</mi><mn>1</mn></msub></mtd>
</mtr>
<mtr>
<mtd><msub><mi>U</mi><mn>2</mn></msub></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">}</mo></mrow>
<mo>=</mo>
<mfrac><mi>L</mi><mrow><mn>24</mn><mspace width=".1em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac>
<mspace width="0.2em"></mspace>
<mrow><mo form="prefix" stretchy="true">[</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd style="padding-right: 1em"><mn>12</mn></mtd>
<mtd><mn>3</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
</mtr>
<mtr>
<mtd style="padding-right: 1em"><mn>3</mn><mspace width="0.05em"></mspace><mi>L</mi></mtd>
<mtd><msup><mi>L</mi><mn>2</mn></msup></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">]</mo></mrow>
<mrow><mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" displaystyle="true" style="text-align: right">
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>2</mn></msup></mrow><mn>48</mn></mfrac></mtd></mtr></mtable></mrow>
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mi>w</mi><mi>L</mi></mrow><mn>4</mn></mfrac>
</mtd></mtr>
<mo form="postfix" stretchy="true">}</mo>
</math>
<p>Matrix multiplication gives us</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow>
<mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" style="text-align: right">
<mtr>
<mtd><msub><mi>U</mi><mn>1</mn></msub></mtd>
</mtr>
<mtr>
<mtd><msub><mi>U</mi><mn>2</mn></msub></mtd>
</mtr>
</mtable>
<mo form="postfix" stretchy="true">}</mo></mrow>
<mo>=</mo>
<mrow><mo form="prefix" stretchy="true">{</mo>
<mtable columnalign="right" displaystyle="true" style="text-align: center">
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>3</mn></msup></mrow><mrow><mn>24</mn><mspace width=".1em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd></mtr></mtable></mrow>
<mtr>
<mtd><mi>–</mi><mfrac><mrow><mn>5</mn><mspace width="0.1em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.1em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd>
</mtr>
<mo form="postfix" stretchy="true">}</mo>
</math>
<p>The signs are the opposite of what we’ve seen before because of the directions we used in defining the degrees of freedom. Physically, though, these are the same answers we’ve seen several times.</p>
  ]]>
</content:encoded>
</item>

<item>
<title>Simply supported beam—Castigliano's method</title>
<link>https://leancrew.com/all-this/2026/06/simply-supported-beam-castiglianos-method/</link>
<pubDate>Mon, 01 Jun 2026 13:06:57 +0000</pubDate>
<dc:creator>
  <![CDATA[Dr. Drang]]>
</dc:creator>
<guid>https://leancrew.com/all-this/2026/06/simply-supported-beam-castiglianos-method/</guid>
<description>
  <![CDATA[Continuing <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">our series</a> on the many ways to get the center deflection of a uniformly loaded beam, we come to another energy-based technique: <a href="https://en.wikipedia.org/wiki/Castigliano%27s_method">Castigliano’s method</a>.]]>
</description>
<content:encoded>
  <![CDATA[<p>[Equations in this post may not look right (or appear at all) in your RSS reader. Go to <a href="https://leancrew.com/all-this/2026/06/simply-supported-beam-castiglianos-method/">the original article</a> to see them rendered properly.]</p>
  <hr />
  <p>Continuing <a href="https://leancrew.com/all-this/2026/05/areas-of-my-expertise/">our series</a> on the many ways to get the center deflection of a uniformly loaded beam, we come to another energy-based technique: <a href="https://en.wikipedia.org/wiki/Castigliano%27s_method">Castigliano’s method</a>.</p>
<p>Castigliano’s second theorem provides a relationship between displacements, forces, and the strain energy in a linearly elastic system. The strain energy, <em>U</em>, is the potential energy of the system due to its deformation. For a generic elastic body, like this,</p>
<p><img alt="Elastic potato" class="ss" src="https://leancrew.com/all-this/images2026/20260531-Elastic%20potato.png" title="Elastic potato" width="60%"/></p>
<p>Castigliano’s second theorem can be as:</p>
<blockquote>
<p>If an elastic system is mounted so that rigid-body displacements of
  the entire system are impossible and certain external point forces
  <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>P</mi><mn>1</mn></msub></math>, <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>P</mi><mn>2</mn></msub></math>, … act on the system, in addition to distributed loads and thermal
  strains, the displacement component <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>δ</mi><mi>i</mi></msub></math> of the point of application of
  force <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>P</mi><mi>i</mi></msub></math> in the direction of force <math xmlns="http://www.w3.org/1998/Math/MathML"><msub><mi>P</mi><mi>i</mi></msub></math> is determined by the equation</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msub><mi>δ</mi><mi>i</mi></msub><mo>=</mo><mfrac><mrow><mi>∂</mi><mi>U</mi></mrow><mrow><mi>∂</mi><msub><mi>P</mi><mi>i</mi></msub></mrow></mfrac></mrow></math>
</blockquote>
<p>I took this from <a href="https://lccn.loc.gov/62010925">Henry Langhaar’s <em>Energy Methods in Applied Mechanics</em></a>, a favorite text of mine. I’ve altered the variable names to avoid conflicting with some variable names we’ve used in previous posts in this series.</p>
<p>Looking this over and thinking about it in terms of our problem,</p>
<p><img alt="Simply supported beam with uniform load" class="ss" src="https://leancrew.com/all-this/images2026/20260518-Simply%20supported%20beam%20with%20uniform%20load.png" title="Simply supported beam with uniform load" width="100%"/></p>
<p>two concerns come to mind:</p>
<ol>
<li>Our problem doesn’t have a point force at the center of the beam, where we want to determine the deflection.</li>
<li>Even if we did have a point force at the center of the beam, how do we write an expression for the strain energy in terms of that force?</li>
</ol>
<p>Let’s tackle the second concern first. Recall from our two Rayleigh-Ritz posts (<a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-fourier-series/">Fourier</a> and <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-energy-minimization-with-a-polynomial/">polynomial</a>) that the potential energy associated with beam bending is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><mn>1</mn><mn>2</mn></mfrac><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>y</mi><mi>″</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>This is the strain energy, <em>U</em>. Unfortunately, it’s written in terms of deflection, not force, but we can fix that. We saw <a href="https://leancrew.com/all-this/2026/05/simply-supported-beam-second-order-ode/">early on</a> that the curvature, <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>y</mi><mi>″</mi></mrow></math>, and the bending moment, <em>M</em>, are proportional:</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>M</mi><mo>=</mo><mi>−</mi><mi>E</mi><mi>I</mi><mspace width="0.075em"></mspace><mi>y</mi><mi>″</mi><mspace width="2.0em"></mspace><mtext mathvariant="normal">or</mtext><mspace width="2.0em"></mspace><mi>y</mi><mi>″</mi><mo>=</mo><mi>−</mi><mfrac><mi>M</mi><mrow><mi>E</mi><mi>I</mi></mrow></mfrac></mrow></math>
<p>We substitute the second of these into the expression for <em>U</em> to get</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>U</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><msup><mi>M</mi><mn>2</mn></msup><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>Because the bending moment can be written in terms of the applied loads, we’ve solved the second concern.</p>
<p>We solve the first concern with a trick. We can pretend there’s a load, <em>P</em>, at the center of the beam, and write out an expression for the bending moment, <em>M</em>, that includes <em>P</em>.</p>
<p><img alt="Simply supported beam with uniform and concentrated load" class="ss" src="https://leancrew.com/all-this/images2026/20260531-Simply%20supported%20beam%20with%20uniform%20and%20concentrated%20load.png" title="Simply supported beam with uniform and concentrated load" width="100%"/></p>
<p>We then do the integration to get <em>U</em>, take its derivative with respect to <em>P</em>, and—here’s the trick—evaluate the derivative for <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>P</mi><mo>=</mo><mn>0</mn></mrow></math>. This may seem like cheating, but it’s perfectly legitimate. Imagine <em>P</em> is very very small—it won’t contribute much to the deflection. So why not just make it zero?</p>
<p>Let’s go ahead and see what happens. The upward support reaction force at end of the beam above is <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><mi>/</mi><mn>2</mn></mrow></math>, so we can draw a free-body diagram for the left portion of the beam like this:</p>
<p><img alt="Free-body diagram for Castigliano" class="ss" src="https://leancrew.com/all-this/images2026/20260531-Free-body%20diagram%20for%20Castigliano.png" title="Free-body diagram for Castigliano" width="60%"/></p>
<p>where <math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>x</mi><mo>&lt;</mo><mi>L</mi><mi>/</mi><mn>2</mn></mrow></math>. The bending moment in the left half of the beam is therefore</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>M</mi><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mspace width="0.167em"></mspace><mo form="prefix" stretchy="true">[</mo><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><mi>x</mi><mo>−</mo><mi>w</mi><mspace width="0.075em"></mspace><msup><mi>x</mi><mn>2</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow></mrow></math>
<p>and its square is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><msup><mi>M</mi><mn>2</mn></msup><mo>=</mo><mfrac><mn>1</mn><mn>4</mn></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mspace width="0.167em"></mspace><mi>w</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><mspace width="0.167em"></mspace><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><msup><mi>w</mi><mn>2</mn></msup><msup><mi>x</mi><mn>4</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow></mrow></math>
<p>This formula applies only in the left half of the beam, but because of symmetry we know that</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mi>U</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mi>L</mi></msubsup><mfrac><msup><mi>M</mi><mn>2</mn></msup><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><mn>2</mn><msubsup><mo>∫</mo><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup><mfrac><msup><mi>M</mi><mn>2</mn></msup><mrow><mn>2</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi><mo>=</mo><msubsup><mo>∫</mo><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup><mfrac><msup><mi>M</mi><mn>2</mn></msup><mrow><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mrow></math>
<p>So</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><mi>U</mi></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mn>1</mn><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><msubsup><mo>∫</mo><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup><mrow><mo form="prefix" stretchy="true">[</mo><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><msup><mi>x</mi><mn>2</mn></msup><mo>−</mo><mn>2</mn><mspace width="0.167em"></mspace><mi>w</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><msup><mi>x</mi><mn>3</mn></msup><mo>+</mo><msup><mi>w</mi><mn>2</mn></msup><msup><mi>x</mi><mn>4</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow><mspace width="0.167em"></mspace><mi>d</mi><mi>x</mi></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mn>1</mn><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><msubsup><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><mn>1</mn><mn>3</mn></mfrac><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><msup><mi>x</mi><mn>3</mn></msup><mo>−</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mspace width="0.167em"></mspace><mi>w</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><msup><mi>x</mi><mn>4</mn></msup><mo>+</mo><mfrac><mn>1</mn><mn>5</mn></mfrac><mspace width="0.167em"></mspace><msup><mi>w</mi><mn>2</mn></msup><msup><mi>x</mi><mn>5</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow><mn>0</mn><mrow><mi>L</mi><mi>/</mi><mn>2</mn></mrow></msubsup></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mn>1</mn><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mspace width="0.167em"></mspace><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><msup><mi>L</mi><mn>3</mn></msup><mn>24</mn></mfrac><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mo>−</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>32</mn></mfrac><mspace width="0.167em"></mspace><mi>w</mi><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><mo>+</mo><mfrac><msup><mi>L</mi><mn>5</mn></msup><mn>160</mn></mfrac><mspace width="0.167em"></mspace><msup><mi>w</mi><mn>2</mn></msup><mo form="postfix" stretchy="true">]</mo></mrow></mtd></mtr></mtable></math>
<p>Taking the derivative with respect to <em>P</em> gives us</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mfrac><mrow><mi>∂</mi><mi>U</mi></mrow><mrow><mi>∂</mi><mi>P</mi></mrow></mfrac><mo>=</mo><mfrac><mn>1</mn><mrow><mn>4</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mrow><mo form="prefix" stretchy="true">[</mo><mfrac><msup><mi>L</mi><mn>3</mn></msup><mn>12</mn></mfrac><mspace width="0.167em"></mspace><mo form="prefix" stretchy="false">(</mo><mi>w</mi><mi>L</mi><mo>+</mo><mi>P</mi><mo form="postfix" stretchy="false">)</mo><mo>−</mo><mfrac><msup><mi>L</mi><mn>4</mn></msup><mn>32</mn></mfrac><mspace width="0.167em"></mspace><mi>w</mi><mo form="postfix" stretchy="true">]</mo></mrow></mrow></math>
<p>Therefore the downward deflection at the center of the beam is</p>
<math display="block" xmlns="http://www.w3.org/1998/Math/MathML"><mtable displaystyle="true"><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"><mi>δ</mi></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><msub><mrow><mfrac><mrow><mi>∂</mi><mi>U</mi></mrow><mrow><mi>∂</mi><mi>P</mi></mrow></mfrac><mspace width="0.167em"></mspace><mo form="postfix" stretchy="true">|</mo></mrow><mrow><mi>P</mi><mo>=</mo><mn>0</mn></mrow></msub></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>48</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac><mo>−</mo><mfrac><mrow><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>128</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd></mtr><mtr><mtd columnalign="right" style="text-align: right; padding-right: 0"></mtd><mtd columnalign="left" style="text-align: left; padding-left: 0"><mo>=</mo><mfrac><mrow><mn>5</mn><mspace width="0.167em"></mspace><mi>w</mi><msup><mi>L</mi><mn>4</mn></msup></mrow><mrow><mn>384</mn><mspace width="0.167em"></mspace><mi>E</mi><mi>I</mi></mrow></mfrac></mtd></mtr></mtable></math>
<p>as we’ve now seen many times.</p>
<p>Since this is based on Castigliano’s second theorem, you may be wondering what kinds of problems we use his first theorem to solve. It’s a good question, but one I can’t answer. In the 45 years since I first learned of Castigliano’s theorems, I’ve never used his first one.</p>
  ]]>
</content:encoded>
</item>

</channel>
</rss>

