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])