您的位置首页百科知识

c语言求逆矩阵

c语言求逆矩阵

的有关信息介绍如下:

问题补充说明:给定的二阶矩阵(2*2),求其逆矩阵 输入大小为2*2的距阵 输出一个大小为2*2的距阵,矩阵每一行相邻的的两个数字之间由一个空格隔开 2 0 1 1 输出 0.500000 0.000000 -0.500000 1.000000

c语言求逆矩阵

#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。