精华内容
下载资源
问答
  • matlab开发-矩阵双对角化。代码通过调用Lapack例程计算矩阵双对角矩阵分解。
  • 基于对角线法对LDPC进行编码实现,并通过MATLAB进行了验证。
  • 该方法主要为求解以下线性方程组(A为m*n的矩阵,m>n),且保持二阶残差范数最小: Ax=bMin∥Ax−b∥2 Ax=b\\ Min\parallel Ax-b \parallel_{2} Ax=bMin∥Ax−b∥2​ 对于传统的最小二乘问题,可以直接求出方程的...

    矩阵对角化通过简单线性运算,将复杂矩阵变为简单矩阵。例如传统的特征值和特征向量对角化可以将矩阵n阶方阵A变为 A = T − 1 d i a g ( a 1 , a 2 , . . . a n ) T A=T^{-1}diag(a_1,a_2,...a_n)T A=T1diag(a1,a2,...an)T
    对于无法进行特征分解的矩阵,以及非方阵,我们常用的处理手段是将矩阵转化为方阵,然后使用双对角化,或者三对角化进行简化,Lanczos对方阵的对角化提供了一种迭代的方法:

    1.对称方阵三对角化

    首先从最简单的问题开始,当系数矩阵为n阶满秩对角方阵时,即Bx=b问题。
    待解决的问题: 在求解线性方程组Bx=b时(B为n*n的方阵,x和b都是n阶向量),我们常常需要将其对角化,包括三对角化,双对角化和单对角化。即找到一组标准基向量V,使得B分解为以下形式: B n = V n T n V n − 1 B_n=V_nT_nV_n^{-1} Bn=VnTnVn1,其中T为 T n = V n T B V n = ( α 1 β 2 β 2 α 2 β 3 β 3 ⋱ ⋱ ⋱ ⋱ β n β n α n ) T_{n}=V_{n}^TBV_{n}= \left( \begin{array} {llcrr} \alpha_{1} & \beta_{2} \\ \beta_{2} & \alpha_{2} & \beta_{3} \\ &\beta_3 &\ddots &\ddots \\ &&\ddots & \ddots & \beta_{n} \\ &&&\beta_{n} & \alpha_{n} \end{array} \right) Tn=VnTBVn=α1β2β2α2β3β3βnβnαn
    处理思路: 构造一个矩阵Vm=[v1,v2,…vm]表示n维空间中m个独立的向量,使Vm满足以下4个条件: x m = V m y m V m T V m = 1 V m T v m + 1 = 0 ( B x m − b ) ⊥ v i , i = 1 , 2 , 3... m x_{m}=V_{m}y_{m} \\ V_{m}^TV_{m}=1\\ V_{m}^Tv_{m+1}=0 \\ (Bx_{m}-b)\perp v_{i}, i=1,2,3...m xm=VmymVmTVm=1VmTvm+1=0(Bxmb)vi,i=1,2,3...m

    这样,把Bx=b投影在该n维空间中,用m个向量vm为基底表示为方程: ( V m T B V m ) y m = V m T b (V_{m}^TBV_{m})y_{m}=V_{m}^Tb (VmTBVm)ym=VmTb

    迭代法则: 合理的构造方式应当满足以上四个条件,并使 T m T_m Tm尽可能简单,Lanszos提供了一种迭代获得 V m , α i , β i V_m,\alpha_i,\beta_i Vm,αi,βi的方法,迭代过程如下:
    { v 1 = b / β 1 , β 1 = ∥ b ∥ , v 0 = 0 f o r i = 1 , 2 , 3... w i = B v i − β i v i − 1 a i = v i T w i v i + 1 = ( w i − α i v i ) / β i + 1 h e r e   β i + 1   m a k e ∥ v i + 1 ∥ , b r e a k   i f   t h e   β i + 1   n o t   e x i s t \left\{ \begin{array} {llllll} v_{1}=b/\beta_{1}, \beta_{1}=\parallel b \parallel, v_{0}=0 \\ for \quad i=1,2,3... \\ \quad w_{i}=Bv_{i}-\beta_{i}v_{i-1} \\ \quad a_{i}=v_{i}^Tw_{i} \\ \quad v_{i+1}=(w_{i}-\alpha_{i}v_{i})/\beta_{i+1} \\ \quad here \, \beta_{i+1} \,make \parallel v_{i+1} \parallel, break \, if \, the \, \beta_{i+1} \, not \,exist \end{array} \right. v1=b/β1,β1=b,v0=0fori=1,2,3...wi=Bviβivi1ai=viTwivi+1=(wiαivi)/βi+1hereβi+1makevi+1,breakiftheβi+1notexist

    证明过程:
    为了证明迭代过程可以满足要求,我们从 v i v_i vi推导出 w i w_i wi和T 的表达式,进而得到Bx=b,即可证明。首先,迭代过程用矩阵表示为以下式子:
    B V k = V k T k + β k + 1 v k + 1 e k T BV_k=V_kT_k+\beta_{k+1}v_{k+1}e^T_k BVk=VkTk+βk+1vk+1ekT

    这样一来,B就用 T k T_k Tk来表示,即实现三对角化。为了求解x,在等式两边右乘 y k y_k yk,得到:
    B V k y k = V k T k y k + β k + 1 v k + 1 η k BV_ky_k=V_kT_ky_k+\beta_{k+1}v_{k+1}\eta_k BVkyk=VkTkyk+βk+1vk+1ηk

    其中,末项 β k + 1 v k + 1 η k \beta_{k+1}v_{k+1}\eta_k βk+1vk+1ηk代表微小扰动,可忽略不计;又因为 β 1 V k e 1 = b \beta_1V_ke_1=b β1Vke1=b,所以只需加入以下两个条件,原方程就可化为Bx=b。这两个条件是:
    T k y k = β 1 e 1 x k = V k y k T_ky_k=\beta_1e_1 \\ x_k=V_ky_k Tkyk=β1e1xk=Vkyk

    总之,如果 T k y k = β 1 e 1 ,    x k = V k y k T_ky_k=\beta_1e_1, \; x_k=V_ky_k Tkyk=β1e1,xk=Vkyk,则该迭代过程在忽略微小扰动的情况下近似等于Bx=b的解。

    2.任意矩阵双对角化

    为了能够应用上一节对角方阵的结论,需要把任意m*n的矩阵A变为对角方阵B:
    B = [ 0 A A T 0 ] , t h e n   B = B T B=\left [ \begin{array} {ll} 0 & A \\ A^T & 0 \end{array} \right ] , then \, B=B^T B=[0ATA0],thenB=BT

    这样一来,原方程Bx=b就变为下式:
    [ 0 A A T 0 ] [ 0 x ] = [ b 0 ] \left [ \begin{array} {cc} 0 & A \\ A^T & 0 \end{array} \right ] \left [ \begin{array} {cc} 0 \\ x \end{array} \right ] = \left [ \begin{array} {cc} b \\ 0 \end{array} \right ] [0ATA0][0x]=[b0]

    这样就可以应用上一节的Lanczos方法的迭代法则构造若干个向量V了。
    迭代过程:

    1. 初始化情况:求 v 0 , β 1 , v 1 v_0,\beta_1,v_1 v0,β1,v1
      v 0 = [ 0 ] m + n ∗ 1 β 1 [ v 1 0 ] = [ b 0 ] v_0=[0]_{m+n*1} \\ \beta_1 \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ] = \left [ \begin{matrix} b \\ 0 \end{matrix} \right ] \\ v0=[0]m+n1β1[v10]=[b0]

    2. i=1时:求 w 1 , α 1 , v 2 w_1,\alpha_1,v_2 w1,α1,v2
      [ 0 w 1 ] = [ 0 A A T 0 ] [ v 1 0 ] − β 1 v 0 \left [ \begin{matrix} 0 \\ w_1 \end{matrix} \right ]= \left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ] -\beta_1v_0 [0w1]=[0ATA0][v10]β1v0

    α 1 = [ v 1 T 0 ] [ 0 w 1 ] = 0 \alpha_1=[v_1^T \quad 0] \left [ \begin{matrix} 0 \\ w_1 \end{matrix} \right ] =0 α1=[v1T0][0w1]=0

    β 2 [ 0 v 2 ] = [ 0 w 1 ] − α 1 [ v 1 0 ] = [ 0 A A T 0 ] [ v 1 0 ] = A T v 1 \beta_2 \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ] = \left [ \begin{matrix} 0 \\ w_1 \end{matrix} \right ] - \alpha_1 \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ]=\left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ]=A^Tv_1 β2[0v2]=[0w1]α1[v10]=[0ATA0][v10]=ATv1

    因此,当i=1时, β 1 v 1 = A T v 1 \beta_1v_1=A^Tv_1 β1v1=ATv1

    1. i=2时的情况并推广到i为偶数,求 w 1 , α 1 , β 2 , v 2 w_1,\alpha_1,\beta_2,v_2 w1,α1,β2,v2
      [ w 2 0 ] = [ 0 A A T 0 ] [ 0 v 2 ] − β 2 [ v 1 0 ] \left [ \begin{matrix} w_2 \\ 0 \end{matrix} \right ]= \left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ] -\beta_2 \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ] [w20]=[0ATA0][0v2]β2[v10]

    α 2 = [ 0 v 2 T ] [ w 2 0 ] = 0 \alpha_2=[0 \quad v_2^T] \left [ \begin{matrix} w_2 \\ 0 \end{matrix} \right ] =0 α2=[0v2T][w20]=0

    β 3 [ v 3 0 ] = [ w 2 0 ] − α 2 [ 0 v 2 ] = [ 0 A A T 0 ] [ 0 v 2 ] − β 2 [ v 1 0 ] = A v 2 − β 2 v 1 \beta_3 \left [ \begin{matrix} v_3 \\ 0 \end{matrix} \right ] = \left [ \begin{matrix} w_2 \\ 0 \end{matrix} \right ] - \alpha_2 \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ]= \left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ]- \beta_2 \left [ \begin{matrix} v_1 \\ 0 \end{matrix} \right ]=Av_2-\beta_2v_1 β3[v30]=[w20]α2[0v2]=[0ATA0][0v2]β2[v10]=Av2β2v1

    因此,当i为偶数时, w i , v i w_i,v_i wi,vi为m*1矩阵, α i \alpha_i αi为0。且满足:
    β i v i = A v i − 1 − β i − 1 v i − 2 i = 2 , 4 , 6... \beta_iv_i=Av_{i-1}-\beta_{i-1}v_{i-2} \quad i=2,4,6... βivi=Avi1βi1vi2i=2,4,6...

    1. i=3时并推广到i为奇数,求 w 2 , α 2 , β 3 , v 3 w_2,\alpha_2,\beta_3,v_3 w2,α2,β3,v3
      [ 0 w 3 ] = [ 0 A A T 0 ] [ v 3 0 ] − β 3 [ 0 v 2 ] \left [ \begin{matrix} 0 \\ w_3 \end{matrix} \right ]= \left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} v_3 \\ 0 \end{matrix} \right ] - \beta_3 \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ] [0w3]=[0ATA0][v30]β3[0v2]

    α 3 = [ v 3 T 0 ] [ 0 w 3 ] = 0 \alpha_3=[v_3^T \quad 0] \left [ \begin{matrix} 0 \\ w_3 \end{matrix} \right ] =0 α3=[v3T0][0w3]=0

    β 4 [ 0 v 4 ] = [ 0 w 3 ] − α 3 [ v 3 0 ] = [ 0 A A T 0 ] [ v 3 0 ] − β 3 [ 0 v 2 ] = A T v 3 − β 3 v 2 \beta_4 \left [ \begin{matrix} 0 \\ v_4 \end{matrix} \right ] = \left [ \begin{matrix} 0 \\ w_3 \end{matrix} \right ] - \alpha_3 \left [ \begin{matrix} v_3 \\ 0 \end{matrix} \right ]= \left [ \begin{matrix} 0 & A \\ A^T & 0 \end{matrix} \right ] \left [ \begin{matrix} v_3 \\ 0 \end{matrix} \right ]- \beta_3 \left [ \begin{matrix} 0 \\ v_2 \end{matrix} \right ]=A^Tv_3-\beta_3v_2 β4[0v4]=[0w3]α3[v30]=[0ATA0][v30]β3[0v2]=ATv3β3v2

    因此,当i为奇数时, w i , v i w_i,v_i wi,vi为n*1矩阵, α i \alpha_i αi为0。且满足:
    β i v i = A T v i − 1 − β i − 1 v i − 2 i = 3 , 5 , 7... \beta_iv_i=A^Tv_{i-1}-\beta_{i-1}v_{i-2} \quad i=3,5,7... βivi=ATvi1βi1vi2i=3,5,7...

    迭代整合:
    由于矩阵B的特殊性,使得 α i \alpha_i αi为0,在奇数次迭代中 w i , v i w_i,v_i wi,vi为n行向量,在偶数次迭代中 w i , v i w_i,v_i wi,vi为m行向量。我们将一次奇数迭代和一次偶数次迭代整合为一个新的迭代周期,将符号进行变化:
    对于 v 2 , v 4 , v 6 . . . v_2,v_4,v_6... v2,v4,v6...等m行的向量,我们用 u 2 , u 3 , u 4 . . . u_2,u_3,u_4... u2,u3,u4...表示;对于 v 1 , v 3 , v 5 . . . v_1,v_3,v_5... v1,v3,v5...等n行的向量,我们用 v 1 , v 2 , v 3 . . . v_1,v_2,v_3... v1,v2,v3...表示。即u为m维向量,v为n维向量。
    v和u对应的矢量范数,分别用 α , β \alpha,\beta α,β表示,即将 β 1 , β 3 , β 5 . . . \beta_1,\beta_3,\beta_5... β1,β3,β5...等用 α 1 , α 2 , α 3 . . . \alpha_1,\alpha_2,\alpha_3... α1,α2,α3...表示,将 β 2 , β 4 , β 6 . . . \beta_2,\beta_4,\beta_6... β2,β4,β6...等用 β 2 , β 3 , β 4 . . . \beta_2,\beta_3,\beta_4... β2,β3,β4...表示。即 α \alpha α为n维向量v的矢量范数, β \beta β为m维向量u的矢量范数。

    迭代过程1和2整和为:
    v 0 = 0 α 1 v 1 = b A T u 1 = α 1 v 1 v_0=0 \\ \alpha_1v_1=b \\ A^Tu_1=\alpha_1v_1 v0=0α1v1=bATu1=α1v1

    迭代过程3和4整个为:
    { β i + 1 u i + 1 = A v i − α i u i α i + 1 v i + 1 = A T u i + 1 − β i + 1 v i i = 1 , 2 , 3... \left \{ \begin{matrix} \beta_{i+1}u_{i+1}=Av_i -\alpha_iu_i \\ \alpha_{i+1}v_{i+1}=A^Tu_{i+1}-\beta_{i+1}v_i \end{matrix} \right. \quad i=1,2,3... {βi+1ui+1=Aviαiuiαi+1vi+1=ATui+1βi+1vii=1,2,3...

    以上两部分就是任意矩阵的对角化迭代过程,该过程可以将任意矩阵A的对角化矩阵求得,证明过程如下。

    迭代证明:
    根据Lanczos方法,矩阵W可以表示为(W的第j列代表Lanczos过程中第i=j+1次迭代):
    W = [ v 0 0 w 2 … w 2 k − 1 0 0 w 1 0 … 0 w 2 k ] = [ u 1 0 u 2 … u k 0 0 v 1 0 … 0 v k ] W=\left [ \begin{array} {ll} v_{0} & 0 & w_2 & \dots & w_{2k-1} & 0 \\ 0 & w_{1} & 0 &\dots & 0 & w_{2k} \end{array} \right ] =\left [ \begin{array} {ll} u_{1} & 0 & u_2 &\dots & u_{k} & 0 \\ 0 & v_{1} & 0 & \dots & 0 & v_{k} \end{array} \right ] W=[v000w1w20w2k100w2k]=[u100v1u20uk00vk]

    同理与上一节Tm对应的三对角矩阵T为:
    T = [ 0 α 1 0 … … … 0 α 1 0 β 2 0 … … 0 0 β 2 0 α 2 0 … 0 … … … … … … … 0 … … … … α k 0 ] T=\left [ \begin{array} {ccccc} 0 & \alpha_{1} & 0 & \dots & \dots &\dots & 0 \\ \alpha_{1} & 0 & \beta_{2} & 0 & \dots & \dots & 0 \\ 0 & \beta_{2} & 0 & \alpha_{2} & 0 & \dots & 0 \\ \dots &\dots &\dots &\dots &\dots &\dots &\dots \\ 0 & \dots &\dots &\dots &\dots & \alpha_{k} & 0 \end{array} \right ] T=0α100α10β20β200α20αk0000

    为了证明双对角化可以实现,我们将整合的迭代过程用矩阵表示:
    设矩阵为m行k列的矩阵: U k = [ u 1 , u 2 , . . . , u k ] U_k=[u_1,u_2,...,u_k] Uk=[u1,u2,...,uk],且为正交矩阵: U k T U k = I U^T_kU_k=I UkTUk=I
    设矩阵为n行k列的矩阵: V k = [ v 1 , v 2 , . . . , v k ] V_k=[v_1,v_2,...,v_k] Vk=[v1,v2,...,vk],且为正交矩阵: V k T V k = I V^T_kV_k=I VkTVk=I
    设定初始矢量: u 1 = b / β 1 u_1=b/\beta_1 u1=b/β1
    将式子 A T u 1 = α 1 v 1 A^Tu_1=\alpha_1v_1 ATu1=α1v1用矩阵表示为: U k + 1 ( β 1 e 1 ) = b U_{k+1}(\beta_1e_1)=b Uk+1(β1e1)=b
    将式子 β i + 1 u i + 1 = A v i − α i u i \beta_{i+1}u_{i+1}=Av_i -\alpha_iu_i βi+1ui+1=Aviαiui用矩阵表示为: A V k = U k + 1 B k AV_k=U_{k+1}B_k AVk=Uk+1Bk
    将式子 α i + 1 v i + 1 = A T u i + 1 − β i + 1 v i \alpha_{i+1}v_{i+1}=A^Tu_{i+1}-\beta_{i+1}v_i αi+1vi+1=ATui+1βi+1vi用矩阵表示为: A T U k + 1 = V k B k T + α k + 1 v k + 1 e k + 1 T A^TU_{k+1}=V_kB^T_k+\alpha_{k+1}v_{k+1}e_{k+1}^T ATUk+1=VkBkT+αk+1vk+1ek+1T
    其中, B k = [ α 1 0 … … … 0 β 2 α 2 0 … … 0 0 β 3 α 3 0 … 0 … … … … … α k 0 … … … 0 β k + 1 ] B_k=\left [ \begin{matrix} \alpha_1 & 0 & \dots & \dots & \dots & 0 \\ \beta_2 & \alpha_2 & 0 & \dots & \dots & 0 \\ 0 & \beta_3 & \alpha_3 & 0 & \dots & 0 \\ \dots & \dots & \dots & \dots & \dots & \alpha_k \\ 0 & \dots & \dots & \dots & 0 & \beta_{k+1} \end{matrix} \right ] Bk=α1β2000α2β30α300000αkβk+1

    因此,有 A = U k + 1 B k V k T A=U_{k+1}B_kV^T_k A=Uk+1BkVkT,得证。

    3.另一种对角化方式

    在第一节中Tm与Vm之间的关系,在本节中的T和W之间同样适用,即BW=WT。左边BW和右边WT都是2k*2k的矩阵,只需将所有对应元素相等,可以得到2k^2个关于p、v、ρ和θ的等式,进而得到迭代法则: { A v 1 = ρ 1 p 1 θ i + 1 v i + 1 = A T p i − ρ i v i ρ i + 1 p i + 1 = A v i + 1 − θ i + 1 p i , i = 1 , 2 , . . . \left \{ \begin{array} {lll} Av_{1}=\rho_{1}p_{1} \\ \theta_{i+1}v_{i+1}=A^Tp_{i}-\rho_{i}v_{i} \\ \rho_{i+1}p_{i+1}=Av_{i+1}-\theta_{i+1}p_{i} \end{array} \right. ,i=1,2,... Av1=ρ1p1θi+1vi+1=ATpiρiviρi+1pi+1=Avi+1θi+1pi,i=1,2,...

    迭代的初值为: θ 1 = ∥ b ∥ , v 1 = A T b θ 1 , p 1 = b θ 1 , \theta_{1}=\parallel b \parallel , \quad v_{1}=\frac{A^Tb}{\theta_{1}}, \quad p_{1}=\frac{b}{\theta_{1}}, θ1=b,v1=θ1ATb,p1=θ1b,

    表示为矩阵形式为: { V k ( θ 1 e 1 ) = A T b A V k = P k R k A T P k = V k R k T + θ k + 1 v k + 1 e k T \left \{ \begin{array} {lll} V_{k}(\theta_{1}e_{1})=A^Tb \\ AV_{k}=P_{k}R_{k} \\ A^TP_{k}=V_{k}R_{k}^T+\theta_{k+1}v_{k+1}e_{k}^T \end{array} \right. Vk(θ1e1)=ATbAVk=PkRkATPk=VkRkT+θk+1vk+1ekT

    其中, P k = [ p 1 , p 2 , … , p k ] , P k T P k = I V k = [ v 1 , v 2 , … , v k ] , V k T V k = I R k = [ ρ 1 θ 2 0 … … 0 0 ρ 1 θ 2 0 … 0 … … … … … … 0 … … 0 ρ k − 1 θ k 0 … … … 0 ρ k ] , R k = P k T A V k P_{k}=[ p_{1},p_{2},\dots,p_{k} ], \quad P_{k}^TP_{k}=I \\ V_{k}=[ v_{1},v_{2},\dots,v_{k} ], \quad V_{k}^TV_{k}=I \\ R_{k}=\left [ \begin{array} {ccccc} \rho_{1} & \theta_{2} & 0 & \dots & \dots & 0 \\ 0 & \rho_{1} & \theta_{2} & 0 & \dots & 0 \\ \dots & \dots & \dots & \dots & \dots & \dots \\ 0 & \dots & \dots & 0 & \rho_{k-1} & \theta_{k} \\ 0 & \dots & \dots & \dots & 0 & \rho_{k} \end{array} \right ], \quad R_{k}=P_{k}^TAV_{k} Pk=[p1,p2,,pk],PkTPk=IVk=[v1,v2,,vk],VkTVk=IRk=ρ1000θ2ρ10θ200ρk1000θkρk,Rk=PkTAVk

    展开全文
  • NAN转0 A=magic(10) A = 92 99 1 8 15 67 74 51...对角线为任意数值,这个目前好像只能是循环解决了 即i=j的时候就是对角线,x是我们想要赋值的任意值 for i=1:length(A) for j=1:length(A) if i==j A=x; end end end

    NAN转0

    A=magic(10)

    A =

    92    99     1     8    15    67    74    51    58    40
    98    80     7    14    16    73    55    57    64    41
     4    81    88    20    22    54    56    63    70    47
    85    87    19    21     3    60    62    69    71    28
    86    93    25     2     9    61    68    75    52    34
    17    24    76    83    90    42    49    26    33    65
    23     5    82    89    91    48    30    32    39    66
    79     6    13    95    97    29    31    38    45    72
    10    12    94    96    78    35    37    44    46    53
    11    18   100    77    84    36    43    50    27    59
    

    A(logical(eye(size(A))))=0

    A =

     0    99     1     8    15    67    74    51    58    40
    98     0     7    14    16    73    55    57    64    41
     4    81     0    20    22    54    56    63    70    47
    85    87    19     0     3    60    62    69    71    28
    86    93    25     2     0    61    68    75    52    34
    17    24    76    83    90     0    49    26    33    65
    23     5    82    89    91    48     0    32    39    66
    79     6    13    95    97    29    31     0    45    72
    10    12    94    96    78    35    37    44     0    53
    11    18   100    77    84    36    43    50    27     0
    

    最简单的方法
    for i=1:n
    a(i,i)=0;
    end

    1.首先生成一组测试矩阵
    A=magic(5);
    得到一个5*5的矩阵:

    1. A =
    2.  17    24     1     8    15
      
    3.  23     5     7    14    16
      
    4.   4     6    13    20    22
      
    5.  10    12    19    21     3
      
    6.  11    18    25     2     9
      

    2.对角线置零
    A=A-diag(diag(A));
    得到如下矩阵:

    1. A =
    2.   0    24     1     8    15
      
    3.  23     0     7    14    16
      
    4.   4     6     0    20    22
      
    5.  10    12    19     0     3
      
    6.  11    18    25     2     0
      

    3.对角线置inf
    对角线为正的inf
    A=A+diag(inf+zeros(1,length(A)))

    1. A =
    2. Inf    24     1     8    15
      
    3.  23   Inf     7    14    16
      
    4.   4     6   Inf    20    22
      
    5.  10    12    19   Inf     3
      
    6.  11    18    25     2   Inf
      

    对角线为负的inf
    A=A-diag(inf+zeros(1,length(A)))

    1. A =
    2. -Inf 24 1 8 15
    3.  23  -Inf     7    14    16
      
    4.   4     6  -Inf    20    22
      
    5.  10    12    19  -Inf     3
      
    6.  11    18    25     2  -Inf
      

    4.对角线置NaN
    A=A+diag(NaN+zeros(1,length(A)))
    或者是
    A=A+diag(inf+zeros(1,length(A)))-diag(inf+zeros(1,length(A)))
    都可以使得对角线为NaN

    1. A =
    2. NaN    24     1     8    15
      
    3.  23   NaN     7    14    16
      
    4.   4     6   NaN    20    22
      
    5.  10    12    19   NaN     3
      
    6.  11    18    25     2   NaN
      

    5.对角线为任意数值,这个目前好像只能是双循环解决了
    即i=j的时候就是对角线,x是我们想要赋值的任意值

    1. for i=1:length(A)
    2.  for j=1:length(A)
      
    3.      if i==j
      
    4.          A=x;
      
    5.      end
      
    6.  end
      
    7. end
    展开全文
  • 对角矩阵只在对角线上含有非0元素,其它位置都为0。我门用diag(v)diag(v)diag(v)表示一个对角元素由向量vvv组成的对角方阵。对角矩阵的乘法计算效率很高。我们已经见过一种特殊的对角矩阵:单位矩阵。 不是所有的对...

    对角矩阵

    对角矩阵只在对角线上含有非0元素,其它位置都为0。我门用 d i a g ( v ) diag(v) diag(v)表示一个对角元素由向量 v v v组成的对角方阵。对角矩阵的乘法计算效率很高。我们已经见过一种特殊的对角矩阵:单位矩阵。
    不是所有的对角矩阵都是方阵,长方形的矩阵也有可能是对角矩阵。

    对称矩阵

    对称矩阵是转置矩阵和自己相等的矩阵:
    A = A T A = A^T A=AT
    当某些不依赖参数顺序的双参数函数生成元素时,对称矩阵经常会出现。例如,如果 A A A是一个表示距离的矩阵, A i , j A_{i,j} Ai,j表示点 i i i到点 j j j的距离,那么 A i , j = A j , i A_{i,j}=A_{j,i} Ai,j=Aj,i

    单位向量

    单位向量是指具有单位范数的向量:
    ∥ x ∥ 2 = 1 \|x\|_2 = 1 x2=1

    如果 x T y = 0 x^Ty = 0 xTy=0,那么我们称向量 x x x和向量 y y y正交。如果2个向量都有非0范数,那么这2个向量之间的夹角是90度。在 R n R^n Rn中,最多有n个范数非0的向量正交。如果这些向量不仅正交,并且范数都为1,那么我们称他们是标准正交。

    正交矩阵

    正交矩阵是指行向量和列向量都是标准正交的方阵:
    A T A = A A T = I A^TA = AA^T = I ATA=AAT=I
    这意味着
    A − 1 = A T A^{-1} = A^T A1=AT

    展开全文
  • 这个题目的要求差不多就是将矩阵按照对角线输出,不足的部分用0补齐,主要的难点就是对矩阵对角线输出。 首先我们以3阶为例,为了清晰,下面将A[0][0]记为(0,0),那么最后的B矩阵就是[ [(0,0),0,0] , [(1,0),(0,1),...

    题目描述如下:
    这个题目的要求差不多就是将矩阵按照对角线输出,不足的部分用0补齐,主要的难点就是对矩阵的对角线输出。

    首先我们以3阶为例,为了清晰,下面将A[0][0]记为(0,0),那么最后的B矩阵就是[ [(0,0),0,0] , [(1,0),(0,1),0]] , [(2,0),(1,1),(0,2)] , [(2,1),(1,2),0] , [(2,2),0,0] ].我们把其中的非0项提出来看一下:

    (0,0)
    (1,0),(0,1)
    (2,0),(1,1),(0,2)
    (2,1),(1,2)
    (2,2)

    我们把上面的括号内左边记为i,右边记为j,即(i,j).先观察前三行(以三阶为例,m阶就是m行),每列开头的i依次由0增加到2(即m-1),而j保持0不变,同时观察每一行发现每行的i都从左往右依次-1直到i == 0,j从左往右依次+1一直到该行i的初始值(第一行0,第二行1,第三行2).同时当处理完开头为(2,0)的行后,需要将后续行的i固定为2(即m-1),则有了以下代码:

    def func4(lst:list):
        lst_result = []
        m = len(lst)
        start = 0
        for j in range(m):
            for i in range(start,m):
                lst1 = []
                i1,j1 = i,j
                while i1>=0 and j1<=i:
                    lst1.append(lst[i1][j1])
                    i1 -= 1
                    j1 += 1
                while len(lst1) != m:
                    lst1.append(0)
                lst_result.append(lst1)
            #当进行到(lst[m-i][0],0)开头时,固定i为m-1
            if i == m-1 and j == 0:
                start = m-1
        return lst_result
    

    有了这个矩阵对角线输出的例子(从下到上,从左往右),上下左右任意组合顺序对矩阵进行对角线输出都是同理,只需先列出相应的项,找到他们之间的规律,对代码进行稍加修改就能实现所需要的功能。

    展开全文
  • 矩阵对角化,SVD分解

    千次阅读 2019-09-20 12:18:39
    - [矩阵对角化](#矩阵对角化) - [SVD分解](#svd分解) - [参考链接](#参考链接) 矩阵对角矩阵的相似 设 A\boldsymbol{A}A、 B\boldsymbol{B}B 为两个nnn阶矩阵,若存在可逆矩阵 P\boldsymbol{P}P,使得...
  • C语言 | 求一个3*3矩阵对角线元素之和

    千次阅读 多人点赞 2021-01-14 19:44:08
    例61:C语言求3*3的整型矩阵对角线元素之和 。 解题思路:程序中用的数整型数组,运行结果是正确的。如果用的是实型数组,只须将程序第4行的int改为double即可,要求输入数据时可输入单精度或精度的数,求3*3对角...
  • 因此,此提交有助于人们使用 Hermitian/对称矩阵的三对角化,A = Q * T * Q', 其中 A 是 Hermitian 或对称的,T 是实对称三对角线,Q 是酉或正交的。 最初的 Lapack 接口例程来自 Tim Toolan 在“文件交换”中的...
  • latex如何输入各种矩阵 直接用matrix、pmatrix、bmatrix、Bmatrix、vmatrix或者Vmatrix环境: 第二种方法 array 插入方程组 原创不易,路过的各位大佬请点个赞 引用 \usepackage{amsmath,amssymb,amsfonts} 一、...
  • 一般地,给定的mmm维向量aaa,考虑分块 a=[a1a2]a=\left[ \begin{matrix} {{a}_{1}} \\ {{a}_{2}} \\ \end{matrix} \right]a=[a1​a2​​],其中a1{{a}_{1}}a1​是(k−1)(k-1)(k−1)维向量,1≤k<m1\le k<...
  • 题目:求一个3*3矩阵对角线元素之和,矩阵的数据用行的形式输入到计算机中 程序分析:利用双重for循环控制输入二维数组,再将 a[i][i] 累加后输出。 实现思路: 【二维数组】相关知识: 定义格式 * a 第一种...
  • 判断方阵是否沿主对角线对称

    千次阅读 2020-07-13 13:20:24
    对角线为从矩阵的左上角至右下角的连线,方阵a中的所有元素都沿主对角线对称指对所有i, k,a[i][k]和a[k][i]相等。输入输出示例如下: 输入: 3 1 2 3 4 5 6 7 8 9 输出: No #include <stdio.h> int main...
  • MATLAB矩阵生成

    万次阅读 多人点赞 2017-01-10 16:23:00
    MATLAB矩阵生成
  • H变换双对角化代码实现-R语言 Householder function ( A ) { #列变换 H1 function ( A , n ) { if (n>=nrow(A)){ return (diag( 1 ,nrow =nrow(A),ncol = nrow(A)))} a [n:nrow(A),n];m length ( a ) ...
  • 1.2 LU 分解的唯一性 当矩阵 AAA 的各阶顺序主子式都不为 000 时,LU分解唯一 当矩阵 AAA 的部分顺序主子式为 000,但经过高斯消元后能化为上三角矩阵 (对角线上的元素可为 000),则可进行LU分解 (不唯一),例如 ...
  • 用二维数组定义一个3*3的矩阵,然后求出这个3*3矩阵对角线元素之和
  • 但一般说对角矩阵,考虑的都是方阵的情况,对于方阵,那就是只有主对角线上的元素可以不为0,其它元素都是0。 主对角元从左上角到右下角的次序常常记为一个列向量: 然后以它们为主对角元的对角方阵就可以记为...
  • 研究了在有限区间上具有可对角线边界的O(2 N)sigma模型的有限体积问题。 行传递矩阵由代数Bethe Ansatz对角线化。 推导了粒子速度的边界Bethe Yang方程和随附的Bethe Ansatz方程。
  • 1. 这本书Python的知识点的描述很详细,而且排版看的很舒服. 2. 几个例题:假装自己从零开始学,将一些有代表性、有意思的例题抽取出来. 3. 还有自己一部分课后复习题,全部课后上机实践题的解题思路
  • 在高等代数里,矩阵分解是一个十分基础与重要的内容,任何一个学校对于理工科的研究生教育都会开设相应的课程,如:矩阵分析、矩阵论、线性系统等。看了不少社区的问答、笔记和博客,在它们的基础上加入一些自己的...
  • PTA 矩阵运算

    2020-08-20 10:07:35
    给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。 输入格式: 输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数...
  • 我们获得3-3 ary中微子混合矩阵U =UeâU½,Ue和U½为3Ã3unit矩阵的带电对角线化后的马约拉纳州相位的α21/ 2和α31/ 2的预测 轻子和中微子马约拉纳质量矩阵。 我们专注于Ue和U½的形式,以Dirac相η和U的标准参数...
  • 【知识图谱】知识图谱的基础概念与构建流程

    千次阅读 多人点赞 2019-11-09 18:46:49
    开放通用知识图谱注重广度,强调融合更多的实体,较垂直行业知识图谱而言,其准确度不够高,并且受概念范围的影响,很难借助本体库公理、规则以及约束条件的支持能力规范其实体、属性、实体间的关系等。...
  • 一.线性函数(10.1) 1.概念 (1)定义: (2)示例: 2.线性函数的表达式 (1)度量矩阵的概念: (2)双线性型: (3)不同基下的度量矩阵间的关系:
  • eye()函数得到对角线为1的矩阵;rand()得到(0,1)区间均匀分布的随机矩阵;randn()函数产生均值(平均数)为零,方差为1的标准正态分布随机矩阵 格式:zeros(m,n)产生mXn零矩阵,zero(size(A))产生A的同型矩阵 ...
  • MIMO信号处理学习笔记

    千次阅读 热门讨论 2019-05-22 21:11:27
    最近学习了MIMO雷达信号处理的部分基础知识,现将我的学习笔记与大家分享,不对之处请多指教。...在MIMO雷达系统中,假设有N个发射阵元构成了一个均匀线阵,以第一个阵元为参考阵元,则发射信号可写为: ...
  • matlab矩阵运算

    千次阅读 2017-05-26 13:50:56
    格式 [AA,BB,Q,Z,V] = qz(A,B) %A、B为方阵,产生上三角阵AA和BB,正交矩阵Q、Z或其列变换形式,V为特征向量阵。且满足:Q*A*Z= AA 和Q*B*Z = BB。 [AA,BB,Q,Z,V] = qz(A,B,flag) %产生由flag决定的分解结果,...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    ★需求的跟踪 78 需求跟踪矩阵的作用: 78 需求的特点: 79 需求工程 79 变更控制流程图 82 第九章 缺陷管理 83 缺陷相关概念 83 缺陷管理相关概念 83 BUG管理基本流程: 84 BUG单 84 第十章 测试需求分析 86 概念:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,460
精华内容 7,384
关键字:

双对角线矩阵