{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Solution of 2D Truss Problems\n", "=============================\n", "This notebook solves for the axial forces in a 2D Truss. Specifically, it determines the axial forces in the truss shown to the right. In this notebook, we use a [pandas data frame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe) to store the joint locations. This allows us to easily reference the joint locations with single letter joint label. The axial forces are calculated using the process of method of joints. This is automated by the function [SolveJoint](#Code-for-Solving-Equilibrium-Equations) which forms and solves the equilibrium equations for a joint. SolveJoint does this by forming and solving a matrix equation which represents the equilibrium conditions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initialization and Code" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'%.1f'" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from matplotlib import pyplot\n", "import matplotlib\n", "from matplotlib import markers\n", "import numpy as np\n", "import pandas as pd\n", "np.set_printoptions(precision = 1)\n", "%precision 1\n", "\n", "#from IPython.core.interactiveshell import InteractiveShell\n", "#InteractiveShell.ast_node_interactivity = \"all\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code for Plotting Joints / Members\n", "The code below uses matplotlib to plot the truss. These function enable us to visually check the definition of\n", "\n", "- `LabeledPoints` plots the points passed through a pandas data frame on a matplotlib axes object. 'LabeledPoints' uses the [scatter](http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.scatter.html#matplotlib.axes.Axes.scatter) method of the [axes class](http://matplotlib.org/api/axes_api.html). The proper order of plotting (lines behind points behind text) is set by the zorder parameter as described in this [example](http://matplotlib.org/examples/pylab_examples/zorder_demo.html).\n", "- `PlaceLabel` adds [text](http://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.text.html#matplotlib.axes.Axes.text) to the point.\n", "- `MakeLines` adds the members (or elements) to the figure. The list llist passes the points to connect as a list of strings. For instance llist=['AB','AF','CD'] makes connecting lines between points A and B, A and F, as well as C and D. An individual row from the passed data frame is returned by [.loc](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html) which is also [described in the introduction pages](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "TextKwargs={'ha':'center','va':'center'}\n", "ms = markers.MarkerStyle(marker='o',fillstyle='full')\n", "def PlaceLabel(t,axes):\n", " axes.text(t[1],t[2],s=t[0],**TextKwargs)\n", "\n", "def LabeledPoints(df,axes):\n", " c='w'#[0]*df.shape[0]\n", " axes.scatter(df.values[:,0],df.values[:,1],s= 200,marker=ms,c=c,\n", " alpha=1,edgecolors='k',zorder=3)\n", " for r in df.itertuples():\n", " PlaceLabel(r,axes)\n", " \n", "def MakeLines(df,llist,axes):\n", " for l in llist:\n", " x=(df.loc[l[0]].values[0],df.loc[l[1]].values[0])\n", " y=(df.loc[l[0]].values[1],df.loc[l[1]].values[1])\n", " axes.add_line(matplotlib.lines.Line2D(x,y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code for Solving Equilibrium Equations\n", "`SolveJoint` solves joint equilibrium equations. The parameter `mlist` passes it a list of the members which connect to the joint. It determines the unit vectors in each member's direction and [stacks](https://docs.scipy.org/doc/numpy/reference/generated/numpy.stack.html#numpy.stack) these unit vectors to form a matrix. The axial force is returned by [inverting](https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.inv.html) that matrix and [multiplying](https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html#numpy.dot) by the external force applied to the joint. This external force is passed as a numpy array trough Fapp." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from numpy.linalg import inv\n", "from numpy.linalg import norm\n", "#def λ(v):\n", "# return v/norm(v)\n", "def λ(m,points):\n", " l=(Points.loc[m[1]].values-Points.loc[m[0]].values)\n", " return l/norm(l)\n", "\n", "def SolveJoint(mlist,points,Fapp):\n", " M=1\n", " for m in mlist:\n", " l=λ(m,points)\n", " if not isinstance(M,np.ndarray):\n", " M=l\n", " else:\n", " M=np.stack((M,l),axis=-1)\n", " return inv(M).dot(-Fapp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem Statement\n", "### Joint Locations\n", "The points in alphabetical order are below. These are used to create a [pandas data frame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe). The main reason for using the data frame is that individual points may be referenced using their label. These labels are the [index](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#indexing-selection) of the data frame." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The joint locations are:\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
XY
A0.00.0
B2.51.5
C5.03.0
D7.51.5
E10.00.0
F2.50.0
G5.00.0
H7.50.0
\n", "
" ], "text/plain": [ " X Y\n", "A 0.0 0.0\n", "B 2.5 1.5\n", "C 5.0 3.0\n", "D 7.5 1.5\n", "E 10.0 0.0\n", "F 2.5 0.0\n", "G 5.0 0.0\n", "H 7.5 0.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#Create an alphabetical list of point locations in (x,y) format.\n", "pl=[(0,0),(2.5,1.5),(5,3),(7.5,1.5),(10,0),(2.5,0),(5,0),(7.5,0)]\n", "#Create list for point labels.\n", "i=[]\n", "for c in 'ABCDEFGH':\n", " i.append(c)\n", "print('The joint locations are:')\n", "Points=pd.DataFrame(pl,columns=['X','Y'],index=i ); Points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Connecting Members" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lines=('AB','AF','BF','FG','BG','BC','CG','CD','DG','DH','DE','HE','HG')\n", "ar=10/3;fsx=7.5;fsy=fsx/ar\n", "MyFigure, MyAxes = pyplot.subplots(1,1,figsize=(fsx,fsy));\n", "LabeledPoints(Points,MyAxes)\n", "MakeLines(Points,lines,MyAxes)\n", "MyFigure" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### External Forces\n", "The applied and reaction forces are:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FxFy
A04
E04
F0-4
H0-4
B00
C00
D00
G00
\n", "
" ], "text/plain": [ " Fx Fy\n", "A 0 4\n", "E 0 4\n", "F 0 -4\n", "H 0 -4\n", "B 0 0\n", "C 0 0\n", "D 0 0\n", "G 0 0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Fapp=pd.DataFrame(\n", " [(0,4),(0,4),(0,-4),(0,-4),(0,0),(0,0),(0,0),(0,0)],columns=['Fx','Fy'],\n", " index=['A','E','F','H','B','C','D','G']); Fapp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solve System\n", "### Joint A" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-7.8, 6.7)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['AB','AF']\n", "T_AB,T_AF = SolveJoint(mlist,Points,Fapp.loc['A'].values)\n", "(T_AB,T_AF)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint F" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(4.0, 6.7)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['FB','FG']\n", "T_FB,T_FG = SolveJoint(mlist,Points,Fapp.loc['F'].values+T_AF*λ('FA',Points))\n", "(T_FB,T_FG)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint B" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-3.9, -3.9)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['BG','BC']\n", "T_BG,T_BC = SolveJoint(mlist,Points,Fapp.loc['B'].values+\n", " T_AB*λ('BA',Points)+T_FB*λ('BF',Points))\n", "(T_BG,T_BC)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint C" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-3.9, 4.0)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['CD','CG']\n", "T_CD,T_CG = SolveJoint(mlist,Points,Fapp.loc['C'].values+\n", " T_BC*λ('CB',Points))\n", "(T_CD,T_CG)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint G" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T_GH = 6.7 and T_DG = -3.9. By symmetry these are the same as T_FG and T_BG\n", "T_FG = 6.7 and T_BG = -3.9.\n" ] } ], "source": [ "mlist=['GD','GH']\n", "T_DG,T_GH = SolveJoint(mlist,Points,Fapp.loc['G'].values+\n", " T_FG*λ('GF',Points)+T_BG*λ('GB',Points)+T_CG*λ('GC',Points))\n", "print('T_GH = {:.1f} and T_DG = {:.1f}. By symmetry these are the same as T_FG and T_BG'.format(T_GH,T_DG))\n", "print('T_FG = {:.1f} and T_BG = {:.1f}.'.format(T_FG,T_BG))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint D" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "(4.0, -7.8)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['DH','DE']\n", "T_DH,T_DE = SolveJoint(mlist,Points,Fapp.loc['D'].values+\n", " T_DG*λ('DG',Points)+T_CD*λ('DC',Points))\n", "(T_DH,T_DE)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint H" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "6.7" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlist=['HE']\n", "T_HE = T_GH - Fapp.loc['H'].values[0];\n", "T_HE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check at joint E" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0., 0.])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T_DE*λ('ED',Points)+T_HE*λ('EH',Points)+Fapp.loc['E'].values" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }