Our solution
and its output is below. First we set n to 500 in order to save typing in the
following lines and make it easier to change this value later. Then we set up a row vector j and a zero matrix A of the appropriate sizes and begin a loop
that successively defines each row of the matrix. Notice that on the line defining A(i,j), i is a scalar and j is a vector. Finally, we extract the maximum value from the list of
eigenvalues of A.
j = 1:n;
A = zeros(n);
for i = 1:n
A(i,j) = 1./(i + j - 1);
end
max(eig(A))
2.3769
Again we display below our solution and its
output. First we define a vector t of values between 0
and 2p, in order to later represent circles
parametrically as x = r cos t, y
= r sin t. Then we clear any
previous figure that might exist and prepare to create the figure in several
steps. Let's say the red circle will
have radius 1; then the first black ring should have inner radius 2 and outer
radius 3, and thus the tenth black ring should have inner radius 20 and outer
radius 21. We start drawing from the
outside in because the idea is to fill the largest circle in black, then fill
the next largest circle in white leaving only a ring of black, then fill the
next largest circle in black leaving a ring of white, etc. The if statement tests true when r is odd and false when it is even. We stop the alternation of black and white
at a radius of 2 in order to make the last circle red instead of black, then we
adjust the axes to make the circles appear round.
cla reset; hold on
for r = 21:-1:2
if mod(r,2)
fill(r*cos(t),
r*sin(t), 'k')
else
fill(r*cos(t),
r*sin(t), 'w')
end
end
fill(cos(t), sin(t), 'r')
axis equal; hold off
Here are the contents of our solution M-file.
function m = mylcm(varargin)
nums = [varargin{:}];
if ~isnumeric(nums) | any(nums ~=
round(real(nums))) | ...
any(nums
<= 0)
error('Arguments
must be positive integers.')
end
for k = 2:length(nums);
nums(k)
= lcm(nums(k), nums(k-1));
end
m = nums(end);
Here are some examples:
60
420
Arguments must be positive integers.
Arguments must be positive integers.
Here is our solution M-file.
function letcount(file)
if isunix
[stat,
str] = unix(['cat ' file]);
else
[stat,
str] = dos(['type ' file]);
end
letters =
'abcdefghijklmnopqrstuvwxyz';
caps =
'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for n = 1:26
count(n)
= sum(str == letters(n)) + sum(str == caps(n));
end
bar(count)
ylabel 'Number of occurrences'
title(['Letter frequencies in '
file])
set(gca, 'XLim', [0 27], 'XTick',
1:26, 'XTickLabel', ...
letters')
Here is the output of running this M-file on
itself.
8.
We let w, x, y, z, denote the number of residences canvassed in the four
cities Gotham, Metropolis, Oz, and River City, respectively. Then the linear inequalities specified by
the given data are as follows:
Non-negative data: w ³ 0, x ³ 0, y ³ 0, z ³ 0;
Pamphlets: w + x + y + z £ 50,000;
Travel cost: 0.5w + 0.5x + y + 2z
£
40,000;
Time available: 2w + 3x + y + 4z
£
18,000;
Preferences: w £ x, x + y £ z;
Contributions: w + 0.25x + 0.5y + 3z
³
10,000.
The quantity to be maximized is:
Voter support: 0.6w + 0.6x + 0.5y + 0.3z.
(a)
This enables us to set up and solve
the Linear Programming problem in MATLAB as follows:
A = [1 1 1 1; 0.5 0.5 1 2; 2 3 1 4; 1 -1 0 0; 0 1 1 -1; -1 -0.25
-0.5 -3; -1 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1];
b = [50000; 40000; 18000; 0; 0; -10000; 0; 0; 0; 0];
1.0e+003 *
1.2683
1.2683
1.3171
2.5854
Jane should canvass 1268 residences in each of Gothan and
Metropolis, 1317 residences in Oz, and 2585 residences in River City.
(b)
If the allotment for time doubles then
b = [50000;
40000; 36000; 0; 0; -10000; 0; 0; 0; 0];
1.0e+003 *
4.0000
4.0000
-0.0000
4.0000
Jane should canvass 4000 residences in each of Gotham,
Metropolis and River City, and ignore Oz.
(c)
Finally, if in addition she needs to raise $20000 in contributions,
then
b = [50000;
40000; 36000; 0; 0; -20000; 0; 0; 0; 0];
1.0e+003 *
2.5366
2.5366
2.6341
5.1707
Jane needs to canvass 2537 residences in each of Gotham and
Metropolis, 2634 residences in Oz, and 5171 in River City.
9.
We let w, x, y, z, denote the number of hours that Nerv spends with the
quarterback, the running backs, the receivers, and the linemen,
respectively. Then the linear
inequalities specified by the given data are as follows:
Non-negative data: w ³ 0, x ³ 0, y ³ 0, z ³ 0;
Time available: w + x + y + z £ 50;
Point production: 0.5w + 0.3x + 0.4y + 0.1z ³ 20;
Criticisms: w + 2x + 3y + 0.5z £ 75;
Prima Donna status: x = y,
w ³ x + y, x ³ z;
The quantity to be maximized is:
Personal satisfaction: 0.2w + 0.4x + 0.3y + 0.6z.
(a)
This enables us to set up and solve
the Linear Programming problem in MATLAB as follows:
A = [1 1 1 1; -0.5 -0.3 -0.4 -0.1; 1 2 3 0.5; 0 -1 1 0; 0 1 -1 0;
-1 1 1 0; 0 -1 0 1; -1 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1];
b = [50; -20; 75; 0; 0; 0; 0; 0; 0; 0; 0];
25.9259
9.2593
9.2593
5.5556
Nerv should spend 9.26 hours each with the running backs and
receivers; 5.56 hours with the linemen; and the majority of his time, 26.93
hours, with the quarterback.
(b)
If the team only needs 15 points to win, then
b = [50; -15;
75; 0; 0; 0; 0; 0; 0; 0; 0];
20.0000
10.0000
10.0000
10.0000
Nerv can spread his time more evenly, 10 hours each with the
running backs, receivers and linemen; but still the biggest chunk of his time,
20 hours, with the quaterback.
(c)
Finally if in addition the number of criticisms is reduced
to 70, then
b = [50; -15;
70; 0; 0; 0; 0; 0; 0; 0; 0];
18.6667
9.3333
9.3333
9.3333
Nerv must spend 18&2/3 hours with the quarterback, and
9&1/3 hours with each of the other three groups. Note the total is less than 50, leaving Nerv some free time to
look for a job for next year.
f =
x-V0+R*I0*exp(x/VT)
(a)
VD = fzero(char(subs(f, [V0, R, I0, VT], [1.5, 1000, 10^(-5), .0025])), [0, 1.5])
0.0125
That's
the voltage; the current is therefore
0.0015
(b)
g = subs(f,
[V0, R], [1.5, 1000])
x-3/2+1000*I0*exp(x/VT)
fzero(char(subs(g,
[I0, VT], [(1/2)*10^(-5), .0025])), [0, 1.5])
0.0142
Not
surprisingly, the voltage goes up slightly.
(c)
fzero(char(subs(g,
[I0, VT], [10^(-5), .0025/2])), [0, 1.5])
Function values at interval endpoints must be finite and real.
The
problem is that the values of the exponential are too big at the right hand
endpoint of the test interval. We have to specify an interval big enough to
catch the solution, but small enough to prevent the exponential from blowing up
too drastically at the right end-point. This will be the case even more
dramatically in part (e) below.
fzero(char(subs(g,
[I0, VT], [10^(-5), .0025/2])), [0, 0.5])
0.0063
This
time the voltage goes down.
(d)
Next
we halve both
fzero(char(subs(g,
[I0, VT], [(1/2)*10^(-5), .0025/2])), [0, 0.5])
0.0071
The
voltage is less than in part (b) but more than in part (c).
(e)
h = subs(g, [I0, VT], [10^(-5)*u, 0.0025*u])
x-3/2+1/100*u*exp(400*x/u)
X = zeros(6);
X(1) =
fzero(char(subs(h, u, 1)), [0, 0.5]);
X(2) = fzero(char(subs(h,
u, .1)), [0, 0.01]);
X(3) = fzero(char(subs(h,
u, .01)), [0, 0.001]);
X(4) = fzero(char(subs(h,
u, .001)), [0, 0.0001]);
X(5) = fzero(char(subs(h,
u, .0001)), [0, 0.00001]);
X(6) = fzero(char(subs(h,
u, .00001)), [0, 0.000001]);
J = 5:-1:0; U = 10^(-5).*10.^(-J);
loglog(U, X)
The
loglog plot reveals a linear
decay.