270 likes | 633 Views
Engineering 25. Chp3 Tutorial: Prob 3.14 Solution. Bruce Mayer, PE Licensed Electrical & Mechanical Engineer BMayer@ChabotCollege.edu. P3.14 Water Reservoir Vol.
E N D
Engineering 25 Chp3Tutorial: Prob 3.14Solution Bruce Mayer, PE Licensed Electrical & Mechanical EngineerBMayer@ChabotCollege.edu
P3.14 Water Reservoir Vol Using estimates of rainfall, evaporation, and water consumption, the town engineer developed the following model of the water volume in the reservoir as a function of time where V is the water volume in liters, t is time in days, and r is the town's consumption rate in liters per day. Write TWO user-defined functions. The first function should define the function V(t) for use with the fzero function. The second function should use fzero to compute how long it will take for the water volume to decrease to x percent of its initial value of 109 L. The inputs to the second function should be x and r. Test your functions for the case where x = 50 percent and r = 107 L/day.
A NearBy Reservoir This 315-acre anglers oasis sits in the heart of Suburban Castro Valley but, you'd never know it from your surroundings once inside the park. Miles of parkland and trails make Chabot a haven for outdoor enthusiasts. Hikers can enjoy scenic walks on the 280-acre Fairmont Ridge. Park trails are designed for shared useage. Lake Chabot is well known among the running community. The park hosts Half Marathons, 5K's and the Kids Fun Run. In fact, Trail Runner magazine chose this setting as one of America's Most Scenic Races.
Water Reservoir Vol • Problem 3-14 appears to have an inconsistency • The fzero built-in function operates on any SINGLE VARIABLE function as described in Tab 3.2-1 of the text book. • In this case want to input a V(t), function, NOT a V(t,x,r) function to determine the %-decrease time. • The problem, however, says that TWO parameters, x & r, must also be sent to the V(t) function before using fzero
Use GLOBALS for x&r • We can “work around” the fzerosingle-varialbe requirement for V(t) by declaring x & r as GLOBAL Variables as described on pg 124 of the Text • Declaring x & r as globals in BOTH the calling function and the V(t) function gives the single-Varfunction, V(t), access to r & x withOUT listing them in the V-function argument
Physical Analysis • The Reservoir Volume vs t Function • Now need to find the time, td, for the volume to decrease TO x-percent of the initial Volume for a given water consumption rate, r • i.e, Find td such that
Physical Analysis • Now need to define a function for which zeros exist • In this case define a DIFFERENCE Function • Now ΔV will be ZERO whent = td so that V(td) = Vfinal • Thus the function to be zeroed is the DIFFERENCE between Vfinal(the Goal) and V(t) (the Guess) • Want: Vgoal − Vguess = 0
Guess&CheckDemo • Make a Time Guess, tGuess • CalcVGuess = V(tGuess) • Calc % Full for the Guess • Calc Difference • Guess AGAIN
Guess&Check Demo • First Trial Run (Cmd Window) >> r = 1e7 r = 10000000>> >> VtoverVi = @(t) (1e9 + 1e8*(1 - exp(-t/100)) - r*t)/1e9 VtoverVi= @(t)(1e9+1e8*(1-exp(-t/100))-r*t)/1e9 >> Goal = 0.55 Goal = 0.5500 >> Guess31 = VtoverVi(31) Guess31 = 0.7167 >> del31 = Goal - Guess31 del31 = -0.1667
Guess & Check Ans >> P3_14_ReservoirVolume_1302 r = 10000000 VtoverVi= @(t)(1e9+1e8*(1-exp(-t/100))-r*t)/1e9 Goal = 0.5500 Guess31 = 0.7167 del31 = -0.1667 Guess62 = 0.4262 del62 = 0.1238 Guess47 = 0.5675 del47 = -0.0175 Guess48 = 0.5581 del48 = -0.0081 Guess49 = 0.5487 del49 = 0.0013
Guess&Check .m-file % Bruce Mayer, PE % ENGR25 * 12Feb13 % Problem 3_14 % P3_14_ReservoirVolume_1302.m r = 1e7 % consumption rate % Create ANON fcn to return % of Initial Vol VtoverVi = @(t) (1e9 + 1e8*(1 - exp(-t/100)) - r*t)/1e9 Goal = 0.55 % to 55% of initial Volume Guess31 = VtoverVi(31) del31 = Goal - Guess31 Guess62 = VtoverVi(62) del62 = Goal - Guess62 Guess47 = VtoverVi(47) del47 = Goal - Guess47 Guess48 = VtoverVi(48) del48 = Goal - Guess48 Guess49 = VtoverVi(49) del49 = Goal - Guess49
MATLAB GamePlan • Write the single variable (var = t) function deltaV(t) for use in fzero • This function receives parameters r & x as GLOBALvariables rd & xd • Write the calling function, time_to_decrease(x,r), that calls into action fzero with deltaV as its argument • This calling function sends rd& xd to deltaV by way of the GLOBAL declaration
Structure Chart • Note How GLOBALS ByPass the Normal Communication Path
Example Call • User Inputs • x = 50 & r = 1e7 • Takes 54.2 days to drop to 50% initial for use rate of 1e7 Liters per Day Percent of Initial Storage, x = 50 Consumption Rate in L/day, r = 1e7 for x = 50 for r = 10000000 The time to Decrease in Days = 54.1832
Cmd Window Session • For x = 50%, and r = 1e7 liters per day >> td50_1e7 = time_to_decrease(50,1e7) Rd = 10000000 Xd = 50 t_dec = 54.1832 td50_1e7 = 54.1832 • Thus for a 1e7 liter/day consumption rate, a 50% decrease in volume takes about 54 days
Cmd Window Session • For x = 27%, and r = 4e6 liters/day >> td27_4e6 = time_to_decrease(27,4e6) Rd = 4000000 Xd = 27 t_dec = 204.2576 td27_4e6 = 204.2576 • Thus for a 4e6 liter/day consumption rate, a decrease to 27% of the initial volume takes about 204 days
DeltaV Plot • Anonymous fcn • For x = 27%, and r = 4e6 liters/day • dV = Goal – Guess • Goal = 1e9*(27/100) • Guess = (1e9 + 1e8*(1-exp(-tg/100)) - 4e6*tg); >> dV27_4e6 = @(tg) (1e9*(1-73/100 )) - (1e9 + 1e8*(1-exp(-tg/100)) - 4e6*tg); % Vfinal - Vguess >> tplot = linspace(-350,350,700); >> VolDiff = dV27_4e6(tplot); >> plot(tplot, VolDiff, 'LineWidth', 3), grid, xlabel('t (days)'), ylabel('DeltaV (L)'), title('P3-14: Need to ZERO‘)
DeltaV Plot • Note that fzero can Return ERRONEOUS (negative) Results if Start-Pt is Off
Erroneous result • For x = 65%, and r = 1e6 liters/day >> td65_1e6 = time_to_decrease(65,1e6) Rd = 1000000 Xd = 65 t_dec = -184.8166 td65_1e6 = -184.8166 • For THIS SET of Parameters fzero found a NEGTIVE (erroneous Root)
Erroneous DeltaVPlot • fzerofound the negative root • The can be fixed by changing the starting point to 200
Erroneous result • For x = 65%, and r = 1e6 liters/day • Change This Line in the time_to_decreasecode t_dec = fzero('deltaV', 200) • The new (Mathimatically Correct) result >> td65_1e6 = time_to_decrease(65,1e6) Rd = 1000000 Xd = 65 t_dec = 448.8765 td65_1e6 = 448.8765
Erroneous Comment • Even though 448.9 Days is correct by the Equation, it is NOT physically reasonable • Since Weather is CYCICAL on a 365 day basis, anything over a Year violates nature and is thus NOT Applicable • Some Advice • Always do a Reality Check on the Results returned by ANY computer program • When in Doubt PLOT