Use of Symbolic Mathematics in Structural Analysis Problems
Use of Symbolic Mathematics in Structural Analysis Problems
Problems
CEEN 5849
Prepared by:
&
Graduate Students
Maxima is free software with a fairly complete computer algebra system written in lisp
with an emphasis on symbolic computation. It is based on DOE-MACSYMA and licensed under
the GPL. Its abilities include symbolic integration, 3D plotting, and an ODE solver. The Maxima
source code can be compiled on many systems, including Windows, Linux, and MacOS X.
Maxima yields high precision numeric results by using exact fractions, arbitrary precision
integers, and variable precision floating point numbers. Maxima can plot functions and data in
two and three dimensions.
The calculations involved in analysis of determinate structures is simple and often can be
solved by hand calculations or by using simple electronic calculator. But most of the structures in
real life are indeterminate, the solution process of which always involved complex calculations,
matrix operations, differential and integral calculus etc and same is true for the deflection
problems of both determinate and indeterminate structures. Also for learning and teaching
purposes its always very time consuming to solve those problems. These structural analysis
problem can be devided into two steps, first step is to develop the equations which can be any
type such as: matrix equation, differential equation or integral equation depending on the method
adopted to solve the problem. Second step is to solve those equations for the unknowns. For
teaching & learning purposes first step should always be done by hand calculation with basic
concepts of the method adopted in order to have in depth knowledge of the procedure and
fluency in structural analysis. But the second step is purely mathematical which only involves
mathematical operations. Softwares for doing symbolic algebra like Maxima can easily solve it.
We are presenting four problems here to demonstrate how Maxima can be used for
mathematical operations to solve structural analysis problems. First & second problem we chose
is indeterminate frame problems and we use Castigliano's Method and Virtual Work Method
respectively to solve these two problems. Third problem is a plane truss problem with 2 degrees
of external indeterminacy. We solved this problem using virtual work and methods of joints.
Finally our fourth problem is a gable frame with side sway which is solved using Slope-
Deflection Method. The following paragraphs include the brief description of the problems and
their solution using symbolic algebraic computation software Package Maxima.
Problem #1: Determine the reactions at the supports for the frame shown below using
Castigliano's method.
kill(all);
Ay:w*L2/2;
Dy:Ay;
M1:-Ax*x1+Ma;
M2:Ay*x2-(w*x2^2/2)+Ma-Ax*L1;
Uab1:integrate(M1*diff(M1,Ax)/EI,x1,0,L1);
Ubc1:integrate(M2*diff(M2,Ax)/EI,x2,0,L2);
U1:2*Uab1+Ubc1;
Uab2:integrate(M1*diff(M1,Ma)/EI,x1,0,L1);
Ubc2:integrate(M2*diff(M2,Ma)/EI,x2,0,L2);
U2:2*Uab2+Ubc2;
eqn1:U1=0;
eqn2:U2=0;
solve(eqn1,Ma);
eqn3:ev(eqn2,%);
[eqn1,eqn2];
solve (%, [Ax, Ma]);
ev(%,w=1,L1=20,L2=10);
float(%);
And the Solution will look like this:
Problem # 2: Determine the reactions at the supports for the frame shown below using Virtual
work method.
kill(all);
Dvp:integrate((P*(x-l))*(2*l-x)/EI,x,0,l);
Dvrv:integrate((Rav*x)*(x)/EI,x,0,2*l);
Dvrh:integrate((Rah*3*l)*(x)/EI,x,0,2*l);
/*Compatibility eqn 1*/
eqn1:Dvp+Dvrv+Dvrh=0;
Dhp:integrate((P*(x-l))*(3*l)/EI,x,0,l);
Dhrv:integrate((Rav*x)*(3*l)/EI,x,0,2*l);
Dhrh:integrate((Rah*x)*x/EI,x,0,3*l)+integrate((Rah*3*l)*(3*l)/EI,x,0,2*l);
/*Compatibility eqn 2*/
eqn2:Dhp+Dhrv+Dhrh=0;
b:solve([eqn1,eqn2],[Rav, Rah]);
Rav:rhs(b[1][1]);
Rah:rhs(b[1][2]);
/*summation of horizontal forces in the x-direction is zero*/
eqn3:Rah+Rbh=0;
solve(%,Rbh);
/*summation of vertical forces in the x-direction is zero*/
eqn4:Rav+Rbv-P=0;
solve(%,Rbv);
/*summation of moment at B is zero*/
eqn5:Mb+Rav*(2*l)+Rah*(3*l)-P*l=0;
solve(%,Mb);
The Maxima Output will look like this:
Problem # 3: Determine the reactions at the supports for the frame shown below using Virtual
work method. The support at 8 settles 0.5 in. AE is constant for all members.AE=150,000K.
kill(all)$
theta:atan(2*H/L);
S:sin(theta);
C:cos(theta);
L[1]:l/S;
L[2]:l;
L[3]:l/S;
L[4]:l;
L[5]:l/S;
L[6]:l;
L[7]:l/S;
L[8]:l;
L[9]:l/S;
L[10]:l;
L[11]:l/S;
L[12]:l;
L[13]:l;
L[14]:l/S;
L[15]:l/S;
L:12;
EA:150000;
delta[2]:0;
delta[3]:0.5;
R[5]:rhs(R[5]=0);
e1:R[2]+2*R[3]+3*R[4]=0;
R[4]:rhs(solve(e1,R[4])[1]);
e2:R[1]+R[2]+R[3]+R[4]=0;
R[1]:rhs(solve(e2,R[1])[1]);
R[1];
f[1]:rhs(f[1]=0);
f[2]:rhs(f[2]=0);
e3:f[3]*S+R[1]=0;
f[3]:rhs(solve(e3,f[3])[1]);
e4:f[3]*C+f[4]=0;
f[4]:rhs(solve(e4,f[4])[1]);
e5:f[3]*S+f[5]*S=0;
f[5]:rhs(solve(e5,f[5])[1]);
e6:f[6]+f[5]*C-f[3]*C=0;
f[6]:rhs(solve(e6,f[6])[1]);
e7:f[7]*S+f[5]*S+R[2]=0;
f[7]:rhs(solve(e7,f[7])[1]);
e8:f[4]+f[5]*C-f[7]*C-f[8]=0;
f[8]:rhs(solve(e8,f[8])[1]);
e9:f[7]*S+f[9]*S=0;
f[9]:rhs(solve(e9,f[9])[1]);
e10:f[6]+f[7]*C-f[9]*C-f[10]=0;
f[10]:rhs(solve(e10,f[10])[1]);
f[13]:rhs(f[13]=0);
f[15]:rhs(f[15]=0);
e11:f[14]*S+f[15]*S+R[4]=0;
f[14]:rhs(solve(e11,f[14])[1]);
e12:f[12]+f[14]*C=0;
f[12]:rhs(solve(e12,f[12])[1]);
e13:f[11]*S+f[14]*S=0;
f[11]:rhs(solve(e13,f[11])[1]);
S1:0;
E1:ratsimp(S1=delta[2]*EA);
S2:0;
E2:ratsimp(S2=delta[3]*EA);
sol:ev(solve([E1,E2],[R[2],R[3]]),l=L*12),numer;
R[2]:rhs(sol[1][1]);
R[3]:rhs(sol[1][2]);
kill(all)$
assume(L>0)$
assume(l>0)$
Lde:Lab;
Lbc:sqrt((Lae/2)^2+Lc^2);
Lcd:Lbc;
FEM[AB]:0;
FEM[BA]:0;
FEM[BC]:-w*Lbc^2/12;
FEM[CB]:w*Lbc^2/12;
FEM[CD]:0;
FEM[DC]:0;
FEM[DE]:0;
FEM[ED]:0;
delta[1]:Rab*Lab;
delta[2]:Rde*Lde;
CC:(Lbc/Lc)*0.5*(delta[1]-delta[2]);
Rbc:-CC/Lbc;
Rcd:CC/Lbc;
theta[A]:0;
theta[E]:0;
Mab:FEM[AB]+(2*E*I/Lab)*(2*theta[A]+theta[B]-3*Rab);
Mba:FEM[BA]+(2*E*I/Lab)*(theta[A]+2*theta[B]-3*Rab);
Mbc:FEM[BC]+(2*E*I/Lbc)*(2*theta[B]+theta[C]-3*Rbc);
Mcb:FEM[CB]+(2*E*I/Lbc)*(theta[B]+2*theta[C]-3*Rbc);
Mcd:FEM[CD]+(2*E*I/Lcd)*(2*theta[C]+theta[D]-3*Rcd);
Mdc:FEM[DC]+(2*E*I/Lcd)*(theta[C]+2*theta[D]-3*Rcd);
Mde:FEM[DE]+(2*E*I/Lde)*(2*theta[D]+theta[E]-3*Rde);
Med:FEM[ED]+(2*E*I/Lde)*(theta[D]+2*theta[E]-3*Rde);
wH:w*Lc;
wV:w*Lae/2;
eqn1:(Mab+Mba)/Lab+wH-Hcb=0;
Hcb:rhs(solve(eqn1,Hcb)[1]);
eqn2:Hcd+(Med+Mde)/Lde=0;
Hcd:rhs(solve(eqn2,Hcd)[1]);
eqn3:Vcb*(Lae/2)+Hcb*Lc-(wV*Lae/4)-(wH*Lc/2)-Mcb-Mbc=0;
Vcb:rhs(solve(eqn3,Vcb)[1]);
eqn4:-Hcd*Lc-Mcd-Mdc+Vcd*(Lae/2)=0;
Vcd:rhs(solve(eqn4,Vcd)[1]);
eqn5:Hcb-Hcd=0;
eqn6:Vcb-Vcd=0;
eqn7:Mba+Mbc=0;
eqn8:Mcb+Mcd=0;
eqn9:Mdc+Mde=0;
b:solve([eqn5,eqn6,eqn7,eqn8,eqn9],[theta[B],theta[C],theta[D],Rab,Rde]),numer;
theta[B]:rhs(b[1][1]);
theta[C]:rhs(b[1][2]);
theta[D]:rhs(b[1][3]);
Rab:rhs(b[1][4]);
Rde:rhs(b[1][5]);
'Mab=ev(Mab,float);
'Mba=ev(Mba,float);
'Mbc=ev(Mbc,float);
'Mcb=ev(Mcb,float);
'Mcd=ev(Mcd,float);
'Mdc=ev(Mdc,float);
'Mde=ev(Mde,float);
'Med=ev(Med,float);