Intro to MapleSim

Intro to MapleSim - Table of Contents Introduc*on to...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: Table of Contents Introduc*on to MapleSim ....................................................................................................................................2 User Interface ............................................................................................................................................................2 Working with a Sample Model ..............................................................................................................................3 Running a Simula5on ................................................................................................................................................4 Graphical Output ......................................................................................................................................................5 3D Visualiza5on ........................................................................................................................................................5 Building Models: Crea*ng a Controlled Arm .........................................................................................................6 Running a Simula5on .............................................................................................................................................10 Graphical Output ................................................................................................................................................10 3D Visualiza5on ..................................................................................................................................................10 Crea5ng a Custom Component ...............................................................................................................................12 Comple5ng the Model ............................................................................................................................................14 Crea5ng a Subsystem .............................................................................................................................................16 Crea5ng a Custom Plot ...........................................................................................................................................16 Managing Results ..................................................................................................................................................17 Building Models: Crea*ng a Slider ­Crank ............................................................................................................19 Finishing the Model ................................................................................................................................................20 Motorized Window Assistant .............................................................................................................................22 Genera*ng Parameterized Transfer Func*ons from Plant Models in MapleSim ..................................................23 Crea*ng a Simple Temperature ­Dependent Resistor using Custom Components ................................................26 Understanding Hydraulics in MapleSim ..............................................................................................................30 Hydraulic Actuator .................................................................................................................................................30 Hydraulic Source ....................................................................................................................................................30 Example 1 – Simula5ng Transla5onal Mo5on with a Fixed Flowrate Source .........................................................31 Example 2 – Simula5ng Transla5onal Mo5on with a Fixed Pressure Source .........................................................33 Pressure Losses in a Hydraulic Network .................................................................................................................34 Example – Modeling the Flowrate through a Pipe .................................................................................................34 Hand Calcula5ons and Results ...............................................................................................................................35 Page 1 of 36 1. Introduction to MapleSim In this chapter, you will be introduced to the MapleSim environment. Using examples included with MapleSim, you will learn how to run simula5ons and customize your results. User Interface Toolbars Model Workspace PaleQes Parameters Pane 3 ­D Workspace Console figure 1.1: MapleSim environment MapleSim has two workspaces for assembling your models – the Model Workspace and 3 ­D Workspace. You can toggle between these views using . The Model Workspace is the main work area for crea5ng your MapleSim models. The 3 ­D Workspace has two opera5ng modes, Constructor and Playback. The Constructor mode gives you a preview of your mul5body models as you are building them in the model workspace, and also allows you to build models directly in the 3 ­D space as well. The Playback mode is used to display finished anima5ons of you mul5body models. You can toggle between construc5on and playback mode using the icons and . Page 2 of 36 The PaleQes bar contains expandable menus with tools to help build a model and manage your MapleSim project. This pane contains two tabs, Components and Project. The Components tab contains paleQes with domain specific components to build your models, and sample models. The Project tab contains paleQes with tools to help browse your model, and manage your results. Toolbars contain tools for running and viewing simula5ons, viewing aQached documents, naviga5ng your model hierarchy, and laying out your model. The Console contains three panes: Help, Debugging, and Message Console. The Help pane displays context ­sensi5ve help topics associated with a modeling component. The Debugging pane displays diagnos5c messages as you build your model. The Message Console displays progress messages indica5ng the status of the MapleSim engine during a simula5on. You can change between these panes using the icons . The Parameters Pane contains two tabs, Inspector and Plots, which change depending on your selec5on in the Model Workspace. The Inspector tab allows you to view and edit modeling component proper5es, such as names and parameter values, and specify simula5on parameters. The Plots tab allows you to define custom layouts for simula5on graphs and plot windows. 2. Working with a Sample Model Included with MapleSim is a collec5on of example models from different engineering domains and that are available from the Examples PaleQes. To open a model, expand the Examples paleQe and then expand Visualiza*on. Select Robot with Five Degrees of Freedom. This will load the model into the workspace. figure 2.1: examples pale8e Page 3 of 36 Running a Simulation To run a simula5on, press found in the toolbar. The progress of your simula5on is displayed in the Message Console. Once the simula5on is completed, the results are displayed along with the 3D visualiza5on. Page 4 of 36 Graphical Output The graphical output displays the results that were probed in the model. Results can be manipulated much like any graph created in Maple. You can change the way results are displayed by right ­clicking on a plot to bring up the context sensi5ve menu. You can also drag one plot onto another by leV ­clicking on the plot and dragging it into another plot area. Holding Ctrl will create a copy of it in the new plot area. figure 2.2: graphical output 3D Visualization For mul5body models, 3D anima5ons are created of your simula5on. To view the anima5on, press the play buQon • • • . You can customize the view of your anima5on by doing the following: Rotate: Hold [Ctrl] + leV mouse buQon while moving the mouse Pan: Hold [Shi + leV mouse buQon while moving the mouse Zoom: Hold [Alt] + leV mouse buQon while moving the mouse figure 2.3: 3D anima;on Page 5 of 36 3. Building Models: Creating a Controlled Arm In this example, you will use mul5body components to build a single link pendulum. You will then expand the example to create a mul5domain controlled arm as shown below. figure 3.1: finished model Before you begin the demo, make sure that MapleSim is in the split view that shows both the block diagram and 3 ­D construc5on environment. Click the split view buQon found at the boQom leV to turn on the 3 ­D model construc5on view. You will build this demo in the block diagram environment and use the 3 ­D view as a real ­5me previewer. This is one of the most common ways of using the new 3 ­D viewer to accelerate your model development. You could also build the mul5body por5ons of the model in the 3 ­D view directly. First, use mul5body components to build a single link pendulum. Number of Components Component Name and Loca*on 1 Mul5body > Bodies and Frames > Fixed Frames 1 Symbol Mul5body > Joints and Mo5ons > Revolute Page 6 of 36 1 Mul5body > Bodies and Frames > Rigid Body Frame 1 Mul5body > Bodies and Frames > Rigid Body Page 7 of 36 (a) (b) (c) (d) (e) figure 3.2: connec;ng components 1. Drag a Fixed Frame component into the work area. Drag a Revolute component into the work area to the right of the Fixed Frame. 2. Hover the mouse over the port of the Fixed Frame (figure 3.2a) and a green dot will appear. Press the leV mouse buQon. 3. Move the mouse pointer towards the leV port of the Revolute (figure 3.2b). 4. When the mouse is over the port, a green dot will appear (figure 3.2c). Press the leV mouse buQon to make the connec5on. 5. Drag a Rigid Body Frame component into the work area to the right of the Revolute. 6. Flip the Rigid Body Frame by right ­clicking on the component and selec5ng Flip Horizontally. 7. Connect the Rigid Body Frame to the Revolute (figure 3.2d). 8. Drag a Rigid Body component into the work area to the right of the Rigid Body Frame. 9. Rotate the Rigid Body by right ­clicking on the component and selec5ng Flip Horizontally. 10. Connect the Rigid Body to the Rigid Body Frame (figure 3.2e). With the first sec5on of the model complete, you will now connect a probe to record data during the simula5on. 11. To connect a probe, right ­click on the top right port of the Revolute and select AQach Probe. 12. Move the probe to the desired loca5on and click to place the probe. 13. In the Inspector pane, check the box next to Angle, and change phi to Angle. Page 8 of 36 Once you have completed crea5ng the model as shown above, change the following parameters. To change a parameter, select a component. This will open the Inspector tab on the right hand side of the screen. In this tab you will find all parameters associated with the given component. Component Rigid Body Frame Parameter Change XYZ =[ ­1, 0, 0] m This makes the link 1 m in length in the nega5ve x direc5on from the center of mass Page 9 of 36 Running a Simulation To run a simula5on, press found in the toolbar. The progress of your simula5on is displayed in the Message Console. Once the simula5on is completed, the results are displayed along with the 3D visualiza5on. Graphical Output The graphical output can be manipulated much like any graph created in Maple. To manipulate a graph, right ­click on the plot to bring up the context sensi5ve menu. figure 3.3: graph output 3D Visualization To view the 3D visualiza5on anima5on, press . You can see the arm swinging like a pendulum, as you would expect. You can control the view of your anima5on through the following: • • • Rotate: Hold [Ctrl] + leV mouse buQon while moving the mouse Pan: Hold [Shi + leV mouse buQon while moving the mouse Zoom: Hold [Alt] + leV mouse buQon while moving the mouse figure 3.4: anima;on of arm Page 10 of 36 Page 11 of 36 Creating a Custom Component You will now add fric5on to your model by crea5ng a custom component. 1. Open the document folder by pressing . 2. From the dropdown menu, select Custom Component. 3. Change the document name to Fric*on Component, and press Create AQachment. Maple will now open the Custom Component Template. 4. Under Component Descrip*on, change the component name to MyFric*on. Under Component Equa*ons, you will now enter in the equa5ons to define our component, along with any parameters and ini5al condi5ons. 5. For the equa5on, enter To enter Greek symbols, such as θ (theta) and τ (tau), you can use the Greek paleQe. To insert dot nota5on, press [Ctrl]+[Shi+[‘] to move the cursor over the variable, then use a period to insert the dot. 6. For the parameters, enter 7. To build the system object, enter figure 3.5: custom component equa;ons Page 12 of 36 8. Under Component Ports, press Clear All Ports. This will remove all ports from the component. 9. Press Add Port. LeV ­click on the port and drag it to the boQom of the component. figure 3.6: defining component ports 10. With the port selected, from the Port Type dropdown box, select Rota*onal Flange. 11. From the Angle dropdown box, select theta(t). 12. From the Torque dropdown box, select tau(t). 13. Press Generate MapleSim Component to create your component block. This will bring you back into the MapleSim environment. The custom component will now appear in the Project Manager under Library Models > User. Drag the custom component into your model area and aQach it to the top ­right port of the revolute. Run the simula5on. You will no5ce the effects of the fric5on component in the anima5on and plot. figure 3.7: model with custom component block Page 13 of 36 Completing the Model Add the following components to your model to create a mul5domain model of a controlled motor and arm. Number of Components Component Name and Loca*on 1 1 ­D Mechanical > Rota5onal > Sources > Angle Sensor 1 Electrical > Analog > Common > Ground 1 Electrical > Analog > Sources > Voltage > Signal Voltage 1 Electrical > Machines > DC Machines > DC Permanent Magnet 1 Signal Blocks > Common > Constant 1 Signal Blocks > Common > Gain 1 Symbol Signal Blocks > Common > Feedback figure 3.8: model with controller Page 14 of 36 Page 15 of 36 Once you have completed crea5ng the model as shown above, change the following component parameter: Component Parameter Change Constant Signal k=0 This specifies the controller to hold the angle the link makes with the x ­axis about the z ­axis as close to 0 as possible AQach a probe to the line connec5ng the DC Motor to the Signal Voltage. In the Inspector pane, check the box next to Current. Creating a Subsystem Crea5ng a subsystem allows you to group components togehter into a single block. This helps to organize your model both visually and by func5on. We will create a subsystem of the arm. 1. Drag a box around the revolute, rigid body, and rigid body frame components. 2. Press Ctrl+G to create the subsystem. Name the subsystem Arm. Press OK. figure 3.9: crea;ng a subsystem You can explore the subsystem by double ­clicking on it, or by using the drop ­down model navigator and selec5ng Arm1. Creating a Custom Plot Crea5ng custom plots allows you to manage the way that your simula5on results are displayed. 1. Click the Plots tab found in the upper right hand corner of the screen. Page 16 of 36 2. From the drop down menu, select Add Window. 3. Enter the window name Current vs Angle. figure 3.10: entering the name of a custom plot 4. Click Empty to bring up the plot op5ons. 5. For the X ­axis, select i (current). 6. For the Y ­axis, select phi (angle). 7. Press to run the simula5on. figure 3.11: default and custom plot output Managing Results You can quickly save simula5on results to recall or export at any 5me using the Project tab. 1. Click on the Project tab located near the top leV corner. 2. Expand the paleQe Stored Results. Here is where you will find the results of your previous simula5on, along with any previous saved results. 3. Select Rename this result to save it. The Inspector tab is now displayed on the right. 4. In the Inspector window under Result, rename the file to Gain=1 and press . Page 17 of 36 figure 3.12: saving results You will now return to the model and change the value of the gain, run the simula5on, and compare the results. 5. Change the following component parameters: Component Gain 6. Press Parameter Change k=2 Increasing the gain will reduce the error. to run the simula5on. The new results are displayed. 7. Return to the Project tab and select Gain = 1, then under the Inspector tab 8. Right ­click on the results Gain=1 and select View. The results from this simula5on should now be displayed. 9. LeV ­click on the line found in the phi plot in Gain=1. While selected, hold down Ctrl and drag the plot into the phi plot window of your last simula5on run. You should now have two red plots displayed in one plot area. 10. To help dis5nguish between the two plots, right ­click on one of the lines and select Color > Blue. Repeat these steps for the current plot (i). You can further manipulate your plots if you wish using the right ­click op5ons. Page 18 of 36 figure 3.13: comparison of results 4. Building Models: Creating a Slider Crank Use mul5body components to build a double pendulum. figure 4.1: double pendulum 1. In a new model environment, drag the following components into the model workspace: Number of Components Component Name and Loca*on 1 Mul5body > Bodies and Frames > Fixed Frames 2 Mul5body > Bodies and Frames > Rigid Body 4 Mul5body > Bodies and Frames > Rigid Body Frame 2 Symbol Mul5body > Joints and Mo5ons > Revolute Page 19 of 36 Note: some components require you to rotate or flip them. To do so, right ­click on a component and select the required manipula5on. 2. Connect the components as shown in figure 4.1. 3. Change the following component parameters: Component 1st Rigid Body Frame 2nd Rigid Body Frame 3rd Rigid Body Frame Parameter Change XYZ =[ ­1/2, 0, 0] XYZ =[1/2, 0, 0] XYZ =[ ­1, 0, 0] 4. To connect a probe, right ­click on the top right port of the fourth Rigid Body Frame and select AQach Probe. 5. Check the boxes next to Length[1] and Length[2]. 6. Press OK. 7. Move the mouse to the loca5on that you would the probe, then leV ­click to place the probe. 8. Click the Plots tab found in the upper right hand corner of the screen. 9. From the drop down menu, select Add Window. 10. Enter the window name End Point Mo*on. 11. Click Empty to bring up the plot op5ons. 12. For the X ­axis, select Probe 1: r_0[1]. 13. For the Y ­axis, select Probe 1: r_0[2]. 14. Press to run the simula5on. Finishing the Model You can now modify the pendulum into a slider crank driven by a torque component. Page 20 of 36 figure 4.2: slider crank Number of Components Component Name and Loca*on Symbol 1 Mul5body > Joints and Mo5ons > Revolute 1 Mul5body > Joints and Mo5ons > Prisma5c 1 1 ­D Mechanical > Rota5onal > Torque Drives > Torque 1 Signal Blocks > Common > Step For the Step Signal, change the height to 10. Component Parameter Change Step Signal height = 10 Press to run the simula5on. Page 21 of 36 5. Motorized Window Assistant Introduction The aging European demographic demands that homes are designed with the elderly and infirm in mind. The opening and closing of a window may seem trivially easy, but can oVen represent a challenge to senior ci5zens. An engineer has designed a motorized window frame that can be easily retrofiQed to exis5ng windows. Tasks Create a MapleSim model of this system and generate a 3D anima5on. Make reasonable assump5ons about unspecified design parameters. Use a propor5onal controller to regulate the torque applied to open or close the window to a set point. Consider using a DC Permanent Magne5c motor and regula5ng the applied voltage for this purpose. Tune the controller so that the window opens or closes in a reasonable amount of 5me. Page 22 of 36 6. Generating Parameterized Transfer Functions from Plant Models in MapleSim In this tutorial you will generate a parameterized transfer func5on from a spring ­mass ­damper system. You will start by crea5ng the plant model, then extract the system equa5ons in a Maple worksheet and convert them into a transfer func5on. 1. In a new model environment, drag the following components into the model workspace: Number of Components Component Name and Loca*on 1 Signal Blocks > Common > Constant 1 1 ­D Mechanical > Transla5onal > Common > Force 1 1 ­D Mechanical > Transla5onal > Common > Sliding Mass 1 1 ­D Mechanical > Transla5onal > Common > Transla5onal Spring Damper 1 1 ­D Mechanical > Transla5onal > Common > Transla5onal Fixed 1 Symbol 1 ­D Mechanical > Transla5onal > Sensors > Posi5on Sensors 2. Connect the model as shown in figure 6.2. For help on building your model, see 3. Building Models: Crea>ng a Controlled Arm Page 23 of 36 figure 6.2: sliding mass ­spring ­damper model Once you have completed crea5ng the model as shown above, change the following component parameter: Component Parameter Change Transla5onal Spring Damper c = 3000 N/m d = 300 N s/m This changes the spring s5ffness and damping constant Sliding Mass m = 100 kg Changes the mass for the component 3. Drag a box around all of the components, excluding the constant signal. figure 6.3: a) crea;ng a subsystem and b) connec;ng components 4. Press Ctrl + G to create the subsystem. Name the subsystem Plant. Press OK. 5. Double ­click on the Plant subsystem. This will bring you to the subsystem level. Page 24 of 36 6. Connect the Posi5on Sensor to the frame of the subsystem by leV ­clicking on the right port of the sensor and connec5ng it to the frame of the subsystem (figure 6.3 b). This will make the port accessible at the Main level. 7. Click Main in the subsystem browser to return to the top level of the model. 8. Right ­click on the right ­hand port on the Plant subsystem and select AQach Probe. 9. Change value to Posi;on. Press OK. 10. Press to run the simula5on. figure 6.4: simula;on results You will now aQach an equa5on template to your model so you can access the model equa5ons. 11. Click to open the Document Folder. 12. Selec5on Equa*ons from the drop ­down menu, and click New. Press OK. 13. Double click on Equa5ons in the list on the leV. This will now launch Maple. 14. Scroll to the Model Equa*ons sec5on. Under Subsystem, select Plant from the drop ­down box. 15. Click on Get Equa*ons. You should see the dynamic equa5ons for the subsystem. The variable names reflect those given earlier. Page 25 of 36 16. Click on Assign to variable. The equa5ons will now be assigned to the variable eq. figure 6.5: equa;on genera;on template 17. Click on Get I/O Variables. You will see the internal names assigned to the output, RO1(t), and the input, RealInput(t). 18. Scroll down and click in a blank sec5on of the worksheet. You should see a dashed command prompt. 19. Type and execute the following commands, pressing Enter aVer each line. figure 6.6: generated transfer func;on 7. Creating a Simple Temperature Dependent Resistor using Custom Components In this tutorial, you will create a temperature dependent resistor whose resistance varies as 1. In a new model environment, click 2. Click on More Templates... to View Document Folder. 3. Open the folder Component Templates. 4. AQach the template Algebraic Equa*ons. Press OK. 5. Double click on Algebraic Component in the list on the leV. This will now launch Maple. 6. Under Component Descrip*on, change the component name to TempResistor. Under Component Equa*ons, you will now enter in the equa5ons to define your component, along with any parameters and ini5al condi5ons. Be sure to hit enter at the end of each line. Page 26 of 36 7. For the equa5on, enter 8. For the parameters, enter 9. To build the system object, enter figure 7.1: custom component equa;ons 10. Scroll down to Component Ports 11. Under Component Ports, press Clear All Ports. This will remove all ports from the component. 12. Press Add Port three 5mes. 13. With the boQom port selected, from the Port Type dropdown box, select Heat Port. 14. From the Temperature dropdown box, select T(t). 15. From the Heat Flow Rate dropdown box, select q(t). 16. With the right port selected, from the Port Type dropdown box, select Nega*ve Pin. 17. From the Voltage dropdown box, select vn(t). 18. From the Current dropdown box, select i(t) and change this to –i(t). 19. With the le[ port selected, from the Port Type dropdown box, select Posi*ve Pin. 20. From the Voltage dropdown box, select vp(t). 21. From the Current dropdown box, select i(t). 22. Press Generate MapleSim Component to create your component block. This will bring you back into the MapleSim environment. The custom component will now appear in the Project Manager under Library Models > User. Drag the custom component into your model area. 23. Under the Project tab, drag the following components into your workspace: Number of Components Component Name and Loca*on Symbol Page 27 of 36 1 Electrical > Analog > Common > Sine Voltage 1 Electrical > Analog > Common > Ground 1 Electrical > Analog > Common > Inductor 1 Thermal > Boundary Condi5on Controls > Fixed Temperature 24. Connect the model as shown in figure 7.2 and aQach the appropriate probes. For help on building your model, see 3. Building Models: Crea>ng a Controlled Arm figure 7.2: custom component equa;ons Page 28 of 36 Once you have completed crea5ng the model as shown above, change the following component parameter: Component Parameter Change Fixed Temperature T = 298 K 25. Press to run the simula5on. figure 7.3: simula;on results Page 29 of 36 8. Understanding Hydraulics in MapleSim This guide helps you understand MapleSim’s hydraulic engine, which is designed to convert hydraulic flow into mechanical mo5on. Hydraulic Fluid Proper6esAll hydraulic models need a Hydraulic Fluid Proper5es block. It defines the proper5es of the hydraulic fluid, and is essen5ally a Parameter • • • rhoFluid: liquid density EIFluid: Bulk Modulus (this defines the compressibility of the fluid) nuFluid: Kinema5c Viscosity (the dynamic viscosity divided by the liquid density) block . .1 Hydraulic Actuator You need an actuator to convert hydraulic flow into mo5on of a mechanical body. MapleSim offers a Hydraulic Cylinder (for transla5onal mo5on) and a Hydraulic Motor (for rota5onal mo5on). .2 Hydraulic Source You can either specify the flowrate or the pressure of the hydraulic source. If a Pressure Source is used, then MapleSim balances the load in the hydraulic system against the pressure source to find the flowrate. Page 30 of 36 .2 Example 1 – Simulating Translational Motion with a Fixed Flowrate Source We will start by crea5ng this model. It converts flow from a fixed pressure source to transla5onal mo5on. Number of Components Component Name and Loca*on 1 Hydraulic > Reference Components > Hydraulic Fluid Proper5es 1 Hydraulic > Sources > Fixed Flow Source 1 Hydraulic > Reference Components > Atmospheric Pressure 1 Hydraulic > Actuators > Hydraulic Cylinder 1 1 ­D Mechanical > Transla5onal > Common > Sliding Mass 1 Symbol 1 ­D Mechanical > Transla5onal > Common > Transla5onal Fixed Page 31 of 36 Note that the Hydraulic cylinder has a cross ­sec5onal area A of 1 m2, while the Fixed Flowrate source has a flow Q of 1 m3 s ­1. The sliding mass will hence be pushed along by the cylinder at a speed of This is confirmed by running the simula5on and probing the speed of the sliding mass. Page 32 of 36 .3 Example 2 – Simulating Translational Motion with a Fixed Pressure Source Now replace the Fixed Flow Source with a Fixed Pressure Source Number of Components 1 Component Name and Loca*on Symbol Hydraulic > Sources > Fixed Pressure Source The force on the Sliding Mass is equal to the cross ­sec5onal of the hydraulic cylinder A mul5plied by the pressure P of the hydraulic fluid. The accelera5on of the Sliding Mass is giving by Therefore Again, this is confirmed by probing the accelera5on, speed and displacement of the Sliding Mass Page 33 of 36 .4 Pressure Losses in a Hydraulic Network Pressure must be applied to overcome internal fric5onal effects within the liquid (in laminar flow), and the effect of the surface roughness of the pipe (in turbulent flow). In laminar flow, the internal fric5onal f effect is determined by the following equa5on where D is the pipe diameter, V is the fluid velocity, and nu is the dynamic viscosity. In turbulent flow, the fric5onal effects of the surface roughness of the pipe are characterised by In either laminar or turbulent flow, the fric5onal losses have to be balanced against the applied pressure to determine the flowrate. .1 Example – Modeling the Flowrate through a Pipe Page 34 of 36 Number of Components Component Name and Loca*on 2 Hydraulic > Reference Components > Atmospheric Pressure 1 Symbol Hydraulic > Sources > Fixed Pressure Source 1 Hydraulic > Pipes and Valves > Circular Pipe 1 Hydraulic > Reference Components > Hydraulic Fluid Proper5es Running the MapleSim model predicts the following flowrate – about 3.2 x 10 ­9 m3 s ­1. .2 Hand Calculations and Results If we were to analyze this system by hand, we would apply the Bernoulli Equa5on. Assuming that the system is in laminar flow, then and hence Hence This is the same value given by MapleSim. Page 35 of 36 Using the calculated value of v gives Re=0.02. This is far less than the cri5cal value of 2000, and hence we have confirmed the system is in laminar flow. Page 36 of 36 ...
View Full Document

Ask a homework question - tutors are online