CS 310 Team Lab 9: Advanced Functions: fzero, quad, and ode45
SOLUTION - Spring 2013
Contents
- Problem 1: Volume of a Cut Hemisphere
- 1.a: Define (and test) areaCutHemisphere()
- 1.b & 1.c: Compute volume of portions of the hemisphere
- 1.d: Find value of t so volume of cut-off hemisphere is 20
- Problem 2: Jumping Out of an Airplane (First-Order ODE problem)
- 2.c: Plot the time (in order to see the step size)
- Problem 3: How fast AND how far is the parachutist falling?
- Questions
Problem 1: Volume of a Cut Hemisphere
For function definitions, see
1.a: Define (and test) areaCutHemisphere()
clear area_0 = areaCutHemisphere(0); disp(['areaCutHemisphere(0) = ', num2str(area_0), ... ' ( expected result: ', num2str(0.5*pi*9) ' )']) area_3 = areaCutHemisphere(3); disp(['areaCutHemisphere(3) = ', num2str(area_3), ... ' ( expected result: 0 )'])
areaCutHemisphere(0) = 14.1372 ( expected result: 14.1372 ) areaCutHemisphere(3) = 0 ( expected result: 0 )
1.b & 1.c: Compute volume of portions of the hemisphere
vol_entire = quad(@areaCutHemisphere, -3, 3); % vol of entire hemisphere % 1.c: Compute volume of half of hemisphere vol_half = quad(@areaCutHemisphere, -3, 0); % vol of half the hemisphere % Since the volume of an entire sphere is (4/3)pi r^3, we can check our % results. The sphere has radius 3, so the entire sphere has volumen 36pi. vol_sphere = (4/3)*pi*3^3; disp(['volume of entire hemisphere = ', num2str(vol_entire), ... ' ( expected result: ', num2str(vol_sphere/2), ' )']) disp(['volume of half hemisphere = ', num2str(vol_half), ... ' ( expected result: ', num2str(vol_sphere/4), ' )']) % Define volumeCutHemisphere() and compare its results to those above disp(['volumeCutHemisphere(3) = ', num2str(volumeCutHemisphere(3))]) disp(['volumeCutHemisphere(0) = ', num2str(volumeCutHemisphere(0))])
volume of entire hemisphere = 56.5487 ( expected result: 56.5487 ) volume of half hemisphere = 28.2743 ( expected result: 28.2743 ) volumeCutHemisphere(3) = 56.5487 volumeCutHemisphere(0) = 28.2743
1.d: Find value of t so volume of cut-off hemisphere is 20
t_cut = fzero(@toBeZeroCutHemisphere20, 0); disp(['Cut hemisphere at t = ', num2str(t_cut)]) % check result from fzero is correct by plugging into volumeCutHemisphere() vol_t_cut = volumeCutHemisphere(t_cut); disp(['Volume at cut = ', num2str(vol_t_cut)])
Cut hemisphere at t = -0.59301 Volume at cut = 20
Problem 2: Jumping Out of an Airplane (First-Order ODE problem)
See also parachuteODE.m
clear
timespan = [0 20];
v0 = 0;
[t_soln, w_soln] = ode45('parachuteODE', timespan, v0);
plot(t_soln, w_soln)
2.c: Plot the time (in order to see the step size)
plot(t_soln, 'o')
Problem 3: How fast AND how far is the parachutist falling?
See also parachuteODE2.m
clear; clf; timespan = [0 20]; w0 = [0 0]; [t_soln, w_soln] = ode45('parachuteODE2', timespan, w0); % w_soln contains 2 columns, one for v and one for y v_soln = w_soln(:, 1); y_soln = w_soln(:, 2); % plot velocity (v) using a blue dotted line and distance fallen (y) using % a green solid line plot(t_soln, v_soln, 'b:', t_soln, y_soln, 'g')
Questions
Q: How far will the parachutist fall in 20 seconds?
A: Since the timespan is 0 to 20 seconds, the distance fallen in 20 seconds will be the last value in the y_soln vector.
Q: How fast is the parachutist falling after 20 seconds?
A: Since the timespan is 0 to 20 seconds, the velocity after 20 seconds will be the last value in the v_soln vector.
Q: What is the value of the terminal velocity?
A: The terminal velocity is 68.6 m/s We can get this by solving the original parachute ODE for longer timespans and seeing what the last value in the v_soln vector is.
disp(['Distance fallen in 20 seconds: ', num2str(y_soln(length(y_soln)))]) disp(['Velocity after 20 seconds: ', num2str(v_soln(length(v_soln)))]) for t_end = [50 : 25 : 200] [t_soln, v_soln] = ode45('parachuteODE', [0 t_end], 0); disp(['At time ', num2str(t_end), ', velocity = ', ... num2str(v_soln(length(v_soln)))]) end
Distance fallen in 20 seconds: 919.3792 Velocity after 20 seconds: 64.6601 At time 50, velocity = 68.5457 At time 75, velocity = 68.5985 At time 100, velocity = 68.6 At time 125, velocity = 68.6 At time 150, velocity = 68.6 At time 175, velocity = 68.6 At time 200, velocity = 68.5999