Homework Scipy

10.1

这题是求超定方程组的最小二乘解和其残差,可用Scipy中的linalg.lstsq()函数。它接受两个参数:方程矩阵和目标向量;输出四个值:最小二乘解、残差平方、矩阵的秩和奇异值。注意题目要求残差的2-范数,因此Res需开方。

import numpy
from scipy.linalg import lstsq

m = 50
n = 40
A = numpy.random.rand(m,n)
A = A*2+0.5
print('A:\n',A,'\n')

b = numpy.random.rand(m)
b = b*5+1
print('b:\n',b,'\n')

(x, res, rnk, s) = lstsq(A,b) #最小二乘
print('x:\n',x,'\n')

Res = A.dot(x)-b
print('residual:',Res,'\n')
print('2-norm: ',res**0.5,'\n')

10.2

这题要用数值分析求解方程的最值,Scipy中有optimize.minimize_scalar()函数实现。该函数针对一元数值函数,使用布伦特法求解最小值,输出其值和对应自变量。而题目中要求目标函数最大值,所以返回值要变负。

import scipy.optimize as opt
import numpy as np

def F(x):
    R=(np.sin(x-2))**2*np.exp(-x**2)
    return -R #最小值

res = opt.minimize_scalar(F, bounds=(-10, 10), method='bounded')
Y = res.fun * -1
print(' Maximum result:',res.success)
print(' x =',res.x)
print(' f(x) =',Y) #最大值
print()
10.3

本题求各向量间的距离,可用scipy.spatial.distance.pdist()函数,输入点阵便可直接得到结果。具体实现如下:

from scipy.spatial import distance
import numpy as np

n = 8
m = 3
X = np.random.randn(n,m)
X = (X + 0.5) * 4 #生成随机三维坐标
print('Rows:\n',X)
Arr = distance.pdist(X) #欧几里得距离
print('\nDistances:')

t = 0
for i in range(0,n-1):
    for k in range(i+1,n):
        print(i, '-', k, ': ', Arr[t])
        t+=1
print()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值