高级编程技术 numpy课后习题

简单起见,先将n和m的大小分别设为2和5以利于打印,将n和m修改为200和500即满足题目要求。

使用到的库函数有:

numpy.matrix:生成矩阵A

numpy.random.normal:生成随机高斯数组,转化为矩阵A

scipy.linalg.toeplitz:生成托普利兹矩阵B

numpy.random.randn:用随机高斯数填充矩阵B(所以题目没有指明用什么数填充托普利兹矩阵,所以选择了randn尽量随机化)





使用到的库函数有:

numpy.eye:生成单位矩阵

np.dot:矩阵点积计算

A.T:使用A的转置属性




使用到的库函数有:

numpy.random.randn:用随机高斯数生成一个向量b

numpy.linalg.solve:计算Bx = b的线性解

np.allclose:检验结果是否正确




使用到的库函数有:

numpy.linalg.norm:使用参数'fro',计算矩阵A的Frobenius范数

numpy.linalg.norm:使用参数numpy.inf,计算矩阵B的无穷范数

numpy.linalg.svd:计算矩阵B的奇异值

numpy.max:计算最大值

numpy.min:计算最小值




先使用一个测试样例检验算法是否正确:

测试样例为[[2,3,2],[10,3,4],[3,6,1]],最大特征值是11,对应的特征向量是[0.5,1,0.75]

可以看到结果在10e-6的精度范围内是正确的。



分别对n=20,50,100,200,500进行测试,发现迭代次数和迭代时间并不稳定,而且程序有时候会卡死,这是因为幂迭代算法需要

保证矩阵有n个线性无关的特征向量,而用随机高斯数填充矩阵并不满足这一条件。



使用到的库函数有:

numpy.random.rand:生成0到1的均匀分布矩阵,然后将小于1-p的置为0,将大于1-p的置为1,从而产生概率为p的0-1矩阵

numpy.linalg.svd:计算矩阵的奇异值


测试最大奇异值和矩阵阶数n、概率p的关系



可以看到它们之间似乎没有严格的代数相等关系,不过总的来说n越大p越大,最大奇异值也就越大。



使用到的库函数有:

numpy.random.uniform:生成一个均匀分布的矩阵A用于测试(因为题目没有指明A的性质,所以随便选择了一个均匀分布)

numpy.argmin:计算矩阵中最小的数字的下标,通过abs(A - float(z))可以将矩阵A中与z最接近的数字变为最小的数字,取到这

个数字的下标后再从A中取到这个数字即可。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值