矩阵开根号,工作矩阵平方根

我试着求矩阵的平方根。就是找到矩阵

B

所以

B*B=A

. 我找到的方法都没有一个有效的结果。

首先我发现这个公式

Wikipedia

:

Y_0 = A

Z_0 = I

然后迭代:

Y_{k+1} = .5*(Y_k + Z_k^{-1}),

Z_{k+1} = .5*(Z_k + Y_k^{-1}).

那么

Y

应该收敛到

.

然而,在python中实现算法(对逆矩阵使用numpy)给了我垃圾结果:

>>> def denbev(Y,Z,n):

if n == 0: return Y,Z

return denbev(.5*(Y+Z**-1), .5*(Z+Y**-1), n-1)

>>> denbev(matrix('1,2;3,4'), matrix('1,0;0,1'), 3)[0]**2

matrix([[ 1.31969074, 1.85986159],

[ 2.78979239, 4.10948313]])

>>> denbev(matrix('1,2;3,4'), matrix('1,0;0,1'), 100)[0]**2

matrix([[ 1.44409972, 1.79685675],

[ 2.69528512, 4.13938485]])

如你所见,迭代100次,得到

更糟的

结果比迭代三次,没有一个结果能在40%的误差范围内得到。

然后我尝试了scipy sqrtm方法,但更糟糕的是:

>>> scipy.linalg.sqrtm(matrix('1,2;3,4'))**2

array([[ 0.09090909+0.51425948j, 0.60606061-0.34283965j],

[ 1.36363636-0.77138922j, 3.09090909+0.51425948j]])

>>> scipy.linalg.sqrtm(matrix('1,2;3,4')**2)

array([[ 1.56669890+0.j, 1.74077656+0.j],

[ 2.61116484+0.j, 4.17786374+0.j]])

我对矩阵平方根不太了解,但我想一定有比上面更好的算法?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值