You are here: Home Help/User Support Programs for FEA, Modeling, etc. MATLAB Beam Deflection via Superposition

Beam Deflection via Superposition

The following files demonstrate one way to make a generic beam deflection program. Examples of rich data structures to describe various types of loads are shown.

All the following Matlab code files are stored in a single directory.

superpos2.m (main program):

  % Superposition example using Matlab structures

  % Define beam properties (not the best use of data structures)

  beam.E=30e6; % psi
  beam.L=80;   % in
  beam.I=4580; % in^4

  % Define loads (better use of data structures -- we potentially have
  % several loads that have common traits like positions and magnitudes,
  % and we want to apply them to the beam in similar ways).

  loads(1).type='moment';
  loads(1).mag=10000; % in-pound (counterclockwise moments are positive)
  loads(1).position=35; % in from left end

  loads(2).type='point';
  loads(2).mag=500; % pound (loads down are positive)
  loads(2).position=40; % in from left end

  superposition_calculate;

  figure
  plot(x1,-v_total,'bo-');
  xlabel('Position (in)')
  ylabel('Deflection (in)')
  title('Superposition Example')

superposition_calculate.m (calculate deflection curve for beam):

  % superposition_calculate.m

  % Most of this code was in superposition.m before, but has been split off
  % from the calling script to illustrate how you can reduce the student or
  % end user's exposure to the internals of the code. All they have to worry
  % about is the syntax for defining their beam geometry and loads.

  equations(1).type='point';
  equations(1).deflection='((P*b*x)/(6*E*I*L)).*(L^2-b^2-x.^2)';
  equations(2).type='moment';
  equations(2).deflection='((M*x)/(6*E*I*L)).*(6*a*L-3*a^2-2*L^2-x.^2)';

  x1=linspace(0,beam.L,20);
  v_total=zeros(size(x1));

  for n=1:length(loads)

      E=beam.E;
      I=beam.I;
      L=beam.L;

      switch loads(n).type

      case 'point'
          P=loads(n).mag;
          a=loads(n).position;
          b=L-a;
          x=x1(find(x1<=a));
          whichequation=find(strcmp({equations.type},'point'));
          v1=eval(equations(whichequation).deflection);
          x=L-x1(find(x1>a));
          b=a;
          v2=eval(equations(whichequation).deflection);
          v=[v1 v2];
          v_total=v_total+v;

      case 'moment'
          M=loads(n).mag;
          a=loads(n).position;
          b=L-a;
          x=x1(find(x1<=a));
          whichequation=find(strcmp({equations.type},'moment'));
          v1=eval(equations(whichequation).deflection);
          x=L-x1(find(x1>a));
          a=b;
          v2=eval(equations(whichequation).deflection);
          v=[v1 -v2];
          v_total=v_total+v;

      otherwise
          error(sprintf('Load %d has unknown type %s',n,loads(n).type));

      end
  end

Results:

  >> superpos2
  >> 

Generated graph:

MATLAB Screenshot: Beam Deflection

Filed under: