scipy作业

本文通过三个练习探讨了数值方法的应用:最小二乘法求解过拟合问题,利用优化方法寻找函数的最大值,以及计算点对之间的距离。这些例子涵盖了线性代数、优化理论和距离度量等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Exercise 10.1: Least squares

跟上一次作业差不多

import scipy.linalg
import numpy as np

m = 20
n = 10
A = np.random.randint(0, 100, size=(m,n))
x = np.random.randint(10, size=(n, 1))
b = [list(np.random.normal(0, 1, 1)) for _ in range(m)]
y = A.dot(x) + b
Q, R = scipy.linalg.qr(A)
x_ = scipy.linalg.inv(R).dot(Q.T).dot(y)

print('x:')
print(x.T)
print('the norm of the residual:')
print(x_.T)

Exercise 10.2: Optimization

    

观察改函数,发现该函数恒为非负函数,并且当x区域无穷时函数值趋于0。进一步的,sin^2(x-2)是周期函数,而e^(-x^2)关于y轴对称,且当x>0时随着x的增加而减小。故函数的极值肯定在[-a, a]之间。因为sin^2(x-2)是周期函数,令a=10足以包括sin^2(x-2)的一个周期。

    此时发现x越小e^(-x^2)越大,而[-10 10]又包含了sin^2(x-2)的一个周期。因此在[-10, 10]之间找最大值是合理的。

    scipy提供一个fminbound函数可计算函数在一个区间的最小值。那么我们只要让f(x)取负再使用scipy库中的optimize.fminbound便可得到最大值的x0。故f(x0)为最大值。

from scipy import optimize
from math import *


def f(x):
    return -1 * pow(sin(x-2), 2) * exp(-pow(x, 2))

maximum = optimize.fminbound(f, -10, 10)
print('maximum:', -1 * f(maximum))
Exercise 10.3: Pairwise distances

使用scipy.spatial.distance.cdist可以计算两个坐标向量代表的点的距离。首先随机生成一个20*10的矩阵,该矩阵储存着20个点的坐标向量。然后分别计算它们各行之间的距离,储存到一个20*20的矩阵中。该矩阵的第i行第j列表示城市i到城市j的距离。

import scipy.spatial
import numpy as np

n = 20
m = 10
X = np.random.randint(0, 100, (n, m))
distance = np.zeros((n, n))
for i in range(n):
    for j in range(i+1, n):
        distance[i][j] = scipy.spatial.distance.cdist([X[i]], [X[j]])
        distance[j][i] = distance[i][j]
print(distance)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值