2018年10月31日,老文章
Exercise 1
Recall that n!n! is read as “nn factorial” and defined as n!=n×(n−1)×⋯×2×1n!=n×(n−1)×⋯×2×1
There are functions to compute this in various modules, but let’s write our own version as an exercise
In particular, write a function factorial
such that factorial(n)
returns n!n! for any positive integer n
# -*- coding: utf-8 -*-
"""
Created on Tue Oct 16 23:01:45 2018
@author: Wengsway
"""
def factorial(n):
if n < 2:
return 1
else:
return n*factorial(n-1)
n = int(input('please input any positive integer:'))
print(factorial(n))
Exercise 2
The binomial random variable Y∼Bin(n,p)Y∼Bin(n,p) represents the number of successes in nn binary trials, where each trial succeeds with probability pp
Without any import besides from numpy.random import uniform
, write a function binomial_rv
such that binomial_rv(n, p)
generates one draw of YY
Hint: If UU is uniform on (0,1)(0,1) and p∈(0,1)p∈(0,1), then the expression U < p
evaluates to True
with probability p
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 17 18:26:42 2018
@author: Wengsway
"""
import numpy as np
def factorial(n):
if n < 2:
return 1
else:
return n*factorial(n-1)
u = np.random.normal(0,1)
N = int(input("Please input the N value:"))
def binomial_rv(n,p):
y = p**n * (1-p)**(N-n) * factorial(N)/(factorial(n) * factorial(N-n))
return y
n = int(input("Please input the n value:"))
p = float(input("Please input the p value:"))
print(binomial_rv(n,p))
Exercise 3
Compute an approximation to ππ using Monte Carlo. Use no imports besides
import numpy as np
Your hints are as follows:
- If is a bivariate uniform random variable on the unit square , then the probability that lies in a subset of is equal to the area of
- If U1,…,Un are iid copies of , then, as gets large, the fraction that fall in converges to the probability of landing in
- For a circle, area = pi * radius^2
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 17 10:23:25 2018
@author: Wengsway
"""
import numpy as np
frequency = 0
numbers = int(input("Please input the number of times:"))
for i in range(1, numbers):
x, y = np.random.uniform(0,1), np.random.uniform(0,1)
area = np.sqrt(x**2 + y**2)
if area <= 1.0:
frequency = frequency + 1
pi = 4 * (frequency/numbers)
print(pi)
Exercise 4
Write a program that prints one realization of the following random device:
- Flip an unbiased coin 10 times
- If 3 consecutive heads occur one or more times within this sequence, pay one dollar
- If not, pay nothing
Use no import besides from numpy.random import uniform
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 17 12:25:01 2018
@author: Wengsway
"""
from numpy.random import randint
x = randint(0,2,10).tolist()
j = 0
for i in range(len(x)-2):
if x[i] == 1 and x[i+1] == 1 and x[i+2] == 1:
j = j + 1
if j >= 1:
print("You pay one dollar!")
else:
print("You pay nothing!")
Exercise 5
Your next task is to simulate and plot the correlated time series
The sequence of shocks {} is assumed to be iid and standard normal
In your solution, restrict your import statements to
import numpy as np
import matplotlib.pyplot as plt
Set T=200 and α=0.9
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 17 10:50:23 2018
@author: Wengsway
"""
import numpy as np
import matplotlib.pyplot as plt
def timeseries(α,T):
x = [0]
ε = np.random.randn(T)
for t in range(T):
x.append(α*x[t-1]+ε[t])
return x
T = int(input('Please input the T:'))
α = float(input('Please input the α:'))
plt.figure(figsize=(10,5))
plt.plot(timeseries(α,T+1),color = 'Hotpink',label = 'x')
plt.legend()
Exercise 6
To do the next exercise, you will need to know how to produce a plot legend
The following example should be sufficient to convey the idea
import numpy as np
import matplotlib.pyplot as plt
x = [np.random.randn() for i in range(100)]
plt.plot(x, label="white noise")
plt.legend()
plt.show()
Now, starting with your solution to exercise 5, plot three simulated time series, one for each of the cases α=0, α=0.8 and α=0.98
In particular, you should produce (modulo randomness) a figure that looks as follows
not found
(The figure nicely illustrates how time series with the same one-step-ahead conditional volatilities, as these three processes have, can have very different unconditional volatilities.)
Use a for
loop to step through the αα values
Important hints:
- If you call the
plot()
function multiple times before callingshow()
, all of the lines you produce will end up on the same figure- And if you omit the argument
'b-'
to the plot function, Matplotlib will automatically select different colors for each line
- And if you omit the argument
- The expression
'foo' + str(42)
evaluates to'foo42'
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 17 12:14:49 2018
@author: Wengsway
"""
import numpy as np
import matplotlib.pyplot as plt
def timeseries(α,T):
x = [0]
ε = np.random.randn(T)
for t in range(T):
x.append(α*x[t-1]+ε[t])
return x
T = int(input('Please input the T:'))
for i in range(3):
α = float(input('Please input the α:'))
plt.figure(figsize=(10,5))
plt.plot(timeseries(α,T+1),color = 'r',label = 'x')
plt.legend()
plt.show()
网友评论