HW 7
HW 7
HW 7
• Unless otherwise indicated, you may assume that each function will be given the correct number of inputs
and that those inputs have the correct dimensions. For example, if the input is stated to be three row
vectors of four elements each, your function is not required to determine whether the input consists of
three two-dimensional arrays, each with one row and four columns.
• Unless otherwise indicated, your function should not print anything to the Command Window, but your
function will not be counted incorrect if it does.
• Note that you are not required to use the suggested names of input variables and output variables, but you
must use the specified function names.
• Also, read the instructions on the web page on how to test your functions with the auto-grader program
provided, and what to submit to Coursera to get credit.
• Note that starred problems, marked by ***, are harder than usual, so do not get discouraged if you have
difficulty solving them.
• You need MATLAB r2012a or newer or MATLAB Online to run the grader! Older versions are not supported.
1. Write a function called integerize that takes as its input a matrix A of integers of type
double, and returns the name of the “smallest” signed integer class to which A can be
converted without loss of information. If no such class exists, the text 'NONE' is returned. For
example, if the smallest element of A is -100 and the largest is +100, then the function would
return 'int8'. As another example, if there is an element of A equal to -1e20, then the
function would return 'NONE'.
2. Write a function called year2016 that returns a row-vector of struct-s whose elements
correspond to the days of a month in 2016 as specified by the input argument. If the input is
not an integer between 1 and 12, the function returns the empty array. Each struct should
contain three fields with these (exact) field names: “month”, “date”, and “day” (all lower case).
• The month field must contain a string with the name of the month (first letter capitalized).
• The date field must contain a scalar specifying the day of the month.
• The day field must contain the three-letter abbreviation of the day chosen from this list:
'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'.
For example, here is a call of the function followed by a command that shows the seventh
element of the struct array that is returned by the function:
>> m = year2016(2);
>> m(7)
ans =
month: 'February'
date: 7
day: 'Sun'
2
Fitzpatrick and Ledeczi Introduction to Programming with MATLAB Vanderbilt University
8. Write the function find_zero that is defined like
this function x = find_zero(f,x1,x2).
The first input argument is special. It is a “function
handle”. A function handle is gotten by typing @
and the name of any function. For example, x1
x = find_zero(@sin,-1,1) will give f the
function handle for MATLAB’s built-in sin x2
function. Then, inside find_zero, the statement
y = f(-1) would set y = sin(-1). Note that
the @ sign is not used inside the function. Only the
caller uses it. All other arguments to find_zero
are scalar numbers, and x1 is less than x2. The
goal of the function is to find an x that lies in the range from x1 to x2 such that after the command,
y = f(x), is executed inside the function find_zero, y is approximately zero as defined by
abs(y) < 1e-10. All you know about the function f is that it has one scalar input and one scalar
output, and a plot of its values crosses the x-axis exactly once between x1 and x2, as, for example, in
the figure. It is the responsibility of the caller to call the function with arguments that obey these rules.
Here are two sample runs:
>> find_zero(@sin,-2.5,2.3) % as shown in the figure
ans =
-6.4000e-11
>> format long
>> find_zero(@cos,-2,1.3)
ans =
-1.570796326871000
Note that you are not allowed to use the built-in function fzero. Hint: you may want to check the
value of the function halfway between x1 and x2 and decide what to do next based on that.
3
Fitzpatrick and Ledeczi Introduction to Programming with MATLAB Vanderbilt University