200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 矩阵行列式的计算及逆矩阵转换

矩阵行列式的计算及逆矩阵转换

时间:2023-03-26 16:52:15

相关推荐

矩阵行列式的计算及逆矩阵转换

1.行列式的计算

矩阵行列式的计算在数学上有多种方法,为了编程方便,我采取将矩阵转化为上三角的形式,然后对角线上的数相乘,便得到行列式的值。

首先将矩阵储存在vector的二维数组中,接着开始进行行与行之间的·换算。使矩阵转换为上三角形式。

以下是代码:

void CJZCalculate3Dlg::det()

{

vector<vector<double > > v5=v1; // v1是与edit框绑定的变量所表示的矩阵

vector<vector<double > > v6(100);

for(int tt=0;tt<r1;tt++)

v6[tt].resize(c1);

double c[1000]={0};

double det=1;

for(int i=0;i<c1-1;i++) / 上三角运算

{

if(v5[i][i]==0) /// 判断 对角数是否为 0

{

int flag=0;

for(int f=i+1;f<c1;f++)

{

if(v5[f][i]!=0)

{

v6[0]=v5[i];

v5[i]=v5[f];

v5[f]=v6[0];

flag=1;

det=0-det;

break;

}

}

if(flag==0)

{

det=0;

break;

}

} /// 结束判断

c[i]=v5[i][i];

for(int j=i+1;j<c1;j++)

v5[i][j]=v5[i][j]/v5[i][i];

v5[i][i]=1;

for(int k=i+1;k<c1;k++)

{

for(int t=i+1;t<c1;t++)

v5[k][t]=v5[k][t]-v5[k][i]*v5[i][t];

v5[k][i]=0;

}

}

det=det*v5[c1-1][c1-1];

for(int s=0;s<c1-1;s++)

det=det*c[s];

m_str3.Format(_T("%lf "),det); ///m_str3为与edit框绑定的变量,update后便可以将行列式的值刷新到edit框

}

det的值便为行列式的值

2.逆矩阵的求导

首先,确定待求矩阵行列式是否为0,如果为0.则不存在逆矩阵

确定了存在逆矩阵后,便可以开始进行计算了;

利用数学公式:矩阵A的矩阵逆矩阵对于,A的伴随矩阵除以A的行列式。

以下为代码:

void CJZCalculate3Dlg::OnButton6()

{

// TODO: Add your control notification handler code here

/// m_str3为与edit框绑定的变量

m_str3=""; //情况edit3里的数据,以便显示新数据

det(); // 计算行列式

double A=atof(m_str3); / 行列式赋值给A

if(A==0)

{

m_str3="行列式为0,不存在逆矩阵";

}

else

{

double a[100][100]={0};

v7=v1;

c1--;

for(int i=1;i<=r1;i++) //伴随矩阵计算

{

for(int j=1;j<=r1;j++)

{

v1.erase(v1.begin()+i-1);

for(int k=0;k<r1-1;k++)

v1[k].erase(v1[k].begin()+j-1);

for(int k2=0;k2<r1-1;k2++)

v1[k2].resize(r1-1);

det();

a[j][i]=atof(m_str3);

if((i+j)%2==1)

a[j][i]=0-a[j][i];

for(int jk=0;jk<r1;jk++)

v1[jk].resize(r1);

v1=v7;

}

} 将伴随矩阵代入数组

c1++;

m_str3="";

for(int t1=1;t1<=r1;t1++) /// 显示逆矩阵

{

for(int t2=1;t2<=r1;t2++)

{

str3.Format(_T("%lf "),a[t1][t2]/A);

m_str3=m_str3+str3;

}

m_str3=m_str3+"\r\n";

}

}

CString类型的m_str3就是逆矩阵

UpdateData(false); //逆矩阵被刷新到edit框上

}

矩阵计算器完整代码见/download/cyl00cyl/10693382,能够实现矩阵加减乘运算,幂运算,数乘运算,转置,行列式,逆矩阵。 能够检测矩阵是否完整,能够识别是否能进行所选择的运算,并且提示出不能进行计算的原因。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。