6.13 极分解

计算方法

  一个复数可以写成极坐标形式: z = r e i θ z=re^{i\theta} z=reiθ.这种分解,左边代表长度,右边代表角度。由此为灵感来源,前人对矩阵也有类似的分解。就是猜想一个线性变换对矩阵的作用,是不是可以分解为拉长和旋转两部分呢?或者说,一个矩阵是不是可以分解为长度和角度呢?前人经过研究,发现是可以这样分解的。一个矩阵A可以分解为一个酉矩阵和正定埃尔米特阵的乘积,也就是:
A = U ∣ T ∣ A=U|T| A=UT
  需要注意的是右边虽然是一个绝对值符号,但是不是一个数字,而是一个矩阵。 它的定义是 ∣ T ∣ = T H T |T|=\sqrt{T^HT} T=THT ,虽然我们没学过矩阵函数,但是也能知道给矩阵 A A A开根号就是求一个矩阵 B B B,它乘自己得到 A A A。这个埃尔米特阵用来代表长度。而前面那个酉矩阵用来代表角度。这样就把线性变换的两大作用进行了分解。
  极分解的计算方法严重依赖于奇异值分解。假设已经求出来了奇异值分解,那么矩阵的极分解就很容易得到了:
A = ( U V H ) ( V Σ V H ) A=(UV^H)(V\Sigma V^H) A=(UVH)(VΣVH)
  比如以下就是一个极分解:
( 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 ) = ( 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 ) ( 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 ) \begin{pmatrix}0 & 1 & 0 & 0\\ 0 & 0 & 2 & 0\\ 0 & 0 & 0 & 3\\ 0 & 0 & 0 & 0\\ \end{pmatrix}=\begin{pmatrix}0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\\ 1 & 0 & 0 & 0\\ \end{pmatrix} \begin{pmatrix}0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 2 & 0\\ 0 & 0 & 0 & 3\\ \end{pmatrix} 0000100002000030 = 0001100001000010 0000010000200003

代码实现

  因为严重依赖奇异值分解,所以极分解的代码相当简单:

    # 极分解
    def polar_decomposition(self):
        u, sigma, v = self.svd()
        v_h = v.hermitian_transpose()
        return u * v_h, v * sigma * v_h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值