美文网首页编程学习
Python Course homework 1

Python Course homework 1

作者: Wengsway | 来源:发表于2020-02-13 12:29 被阅读0次

    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 U is a bivariate uniform random variable on the unit square (0,1)^2, then the probability that U lies in a subset B of (0,1)^2 is equal to the area of B
    • If U1,…,Un are iid copies of U, then, as n gets large, the fraction that fall in B converges to the probability of landing in B
    • 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
    x_{t+1} = \alpha \, x_t + \epsilon_{t+1} \quad \text{where} \quad x_0 = 0 \quad \text{and} \quad t = 0,\ldots,T
    The sequence of shocks {ϵ_t} 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 calling show(), 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
    • 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()
    
    

    相关文章

      网友评论

        本文标题:Python Course homework 1

        本文链接:https://www.haomeiwen.com/subject/fnmkfhtx.html