Matlab Exam Solution

advertisement
CS 111 Matlab Exam
28 June 2006 17:00-19:00
Name and Surname: Solution _____________
Signature: _______
Question 1. (60 points) Let
m
—
mass of the body
v
—
velocity of the body
r
—
radius of the circle the body makes
cptf
—
centripetal force of the body
p
—
period
av
—
angular velocity
Then the following formula can be used to calculate the centripetal force of a body that makes a
circular motion, period of the motion, and angular velocity of the body:
m.v 2
cptf 
r
p
2 r
v
av 
v
r
Write a Matlab function that calculates the centripetal force of a body that makes a circular
motion, period of the motion, and angular velocity of the body.
Note that the input arguments can be arrays of any size. Your function must check the sizes of
the arrays, and give an error message if they are incompatible. Note that any of the input
arguments can be scalar.
Your function must also give an error message if any of the input argument arrays is an empty
matrix.
Note that all input values must be positive. If not, your function should give an error message
and hence stop.
Write a Matlab program that reads in a set of values for m,v, and r, uses the above function to
compute cptf, p, and av, and displays the results with proper messages. Your program should
also sketch a graph of v versus cptf with proper titles, labels, etc.. See the following executions
of mmq1m that solves the problem and the figure as the result of the graph formed.
>> mmq1m
please type
please type
please type
m
3.00
0.50
0.45
>> mmq1m
please type
please type
please type
m
3.00
3.00
3.00
a set of values for the mass:3
a set of values for the velocity:7
a set of values for the radius:[0.5;1;1.5]
v
r
cptf
p
3.00
3.00
7.00
7.00
1.00
1.50
294.00
147.00
0.90
1.35
14.00
7.00
av
7.00
98.00
4.67
a set of values for the mass:3
a set of values for the velocity:7
a set of values for the radius:[0.5;1;1.5]
v
r
cptf
p
7.00
0.50
294.00
0.45
7.00
1.00
147.00
0.90
7.00
1.50
98.00
1.35
av
14.00
7.00
4.67
Page 1
>> mmq1m
please type a set of values for the mass:[ 2 4]
please type a set of values for the velocity:[ 1 3]
please type a set of values for the radius:[2;7]
??? Error using ==> mmq1f
The size of the input argument arrays are incompatible
Error in ==> C:\CS 111\2006SpringLQH\MM\mmq1m.m
On line 5 ==> [cptf, p, av] = mmq1f (mass, velocity, radius);
>> mmq1m
please type a set of values for the mass:[-3 4]
please type a set of values for the velocity:[2 1]
please type a set of values for the radius:[7 8]
??? Error using ==> mmq1f
m contains at least one non-positive value
Error in ==> C:\CS 111\2006SpringLQH\MM\mmq1m.m
On line 5 ==> [cptf, p, av] = mmq1f (mass, velocity, radius);
>> mmq1m
please type a set of values for the mass:[1,2,3;4,5,6]
please type a set of values for the velocity:[1,1,1;2,2,2]
please type a set of values for the radius:[0.2,0.4,0.6;0.5,1,1.1]
m
v
r
cptf
p
av
1.00
1.00
0.20
5.00
1.26
5.00
4.00
2.00
0.50
32.00
1.57
4.00
2.00
1.00
0.40
5.00
2.51
2.50
5.00
2.00
1.00
20.00
3.14
2.00
3.00
1.00
0.60
5.00
3.77
1.67
6.00
2.00
1.10
21.82
3.46
1.82
Page 2
% mmq1f.m
function [cptf, p, av] = mmq1f (m, v, r)
% MMQ1F (m,v,r) calculates [cptf, p, av] of a body that
% makes a circular motion where
% m - mass of the body; v - velocity of the body
% r - radius of the circle the body makes
% cptf - centripetal force of the body
% p – period; av - angular velocity
msize = size(m);
vsize = size(v);
rsize = size(r);
if (isempty(m) | isempty(v) | isempty(r))
error('missing information, quitting!');
elseif ( ( sum(msize==vsize) == 2 && sum(msize==rsize) == 2 ) || ...
( sum(msize==vsize) == 2 && sum(rsize==[1,1]) == 2 ) || ...
( sum(msize==rsize) == 2 && sum(vsize==[1,1]) == 2 ) || ...
( sum(rsize==vsize) == 2 && sum(msize==[1,1]) == 2 ) || ...
( sum(rsize==[1,1]) == 2 && sum(msize==[1,1]) == 2 ) || ...
( sum(rsize==[1,1]) == 2 && sum(vsize==[1,1]) == 2 ) || ...
( sum(vsize==[1,1]) == 2 && sum(msize==[1,1]) == 2 ) )
% correct size
% check for positiveness
mmin=min(m(:));
if mmin<=0
error('m contains at least one non-positive value');
else
vmin=min(v(:));
if vmin<=0
error('v contains at least one non-positive value');
else
rmin=min(r(:));
if rmin<=0
error('r contains at least one non-positive value');
else
%calculate the output arguments
cptf = m .* v .^2 ./ r;
p = 2 * pi * r ./ v;
av = v ./ r;
end
end
end
else % incorrect array sizes
error('The size of the input argument arrays are incompatible');
end
Page 3
%mmq1m.m
% A program that tests the above mmq1f function
mass = input ('please type a set of values for the mass:');
velocity = input ('please type a set of values for the velocity:');
radius = input ('please type a set of values for the radius:');
[cptf, p, av] = mmq1f (mass, velocity, radius);
sp = size(p,1) * size(p,2);
if size(mass,1) == 1 && size(mass,2) ==1
mass = mass * ones(sp,1);
end
if size(velocity,1) == 1 && size(velocity,2) ==1
velocity = velocity * ones(sp,1);
end
if size(radius,1) == 1 && size(radius,2) ==1
radius = radius * ones(sp,1);
end
disp('
m
v
r
cptf
p
av');
fprintf('%5.2f\t%5.2f\t%5.2f\t%6.2f\t%5.2f\t%5.2f\n',...
[mass(:), velocity(:), radius(:), cptf(:), p(:), av(:)]');
mass = 4;
velocity=0.01:0.01:3;
radius=1;
cptf = mmq1f (mass, velocity, radius);
plot(velocity,cptf);
axis ([0 3 0 36]);
title('\bfVelocity versus centripetal force');
grid on
xlabel('velocity');
ylabel('cptf');
Page 4
Question 2. (40 points)
Let
0
1  1 3
2 4
1  3

a
2 1
4
2


0  1  3 5 
What are the values of the arrays after execution of each assignment statement?
B=a<0
C (~B) = 5
D = a ( [4 3], 2:-1:1)
E = [ eye(3,4) ; a(:,3)']
B =
0
0
0
0
1
0
0
1
0
0
0
1
0
1
0
0
C =
Columns 1 through 9
5
5
5
5
Columns 10 through 16
5
5
0
5
D =
-1
0
1
2
E =
1
0
0
0
0
1
0
0
0
0
1
0
3
1
4
-3
0
5
5
0
5
5
0
5
Page 5
Download