Python Homework(2018-05-30,第十三周周三)

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



猜你喜欢

转载自blog.csdn.net/baidu_41300735/article/details/80547530