Python学习第十三周作业——scipy扩展包

第一题


先生成矩阵A和向量b,考虑到后期该问题需要有解,向量b不随机生成,而是先随机生成x,然后算出b,之后使用scipy库中的leastsq函数可求解。代码如下:

import scipy as sp
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
# 维数
m = 30
n = 20
# 生成矩阵A
A = np.random.normal(size=(m,n), scale=15, loc=10)
# 生成假想的该问题应有的解
xx = np.random.normal(size=n,scale=15, loc=10)
# 生成该解对应的向量b
b = np.dot(A, xx)
# 生成初始向量
x = np.ones(20)

# 误差计算函数
def residual(xx):
    return np.dot(A, xx) - b

x_result,cov_x = leastsq(residual, x)
print(x_result, cov_x)
# 计算误差向量的范数
norm_residual = np.linalg.norm(np.dot(A, x_result) - b)
print(norm_residual)

第二题


求函数最大值,使用scipy自带的fmin函数(求最小值),由于只有fmin这个函数可用,但问题求解的又是最大值,只需要将函数变为相反数,问题就变成了求最小值。下面是代码:

import numpy as np
from scipy.optimize import fmin
def func(x):
    return -(np.sin(x-2) * np.sin(x-2) * np.exp(-x**2))
minimum = fmin(func, 1)
print(minimum)

经过绘图检验,可见的确是在x≈0.2162这个点处取得最大值。

第三题


在scipy文档中,pdist函数可以实现计算行之间的距离的功能。因此实现的代码如下:

import numpy as np
from scipy.spatial.distance import pdist
m = 40
n = 30
X = np.random.normal(size=(n, m), scale=10, loc=10)
Y = pdist(X, 'sqeuclidean')
print(Y.shape)
print(Y)

需要说明该函数使用的是欧拉距离公式,因此在函数参数中有一个sqeuclidean项。

经过检验,结果是正确的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值