矩阵求逆

本文详细介绍了使用行列式的概念来实现矩阵求逆的过程。通过构造余子式并结合行列式的值,逐步完成矩阵的逆运算。该算法适用于方阵,并且能够处理包括单位矩阵在内的多种类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// X 原  Y输出  Z余子式临时空间
int  DMatrix_Rev( Dmatrix_t *X, Dmatrix_t *Y, Dmatrix_t *Z  )
{
    double val,val_z,*Xp,*Yp,*Zp;
    int i,j,m,n,k,k_ou;
    if(X->hang!= X->lie ) return 0;
    if(X->hang==0) return 0;
    Y->lie =  X->lie;    Y->hang =  X->hang;
    memcpy(Y->datap,X->datap,X->hang*X->hang*sizeof(double));
    if( 0== DMatrix_Det(Y,&val)  ) return 0;
    if(val==0) return 0;
    if(X->hang==1 )
    {
        *Y->datap  = 1.0/ *X->datap ;
        return 1;
    }
    val=1/val;

    Z->hang=X->hang-1;
    Z->lie =X->lie-1;

    k=1;// -1下标之和的次方, 奇数阶 一直*-1 ,偶数阶 换行多乘-1 
    k_ou=(X->hang&0x01 )?1:-1;//奇数阶 一直*-1 ,偶数阶 换行多乘-1 
    Yp=  Y->datap;
    for(i=0;i<X->hang;i++ )
    {
        Yp=  Y->datap+i;
        for(j=0;j<X->hang;j++ )
        {
            
        
            Xp= X->datap;
            Zp= Z->datap;
            for(m=0;m<X->hang;m++)
            {
                for(n=0;n<X->hang;n++)     
                {
                    if((m!=i)&&(n!=j))//构造余子式 
                    {
                    *Zp++     = *Xp;
                    }
                Xp++;    
                }
            }
         DMatrix_Det(Z,&val_z);
         
            *Yp = (double )k * val_z*val;
            
            Yp+=X->hang; // 注意结论有个转置关系 
            
            k*=-1;        
        }
        k*=k_ou;
    }
     
    return 1;    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值