练习题目与相应代码如下:
分析:使用最小二乘法:求出各个列向量线性组合后与b距离最小的线性组合
#10.1
import numpy as np
import scipy.optimize as opt
#m > n
m = 20
n = 10
A = np.random.normal( loc = 10, scale = 3 , size = (m,n) ) #normal
b = np.random.normal( size = m )
ans = opt.lsq_linear( A , b )
x = ans['x']
residual = b - np.dot(A,x)
print( np.linalg.norm(residual) )
求函数最小值:optimize.minisize_scalar
import numpy as np
import scipy.optimize as opt
def f(x):
return (-1) * (np.sin(x - 2))**2 * np.exp(-x*x)
ans = opt.minimize_scalar(f)
x = ans.x
#x is max point , and -1*f(x)is the max value
print( -1*f(x) )
通过-f(x)的最小值来求f(x)的最大值,注意最后求出-f(x)最小值之后要乘-1,变换为f(x)的最大值
使用spatial中的方法来求解。
import numpy as np
import scipy.spatial.distance as distance
n = 20
m = 10
X = np.random.normal(loc = 10 , scale = 4 , size = (n, m))
ans = distance.pdist(X)
print(ans)
总结:
这里涉及的scipy函数如下:
optimize 模块