Week 7: Class Exercise solutions

Exercise: Solving roots using Newton-Raphson’s method

def f(x):
    return (x ** 4) - (4 * x ** 3) - (2 * x ** 2) + (12 * x) - 3

def f_prime(x):
    return (4 * x ** 3) - (12 * x ** 2) - (4 * x) + 12

def find_root_nr(x0):
    # Define tolerance
    tol = 1e-7

    # Initialize relative error to a big number
    rerr = 500

    # Initialize xn as x0
    xn = x0

    while rerr > tol:
        # Implement the given formula
        xn1 = xn - f(xn)/f_prime(xn)

        # Update relative error and xn for the next iteration
        rerr = abs(xn1 - xn)
        xn = xn1

    # Return xn after exiting the loop
    return xn

for i in [-2, 0, 2, 4]:
    print(find_root_nr(i))

Exercise: Solving optimization problems with scipy

Part A

def calc_profit(x):
    customers = -1000 *x + 2000
    cost = customers * 0.5
    revenue = customers * x
    profit = revenue - cost
    return profit

def obj_fun(x):
    return -calc_profit(x)

res = minimize_scalar(fun=obj_fun)
print(res)

Should give the following output:

    fun: -562.5
   nfev: 9
    nit: 5
success: True
      x: 1.25

Part B

def calc_profit_new_loc(x):
    customers = -1000 *x + 4000
    cost = customers * 2 + 20
    revenue = customers * x
    profit = revenue - cost
    return profit

def obj_fun_new_loc(x):
    return -calc_profit_new_loc(x)

res = minimize_scalar(fun=obj_fun_new_loc)
print(res)

Should give the following output:

    fun: -980.0
   nfev: 10
    nit: 4
success: True
      x: 3.0

Thus, answer is yes, worth it to move. Daily optimal profit of RM 980.00 at new location vs RM 562.50 at current location.