advertisement

ENME202/ENAE202 Computing Fundamentals for Engineers Matlab Homework 2 Problem overview An important area of mechanical engineering is the analysis of vibrations. When studying vibrations, we often analyze a position x (maybe the tip of a robotic arm, or the height above ground of a vehicle, etc.) and how it varies in time. The equation describing linear vibration of a simple system can be expressed as: x(t) = x(0) eλt where λ is a complex number that determines the behavior of the system, and x(0) is the initial position of the vibrating element. The l term The imaginary part of λ is the angular frequency, while the real part describes exponential growth (positive real part) or decay (negative real part). In this homework, let’s assume that λ is the root of the equation: β1/4λ2 + (α1β − α2)λ + α3β0.6 = 0 where α1, α2 and α3 are fixed parameters that we can’t change, and β is a design variable that we are free to choose. To select the desired value of β, we need to see how the root λ changes when we vary β. Since λ is complex, we typically plot λ in the complex plane for a whole range of β values – this plot then looks like a line in the complex plane (a single root is a point, but since we vary β we get a line as this root moves around). As you will learn when studying vibrations and control systems, the resulting graph is called a “root locus” plot because it tracks the roots of the dynamical equation as a selected parameter of the system changes. Remember that the complex plane is simply a cartesian coordinate system where the x-axis describes the real part of a complex number, and the y-axis describes the imaginary part of the complex number. For example, the number 1+2i could be plotted in the complex plane as follows: p_real = 1; p_imag = 2; plot(p_real, p_imag, 'ko') grid axis([-3 3 -3 3]) % plot p = 1+2i in the complex plane % add a grid % change axis limits % Draw axis lines (we did not discuss the line() function % in class, and you are NOT responsible for this topic): line([0 0], ylim); % draw x-axis line(xlim, [0 0]); % draw y-axis ENME202/ENAE202, University of Maryland Assignment Write a script plotLambdaRoots.m which accomplishes this task. Your script should assume that numerical values for the parameters alpha1, alpha2, and alpha3 have been defined in the workspace, and should compute and plot the locations of the roots λ for every value of β in the range 0.01 to 1 in steps of 1e-4. You must use arrays for this, like in the studio – don’t use a “loop”, even if you already know how! Note that you’ll need to solve the quadratic equation for λ, which will yield a pair of complex conjugates. Because the magnitude of the imaginary part of λ is thus the same for both roots, we only need to keep track of (and plot) the root with a positive imaginary part. Since the coefficients of the quadratic equation are functions of β, using Matlab’s array arithmetic appropriately will generate an array of corresponding roots. Keeping in mind that the complex plane uses the real part of a complex number as the horizontal coordinate and the imaginary part as the vertical coordinate, use the plot command to plot the array of roots for all values of β as a blue line within the complex plane. When analyzing vibrations, it is interesting to find two special solutions: (i) the solution with the largest imaginary part (i.e., highest angular frequency); and (ii) the solution with zero real part (i.e., which neither grows nor decays in time). Your script should find the values of β corresponding to both of these, and print those values to screen. It should also print the imaginary parts of λ for both of those β-values. Finally, it should plot a red circle on the largest-imaginary-part root, and a black square on the zero-real-part root. To make sure that your script runs properly, test it yourself using the exact technique we will use when grading: clear; close all alpha1 = 3; alpha2 = 1.2; alpha3 = 4; plotLambdaRoots which should produce a plot (with a curve, a point with a red circle, and a point with a black square), and the following printout: beta_maxImag = 0.7677 lamIm_maxImag = 1.8164 beta_zeroReal = 0.4000 lamIm_zeroReal = 1.7037 Your script should not produce any other output than this. ENME202/ENAE202, University of Maryland