Homework Scipy
程序员文章站
2022-06-02 12:42:27
...
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()
下一篇: OC之Runtime基础
推荐阅读
-
scipy:csr_matrix稀疏行矩阵
-
浅谈python中scipy.misc.logsumexp函数的运用场景
-
详解利用Python scipy.signal.filtfilt() 实现信号滤波
-
浅谈python中scipy.misc.logsumexp函数的运用场景
-
详解利用Python scipy.signal.filtfilt() 实现信号滤波
-
python安装numpy&安装matplotlib& scipy的教程
-
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
-
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
-
matplotlib 显示两张图片,折线图 和 scipy
-
Python使用scipy模块实现一维卷积运算示例