Please answer the following questions in complete sentences in a clearly prepared manuscript and submit the solution by the due date on Gradescope (Due morning of Nov 6.)
Remember that this is a graduate class. There may be elements of the problem statements that require you to fill in appropriate assumptions. You are also responsible for determining what evidence to include. An answer alone is rarely sufficient, but neither is an overly verbose description required. Use your judgement to focus your discussion on the most interesting pieces. The answer to "should I include 'something' in my solution?" will almost always be: Yes, if you think it helps support your answer.
Please identify anyone, whether or not they are in the class, with whom you discussed your homework. This problem is worth 1 point, but on a multiplicative scale.
Make sure you have included your source-code and prepared your solution according to the most recent Piazza note on homework submissions.
Let be an elementary matrix of the form . Starting from the vectors , scalar , and matrix . Show how many addition and multiplication operations it takes to compute , assume that is and is . You may lose points if your count is not .
Consider computing where and are in compressed sparse column format
and have the same dimensions. Suppose we have access to a fused multiply add operation. This is an
operation that takes three inputs and computes
in a single operation. Explain how to use
this operation when computing the trace and compute how much such operations you need
along with any other floating point operations (additions, multiplications, divisions, etc. )
Find a proof that computing is backwards stable. Explain this proof in enough detail for a classmate to understand it without having read the document. This could take up to a page to give enough detail.
Show that computing a matrix-vector product is backwards stable.
Consider a list of numbers. For simplicity, assume that all numbers are positive so you don't have to write a lot of absolute values.
Show that the following algorithm is backwards stable.
function mysum(x::Vector{Float64})
s = zero(Float64)
for i=1:length(x)
s += x[i]
end
return s
end
Which requires showing that where where is the unit-roundoff for Float64. (You may want to solve problem 2 first.)
Consider adding three positive numbers together . Describe how to compute with the greatest accuracy.
Use the results of part 2 to describe a way to permute the input
to mysum
to attain the greatest accuracy. Find an input vector
where this new ordering gives a measurable change in the floating point accuracy
as determined by the number of correct digits in the mantissa. (Hint, this means
you should know the true sum of your vector so that you can identify it's best
floating point representation.)
Lookup the Kahan summation algorithm and implement it to sum a vector. Compare the accuracy with what you found in part 3.
Read through the stack exchange post on solving quadratic equations. https://math.stackexchange.com/questions/311382/solving-a-quadratic-equation-with-precision-when-using-floating-point-variables
This suggests a number of approaches to compute the roots of a quadratic equation through closed form solutions.
An alternative approach is to use an iterative algorithm to estimate that root of an equation. In this case, we can use a simple bisection approach, which works quite nicely for finding the root.
Your task for this problem is to implement a bisection algorithm to return all the solutions of when .
""" Return all the solutions to ax^2 + bx + c. It is acceptable to return
NaN instead of a root as well. """
function roots(a::Float32,b::Float32,c::Float32)
end
The input to this method is Float32 so you can compare to higher-accuracy solutions with Float64 and to elucidate some of the issues that arise with slightly lower-precision.
Compare the accuracy of this procedure to the methods suggested on the stack exchange page and explain your results. Note that you may need to look for extremal inputs. In this case, Float32 is handy because there are only 4 billion inputs for each input value . This is still too many to test all combinations. But there are only two choices for the roots, which greatly reduces the space.
Consider the following computations. Discuss if they are well-conditioned or ill-conditioned. If the answer depends on the types of input, please provide some rough guidance. (e.g. for subtraction, it's ill-conditioned if the numbers are close by)
The entropy of a probability distribution is where . Compute the condition number of the entropy function.
A matrix vector product .
Evaluating a neural network layer where the elements are and the soft-plus function and is an orthogonal matrix
Produce the analytic SVDs of the following matrices. (That is, no numerical approximations, but feel free to let Julia give you a good guess!). It's important to think about these questions because I may give similar questions on a midterm or final and you'll be expected to remember these. It's also handy to think about how to construct these, even though we haven't seen any algorithms yet. You should be able to work them all out directly from the definition.
Let . Suppose you have an algorithm where where is the machine precision. Is backwards stable?
Suppose that you have a fancy implementation of and you compute . Is this a backwards stable implementation?
Show that measures the relative distance from to the space of singular matrices. That is Everything here involves the matrix 2-norm.