import numpy as np
import scipy.optimize as opt
import scipy.spatial as spa
#Exercise 10.1
m = 5
n = 3
A = np.random.normal(3,1, (m, n))
b = np.random.normal(5,1,(m, 1))
x = np.dot(np.dot(np.linalg.inv(np.dot(A.T, A)), A.T), b)
print(x)
#Exercise 10.2
def f(x):
return - np.power(np.sin(x - 2), 2) * np.exp(- np.power(x, 2))
res = opt.minimize_scalar(f)
print(res.fun)
#Exercise 10.3
X = np.array([[0,1], [0,2], [2,5], [4,3]])
pair_dis = spa.distance.pdist(X, 'euclidean') #以向量的二范数作为距离的计算方法
n = X.shape[0]
for first in range(0, n):
for second in range(first+1, n):
print('The distance between city {} and city {} is {}.'.format(first, second, pair_dis[int((n+n-1-first)*first/2 + second-first-1)]))