矩阵化为代数里面的阶梯型和它的标准型

Mtrans_uptriangle <- function(X)
{
  if(is.null(dim(X))|dim(X)[1]==1|dim(X)[2]==1)#不是矩阵时,直接返回本身
  {
    return(as.vector(X))
  }
  else#处理矩阵
  {
    Mrow <- dim(X)[1]#行
    Mcol <- dim(X)[2]#列
    Mcol_index <- 1#列的索引
    for(i in 1:(min(Mrow,Mcol) - 1))#n - 1次可以化为上三角
    {
      
      da <- X[,Mcol_index]#取出当前判断的列
      da <- da[i:Mrow]#从i到末尾
      temp1 <- which(da!=0)[1]
      #找出列向量第一个不为0的元素的下标
      if(is.na(temp1))
      {
        Mcol_index <-  Mcol_index + 1
      }
      else
      {
        if(X[i,i] != 0)
        {
          for(j in (i+1):Mrow)#剩下的列化0
          {
            if(X[j,Mcol_index] !=0)
            {
              X[j,] <-  X[j,] - X[i,]*X[j,Mcol_index]/X[i,Mcol_index]
            }
          }
          Mcol_index <-  Mcol_index + 1
        }
        else#X[i,i] == 0
        {
          temp2 <- X[i+temp1-1,]
          X[i+temp1-1,] <- X[i,]
          X[i,] <- temp2
          for(j in (i+1):Mrow)#剩下的列化0
          {
            if(X[j,Mcol_index] !=0)
            {
              X[j,] <-  X[j,] - X[i,]*X[j,Mcol_index]/X[i,Mcol_index]
            }
          }
          Mcol_index <-  Mcol_index + 1
        }
       
      }
    }
  }
  Y <- matrix(rep(0,Mcol*Mrow), ncol = Mcol)
  iii <- 1
  for(i in 1: Mrow)
  {
    if(!is.na(which(X[i,]!=0)[1]))
    {
      Y[iii,] <- X[i,]
      iii <- iii + 1
    }
  }
  X <- Y
  return(X)
}
Mtrans_uptriangle(magic::magic(4))
#利用上面函数的化为阶梯型在化为标准型
standard <- function(X)
{
  options(digits = 5,scipen = 50)
  X <- Mtrans_uptriangle(X)
  zhi <- Matrix::rankMatrix(X)
    Mcol <- zhi
    for(ii in zhi:2)
    {
      for(jj in 1:(ii-1))
      {
        X[jj,] <- X[jj,]-X[ii,] * X[jj,Mcol]/X[ii,ii]
      }
      Mcol <- Mcol - 1
    }
    for(ii in 1:zhi)
    {
      X[ii,] <- X[ii,]/X[ii,ii]
    }
    print("标准型为")
    X
}

standard(magic::magic(4))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值