Essentials of MATLAB Programming 3rd Edition Chapman Solutions Manual Download
Essentials of MATLAB Programming 3rd Edition Chapman Solutions Manual Download
https://testbankfan.com/product/essentials-of-matlab-
programming-3rd-edition-chapman-solutions-manual/
https://testbankfan.com/product/matlab-programming-for-
engineers-5th-edition-chapman-solutions-manual/
https://testbankfan.com/product/matlab-programming-with-
applications-for-engineers-1st-edition-chapman-solutions-manual/
https://testbankfan.com/product/introduction-to-matlab-3rd-
edition-etter-solutions-manual/
https://testbankfan.com/product/introduction-to-matlab-
programming-and-numerical-methods-for-engineers-1st-edition-
siauw-solutions-manual/
Matlab A Practical Introduction to Programming and
Problem Solving 4th Edition Attaway Solutions Manual
https://testbankfan.com/product/matlab-a-practical-introduction-
to-programming-and-problem-solving-4th-edition-attaway-solutions-
manual/
https://testbankfan.com/product/matlab-a-practical-introduction-
to-programming-and-problem-solving-5th-edition-attaway-solutions-
manual/
https://testbankfan.com/product/engineers-guide-to-matlab-3rd-
edition-magrab-solutions-manual/
https://testbankfan.com/product/digital-signal-processing-using-
matlab-3rd-edition-schilling-solutions-manual/
https://testbankfan.com/product/essentials-of-economics-3rd-
edition-krugman-solutions-manual/
6. Basic User-Defined Functions
6.1 Script files are just collections of MATLAB statements that are stored in a file. When a script file is
executed, the result is the same as it would be if all of the commands had been typed directly into
the Command Window. Script files share the Command Window’s workspace, so any variables that
were defined before the script file starts are visible to the script file, and any variables created by the
script file remain in the workspace after the script file finishes executing. A script file has no input
arguments and returns no results, but script files can communicate with other script files through the
data left behind in the workspace.
In contrast, MATLAB functions are a special type of M-file that run in their own independent
workspace. They receive input data through an input argument list, and return results to the caller
through an output argument list.
6.2 MATLAB programs communicate with their functions using a pass-by-value scheme. When a
function call occurs, MATLAB makes a copy of the actual arguments and passes them to the
function. This copying is very significant, because it means that even if the function modifies the
input arguments, it won’t affect the original data in the caller. Similarly, the returned values are
calculated by the function and copied into the return variables in the calling program.
6.3 The principal advantage of the pass-by-value scheme is that any changes to input arguments within a
function will not affect the input arguments in the calling program. This, along with the separate
workspace for the function, eliminates unintended side effects. The disadvantage is that copying
arguments, especially large arrays, can take time and memory.
6.4 A function to sort arrays in ascending or descending order, depending on the second calling
parameter, is shown below:
% Define variables:
% a -- Input array to sort
% ii -- Index variable
% iptr -- Pointer to min value
% jj -- Index variable
% nvals -- Number of values in "a"
% out -- Sorted output array
% temp -- Temp variable for swapping
129
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
if sort_up
else
end
130
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% iptr now points to the min/max value, so swap a(iptr)
% with a(ii) if ii ~= iptr.
if ii ~= iptr
temp = a(ii);
a(ii) = a(iptr);
a(iptr) = temp;
end
end
% Preallocate array
array = zeros(1,nvals);
end
131
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Display the sorted result.
fprintf('\nSorted data in ascending order:\n');
for ii = 1:nvals
fprintf(' %8.4f\n',sorted1(ii));
end
» test_ssort1
Enter number of values to sort: 6
Enter value 1: -3
Enter value 2: 5
Enter value 3: 2
Enter value 4: 2
Enter value 5: 0
Enter value 6: 1
132
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
2.0000
5.0000
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = sin(pi/180*x);
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
133
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Calculate value
out = cos(pi/180*x);
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = tan(pi/180*x);
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = 180/pi * asin(x);
% Record of revisions:
134
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = 180/pi * acos(x);
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = 180/pi * atan(x);
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
% Calculate value
out = 180/pi * atan2(y,x);
135
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Script file: test_functions.m
%
% Purpose:
% To perform a median filter on an input data set.
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/03/15 S. J. Chapman Original code
%
% Define variables:
% ii -- Loop index
% filename -- Input data file
% n_ave -- Number of points to average
% n_per_side -- Number of points to average per side
% n_points -- Number of points in data set
% slope -- Slope of the line
% x -- Array of input values
% y -- Array of filtered values
% Set the angle theta = 30 degrees, and try the forward trig functions
disp(' ');
disp(['Testing forward trig functions:']);
disp(['sind(30) = ' num2str(sind(30))]);
disp(['cosd(30) = ' num2str(cosd(30))]);
disp(['tand(30) = ' num2str(tand(30))]);
disp(['sind(45) = ' num2str(sind(45))]);
disp(['cosd(45) = ' num2str(cosd(45))]);
disp(['tand(45) = ' num2str(tand(45))]);
% Test atan2d
disp(' ');
disp(['Testing atan2d:']);
disp(['atan2d(4,3) = ' num2str(atan2d(4,3))]);
>> test_functions
136
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
This program tests the trig functions that return answers in degrees.
Testing atan2d:
atan2d(4,3) = 53.1301
% Define variables:
% deg_f -- Input in degrees Fahrenheit
% deg_c -- Output in degrees Celsius
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Calculate value
deg_c = 5/9 * (deg_f - 32);
We can test this function using the freezing and boiling points of water:
>> f_to_c(32)
ans =
0
>> f_to_c(212)
137
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
ans =
100
% Define variables:
% deg_c -- Input in degrees Celsius
% deg_f -- Output in degrees Fahrenheit
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Calculate value
deg_f = 9/5 * deg_c + 32;
We can test this function using the freezing and boiling points of water:
>> f_to_f(0)
ans =
100
>> c_to_f(100)
ans =
0
We can also show that c_to_f and f_to_c are the inverses of each other:
>> f_to_c(c_to_f(30))
ans =
30
6.8 A function to calculate the area of a triangle specified by the locations of its three vertices is shown
below:
138
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Define variables:
% x1, y1 -- Location of vertex 1
% x2, y2 -- Location of vertex 2
% x3, y3 -- Location of vertex 3
% area -- Area of triangle
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Calculate value
area = 0.5 * (x1*(y2-y3) - x2*(y1-y3) + x3*(y1-y2));
6.9 At this point in our studies, there is no general way to support an arbitrary number of arguments in a
function. Function nargin allows a developer to know how many arguments are used in a
function call, but only up to the number of arguments in the calling sequence1. We will design this
function to support up to 6 vertices. The corresponding function is shown below:
function area = area_polygon(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)
%AREA_POLYGON Calculate the area of a polygon specified by its vertices
% Function AREA_POLYGON calculates the area of a polygon specified by
% its vertices
%
% Calling sequence:
% area = area_polygon(x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6)
% Define variables:
% ii -- Loop index
% n_vertices -- Number of vetices in polygon
% x1, y1 -- Location of vertex 1
% x2, y2 -- Location of vertex 2
% x3, y3 -- Location of vertex 3
% x4, y4 -- Location of vertex 4
% x5, y5 -- Location of vertex 5
% x6, y6 -- Location of vertex 6
% area -- Area of polygon
% Record of revisions:
% Date Programmer Description of change
1 Later we will learn about function varargin, which can support any number of arguments.
139
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Save values
x(1) = x1;
y(1) = y1;
x(2) = x2;
y(2) = y2;
x(3) = x3;
y(3) = y3;
if n_vertices >= 4
x(4) = x4;
y(4) = y4;
end
if n_vertices >= 5
x(5) = x5;
y(5) = y5;
end
if n_vertices >= 6
x(6) = x6;
y(6) = y6;
end
We can test this function using the specified point (0,0), (10,0), (10,10), and (0, 10), which
corresponds to a square with all sides having length 10:
We can test this function using the points specified in the problem:
140
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
area =
100.00
>> area = area_polygon(10,0,8,8,2,10,-4,5)
area =
43.00
6.10 A function to calculate the inductance of a single-phase two-wire transmission line is shown below:
% Define variables:
% ind_per_m -- Inductance per meter
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Constants
mu0 = pi * 4e-7; % H/m
We can test this function using the points specified in the problem:
6.11 If the diameter of a transmission line’s conductors increase, the inductance of the line will decrease.
If the diameter of the conductors are doubled, the inductance will fall to:
141
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
0.1550
6.12 A function to calculate the capacitance of a single-phase two-wire transmission line is shown below:
% Define variables:
% cap_per_m -- Capacitance per meter
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
% Constants
e0 = pi * 4e-7; % F/m
We can test this function using the points specified in the problem:
6.13 If the distance between the two conductors increases, the inductance of the transmission line
increases and the capacitance of the transmission line decreases.
6.14 A program to compare the sorting times using the selection sort of Example 6.2 and MATLAB’s
built-in sort is shown below:
142
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% To compare the sort function from Example 6.2 and the
% built-in MATLAB sort
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/05/15 S. J. Chapman Original code
%
% Define variables:
% data1 -- Array to sort
% data2 -- Copy of array to sort
% elapsed_time1 -- Elapsed time for ssort
% elapsed_time2 -- Elapsed time for sort
% Constants
SIZE = 100000; % Number of values to sort
% Set seed
seed(123456);
>> compare_sorts
Sort time using ssort = 71.2407
Sort time using sort = 0.0060984
The built-in sorting function is dramatically faster than the selection sort of Example 6.2.
6.15 A program to compare the sorting times using the selection sort of Example 6.2 and MATLAB’s
built-in sort is shown below.
143
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% To compare the sort function from Example 6.2 and the
% built-in MATLAB sort
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 07/04/11 S. J. Chapman Original code
%
% Define variables:
% data1 -- Array to sort
% data2 -- Copy of array to sort
% elapsed_time1 -- Elapsed time for ssort
% elapsed_time2 -- Elapsed time for sort
% Set seed
seed(123456);
144
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Display the relative times
disp(['Sort time for ' int2str(nsamp) ' using ssort = ' num2str(elapsed_time1)]);
disp(['Sort time for ' int2str(nsamp) ' using sort = ' num2str(elapsed_time2)]);
The built-in sorting function is dramatically faster than the selection sort of Example 6.2.
>> compare_sorts
Sort time for 10000 using ssort = 0.71161
Sort time for 10000 using sort = 0.000634
Sort time for 100000 using ssort = 70.9728
Sort time for 100000 using sort = 0.0036683
Sort time for 200000 using ssort = 286.6228
Sort time for 200000 using sort = 0.006115
The time for the selection sort is increasing roughly as the square of the number of samples being
sorted. For example, it takes 71 s for 100,000 samples, and 287 s for 200,000 samples. The number
of samples doubles, and the time goes up as 22. The MATLAB sort time increases much more
slowly.
6.16 A modified version of function random0 that can accept 0, 1, or 2 arguments is shown below:
% Define variables:
% ii -- Index variable
% ISEED -- Random number seed (global)
145
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% jj -- Index variable
% m -- Number of columns
% msg -- Error message
% n -- Number of rows
% ran -- Output array
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 02/04/14 S. J. Chapman Original code
% 1. 04/05/15 S. J. Chapman Modified for 0 arguments
6.17 Function random0 has a bug under some conditions. If the global variable ISEED has not been
previously defined when random0 is executed, the program will crash. This problem occurs the
first time only that random0 is executed in a given MATLAB session, if function seed is not
called first. A simple way to avoid this problem would be to detect if ISEED is undefined, and to
supply a default value. Otherwise, the function should use the global seed supplied. A modified
version of random0 that fixes this bug is shown below:
146
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% random0(n,m) -- Generate an n x m array
% Define variables:
% ii -- Index variable
% ISEED -- Random number seed (global)
% jj -- Index variable
% m -- Number of columns
% msg -- Error message
% n -- Number of rows
% ran -- Output array
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 02/04/14 S. J. Chapman Original code
% 1. 04/05/15 S. J. Chapman Modified to provide initial seed
6.18 A function dice to simulate the roll of a fair die is shown below:
147
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% Define variables:
% result -- Resulting integer
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/06/15 S. J. Chapman Original code
% Initial values
result = zeros(1,100000);
for ii = 1:100000;
result(ii) = dice;
end
148
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
xlabel('\bfValue');
ylabel('\bfCount');
» test_dice
The first 30 values are:
3 1 4 6 6 4 4 4 1 6 6 4 1 2 1 3 2 6 1 2 2 6 6 5 6 3 1 6 1 5
The resulting histogram is shown below. The histogram shows that each integer between 1 and 6 is
about equally likely to occur.
6.19 A function to calculate a probability from the Poisson distribution is shown below:
% Define variables:
% fact -- k! (k-factorial)
% result -- Resulting value from distribution
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
149
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% 04/06/15 S. J. Chapman Original code
% Calculate k!
fact = factorial(k);
A program that uses function poisson to calculate the probability of a specific number of cars
passing a point on a highway in a given period of time is shown below:
% Display results
disp(['The probability of k cars passing in ' num2str(t) ' minutes is:']);
for k = 0:5
fprintf(' %3d %12.7f\n',k,prob(k+1));
end
150
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
xlabel('\bfValue');
ylabel('\bfProbability');
When this program is executed, the results are as shown below. Note that the plot of the probability
distribution uses discrete points instead of a continuous line, since the probabilities are only defined
for the integer values k = 0, 1, 2, 3, … (we can’t have 1.2 cars go by!). This plot can also be
represented as a bar chart, once we learn how to create them in Chapter 6.
>> traffic
Enter expected number of cars/minute: 1.6
Enter period of time in minutes: 1
The probability of k cars passing in 1 minutes is:
0 0.2018965
1 0.3230344
2 0.2584275
3 0.1378280
4 0.0551312
5 0.0176420
6.20 Functions to calculate the hyperbolic sine, cosine, and tangent functions are shown below:
% Record of revisions:
% Date Programmer Description of change
151
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% ==== ========== =====================
% 04/06/15 S. J. Chapman Original code
% Calculate value
out = (exp(x) - exp(-x))/2;
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/06/15 S. J. Chapman Original code
% Calculate value
out = (exp(x) + exp(-x))/2;
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 07/12/11 S. J. Chapman Original code
% Calculate value
out = (exp(x) - exp(-x)) ./ (exp(x) + exp(-x));
A script file to plot the hyperbolic sine, cosine, and tangent functions are shown below:
152
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
% To plot the hyperbolic functions sinh, cosh, abd tanh.
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/06/15 S. J. Chapman Original code
%
% Define variables:
% out_cosh -- Hyperbolic cosine
% out_sinh -- Hyperbolic sine
% out_tanh -- Hyperbolic tangent
% Calculate results
x = -5:0.05:5;
out_cosh = cosh1(x);
out_sinh = sinh1(x);
out_tanh = tanh1(x);
% Display results
figure(1);
plot(x,out_cosh);
title('\bfHyperbolic cosine');
xlabel('\bfx');
ylabel('\bfcosh(x)');
grid on;
figure(2);
plot(x,out_sinh);
title('\bfHyperbolic sine');
xlabel('\bfx');
ylabel('\bfsinh(x)');
grid on;
figure(3);
plot(x,out_cosh);
title('\bfHyperbolic tangent');
xlabel('\bfx');
ylabel('\bftanh(x)');
grid on;
153
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
154
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
6.21 A function to smooth a noisy data set with a running average filter is shown below.
function y = running_ave(x,n_ave)
%RUNNING_AVE Function to perform a running average filter
% Function RUNNING_AVE performs a running average filter
%
% Calling sequence:
% y = running_ave(x, n_ave)
%
% where:
% n_ave -- Number of points to average
% x -- Array of input values
% y -- Array of filtered values
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/08/15 S. J. Chapman Original code
155
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
error(msg);
end
156
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
filename = input('Enter the filename containing the data: ','s');
n_ave = input('Enter the number of samples to average: ');
>> test_running_ave
This program performs a running average filter on an
input data set.
Enter the filename containing the data: input3.dat
Enter the number of samples to average: 7
157
© 2018 Cengage Learning®. All Rights Reserved. May not be scanned, copied or duplicated, or posted to a publicly accessible website, in whole or in part.
6.22 A function to smooth a noisy data set with a median filter is shown below.
function y = median_filter(x,n_ave)
%RUNNING_AVE Function to perform a median filter
% Function RUNNING_AVE performs a median filter
%
% Calling sequence:
% y = median_filter(x, n_ave)
%
% where:
% n_ave -- Number of points to average
% x -- Array of input values
% y -- Array of filtered values
% Record of revisions:
% Date Programmer Description of change
% ==== ========== =====================
% 04/08/15 S. J. Chapman Original code