代做AMATH 301, Winter 2025 Homework 5: Coding portion调试R程序
- 首页 >> OS编程Homework 5: Coding portion
AMATH 301, Winter 2025
1. Approximate the area under the curve etan(x) on −1 ≤ x ≤ 1 using:
(a) (2 points) Midpoint rule with N = 100 subdivisions. Call this value integral mid.
(b) (2 points) Trapezoid rule (for-loop or np.trapz) with N = 100 subdivisions. Call this value integral trapz.
(c) (2 points) Simpson’s rule with N = 100 subdivisions. Call this value integral simp.
2. The cost of one Bitcoin at close of trading for each month of 2024 was:
Month Cost
1/2024 $42, 582.61
2/2024 $61, 198.38
3/2024 $71, 333.65
4/2024 $60, 636.86
5/2024 $67, 491.41
6/2024 $62, 678.29
7/2024 $64, 619.25
8/2024 $58, 969.90
9/2024 $63, 329.50
10/2024 $70, 215.19
11/2024 $96, 449.05
12/2024 $93, 429.20
Let the cost of one Bitcoin be c(t), where t is months after 12/2023. Assume that each month is close enough to being the same length that we will consider each month as ∆t (in other words, do not account for the difference in number of days per month). Also, do not look up the data for any dates outside this range– just use the data provided.
If you don’t want to type out the numbers, you can load bitcoin.npy from Canvas which contains the 12 cost values above.
(a) (2 points) Use finite-difference formulas to approximate c′ (t), the change in Bitcoin price per month. Create a vector as a np.array object called cpvec that contains these values. Use the lowest-order possible: the second-order, centered formula for the interior points and the first-order, forward or backward formulas for the endpoints.
(b) (1 point) Repeat part (a) to find c′′ (t) and call the respective vector cp2vec.
(c) Include these lines at the end of your code to visualize these functions. Don’t forget import matplotlib.pyplot as plt at the top of your code. (Part (c) will not be checked by the auto- grader.)
plt.plot(tvec,cpvec,’-ro’,label=’c\’(t) [$/month]’)
plt.plot(tvec,cp2vec,’-bo’,label=’c\’\’(t) [$/month^2]’)
plt.legend()
plt.xlabel(’month of 2024’)
3. (5 points) Approximate the volume of the 3-dimensional region below the paraboloid z = 1 — x2 — y2 , above the plane z = 0, and outside the cylinder (x — 1)2 + (y — 1)2 = 1. Do this by creating a function f(x,y) which returns 1 — x2 — y2 for any (x,y) that lies within the shape (consider a top-down view onto the z = 0 plane), and zero otherwise. Then use scipy .integrate .dblquad to integrate f(x,y) over a rectangular domain in x and y that is large enough to encompass the entire shape. Don’t forget import scipy .integrate at the top of your code. Store the result in a variable named volume.
Interactive visualization of #3
4. The second-order, centered finite-difference formula for the derivative is:
while the fourth-order, centered finite-difference formula for the derivative is:
Let f(t) = e1/t.
(a) (0.5 points) Find f′ (2) by hand. Store this value as a variable named derivtrue.
(b) (0.5 points) Next, let dtvec be a 1D np.array object containing the values 2/1, 4/1, ..., 2-10 (note: decreasing order).
(c) (2.5 points) Approximate f′ (2) using the second-order, centered finite-difference formula for each value of ∆t in dtvec. Calculate the natural logarithm of the relative error of each result, and save those in a 1D np.array object named logrelerr2o.
(d) (2.5 points) Repeat part (c) but using the fourth-order formula. Save those in a 1D np.array object named logrelerr4o.
(e) Include these lines at the end of your code to see how quickly the relative error decreases as the step size ∆t decreases for both formulas on a log-log plot. Don’t forget import matplotlib.pyplot as plt at the top of your code. (Part (e) will not be checked by the autograder.)
plt.plot(np.log(dtvec),logrelerr2o,’-bo’,label=’2nd order FD’)
plt.plot(np.log(dtvec),logrelerr4o,’-go’,label=’4th order FD’)
plt.legend()
plt.xlabel(’log(dt)’)
plt.ylabel(’log(relative error)’)