Python之Scipy
【解题思路】
最小二乘法,使用numpy.linalg模块的lstsq函数。
【具体代码】
import numpy as np m = 20 n = 10 A = np.random.rand(m,n) b = np.random.rand(m,1) x,_,_,_ = np.linalg.lstsq(A,b,rcond=None) b_ = np.dot(A,x) sum = 0 for i in range(n): sum+=(b[i]-b_[i])**2 print("A = ") print(A) print("b = ") print(b) print("x = ") print(x) print("b_ = ") #b_=Ax print("误差") print(sum)
【解题思路】
在scipy.optimize模块中,有fmin函数可以计算一个函数最小值对应的自变量值(很奇怪没有对应的fmax),这道题要求f(x)最大值,我们可以转换为求-f(x)的最小值。这里fmin函数传递初始迭代值和要计算的函数f(x)
【具体代码】
import scipy as sp import math import scipy.optimize as opt def f(p): x=p a = x-2 b = (math.exp(-x*x)) c = (math.sin(a*b))**2 y = -c return y init_point = 1 maxinum = opt.fmin(f,init_point) print("自变量值") print(maxinum) print("函数值") print(-f(maxinum))
【运行结果】
从运行结果可以发现函数最大值是1,这与预估的结果是相符的,在这里改变初始值init_point,相应的会有不同的自变量值,但最大函数值是相同的,都是1.
【解题思路】
这里需要求解的距离应该是欧式距离,即两向量差的2-范数。使用scipy.spatial.distance模块的euclidean函数。
【具体代码】
from scipy.spatial.distance import euclidean as euc import numpy as np import scipy as sp n=10 A = np.random.rand(n,2) dis = [] for i in range(n): for j in range(i,n): distance = euc(A[i,:],A[j,:]) dis.append([i+1,j+1,distance]) print(A) print() for i in range(len(dis)): print(dis[i])