How do I solve a block diagram in Mathematica?

Wolfram Research offers a number of specialized packages for control design and analysis as well as DSP design and code generation. Nevertheless, it is instructive to see how can easily you can solve block diagrams using just the basic package. If you are interested in more advanced packages, take a look at Control Systems Professional, Analog Insydes or Signals and Systems in the Mathematica store.

Reducing the block diagram and computing the closed-loop transfer function.

sol1 =  
      Solve[(M[s] +  50 C[s]) (1/(s^2)) ==  C[s],  M[s]]

sol2  =  
      Solve[(4 R[s] -  C[s] (((s^2) + 2)/((s^3) + 14))  - 
                M[s] (((4 s + 2))/((s^2) + 2 s  +  1))) ((1/(s + 1))) ((s/((s^2) + 2)))  ==  M[s],  M[s]]

(M[s] /. sol1[[1]]) == (M[s] /. 
          sol2[[1]])

transfunc  =  Simplify[C[s] /. Solve[eqn, C[s]]]/R[s]

Generating a pole-zero map of the closed-loop transfer function.

zeros  =  NSolve[Numerator[transfunc[[1]]] == 0, s]

poles  =  NSolve[Denominator[transfunc[[1]]] == 0, s]

Off[General::"spell1"]

plotRoots[roots_, text_] := 
      Graphics[(Text[text, #1] &) /@ roots]

unitcircle = 
        Graphics[Circle[{0, 0}, 1], AspectRatio -> 1];

plotPoleZero[poles_, zeros_] := 
      Block[{temp, PlotPZ}, temp = Transpose[{Re[poles], Im[poles]}]; 
        polePlot = plotRoots[temp, "X"]; 
        temp = Transpose[{Re[zeros], Im[zeros]}]; 
        zeroPlot = plotRoots[temp, "O"]; 
        PlotPZ = 
          Show[unitcircle, polePlot, zeroPlot, Axes -> True,  
            AxesLabel ->   {"ℜ𝔢", "\
ℑ𝔪"}, DisplayFunction  ->  Identity, 
            TextStyle  ->  {FontSize  ->  10,  
                FontFamily  ->  "Helvetica"}]; 
        Return[PlotPZ]]

Show[plotPoleZero[Sequence  @@  (s /. {poles, zeros})],  
      PlotRange  ->  All,  DisplayFunction  ->  $DisplayFunction,  
      AspectRatio  ->  3/10,  ImageSize  ->  {400, 175} , 
      PlotRange  ->  {{-10, 10}, {-3, 3}}];