The Simply Supported Beam Problem:
Concentrated Moment Case

Van Warren
Warren Design Vision
Little Rock, Arkansas
July 26, 1995

Problem

A simply supported beam is subjected to a concentrated moment somewhere along its span:

Determine the reactions at each of the supports, the shear and bending moment, the deflection along the span, and the slope at the endpoints.

Variables

L  = beam length
	M  = the concentrated moment
	a  = x coordinate of applied force
	Ra = the reaction at support A
	Rb = the reaction at support A
	y(x)  = deflection as a function of x
	V(x)  = shear as a function of x
	M(x)  = bending moment as a function of x

	A subscript of '1', refers to interval 0 ≤ x ≤ a
	A subscript of '2', refers to interval a ≤ x ≤ L

Note that the point x = a is shared by intervals 1 & 2.

Initializations

x  =.
Ra =.
Rb =.
M  =.
displacement1 =.
displacement2 =.
shear1 =.
shear2 =.
bending1 =.
bending2 =.
yA =.
yB =.
y =.

strip2[u_] := First[First[u]] ;
ruleToEquality[u_] :=  u /. Rule -> Equal ;
equalityToRule[u_] :=  u /. Equal -> Rule ;
ruleToSet[u_] :=  u /. Rule -> Set ;
ruleToFunction[u_] :=  u /. Rule -> SetDelayed ;
rePresent[u_] := strip2[u] ;
enSconce[u_] := ruleToEquality[u] ;

srf[s_, l_]:=StringReplace[s,Join[{"["->"(", "]"->")"},l]];

numFix[s_]:=
StringReplace[s,
{
	"EI"->"(E*I)",
	"1.*"->"",
	"0.3333333333333333333"->"(1/3)",
	"(-x^2"->"(-(x^2)",
	"(-a^2"->"(-(a^2)",
	"(-b^2"->"(-(b^2)",
	"(-x^4"->"(-(x^4)",
	"(-a^4"->"(-(a^4)",
	"(-b^4"->"(-(b^4)"
}
];

tsf[s_] := ToString[s, FormatType->InputForm];

fix[e_, l_] := srf[tsf[e], l];

outPut[e_] := Print[numFix[numFix[ToString[InputForm[e]]]]];

Sum Forces & Moments

First we sum forces and moments to deduce the values of the reactions at supports A and B.  Since this is an automatic proof we dispense with manual notation.  In Mathematica™ notation:

forcesEqn = (Ra + Rb   == 0);
momentEqn = (-M + Rb L == 0);

reactions =
	First	[
	Simplify	[
				Solve[{forcesEqn, momentEqn}, {Ra, Rb}]
				]
			];
reactions =
{
Ra -> Collect[Last[First[reactions]], {M, L}],
Rb -> Collect[Last[Last [reactions]], {M, L}]
};

The following expressions can be output to a spreadsheet or program for repetitive evaluation under varying conditions:

outPut[First[reactions]]
outPut[Last [reactions]]

We now have the reactions at each support in terms of the load, beam length.  We note that unlike the concentrated force case, the reactions do not depend on the postion of the applied moment.  Now proceed to compute the shear, bending moment, beam deflection and end slopes.  Before we do that, we need to establish some sign conventions.

Shear and Bending

Consider the following beam with imaginary cutting section labeled C:

If we note the actual reactions computed above, we observe that no matter where the cutting section C is placed, that the tendency is for the beam to shear as follows:

The external loads impressed on the structure tend to move segment AC down and segment CB down.  Since this is true regardless of where the cutting section C is placed we record the sign of the shear as negative in the entire interval 0 ≤ x ≤ L, in accordance with common sign convention.  For further discussion of this issue see Beer & Johnston, Vector Mechanics For Engineers 1977, Statics & Dynamics, p 273.

We have:

We now consider the bending moment as a function of position.  Returning to the segment AC, we note that the external forces acting on the structure produce  tend to bow the cutting section up.  This corresponds to a negative sign for the bending moment in the interval 0 ≤ x ≤ a.

This situation reverses suddenly after we pass the location at which the moment is being applied, so the bending moment is positive along the remaining interval a ≤ x ≤ L.

This gives us a complete result for bending, it looks like

Solve For Shear and Bending 0 <= x <= a

shear1 = V1[x] -> -M/L;

bending1 = {M1'[x] == V1[x] /. shear1};
bending1 = rePresent[DSolve[bending1, M1[x], x]];
Reverse[bending1 /. x -> 0 /. M1[0] -> 0];
bending1 = bending1 /. %;

outPut[shear1]
outPut[bending1]

Solve For Shear and Bending a < x <= L

shear2 = V2[x] -> -M/L;

M2'[x] == V2[x] /. shear2;
bending2 = First[enSconce[DSolve[%, M2[x], x]]];
Solve[Reverse[bending2 /. x -> L /. M2[L] -> 0], C[1]];
bending2 = strip2[equalityToRule[Simplify[bending2 /. %]]];

outPut[shear2]
outPut[bending2]

The maximum magnitude of M(x) is obtained by substituting 'a' for x in the moment expressions above.  This is left as an exercise for the reader.  We now will proceed to the slope and displacement relations using the symbolic manipulation facilities of Mathematica™:

Slope and Displacement

As in previous examples we assign y deflection coordinates to two intervals along the beam.  The y1 coordinate refers to the interval 0 ≤ x ≤ a, and the y2 coordinate refers to the interval a < x ≤ L. To compute spanwise deflection and slope we refer to linear bending theory which (under the assumption of constant stiffness) states that:

We immediately jump to the services of our symbolic manipulation program:

Solve For Slope and Displacement 0 <= x <= a

dy1dx'[x] == M1[x]/(EI) /. bending1;
slope1 = rePresent[DSolve[%, dy1dx[x], x]] /. C[1] -> C1;

y1'[x] == Last[slope1];
displacement1 = rePresent[DSolve[%, y1[x], x]] /. C[1] -> C2;

outPut[slope1]
outPut[displacement1]

Solve For Slope and Displacement a < x <= L

dy2dx'[x] == M2[x]/(EI) /. bending2;
slope2 = rePresent[DSolve[%, dy2dx[x], x]] /. C[1] -> C1p;
slope2 = dy2dx[x] ->
	Collect[Collect[Last[slope2],
	               {M, Ra, Rb, EI}], EI];


y2'[x] == Last[slope2];
displacement2 =
	rePresent[DSolve[%, y2[x], x]] /. C[1] -> C2p;
displacement2 = y2[x] ->
	Collect[Collect[Last[displacement2],
	               {M, Ra, Rb, EI}], EI];


outPut[slope2]
outPut[displacement2]

Boundary Condition Simultaneous Equations

We have four equations, and four unknown constants C1, C2, C1' and C2'.  The value of the constants can be determined by applying the four boundary conditions:

Evaluating these automatically we have:

bc1 = enSconce	[
				Reverse	[
						displacement1 /. x->0 /. y1[0]->0
						]
				];
bc2 = enSconce	[
				Reverse	[
						displacement2 /. x->L /. y2[L]->0
						]
				];
bc3 =
(
	(
		(Last[displacement1] /. x-> a) -
		(Last[displacement2] /. x-> a)
	) == 0
);
bc4 =
(
	(
		(Last[slope1] /. x -> a) -
		(Last[slope2] /. x -> a)
	) == 0
);
constants = First	[
			Simplify[
			Solve	[
						{bc1, bc2, bc3, bc4},
						{C1, C2, C1p, C2p}
					]
					]
					];

collector[u_] :=
	First[u] ->
	Simplify[
		Collect[
			Collect[Last[u],
			{M, Ra, Rb, EI}], EI
			   ]
			];
			
outPut[foo1 = collector[constants[[1]]]]
outPut[foo2 = collector[constants[[2]]]]
outPut[foo3 = collector[constants[[3]]]]
outPut[foo4 = collector[constants[[4]]]]

We evaluate the constants in terms of the reactions:

Simplify[Collect[constants /. reactions, {M, EI, L}]]

This requires little effort compared to checking by hand. We proceed to check our deflection and slope equations in a similar effortless manner:

Simplify[Collect[
	displacement1 /. constants /. reactions, {M, EI, L}]]
Simplify[Collect[
	slope1        /. constants /. reactions, {M, EI, L}]]
Simplify[Collect[
	displacement2 /. constants /. reactions, {M, EI, L}]]
Simplify[Collect[
	slope2        /. constants /. reactions, {M, EI, L}]]

End Slopes

Our only remaining errand is to evaluate the slope expression at the endpoints and to remember that end slopes come out in radians:

leftEndSlope = Simplify[slope1 /. x->0];
riteEndSlope = Simplify[slope2 /. x->L];

outPut[leftEndSlope]
outPut[riteEndSlope]

Output

Output useable deflection expressions.

deflExpr =
	IF[AND[0<=x,x<=a],A1, A2] /.
	A1 -> Last[displacement1] /.
	A2 -> Last[displacement2];

outPut[fix[deflExpr,{"C" -> "a_C","EI" -> "(E*I_a)"}]]
outPut[fix[deflExpr,{"C" -> "b_C","EI" -> "(E*I_b)"}]]
outPut[fix[deflExpr,{"C" -> "c_C","EI" -> "(E*I_c)"}]]

Output useable constant expressions.

outPut[fix[foo4,{"C" -> "a_C","EI" -> "(E*I_a)"}]]
outPut[fix[foo3,{"C" -> "a_C","EI" -> "(E*I_a)"}]]
outPut[fix[foo2,{"C" -> "a_C","EI" -> "(E*I_a)"}]]
outPut[fix[foo1,{"C" -> "a_C","EI" -> "(E*I_a)"}]]

Testing

Convert displacement functions.

ruleToFunction[displacement1]
ruleToFunction[displacement2]

?y1

?y2

Input parameters for a realistic example.

inputs =
{
	L->36, a->12, M->300*12, EI->(402311.4063)
};

nconstants = constants /. reactions /. inputs

tmp1 = y1[x] /. nconstants /. reactions /. inputs;
tmp2 = y2[x] /. nconstants /. reactions /. inputs;

yA[x_] := tmp1;
yB[x_] := tmp2;

y[x_] := Which[And[ 0<=x, x<  12], yA[x],
               And[12<=x, x<= 36], yB[x]]

reactions /. inputs

Plot displacement functions.

Plot[Evaluate[y[x]], {x, 0, 36}]

Cross verification example problems.

Example Problem 1:

We first run a BeamCALCulator™ that the following inputs:

Load Parameters

Load M:        300 * 12 lb-in;	Concentrated Moment
Load Postion:   12 in;
Length:         36 in;

Material Parameters

Material:     Aluminum 6061 T-6
Elastic Modulus: 10,100,000 psi
Yield Strength:      35,000 psi (Tensile)
Density:              0.098 pci

Cross Sectional Parameters

Outer Width  W: 1.00 inches
Inner Width  w: 0.85 inches
Outer Height H: 1.00 inches
Inner Height h: 0.85 inches