(*Analysis of a single span Euler Bernoulli beam under different loading conditions by Nasser M. Abbasi version Oct 21 2009*) Manipulate[ process[len, If[a > b, a = b, a], If[b > len, b = len, b], If[q > len, q = len, q], If[m > len, m = len, m], If[positiveM, M, -M], If[upW == True, -w, w], If[upQ == True, -Q, Q], If[StringMatchQ[youngModulusChoice, "Slider"], youngModulusSlider*10^6, If[unitsForE == 2, youngModulusMenu*6894*10^6, youngModulusMenu*10^6]], If[StringMatchQ[momentOfInertiaChoice, "Slider"], momentOfInertia, (1/12)*sectionb*sectionh^3], beamSupportType, (1/maxDeflectionRatio)*len], Item[ Column[ { Grid[ { { im1}, {Control[{{len, 144, Style["L", 10]}, 1, 300, .1, ImageSize -> Small, Appearance -> "Labeled"}] } }, Frame -> True, FrameStyle -> Thin, Alignment -> Center, Spacings -> {1.33, 1} ], Grid[{ { Style["distributed load w", 10], Button[Style["remove load", 10], w = 0, ImageSize -> Small] }, { Column[ { Control[{{w, 8, Style["w", 10]}, 0, 200, 1, ImageSize -> Tiny, Appearance -> "Labeled"}], Control[{{a, 0.3*len, Style["a", 10]}, 0, Dynamic[len], .01, ImageSize -> Tiny, Appearance -> "Labeled"}], Control[{{b, a + 0.2 (len - a), Style["b", 10]}, 0, Dynamic[len], .01, ImageSize -> Tiny, Appearance -> "Labeled"}] } ], SetterBar[ Dynamic[upW], {False -> Graphics[{Arrowheads[.8], Arrow[{{0, 0}, {0, -3}}]}, ImageSize -> {16, 26}], True -> Graphics[{Arrowheads[.8], Arrow[{{0, 0}, {0, 3}}]}, ImageSize -> {16, 26}]}] } }, Frame -> True, FrameStyle -> Thin, Spacings -> {.5, Automatic} ], Grid[{ { Style["applied point load Q ", 10], Button[Style["remove load", 10], Q = 0, ImageSize -> Small] }, { Column[ { Control[{{Q, 400, Style["Q", 10]}, 0, 1000, 1, ImageSize -> Tiny, Appearance -> "Labeled"}] , Control[{{q, .7 len, Style["q", 10]}, 0.001, Dynamic[len], .001, ImageSize -> Tiny, Appearance -> "Labeled"}] }], SetterBar[ Dynamic[upQ], {False -> Graphics[{Arrowheads[.8], Arrow[{{0, 0}, {0, -3}}]}, ImageSize -> {16, 26}], True -> Graphics[{Arrowheads[.8], Arrow[{{0, 0}, {0, 3}}]}, ImageSize -> {16, 26}]}] } }, Frame -> True, FrameStyle -> Thin, Spacings -> {.5, Automatic} ], Grid[{ { Style["applied moment M", 10], Button[Style["remove load", 10], M = 0, ImageSize -> Small] }, { Column[ { Control[{{M, 40, Style["M", 10]}, 0, 1000, 1, ImageSize -> Tiny, Appearance -> "Labeled"}], Control[{{m, .75 len, Style["m", 10]}, 0, Dynamic[len], .01, ImageSize -> Tiny, Appearance -> "Labeled"}] } ], SetterBar[ Dynamic[positiveM], {False -> Graphics[getMomentSymbol[.02, Black, 300, 80], ImageSize -> 18], True -> Graphics[getMomentSymbol[.02, Black, -120, 100], ImageSize -> 18]}] } }, Frame -> True, FrameStyle -> Thin, Spacings -> {.5, Automatic} ], Grid[{ { Style["maximum allowed beam deflection ratio", 10] }, { Control[{{maxDeflectionRatio, 180, "D "}, 90, 720, 1, ImageSize -> Small, Appearance -> "Labeled"}] } }, Frame -> True, FrameStyle -> Thin, Spacings -> {3.6, .3} ] } (* end column[] *) ], ControlPlacement -> Left ],(* end Item[] for left side controls *) Item[(*now do the top controls *) Row[ { Grid[ { {Style["Select support type", 10]}, {supportTypes}, {Control[{{beamSupportType, 1, ""}, {1 -> "1", 2 -> "2", 3 -> "3", 4 -> "4"}, ControlType -> RadioButtonBar}]} }, Frame -> True, FrameStyle -> Thin ], Grid[{ { Style["choose Young's modulus (E) from ", 10], SetterBar[ Dynamic[youngModulusChoice], {"Menu" -> "Menu", "Slider" -> "Slider"}] }, { Grid[{ { Control[{ {youngModulusMenu, 30, ""}, {80 -> Style["Osmium [80,551]", 9], 75 -> Style["Iridium [75,517]", 9], 36 -> Style["Chromium [36,248]", 9], 30 -> Style["Steel [30,206]", 9], 30 -> Style["Cobalt [30,206]", 9], 29.5 -> Style["Carbon steel [29.5,203]", 9], 28.5 -> Style["Iron [28.5,196.5]", 9], 24 -> Style["Uranium [24,165.5]", 9], 21.3 -> Style["Platinum [21.3,146.9]", 9], 17 -> Style["Copper [17,117]", 9], 16 -> Style["Silicon [16,110.3]", 9], 10.8 -> Style["Gold [10.8,74]", 9], 10.5 -> Style["Silver [10.5,72.3]", 9], 10.0 -> Style["Aluminum [10,69]", 9], 6.4 -> Style["Magnesium [6.4,44]", 9], 1.3 -> Style["Pine wood [1.3,8.9]", 9], 0.5 -> Style["fibreboard [0.5,3.4]", 9]}, Enabled -> Dynamic@StringMatchQ[youngModulusChoice, "Menu"], ControlType -> PopupMenu}], Control[{{unitsForE, 1, "units"}, {1 -> "imperial", 2 -> "metric"}, ControlType -> RadioButtonBar, Appearance -> "Vertical"}]} }, Frame -> True, FrameStyle -> Directive[Dotted], Spacings -> {1, Automatic} ], SpanFromLeft }, { Control[{{youngModulusSlider, 1.6, "E"}, 1, 300000, 1, ImageSize -> Small, Enabled -> Dynamic@StringMatchQ[youngModulusChoice, "Slider"], Appearance -> "Labeled"} ], SpanFromLeft } }, Frame -> True, Alignment -> Left, Spacings -> {1, Automatic} ], Grid[{ { Style["choose moment of inertia (I) from", 10], SetterBar[ Dynamic[momentOfInertiaChoice], {"crossSection" -> "section", "Slider" -> "Slider"}] }, { Grid[ { { Grid[ { {Control[{{sectionb, 2, "b"}, .1, 100, .1, ImageSize -> Small, Enabled -> Dynamic@ StringMatchQ[momentOfInertiaChoice, "crossSection"], Appearance -> "Labeled"}] }, {Control[{{sectionh, 8, "h"}, .1, 100, .1, ImageSize -> Small, Enabled -> Dynamic@ StringMatchQ[momentOfInertiaChoice, "crossSection"], Appearance -> "Labeled"}] } }, Spacings -> {1, 0}, Alignment -> Left ], Labeled[Graphics[Polygon[{ {0, 0}, {0, 5}, {2, 5}, {2, 0}}], ImageSize -> 8], {"b", "h"}, {Bottom, Right}] } }, Frame -> True, FrameStyle -> Directive[Dotted], Spacings -> {1, 0}, Alignment -> Left ], SpanFromLeft }, { Control[{{momentOfInertia, 57.1, "I"}, 1, 100, .1, ImageSize -> Small, Enabled -> Dynamic@StringMatchQ[momentOfInertiaChoice, "Slider"], Appearance -> "Labeled"}], SpanFromLeft } }, Frame -> True, Alignment -> Left, Spacings -> {1, Automatic} ](*end Grid[]*) }(*end Row[] *) ], ControlPlacement -> Top ], (* end Item[] *) FrameMargins -> 0, ImageMargins -> 0, ContinuousAction -> False, SynchronousUpdating -> True, AutorunSequencing -> {1, 2, 3}, Initialization :> { im1 = Image[\!\(\*"], {{0, 221}, {423, 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag[ "Byte", ColorSpace -> "RGB", ImageSize -> Automatic, Interleaving -> True, Magnification -> Automatic], Selectable->False], BaseStyle->"ImageGraphics", ImageSize->Automatic, ImageSizeRaw->{423, 221}, PlotRange->{{0, 423}, {0, 221}}]\), ImageSize -> {195, 80}]; supportTypes = Image[\!\(\*"], {{0, 69}, {151, 0}}, {0, 255}, ColorFunction->RGBColor], BoxForm`ImageTag[ "Byte", ColorSpace -> "RGB", ImageSize -> Automatic, Interleaving -> True, Magnification -> Automatic], Selectable->False], BaseStyle->"ImageGraphics", ImageSize->Automatic, ImageSizeRaw->{151, 69}, PlotRange->{{0, 151}, {0, 69}}]\), ImageSize -> {100, 58}]; youngModulusChoice = "Menu"; momentOfInertiaChoice = "Slider"; upW = False; upQ = False; positiveM = True; getMomentSymbol[radius_, color_, from_, to_] := Module[{data, theta}, data = Table[{radius*Cos[theta], radius*Sin[theta]}, {theta, from*Degree, to*Degree, If[from < to, 1*Degree, -1*Degree]} ]; {Thickness[0.001], color, Arrowheads[Medium], Arrow[Line[data]]}]; getBeamCurveAnnotation[y_, i_, x_] := Module[{}, Column[{ Text[ Row[{Style["x", Italic, 14], " = ", NumberForm[N[i], {30, 3}], " ", Style["y(x)", Italic, 14], " = ", NumberForm[N[y /. x -> i], {30, 3}]}]]}]]; getMaxAbsoluteDeflection[y_, L_, var_] := Module[{data}, data = Table[{Abs[N[y /. var -> i]], i}, {i, 0, L, L/100.}]; (*sorts by default is small to large*) data = Sort[data]; {data[[-1, 2]], data[[-1, 1]]}]; (*---- main Manipulate process ---*) process[L_, a_, b_, q_, m_, M_, w_, Q_, ee_, ii_, beamSupportType_, maxDeflection_] := Module[{shear, moment, R1, R2, y, sol, headings, yMax, yMaxLocation, pDeflection, pMoment, pShear, pAnnotated, commonEpilog, ydata, x, d, c1, title, shearSaved, M2, M1, slope, c2, verticalEquilibrium, momentEquilibrium, b1, b2, pDeflectionOpts, clockWiseStartingAngle = 320, clockWiseEndingAngle = 30, antiClockWiseStartingAngle = 30, antiClockWiseEndingAngle = 320, data, maxDeflectionEstimate, yLeftEnd, yRightEnd, slopeLeftEnd, slopeRightEnd, u = UnitStep, yAtMax}, (*--- Notations ----*) (* R1: left end reaction *) (* R2: right end reaction *) (* M1: left end moment reaction *) (* M2: right end moment reaction *) (* M: is the external applied moment *) (* w: is the external distributed load *) (* Q: is the external point load *) (*--- set up the main equations --*) shear = R1 - w (x - a) u[x - a] + w (x - b) u[x - b] - Q u[x - q]; moment = M1 + R1 x - w/2 (x - a)^2 u[x - a] + w/2 (x - b)^2 u[x - b] - Q (x - q) u[x - q] - M u[x - m]; slope = M1 x + R1 x^2/2 - w/6 (x - a)^3 u[x - a] + w/6 (x - b)^3 u[x - b] - Q/2 (x - q)^2 u[x - q] - M (x - m) u[x - m] + c1; y = 1/( ee ii) (M1 x^2/2 + R1 x^3/6 - w/24 (x - a)^4 u[x - a] + w/24 (x - b)^4 u[x - b] - Q/6 (x - q)^3 u[x - q] - M/2 (x - m)^2 u[x - m] + c1 x + c2); verticalEquilibrium = R1 + R2 - Q - w (b - a); momentEquilibrium = M1 + w (b - a) ((a + b)/2) + Q q - M - M2 - R2 L; (*--- based on loading type, setup boundary conditions and solve ---*) yLeftEnd = y /. x -> 0; yRightEnd = y /. x -> L; slopeLeftEnd = slope /. x -> 0; slopeRightEnd = slope /. x -> L; Which[ beamSupportType == 1, {(*simple supported at both ends*) M1 = 0; M2 = 0; sol = First@Solve[ Simplify[{yLeftEnd == 0, yRightEnd == 0}], {c1, c2}]; c1 = c1 /. sol; c2 = c2 /. sol; sol = ToRules@Quiet[ Reduce[{verticalEquilibrium == 0, momentEquilibrium == 0}, {R1, R2}], RowReduce::luc]; R1 = R1 /. sol; R2 = R2 /. sol;}, beamSupportType == 2, {(*fixed one side, simple supported at other*) M2 = 0; sol = First@Solve[{yLeftEnd == 0, slopeLeftEnd == 0}, {c1, c2}]; c1 = c1 /. sol; c2 = c2 /. sol; sol = ToRules@Quiet[ Reduce[Simplify[{yRightEnd == 0, verticalEquilibrium == 0, momentEquilibrium == 0}], {R1, R2, M1}], RowReduce::luc]; R1 = R1 /. sol; R2 = R2 /. sol; M1 = M1 /. sol;}, beamSupportType == 3, {(*fixed one side, free at other*) M2 = 0; R2 = 0; sol = First@Solve[{yLeftEnd == 0, slopeLeftEnd == 0}, {c1, c2}]; c1 = c1 /. sol; c2 = c2 /. sol; sol = ToRules@Quiet[ Reduce[Simplify[{verticalEquilibrium == 0, momentEquilibrium == 0}], {R1, M1}], RowReduce::luc]; R1 = R1 /. sol; M1 = M1 /. sol;}, beamSupportType == 4, {(*fixed at both sides*) sol = First@Solve[{yLeftEnd == 0, slopeLeftEnd == 0}, {c1, c2}]; c1 = c1 /. sol; c2 = c2 /. sol; sol = ToRules@Quiet[ Reduce[Simplify[{yRightEnd == 0, slopeRightEnd == 0, verticalEquilibrium == 0, momentEquilibrium == 0}], {R1, R2, M1, M2}], RowReduce::luc]; R1 = R1 /. sol; R2 = R2 /. sol; M1 = M1 /. sol; M2 = M2 /. sol;} ]; (*-- special cases all result in no defelection --*) If[ ( (a == L || b == 0 || (b - a) == 0) && (w != 0 && Q == 0 && M == 0)) || (w == 0 && Q == 0 && M == 0) || (w == 0 && Abs[Q] > 0 && (q == 0 || (q == L && beamSupportType != 3))) , { y = 0; yMax = 0; yMaxLocation = L/2; maxDeflectionEstimate = .5; }, { {yMaxLocation, yMax} = getMaxAbsoluteDeflection[y, L, x]; maxDeflectionEstimate = maxDeflection + .3*maxDeflection; } ]; yAtMax = y /. x -> yMaxLocation; commonEpilog := { Which[ beamSupportType == 1, { Polygon[{{0.05*L, -maxDeflectionEstimate/4}, {0, 0}, {-0.05*L, -maxDeflectionEstimate/4}}], {PointSize[.05], Black, Point[{L, -.122 maxDeflectionEstimate}]} }, beamSupportType == 2, { (*left and right support*) {Thickness[.04], Black, Line[{ {0, maxDeflectionEstimate/8}, {0, -maxDeflectionEstimate/ 8}}]}, {PointSize[.05], Black, Point[{L, -.122 maxDeflectionEstimate}]}, (* left end moment *) (*notice sign. Positive means here clockwise which is negative*) If[M1 > 0, { Opacity[1], Black, Inset[ Graphics[getMomentSymbol[0.22*L, Black, 280, 75]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] }, { Opacity[1], Black, Inset[ Graphics[getMomentSymbol[0.22*L, Black, 80, 270]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[-M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] } ] }, beamSupportType == 3, { {Thickness[.04], Black, Line[{ {0, maxDeflectionEstimate/8}, {0, -maxDeflectionEstimate/8}}] }, If[M1 > 0, { Opacity[1], Black, Inset[ Graphics[ getMomentSymbol[0.15*L, Black, 300, 80]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] }, { Opacity[1], Black, Inset[ Graphics[ getMomentSymbol[0.15*L, Black, 80, 270]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[-M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] } ] }, beamSupportType == 4, { { Thickness[.04], Black, Line[{ {0, maxDeflectionEstimate/8}, {0, -maxDeflectionEstimate/8}}] }, { Thickness[.04], Black, Line[{ {L, maxDeflectionEstimate/8}, {L, -maxDeflectionEstimate/8}}] }, If[M1 > 0, { Black, Inset[ Graphics[ getMomentSymbol[0.15*L, Black, 300, 80]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] }, { Black, Inset[ Graphics[ getMomentSymbol[0.15*L, Black, 80, 270]], {-0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[-M1], {30, 2}], 12], {-0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] } ], If[M2 > 0, { (* this is RHS moment, positive means anticlock wise*) Black, Inset[ Graphics[ getMomentSymbol[0.125*L, Black, -120, 100]], {L + 0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[M2], {30, 2}], 12], {L + 0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] }, { Black, Inset[ Graphics[ getMomentSymbol[0.125*L, Black, 120, -90]], {L + 0.08*L, 0}, {0, 0}, 0.125*L], Text[Style[NumberForm[N[-M2], {30, 2}], 12], {L + 0.08*L, 0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}] } ] } ], (*stright line*) {Thickness[0.0001], Dotted, Line[{{0, 0}, {L, 0}}]}, (*Left R*) { Thickness[0.001], Opacity[1], Black, Arrow[{{0, -0.6 maxDeflectionEstimate}, {0, \ -maxDeflectionEstimate/4}}], Text[ Style["\!\(\*SubscriptBox[\(R\), \(1\)]\)", Bold, 10], {0, -0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}], Text[ Style[NumberForm[N[R1], {30, 2}], 12], {0, -0.9 maxDeflectionEstimate}, {0, 1}, {1, 0}] }, (*right R*) Which[ beamSupportType == 3, {Opacity[0]}, beamSupportType == 1 || beamSupportType == 2 || beamSupportType == 4, { { Thickness[0.001], Black, Arrow[{{L, -0.6 maxDeflectionEstimate}, {L, \ -maxDeflectionEstimate/4}}]}, Text[ Style["\!\(\*SubscriptBox[\(R\), \(2\)]\)", Bold, 10], {L, -0.65 maxDeflectionEstimate}, {0, 1}, {1, 0}], Text[ Style[NumberForm[N[R2], {30, 2}], 12], {L, -0.9 maxDeflectionEstimate}, {0, 1}, {1, 0}] } ] }; title = Style[" beam deflection ", Bold, 12]; pDeflectionOpts = { PlotLabel -> title, Frame -> True, AxesOrigin -> {0, 0}, ImagePadding -> {{40, 5}, {15, 2}}, ImageMargins -> 0, ImageSize -> 390, AspectRatio -> .5, FrameTicksStyle -> Directive[10], Axes -> {False, False}, PlotRange -> {{-0.23 L, L + 0.23 L}, {1.1*maxDeflectionEstimate, -1.2* maxDeflectionEstimate}} }; (*-- data to allow Tooltip on the deflection curve --*) data = Table[Tooltip[{i, If[yMax <= maxDeflection, y /. x -> i, 0]}, getBeamCurveAnnotation[y, i, x]], {i, 0, L, L/100}]; pAnnotated := ListPlot[data, PlotStyle -> PointSize[0]]; pDeflection := Plot[y, {x, 0, L}, PlotStyle -> If[yMax <= maxDeflection, {Red, Thickness[0.01]}, {Dotted, Black, Thickness[0.001]}], Evaluate[pDeflectionOpts], Epilog -> Union[{ { If[yMax <= maxDeflection, Text[""], Text[Column[{Style[ "WARNING: exceeded allowed deflection ratio", Red, 10] }], {0.5 L, 0.8 maxDeflectionEstimate}] ], If[Q != 0, If[Q > 0, { Opacity[0.8], Thickness[0.01], Blue, If[yMax <= maxDeflection, Arrow[{ {q, (y /. x -> q) + 0.5*maxDeflectionEstimate}, {q, (y /. x -> q)}}], Arrow[{ {q, +0.3*maxDeflectionEstimate}, {q, 0}}] ] } , { Opacity[0.8], Thickness[0.01], Blue, If[yMax <= maxDeflection, Arrow[{ {q, (y /. x -> q) - 0.5*maxDeflectionEstimate}, {q, (y /. x -> q)}}], Arrow[{ {q, -0.3*maxDeflectionEstimate}, {q, 0}}] ] } ], Opacity[0] ] }, (* moment *) If[M != 0, { If[M > 0, { Inset[ Graphics[ getMomentSymbol[0.125*L, Red, antiClockWiseStartingAngle, antiClockWiseEndingAngle]], {m, If[yMax <= maxDeflection, y /. x -> m, 0]}, {0, 0}, 0.125*L] }, { Inset[ Graphics[ getMomentSymbol[0.125*L, Red, clockWiseStartingAngle, clockWiseEndingAngle]], {m, If[yMax <= maxDeflection, y /. x -> m, 0]}, {0, 0}, 0.125*L] } ] }, {Opacity[0]} ], (*distributed load arrows*) Which[ w > 0 && (b - a) > 0, { Opacity[0.2], Table[{ Thickness[0.001], Blue, If[yMax <= maxDeflection, Arrow[{{a + i, (y /. x -> (a + i)) + 0.3*maxDeflectionEstimate}, {a + i, y /. x -> (a + i)}}], Arrow[{{a + i, 0.3*maxDeflectionEstimate}, {a + i, 0}}]] }, {i, 0, b - a, L/50} ] }, w < 0 && (b - a) > 0, { Opacity[0.2], Table[{ Thickness[0.001], Blue, If[yMax <= maxDeflection, Arrow[{{a + i, (y /. x -> (a + i)) - 0.3*maxDeflectionEstimate}, {a + i, y /. x -> (a + i)}}], Arrow[{{a + i, -0.3*maxDeflectionEstimate}, {a + i, 0}}] ] }, {i, 0, b - a, L/50} ] }, True, Opacity[0] ], (*point where where deflection is *) { PointSize[.025], Opacity[1], Blue, Point[{yMaxLocation, If[yMax <= maxDeflection, yAtMax, 0]}] }, (*deflection amount and location*) { Opacity[1], Text[ Grid[{ {Style["\[Delta]", Italic, 12], " = ", Style[NumberForm[N[yAtMax], {30, 6}], 11]}, {Style["x", Italic, 12], " = ", Style[NumberForm[N[yMaxLocation], {30, 2}], 11]}}, Spacings -> {0, 0} ], If[yMax <= maxDeflection, {yMaxLocation, If[yAtMax < 0, yAtMax - 0.15*maxDeflectionEstimate, yAtMax + 0.1 maxDeflectionEstimate]}, {yMaxLocation, If[yAtMax < 0, -0.15*maxDeflectionEstimate, 0.1 maxDeflectionEstimate]} ], If[yAtMax < 0, {0, 1}, {0, -1}], {1, 0}] } }, commonEpilog] ]; pMoment = Labeled[ Plot[moment, {x, 0, L}, Frame -> True, ImagePadding -> {{44, 1}, {15, 5}}, ImageMargins -> 0, ImageSize -> 380, AspectRatio -> .21, FrameTicksStyle -> Directive[10], AxesOrigin -> {0, 0}, Filling -> Axis, FillingStyle -> Lighter[Red, .8] ], Style["bending moment", Bold, 11], {{Top, Center}}, Spacings -> {Automatic, -.35} ]; pShear = Labeled[ Plot[shear, {x, 0, L}, Frame -> True, ImagePadding -> {{44, 1}, {15, 5}}, ImageMargins -> 0, ImageSize -> 380, AspectRatio -> .21, FrameTicksStyle -> Directive[10], AxesOrigin -> {0, 0}, Filling -> Axis, FillingStyle -> Lighter[Red, .8], Axes -> {False, False}, PlotRange -> All ], Style["shear force", Bold, 11], {{Top, Center}}, Spacings -> {Automatic, -.35} ]; headings = Grid[{ {Style["max deflection", 10], Style["location", 10], Style["\!\(\*SubscriptBox[\(R\), \(1\)]\)", 10], Style["\!\(\*SubscriptBox[\(R\), \(2\)]\)", 10]}, {yMax, yMaxLocation, R1, R2} }, Frame -> All, ItemSize -> 7 ]; Grid[{ {Item[Dynamic@Show[{pDeflection, pAnnotated}], ItemSize -> Full]}, {Item[pShear, ItemSize -> Full]}, {Item[pMoment, ItemSize -> Full]} }, Alignment -> Center, Spacings -> {0, 0}, Frame -> None ] ] } ]