#!/usr/bin/env python
# coding: utf-8
# ## Homework 1
# This is due on Thurs, 6/1
# 1. Consider the polynomial $p(x) = (x-2)^9 = x^9 - 18x^8 + 144x^7 - 672x^6 + 2016x^5 - 4032x^4 + 5376x^3 - 4608x^2 + 2304x - 512$
#
# a. Plot $p(x)$ for $x=1.920,\,1.921,\,1.922,\ldots,2.080$ evaluating $p$ via its coefficients $1,\,,-18,\,144,\ldots$
#
# b. Plot the same plot again, now evaluating $p$ via the expression $(x-2)^9$.
#
# c. Explain the difference.
#
# *(The numpy method linspace will be useful for this)*
# 2\. How many different double-precision numbers are there? Express your answer using powers of 2
# 3\. Using the updated [Numbers Every Programmer Should Know](https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html), how much longer does a main memory reference take than an L1 cache look-up? How much longer does a disk seek take than a main memory reference?
# 4\. From the Halide Video, what are 4 ways to traverse a 2d array?
# 5\. Using the animations below ([source](https://www.youtube.com/watch?v=3uiEyEKji0M)), explain what the benefits and pitfalls of each approach. Green squares indicate that a value is being read; red indicates a value is being written. Your answers should be longer in length (give more detail) than just two words.
#
# a.
#
# b.
#
# c.
# 6\. Prove that if $A = Q B Q^T$ for some orthnogonal matrix $Q$, the $A$ and $B$ have the same singular values.
# 7\. What is the *stochastic* part of *stochastic gradient descent*?