Chapter 1 M-Files
Script File Index
| SineTable | Prints a short table of sine evaluations. |
| SinePlot | Displays a sequence of sin(x) plots. |
| ExpPlot | Plots exp(x) and an approximation to exp(x). |
| TangentPlot | Plots tan(x). |
| SineAndCosPlot | Superimposes plots of sin(x) and cos(x). |
| Polygons | Displays nine regular polygons, one per window. |
| SumOfSines | Displays the sum of four sine functions. |
| SumOfSines2 | Displays a pair of sum-of-sine functions. |
| UpDown | Sample core exploratory environment. |
| RunUpDown | Framework for running UpDown. |
| Histograms | Displays the distribution of rand and randn. |
| Clouds | Displays 2-dimensional rand and randn. |
| Dice | Histogram of 1000 dice rolls. |
| Darts | Monte Carlo computation of pi. |
| Smooth | Polygon smoothing. |
| Stirling | Relative and absolute error in Stirling formula. |
| ExpTaylor | Plots relative error in Taylor approximation to exp(x). |
| Zoom | Roundoff in the expansion of (x-1)^ 6. |
| FpFacts | Examines precision, overflow, and underflow. |
| TestMyExp | Examines MyExp1 , MyExp2 , MyExp3 , and MyExp4. |
| TestDerivative | Applies Derivative to Sin10. |
| Euler | Three-digit arithmetic sum of 1 + 1/2 + ... + 1/n. |
| ShowPadeArray | Tests the function PadeArray. |
| ShowFonts | Illustrates how to use fonts. |
| ShowSymbols | Shows how to generate math symbols. |
| ShowGreek | Shows how to generate Greek letters. |
| ShowText | Shows how to align with text. |
| ShowLineWidth | Shows how vary line width in a plot. |
| ShowAxes | Shows how to set tick marks on axes. |
| ShowLegend | Shows how to add a legend to a plot. |
| ShowColor | Shows how to use built-in colors and user-defined colors. |
Function File Index
| MyExpF | For-loop Taylor approximation to exp(x). |
| MyExp1 | Vectorized version of MyExpF. |
| MyExp2 | Better vectorized version of MyExpF. |
| MyExpW | While-loop Taylor approximation to exp(x). |
| MyExp3 | Vectorized version of MyExpW. |
| MyExp4 | Better vectorized version of MyExpW. |
| Derivative | Numerical differentiation. |
| Sin10 | sin(10x). |
| Represent | Sets up 3-digit arithmetic representation. |
| Convert | Converts 3-digit representation to float. |
| Float | Simulates 3-digit arithmetic. |
| Pretty | Pretty prints a 3-digit representation. |
| PadeArray | Builds a cell array of Pade coefficients. |
| PadeCoeff | Generates Pade approximant coefficients |
% Script File: SineTable
% Prints a short table of sine evaluations.
clc
n = 21;
x = linspace(0,1,n);
y = sin(2*pi*x);
disp(' ')
disp(' k x(k) sin(x(k))')
disp('------------------------')
for k=1:21
degrees = (k-1)*360/(n-1);
disp(sprintf(' %2.0f %3.0f %6.3f ',k,degrees,y(k)));
end
disp( ' ');
disp('x(k) is given in degrees.')
disp(sprintf('One Degree = %5.3e Radians',pi/180))
% Script File: SinePlot
% Displays increasingly smooth plots of sin(2*pi*x).
close all
for n = [4 8 12 16 20 50 100 200 400]
x = linspace(0,1,n);
y = sin(2*pi*x);
plot(x,y)
title(sprintf('Plot of sin(2*pi*x) based upon n = %3.0f points.',n))
pause(1)
end
% Script File: ExpPlot % Examines the function % % f(x) = ((1 + x/24)/(1 - x/24 + x^2/384))^8 % % as an approximation to exp(z) across [0,1]. close all x = linspace(0,1,200); num = 1 + x/24; denom = 1 - x/12 + (x/384).*x; quot = num./denom; y = quot.^8; plot(x,y,x,exp(x))
% Script File: TangentPlot
% Plots the function tan(x), -pi/2 <= x <= 9pi/2
close all
ymax = 10;
x = linspace(-pi/2,pi/2,40);
y = tan(x);
plot(x,y)
axis([-pi/2 9*pi/2 -ymax ymax])
title('The Tangent Function')
xlabel('x')
ylabel('tan(x)')
hold on
for k=1:4
xnew = x+ k*pi;
plot(xnew,y);
end
hold off
% Script File: SineAndCosPlot % Plots the functions sin(2*pi*x) and cos(2*pi*x) across [0,1] % and marks their intersection. close all x = linspace(0,1,200); y1 = sin(2*pi*x); y2 = cos(2*pi*x); plot(x,y1,x,y2,'--',[1/8 5/8],[1/sqrt(2) -1/sqrt(2)],'*')
% Script File: Polygons % Plots selected regular polygons. close all theta = linspace(0,2*pi,361); c = cos(theta); s = sin(theta); k=0; for sides = [3 4 5 6 8 10 12 18 24] stride = 360/sides; k=k+1; subplot(3,3,k) plot(c(1:stride:361),s(1:stride:361)) axis([-1.2 1.2 -1.2 1.2]) axis equal end
% Script File: SumOfSines
% Plots f(x) = 2sin(x) + 3sin(2x) + 7sin(3x) + 5sin(4x)
% across the interval [-10,10].
close all
x = linspace(-10,10,200)';
A = [sin(x) sin(2*x) sin(3*x) sin(4*x)];
y = A*[2;3;7;5];
plot(x,y)
title('f(x) = 2sin(x) + 3sin(2x) + 7sin(3x) + 5sin(4x)')
% Script File: SumOfSines2 % Plots the functions % f(x) = 2sin(x) + 3sin(2x) + 7sin(3x) + 5sin(4x) % g(x) = 8sin(x) + 2sin(2x) + 6sin(3x) + 9sin(4x) % across the interval [-10,10]. close all n = 200; x = linspace(-10,10,n)'; A = [sin(x) sin(2*x) sin(3*x) sin(4*x)]; y = A*[2 8;3 2;7 6;5 9]; plot(x,y)
% Script File: UpDown
% Generates a column vector x(1:n) of positive integers
% where x(1) is solicited and
%
% x(k+1) = x(k)/2 if x(k) is even.
% x(k+1) = 3x(k)+1 if x(k) is odd.
%
% The value of n is either 500 or the first index with the
% property that x(n) = 1, whichever comes first.
x = zeros(500,1);
x(1) = input('Enter initial positive integer:');
k = 1;
while ((x(k) ~= 1) & (k < 500))
if rem(x(k),2) == 0
x(k+1) = x(k)/2;
else
x(k+1) = 3*x(k)+1;
end
k = k+1;
end
n = k;
x = x(1:n);
clc
disp(sprintf('x(1:%1.0f) = \n',n))
disp(sprintf('%-8.0f',x))
[xmax,imax] = max(x);
disp(sprintf('\n x(%1.0f) = %1.0f is the max.',imax,xmax))
density = sum(x<=x(1))/x(1);
disp(sprintf(' The density is %5.3f.',density))
close all
figure
plot(x)
title(sprintf('x(1) = %1.0f, n = %1.0f',x(1),n));
figure
plot(-sort(-x))
title('Sequence values sorted.')
I = find(rem(x(1:n-1),2)==1);
if length(I)>1
figure
plot((1:n),zeros(1,n),I+1,x(I+1),I+1,x(I+1),'*')
title('Local Maxima')
end
% Script File: RunUpDown
% Environment for studying the up/down sequence.
% Stores selected results in file UpDownOutput.
while(input('Another Example? (1=yes, 0=no)'))
diary UpDownOutput
UpDown
diary off
disp(' ')
if (input('Keep Output? (1=yes, 0=no)')~=1)
delete UpDownOutput
end
end
% Script File: Histograms
% Histograms of rand(1000,1) and randn(1000,1).
close all
subplot(2,1,1)
x = rand(1000,1);
hist(x,30)
axis([-1 2 0 60])
title('Distribution of Values in rand(1000,1)')
xlabel(sprintf('Mean = %5.3f. Median = %5.3f.',mean(x),median(x)))
subplot(2,1,2)
x = randn(1000,1);
hist(x,linspace(-2.9,2.9,100));
title('Distribution of Values in randn(1000,1)')
xlabel(sprintf('Mean = %5.3f. Standard Deviation = %5.3f',mean(x),std(x)))
% Script File: Clouds
% 2-dimensional pictures of the uniform and normal distributions.
close all
Points = rand(1000,2);
subplot(1,2,1)
plot(Points(:,1),Points(:,2),'.')
title('Uniform Distribution.')
axis([0 1 0 1])
axis square
Points = randn(1000,2);
subplot(1,2,2)
plot(Points(:,1),Points(:,2),'.')
title('Normal Distribution.')
axis([-3 3 -3 3])
axis square
% Script File: Dice
% Simulates 1000 rollings of a pair of dice.
close all
First = 1 + floor(6*rand(1000,1));
Second = 1 + floor(6*rand(1000,1));
Throws = First + Second;
hist(Throws, linspace(2,12,11));
title('Outcome of 1000 Dice Rolls.')
% Script File: Darts
% Estimates pi using random dart throws.
close all
rand('seed',.123456)
NumberInside = 0;
PiEstimate = zeros(500,1);
for k=1:500
x = -1+2*rand(100,1);
y = -1+2*rand(100,1);
NumberInside = NumberInside + sum(x.^2 + y.^2 <= 1);
PiEstimate(k) = (NumberInside/(k*100))*4;
end
plot(PiEstimate)
title(sprintf('Monte Carlo Estimate of Pi = %5.3f',PiEstimate(500)));
xlabel('Hundreds of Trials')
% Script File: Smooth
% Solicits n, draws an n-gon, and then smooths it.
close all
n = input('Enter the number of edges:');
figure
axis([0 1 0 1])
axis square
hold on
x = zeros(n,1);
y = zeros(n,1);
for k=1:n
title(sprintf('Click in %2.0f more points.',n-k+1))
[x(k) y(k)] = ginput(1);
plot(x(1:k),y(1:k), x(1:k),y(1:k),'*')
end
x0 = x; y0 = y;
x = [x;x(1)];
y = [y;y(1)];
plot(x,y,x,y,'*')
title('The Original Polygon')
hold off
k=0;
xlabel('Click inside window to smooth, outside window to quit.')
[a,b] = ginput(1);
v = axis;
while (v(1)<=a) & (a<=v(2)) & (v(3)<=b) & (b<=v(4));
k = k+1;
x = [(x(1:n)+x(2:n+1))/2;(x(1)+x(2))/2];
y = [(y(1:n)+y(2:n+1))/2;(y(1)+y(2))/2];
m = max(abs([x;y]));
x = x/m;
y = y/m;
figure
plot(x,y,x,y,'*')
axis square
title(sprintf('Number of Smoothings = %1.0f',k))
xlabel('Click inside window to smooth, outside window to quit.')
v = axis;
[a,b] = ginput(1);
end
% Script File: Stirling
% Prints a table showing error in Stirling's formula for n!
close all
clc
disp( ' ')
disp(' Stirling Absolute Relative')
disp(' n n! Approximation Error Error')
disp('----------------------------------------------------------------')
e=exp(1);
nfact=1;
for n=1:13
nfact = n*nfact;
s = sqrt(2*pi*n)*((n/e)^n);
abserror = abs(nfact - s);
relerror = abserror/nfact;
s1 = sprintf(' %2.0f %10.0f %13.2f',n,nfact,s);
s2 = sprintf(' %13.2f %5.2e',abserror,relerror);
disp([s1 s2])
end
% Script File: ExpTaylor
% Plots, as a function of n, the relative error in the
% Taylor approximation
%
% 1 + x + x^2/2! +...+ x^n/n!
%
% to exp(x).
close all
nTerms = 50;
for x=[10 5 1 -1 -5 -10]
figure
f = exp(x)*ones(nTerms,1);
s = 1;
term = 1;
for k=1:50
term = x.*term/k;
s = s+ term;
err(k) = abs(f(k) - s);
end
relerr = err/exp(x);
semilogy(1:nTerms,relerr)
ylabel('Relative Error in Partial Sum.')
xlabel('Order of Partial Sum.')
title(sprintf('x = %5.2f',x))
end
% Script File: Zoom % Plots (x-1)^6 near x=1 with increasingly refined scale. % Evaluation via x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6x +1 % leads to severe cancellation. close all k=0; n=100; for delta = [.1 .01 .008 .007 .005 .003 ] x = linspace(1-delta,1+delta,n)'; y = x.^6 - 6*x.^5 + 15*x.^4 - 20*x.^3 + 15*x.^2 - 6*x + ones(n,1); k = k+1; subplot(2,3,k) plot(x,y,x,zeros(1,n)) axis([1-delta 1+delta -max(abs(y)) max(abs(y))]) end
% Script File: FpFacts
% Prints some facts about the underlying floating point system.
close all
clc
% p = smallest positive integer so 1+1/2^p = 1.
x=1; p=0; y=1; z=x+y;
while x~=z
y=y/2;
p=p+1;
z=x+y;
end
disp(sprintf('p = %2.0f is the smallest positive integer so 1+1/2^p = 1.',p))
% q = smallest positive integer so 1/2^q = 0.
x=1; q=0;
while x>0
x=x/2;
q=q+1;
end;
disp(sprintf('q = %2.0f is the smallest positive integer so 1/2^q = 0.',q))
% r = smallest positive integer so 2^r = inf.
x=1; r=0;
while x~=inf
x=2*x;
r=r+1;
end
disp(sprintf('r = %2.0f is the smallest positive integer so 2^r = inf.',r))
% The Kahan example. In exact arithmetic f/e = 0/0:
disp(' ')
echo on
h = 1./2.;
x = 2./3. - h;
y = 3./5. - h;
e = (x+x+x) - h;
f = (y+y+y+y+y)-h;
z = f/e;
echo off
disp(sprintf('\nz = %10.5f',z))
% Script File: TestMyExp
% Checks MyExpF, MyExp1, MyExp2, MyExp3, and MyExp4.
close all
m = 50;
x = linspace(-1,1,m);
exact = exp(x);
figure
k=0;
y = zeros(1,m);
for n = [4 8 16 20]
for i=1:m
y(i) = MyExpF(x(i),n);
end
RelErr = abs(exact - y)./exact;
k=k+1;
subplot(2,2,k)
plot(x,RelErr)
title(sprintf('n = %2.0f',n))
end
clc
nRepeat = 1;
% Note: The following fragment may take a long time to execute
% with this value of nRepeat.
disp('T1 = MyExp1 benchmark.')
disp('T2 = MyExp2 benchmark.')
disp(' ')
disp(' Length(x) T2/T1')
disp('-----------------------')
for L = 1000:100:2000
xL = linspace(-1,1,L);
tic
for k=1:nRepeat
y = MyExp1(xL);
end
T1 = toc;
tic
for k=1:nRepeat
y = MyExp2(xL);
end
T2 = toc;
disp(sprintf('%6.0f %13.6f ',L,T2/T1))
end
disp(' ')
disp(' ')
disp(' Length(x) MyExp3(x) MyExp4(x) ')
disp(' Flops Flops')
disp('---------------------------------------')
for L = 50:50:300
xL = linspace(-1,1,L);
flops(0);
y = MyExp3(xL);
f3 = flops;
flops(0);
y = MyExp4(xL);
f4 = flops;
disp(sprintf('%6.0f %13.0f %13.0f ',L,f3,f4))
end
% Script File: TestDerivative
% Numerical differentiation of f(x) = sin(10x)
close all
a = 10;
M2=100;
% Look at errors across [0,1].
% err1 = error with no derivative information.
% err2 = error with 2nd derivative information.
m = 100;
x=linspace(0,1,m);
for i=1:m
exactDer = a*cos(a*x(i));
err1(i) = abs(exactDer - Derivative('sin10',x(i)));
err2(i) = abs(exactDer - Derivative('sin10',x(i),eps,M2));
end
% Plot err1(1:m)
figure
plot(x,err1);
title('Derivative(''sin10'',a)')
xlabel('a')
ylabel('Der Error')
% Plot err2(1:m)
figure
plot(x,err2);
title('Derivative(''sin10'',a,eps,100)')
xlabel('a')
ylabel('Der Error')
% Script File: Euler % Sums the series 1 + 1/2 + 1/3 + .. in 3-digit floating point arithmetic. % Terminates when the addition of the next term does not change % the value of the running sum. oldsum = represent(0); one = represent(1); sum = one; k = 1; while convert(sum) ~= convert(oldsum) k = k+1; kay = represent(k); term = float(one,kay,'/'); oldsum = sum; sum = float(sum,term,'+'); end clc disp(['The sum for ' num2str(k) ' or more terms is ' pretty(sum)])
% Script File: ShowPadeArray
% Illustrates the function PadeArray that creates a cell array.
clc
P = PadeArray(5,5);
for i=1:5
for j=1:5
disp(sprintf('\n (%1d,%1d) Pade Coefficients:\n',i-1,j-1))
disp([' ' sprintf('%7.4f ',P{i,j}.num)])
disp([' ' sprintf('%7.4f ',P{i,j}.den)])
end
end
% Script File: ShowFonts
close all
HA = 'HorizontalAlign';
fonts = {'Times-Roman' 'Helvetica' 'AvantGarde' 'Bookman' 'Palatino'...
'ZapfChancery' 'Courier' 'NewCenturySchlbk' 'Helvetica-Narrow'};
for k=1:9
figure
plot([-10 100 100 -10 -10],[0 0 60 60 0])
axis([-10 100 0 60])
axis off
v=38;
F = fonts{k};
text(45,55,F,'FontName',F,'FontSize',24,HA,'center')
text(10,47,'Plain','FontName',F,'FontSize',22,HA,'center')
text(45,47,'Bold','FontName',F,'Fontweight','bold','FontSize',22,HA,'center')
text(82,47,'Oblique','FontName',F,'FontAngle','oblique','FontSize',22,HA,'center')
for size=[22 18 14 12 11 10 9]
text(10,v,'Matlab','FontName',F,'FontSize',size,HA,'center')
text(45,v,'Matlab','FontName',F,'FontSize',size,HA,'center','FontWeight','bold')
text(82,v,'Matlab','FontName',F,'FontSize',size,HA,'center','FontAngle','oblique')
v = v-6;
end
end
% Script File: ShowSymbols close all plot([0 12 12 0 0],[0 0 12 12 0]) axis off text(6,10.5,'Math Symbols','FontSize',18,'HorizontalAlign','center') x = 1; x1 = x+.7; y = 4.6; y1 = y+.7; z = 9; z1 = z+.7; n = 12; text(y,9,'\leftarrow','Fontsize',n); text(y,8,'\rightarrow','Fontsize',n); text(y,7,'\uparrow','Fontsize',n) text(y,6,'\downarrow','Fontsize',n) text(y,5,'\Leftarrow','FontSize',n) text(y,4,'\Rightarrow','FontSize',n) text(y,3,'\Leftrightarrow','FontSize',n) text(y,2,'\partial','FontSize',n) text(x,9,'\neq','FontSize',n) text(x,8,'\geq','FontSize',n) text(x,7,'\approx','FontSize',n) text(x,6,'\equiv','Fontsize',n) text(x,5,'\cong','Fontsize',n) text(x,4,'\pm','Fontsize',n) text(x,3,'\nabla','FontSize',n) text(x,2,'\angle','FontSize',n) text(z,9,'\in','FontSize',n) text(z,8,'\subset','Fontsize',n) text(z,7,'\cup','Fontsize',n) text(z,6,'\cap','Fontsize',n) text(z,5,'\perp','FontSize',n) text(z,4,'\infty','FontSize',n) text(z,3,'\int','Fontsize',n) text(z,2,'\times','FontSize',n) text(y1,9,'\\leftarrow','Fontsize',n); text(y1,8,'\\rightarrow','Fontsize',n); text(y1,7,'\\uparrow','Fontsize',n) text(y1,6,'\\downarrow','Fontsize',n) text(y1,5,'\\Leftarrow','FontSize',n) text(y1,4,'\\Rightarrow','FontSize',n) text(y1,3,'\\Leftrightarrow','FontSize',n) text(y1,2,'\\partial','FontSize',n) text(x1,9,'\\neq','FontSize',n) text(x1,8,'\\geq','FontSize',n) text(x1,7,'\\approx','FontSize',n) text(x1,6,'\\equiv','Fontsize',n) text(x1,5,'\\cong','Fontsize',n) text(x1,4,'\\pm','Fontsize',n) text(x1,3,'\\nabla','FontSize',n) text(x1,2,'\\angle','FontSize',n) text(z1,9,'\\in','FontSize',n) text(z1,8,'\\subset','Fontsize',n) text(z1,7,'\\cup','Fontsize',n) text(z1,6,'\\cap','Fontsize',n) text(z1,5,'\\perp','FontSize',n) text(z1,4,'\\infty','FontSize',n) text(z1,3,'\\int','Fontsize',n) text(z1,2,'\\times','FontSize',n)
% Script File: ShowGreek close all plot([-1 12 12 -1 -1],[-1 -1 12 12 -1]) axis off text(4,10,'Greek Symbols','FontSize',18) x = 0; x1 = x+.7; y = 4; y1 = y+.7; z = 8; z1 = z+.7; n = 12; text(x,8,'\alpha','Fontsize',n); text(x,7,'\beta','Fontsize',n); text(x,6,'\gamma','Fontsize',n) text(x,5,'\delta','Fontsize',n) text(x,4,'\epsilon','FontSize',n) text(x,3,'\kappa','FontSize',n) text(x,2,'\lambda','Fontsize',n) text(x,1,'\mu','Fontsize',n) text(x,0,'\nu','Fontsize',n) text(x1,8,'\\alpha','Fontsize',n); text(x1,7,'\\beta','Fontsize',n); text(x1,6,'\\gamma','Fontsize',n) text(x1,5,'\\delta','Fontsize',n) text(x1,4,'\\epsilon','FontSize',n) text(x1,3,'\\kappa','FontSize',n) text(x1,2,'\\lambda','Fontsize',n) text(x1,1,'\\mu','Fontsize',n) text(x1,0,'\\nu','Fontsize',n) text(y,8,'\omega','Fontsize',n) text(y,7,'\phi','Fontsize',n) text(y,6,'\pi','FontSize',n) text(y,5,'\chi','Fontsize',n) text(y,4,'\psi','Fontsize',n) text(y,3,'\rho','FontSize',n) text(y,2,'\sigma','Fontsize',n) text(y,1,'\tau','FontSize',n) text(y,0,'\upsilon','FontSize',n) text(y1,8,'\\omega','Fontsize',n) text(y1,7,'\\phi','Fontsize',n) text(y1,6,'\\pi','FontSize',n) text(y1,5,'\\chi','Fontsize',n) text(y1,4,'\\psi','Fontsize',n) text(y1,3,'\\rho','FontSize',n) text(y1,2,'\\sigma','Fontsize',n) text(y1,1,'\\tau','FontSize',n) text(y1,0,'\\upsilon','FontSize',n) text(z,8,'\Sigma','FontSize',n) text(z,7,'\Pi','FontSize',n) text(z,6,'\Lambda','FontSize',n) text(z,5,'\Omega','FontSize',n) text(z,4,'\Gamma','FontSize',n) text(z1,8,'\\Sigma','FontSize',n) text(z1,7,'\\Pi','FontSize',n) text(z1,6,'\\Lambda','FontSize',n) text(z1,5,'\\Omega','FontSize',n) text(z1,4,'\\Gamma','FontSize',n)
% Script File: ShowText
close all
r = 1;
t = pi/6 + linspace(0,2*pi,7);
x = r*cos(t);
y = r*sin(t);
plot(x,y);
axis equal off
HA = 'HorizontalAlignment';
VA = 'VerticalAlignment';
text(x(1),y(1),'\leftarrow {\itP}_{1}', HA,'left','FontSize',14)
text(x(2),y(2),'\downarrow', HA,'center',VA,'baseline','FontSize',14)
text(x(2),y(2),'{ \itP}_{2}', HA,'left',VA,'bottom','FontSize',14)
text(x(3),y(3),'{\itP}_{3} \rightarrow', HA,'right','FontSize',14)
text(x(4),y(4),'{\itP}_{4} \rightarrow', HA,'right','FontSize',14)
text(x(5),y(5),'\uparrow', HA,'center',VA,'top','FontSize',14)
text(x(5),y(5),'{\itP}_{5} ', HA,'right',VA,'top','FontSize',14)
text(x(6),y(6),'\leftarrow {\itP}_{6}', HA,'left','FontSize',14)
text(0,1.4*r,'A Labeled Hexagon^{1}',HA,'center','FontSize',14)
text(0,-1.4*r,'^{1} A hexagon has six sides.',HA,'center','FontSize',10)
% Script File: ShowLineWidth
close all
plot([0 14 14 0 0],[0 0 14 14 0])
text(7,13,'LineWidth','FontSize',18,'HorizontalAlign','center')
axis off
hold on
for width=0:10
h = plot([3 12],[11-width 11-width]);
if width>0
set(h,'LineWidth',width)
text(1,11-width,sprintf('%3d',width),'FontSize',14)
else
text(1,11-width,'default','FontSize',14)
% Script File: ShowAxes
F = 'Times-Roman'; n = 12;
close all
t = linspace(0,2*pi); c = cos(t); s = sin(t);
plot(c,s)
axis([-1.3 1.3,-1.3 1.3])
axis equal
title('The Circle ({\itx-a})^{2} + ({\ity-b})^{2} = {\itr}^{2}','FontName',F,'FontSize',n)
xlabel('x','FontName',F,'FontSize',n)
ylabel('y','FontName',F,'FontSize',n)
set(gca,'XTick',[-.5 0 .5])
set(gca,'YTick',[-.5 0 .5])
grid on
% Script File: ShowLegend
close all
t = linspace(0,2);
axis([0 2 -1.5 1.5])
y1 = sin(t*pi);
y2 = cos(t*pi);
plot(t,y1,t,y2,'--',[0 .5 1 1.5 2],[0 0 0 0 0],'o')
set(gca,'XTick',[])
set(gca,'YTick',[0])
grid on
legend('sin(\pi t)','cos(\pi t)','roots',0)
% Script File: ShowColor
close all
plot([-1 16 16 -1 -1],[-3 -3 18 18 -3])
axis off
text(0.5,16.5,'Built-In Colors','FontSize',14)
text(9.5,16.5,'A Gradient','FontSize',14)
% The predefined colors.
x = [3 6 6 3 3];
y = [-.5 -.5 .5 .5 -.5];
hold on
fill(x,y,'c')
text(0,0,'cyan','FontSize',12)
fill(x,y+2,'m')
text(0,2,'magenta','FontSize',12)
fill(x,y+4,'y')
text(0,4,'yellow','FontSize',12)
fill(x,y+6,'r')
text(0,6,'red','FontSize',12)
fill(x,y+8,'g')
text(0,8,'green','FontSize',12)
fill(x,y+10,'b')
text(0,10,'blue','FontSize',12)
fill(x,y+12,'k')
text(0,12,'black','FontSize',12)
fill(x,y+14,'w')
text(0,14,'white','FontSize',12)
% Making your own colors.
a = -.5;
b = 14.5;
L = 11;
R = 15;
n = 100;
k=1;
for f = [.4 .6 .7 .8 .85 .90 .95 1]
color = [f 1 1];
text(x(1)+5,y(1)+(2*(k-1)),sprintf('[ %4.2f , %1d , %1d ]',f,1,1),'VerticalAlign','bottom')
fill(x+9,y+(2*(k-1)),color)
k = k+1;
end
hold off
function y = MyExpF(x,n) % y = MyExpF(x,n) % x is a scalar, n is a positive integer % and y = n-th order Taylor approximation to exp(x). y = 1; term = 1; for k = 1:n term = x*term/k; y = y + term; end
function y = MyExp1(x)
% y = MyExp1(x)
% x is a column n-vector and y is a column n-vector with the property that
% y(i) is a Taylor approximation to exp(x(i)) for i=1:n.
nTerms = 17;
n = length(x);
y = ones(n,1);
for i=1:n
y(i) = MyExpF(x(i),nTerms);
end
function y = MyExp2(x)
% y = MyExp2(x)
% x is an n-vector and y is an n-vector with with the same shape
% and the property that y(i) is a Taylor approximation to
% exp(x(i)) for i=1:n.
y = ones(size(x));
nTerms = 17;
term = ones(size(x));
for k=1:nTerms
term = x.*term/k;
y = y + term;
end
function y = MyExpW(x) % y = MyExpW(x) % x is a scalar and y is a Taylor approximation to exp(x). y = 0; term = 1; k=0; while abs(term) > eps*abs(y) k = k + 1; y = y + term; term = x*term/k; end
function y = MyExp3(x)
% y = MyExp3(x)
% x is a column n-vector and y is a column n-vector with the property that
% y(i) is a Taylor approximation to exp(x(i)) for i=1:n.
n = length(x);
y = ones(n,1);
for i=1:n
y(i) = MyExpW(x(i));
end
function y = MyExp4(x)
% y = MyExp4(x)
% x is an n-vector and y is an n-vector with the same shape and the
% property that y(i) is a Taylor approximation to exp(x(i)) for i=1:n.
y = zeros(size(x));
term = ones(size(x));
k = 0;
while any(abs(term) > eps*abs(y))
y = y + term;
k = k+1;
term = x.*term/k;
end
function [d,err] = Derivative(fname,a,delta,M2) % d = Derivative(fname,a,delta,M2); % fname a string that names a function f(x) whose derivative % at x = a is sought. delta is the absolute error associated with % an f-evaluation and M2 is an estimate of the second derivative % magnitude near a. d is an approximation to f'(a) and err is an estimate % of its absolute error. % % Usage: % [d,err] = Derivative(fname,a) % [d,err] = Derivative(fname,a,delta) % [d,err] = Derivative(fname,a,delta,M2) if nargin &= 3 % No derivative bound supplied, so assume the % second derivative bound is 1. M2 = 1; end if nargin == 2 % No function evaluation error supplied, so % set delta to eps. delta = eps; end % Compute optimum h and divided difference hopt = 2*sqrt(delta/M2); d = (feval(fname,a+hopt) - feval(fname,a))/hopt; err = 2*sqrt(delta*M2);
function y = sin10(x) y = sin(10*x);
function f = Represent(x)
% f = Represent(x)
% Yields a 3-digit mantissa floating point representation of f:
%
% f.mSignBit mantissa sign bit (0 if x>=0, 1 otherwise)
% f.m mantissa (= f.m(1)/10 + f.m(2)/100 + f.m(3)/1000)
% f.eSignBit the exponent sign bit (0 if exponent nonnegative, 1 otherwise)
% f.e the exponent (-9<=f.e<=9)
%
% If x is out side of [-.999*10^9,.999*10^9], f.m is set to inf.
% If x is in the range [-.100*10^-9,.100*10^-9] f is the representation of zero
% in which both sign bits are 0, e is zero, and m = [0 0 0].
f = struct('mSignBit',0,'m',[0 0 0],'eSignBit',0,'e',0);
if abs(x)<.100*10^-9
% Underflow. Return 0
return
end
if x>.999*10^9
% Overflow. Return inf
f.m = inf;
return
end
if x<-.999*10^9
% Overflow. Return -inf
f.mSignBit = 1;
f.m = inf;
return
end
% Set the mantissa sign bit
if x>0
f.mSignBit = 0;
else
f.mSignBit = 1;
end
% Determine m and e so .1 <= m < 1 and abs(x) = m*10^e
m = abs(x); e = 0;
while m >= 1, m = m/10; e = e+1; end
while m < 1/10,m = 10*m; e = e-1; end
% Determine nearest integer to 1000m
z = round(1000*m);
% Set the mantissa
f.m(1) = floor(z/100);
f.m(2) = floor((z - f.m(1)*100)/10);
f.m(3) = z - f.m(1)*100 - f.m(2)*10;
% Set the exponent and its sign bit.
if e>=0
f.eSignBit = 0;
f.e = e;
else
f.eSignBit = 1;
f.e = -e;
end
function x = Convert(f) % x = Convert(f) % f is a is a representation of a 3-digit floating point number. (For details % type help represent. x is the value of v. % Overflow situations if (f.m == inf) & (f.mSignBit==0) x = inf; return end if (f.m == inf) & (f.mSignBit==1) x = -inf; return end % Mantissa value mValue = (100*f.m(1) + 10*f.m(2) + f.m(3))/1000; if f.mSignBit==1 mValue = -mValue; end % Exponent value eValue = f.e; if f.eSignBit==1 eValue = -eValue; end x = mValue * 10^eValue;
function z = Float(x,y,op)
% z = Float(x,y,op)
% x and y are representations of a 3-digit floating point number. (For details
% type help represent.
% op is one of the strings '+', '-', '*', or '/'.
% z is the 3-digit floating point representation of x op y.
sx = num2str(convert(x));
sy = num2str(convert(y));
z = represent(eval(['(' sx ')' op '(' sy ')' ]));
function s = Pretty(f)
% s = Pretty(f)
% f is a is a representation of a 3-digit floating point number. (For details
% type help represent.
% s is a string so that disp(s) "pretty prints" the value of f.
if (f.m == inf) & (f.mSignBit==0)
s = 'inf';
elseif (f.m==inf) & (f.mSignBit==1)
s = '-inf';
else
% Convert the mantissa.
m = ['.' num2str(f.m(1)) num2str(f.m(2)) num2str(f.m(3))];
if f.mSignBit == 1
m = ['-' m];
end
% Convert the exponent.
e = num2str(f.e);
if f.eSignBit == 0
e = ['+' num2str(f.e)];
else
e = ['-' num2str(f.e)];
end
s = [m ' x 10^' e ];
end
function P = PadeArray(m,n)
% P = PadeArray(m,n)
% m and n are nonnegative integers.
% P is an (m+1)-by-(n+1) cell array.
%
% P{i,j} represents the (i-1,j-1) Pade approximation N(x)/D(x) to exp(x).
P = cell(m+1,n+1);
for i=1:m+1
for j=1:n+1
P{i,j} = PadeCoeff(i-1,j-1);
end
end
function R = PadeCoeff(p,q)
% R = PadeCoeff(p,q)
% p and q are nonnegative integers and R is a representation of the
% (p,q)-Pade approximation N(x)/D(x) to exp(x):
%
% R.num is a row (p+1)-vector whose entries are the coefficients of the
% p-degree numerator polynomial N(x).
%
% R.den is a row (q+1)-vector whose entries are the coefficients of the
% q-degree denominator polynomial D(x).
%
% Thus,
% R.num(1) + R.num(2)x + R.num(3)x^2
% ------------------------------------
% R.den(1) + R.den(2)x
%
% is the (2,1) Pade approximation.
a(1) = 1; for k=1:p, a(k+1) = a(k)*(p-k+1)/(k*(p+q-k+1)); end
b(1) = 1; for k=1:q, b(k+1) = -b(k)*(q-k+1)/(k*(p+q-k+1)); end
R = struct('num',a,'den',b);