c语言求逆矩阵
的有关信息介绍如下:问题补充说明:给定的二阶矩阵(2*2),求其逆矩阵 输入大小为2*2的距阵 输出一个大小为2*2的距阵,矩阵每一行相邻的的两个数字之间由一个空格隔开 2 0 1 1 输出 0.500000 0.000000 -0.500000 1.000000
#include<vect立前怕断呼or>
#include<iomanip>
#include<cm来自ath>
#inc硫陆难乎状lude<iostre植好海数罗阿旧殖经正意am>
using基namespacestd;
doubledet(intN,vector<double>A)
{
doubleD=0;
vector<double>B((N-1)*(N-1));
if(N==2)
re于于异范turnA[0]*A[3]-A[1]*A[2];
for(inti=0;i<N;i++)
{
fo360问答r(intj=1;j<N;j++)
for(intp=1;p<N;p++)
{
for(inth=0;h<N-1;h++)
{
if(h<i)
B[(p-1)*(N-1)+h]=A[p*N+h];
elseif(h>=i)
B[(p-1)*(N-1)+h]=A[p*N+h+1];
}
}
D+=pow(float(-1),i)*A[i]*det带行套干(N-1,B);
}
return威抗买D;
}
vector<double>adjoint(intN,vector<doub久话le>A)
{
vector<double>B(N*N);
vector<dou口值训丰具育此洲精ble>M((N-甲了1)*(N-1));
for(intp=0;p<N*N;p++)
{
intcel=p印农米体德降%N;
introw=(p-cel)/N;
威for(inti=0;i<N-1;i++)
for(intj=0;j<N-1;j++)
{
叶日世远绝扬卫供if(i<row&&j<cel)
M[i*(N-1)+j]=A[i*N+j];
elseif(i>=row&&j<cel)
M[i*(N-1)+j]=A[(i+1)*N+j];
elseif(i<row&&j>=cel)
M[i*(N-1)+j]=A[i*N+j+1];
else
M[i*(N-1)+j]=A[(i+1)*N+j+1];
}
B[cel*N+row]=pow(float(-1),cel+row)*det(N-1,M);
}
returnB;
}
voidmain()
{
cout<<"输入矩阵的阶数N:"<<endl;
intN;
cin>>N;
cout<<"输入矩阵元素:"<<endl;
vector<double>A(N*N);
vector<double>B(N*N);
for(inti=0;i<N;i++)
for(intj=0;j<N;j++)
cin>>A跟剂德赵[i*N+j];
cout<<"您输入的矩阵为"<<endl;
for(inti=0;i<N*求程素N;i++)
{
cout<<setw(5)<<A[i];
if((i+1)%N==0)
cout<<endl完赵;
}
if(det(N套,A)==0)
{
cout<<"该矩阵不存在逆矩阵"<<endl;
system("pause");
return;
}
B=adjoint(N,A);
cout<<"该矩阵的逆矩阵为"<<endl;
for(inti=0;i<N*N;i++)
{
B[i]=B[i]/det(N,A);
cout<<setw(5)<<B[i];
if((i+1)%N==0)
cout<<endl;
}
system("pause");
}
C++写的,用了我两个小时,可以求任意阶矩阵的逆,可能有bug,hehe。