我写了一个C++矩阵类,但是求逆函数不会写了,求大神们帮帮忙!!谢了 5

这是我写的类声明,就差求逆函数inverse()写不出来了求帮忙啊TAT#include<iostream>#include<math.h>usingnamespaces... 这是我写的类声明,就差求逆函数inverse()写不出来了 求帮忙啊TAT
#include<iostream>
#include<math.h>
using namespace std;
class CZWP_Matrix
{
public:
CZWP_Matrix(int r=0, int c=0);// 构造函数
virtual~CZWP_Matrix(); //析构函数
CZWP_Matrix(const CZWP_Matrix& m);// 复制构造函数
//矩阵运算
void printm() ;//矩阵元素逐个输出
bool operator==(const CZWP_Matrix& m);// 比较运算符
bool operator!=(const CZWP_Matrix& m);// 比较运算符
CZWP_Matrix& operator=(const CZWP_Matrix& m); //赋值运算符
CZWP_Matrix operator+(CZWP_Matrix& m);// 加运算符
CZWP_Matrix operator-( CZWP_Matrix& m);// 减运算符
CZWP_Matrix& operator++();// 自加运算符
CZWP_Matrix& operator--();// 自减运算符
CZWP_Matrix operator*( CZWP_Matrix& m);// 乘法运算符
CZWP_Matrix transpose();// 矩阵转置
CZWP_Matrix inverse();// 矩阵求逆
//属性函数
int getcol() const { return col; }
void setval(int r, int c, double value) { mat[r][c] = value; }
double getval(int r, int c) const { return mat[r][c]; } // 设置行、列的值
void setrow(int r) { row = r; }
int getrow() const { return row; }
void setcol(int c) { col = c; }
private:// 成员变量
double **mat;
int row;//行
int col; //列
};
展开
 我来答
jorden_02
2012-10-22 · TA获得超过159个赞
知道答主
回答量:48
采纳率:0%
帮助的人:56万
展开全部

之前也做过一个类似的矩阵计算的程序。我把我的代码贴出来给你,你自己根据需要修改下好了。思路就是按照矩阵的逆等于其伴随矩阵除以行列式。因此,可以先计算其伴随阵和行列式。

=======================================================================

void NUM_MIN_MAT(double mat[][N_MAX],double aim[][N_MAX],double Lamder,int Line,int Row)

{    /*矩阵数乘函数,要求输入原矩阵,目标矩阵,要乘的数,矩阵的行数及列数*/

    int m,n;

    for(m=0;m<Line;m++)

        {for(n=0;n<Row;n++)

            aim[m][n]=Lamder*mat[m][n];                                                    //将每个数都乘以Lamder 

        }

}

void REMAIN_MAT(double mat[][N_MAX],double aim[][N_MAX],int l,int r,int l0,int r0)

{    /*求将第l行r列元素去掉以后的矩阵,要求输入原矩阵,目标矩阵,该元素的所在行数和列数以

    及原矩阵的行数和列数,函数不修改原矩阵*/

    int m,n;

    for(m=0;m<l0;m++)

        for(n=0;n<r0;n++)

            aim[m][n]=mat[m][n];

    for(m=l;m<l0-1;m++)

        for(n=0;n<r0;n++)

            aim[m][n]=mat[m+1][n];

    for(n=r;n<r0-1;n++)

        for(m=0;m<l0-1;m++)

            aim[m][n]=aim[m][n+1];

}

double det(double mat[][N_MAX],int h)

{    /*方阵行列式函数,形参是该方阵及大小,函数返回行列式的值*/

    double ak,ans=0.0;                                                                    //定义第ak项,定义求和的值 

    int n,m,k;

    if(h==1)

        return mat[0][0];                                                                //方阵为一阶时行列式为该元素的值

    if(h==2)

        return mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];                                    //二阶时直接计算,函数的出口

    else

        {double modify[N_MAX][N_MAX];                                                    //定义修改后的方阵存放在modify中,即ak的余子式

        for(k=0;k<h;k++)

            {ak=mat[0][k];                                                                //ak存放第一行第k个数

            REMAIN_MAT(mat,modify,0,k,h,h);                                                //得到去掉第0行第k列后的子式 

            ans=ans+pow(-1,k)*ak*det(modify,h-1);                                        //按按a[0]行展开用递归函数进行求和计算

            }

        return ans;

        }

}

bool REVERSE_MAT(double mat[][N_MAX],double aim[][N_MAX],int h)

{    /*矩阵逆阵函数,要求输入原方阵阵,目标方阵,方阵的阶数,成功转置返回true,否则返回fa

    lse*/

    int m,n;

    Clear_Mat(aim);   

    if(det(mat,h)==0)

        return false;

    else

    {    double copy[N_MAX][N_MAX],company[N_MAX][N_MAX],remain[N_MAX][N_MAX];            //定义用来复制原矩阵从而可以进行修改的copy矩阵,及伴随矩阵

        for(m=0;m<h;m++)

            {for(n=0;n<h;n++)

                {REMAIN_MAT(mat,remain,m,n,h,h);

                company[n][m]=det(remain,h-1)*pow(-1,m+n);

                }

            NUM_MIN_MAT(company,aim,pow(det(mat,h),-1),h,h);

            }

        return true;

    }

}

希望该结果能满意~~

百度网友c56a9cb05
2012-10-17
知道答主
回答量:31
采纳率:0%
帮助的人:16.1万
展开全部
矩阵求逆可不简单啊,首先方阵才可能有逆,其次即使是方阵,还要是满秩也就是矩阵的行列式非0,理论上讲可以用伴随矩阵和矩阵的行列式来求逆矩阵,伴随矩阵还是要用到行列式计算。
你有想过怎么计算方针的行列式了么?

另外就是可以使用基本线性变换,(A E)=> (E A^(-1)), 把矩阵A逐步逐步地变成单位阵的时候, 单位阵就会变成逆矩阵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
融双冀萍雅
2020-02-29 · TA获得超过1036个赞
知道答主
回答量:1221
采纳率:100%
帮助的人:5.3万
展开全部
直接用一般求矩阵拟矩阵的方法就行了咯,把a,b看成元素,显然要做的第一件事情就是把两行互换。。下面那些公式都是这样子来的。。
查看原帖>>
记得采纳啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式