Code:
Exercise 10.1: Least squares
import scipy
import numpy as np
from scipy.optimize import minimize
def error(x0, A, b):
return np.linalg.norm(np.dot(A, x0) - b, ord = 2)
m = 15
n = 10
A = np.random.randint(1, 10, (m, n))
b = np.random.randint(1, 100, (m, 1))
x0 = np.zeros((n, 1))
result = minimize(error, x0, args = (A, b))
x = result.x
residual = np.dot(A, x) - b
norm = np.linalg.norm(residual, ord = 2)
print("The value of x:")
print(x)
print("The value of residual:")
print(residual)
print("The value of norm:")
print(norm)
Exercise 10.2: Optimization #Find the maximum of the function
import numpy as np
import scipy as sp
from scipy.optimize import minimize
import matplotlib.pyplot as plt
def fun(x):
a = np.exp(-(x**2))
b = np.sin(x - 2) ** 2
return a * b
def error(x):
return -fun(x)
x0 = 1
result = minimize(error, x0)
x = result.x
print("The value of x:")
print(x)
print("The maximum value:")
print(fun(x))
Exercise 10.3: Pairwise distances import numpy as np
import scipy as sp
from scipy.spatial import distance
cities_num = 10
cities_x = np.random.randint(1, 10, (1, cities_num))
cities_y = np.random.randint(1, 10, (1, cities_num))
city_position = np.vstack((cities_x, cities_y))
print("city_position:")
print(city_position)
city_distance = np.zeros((cities_num, cities_num))
for i in range(cities_num):
for j in range(cities_num):
if(i == j):
city_distance[i][j] = 0
else:
a = city_position[:, i]
b = city_position[:, j]
a = a.reshape(1, -1)
b = b.reshape(1, -1)
city_distance[i][j] = distance.euclidean(a, b)
print("city_distance:")
print(city_distance)