资源简介
课程作业,采用初等行变换求矩阵的逆矩阵,c语言实现,程序可在不同编译器上编译成功
代码片段和文件信息
/* 1.求Q上方阵的行列式,如果行列式≠0,求逆矩阵。
中国科技大学信息科学与技术学院
刘迪源 SA12006054
2012.10.13
*/
#include
#include //clock()1
#include
using namespace std;
int str_cut(char in[]char word[][50]);
double** readArray(int &Mint &N);
void display(double **Qint Hint L);
int main()
{
int M=0N=0;
double **Q;
char way;
cout<<“ 矩阵求逆程序:\n直接从\“需要求逆的矩阵.txt\“文件中读取矩阵请按数字键1,回车\n现在即时输入矩阵请按其他键,回车“< cin>>way;
if(way==‘1‘)
{
Q=readArray(MN);
if(M!=N){cout<<“矩阵不是方阵!“<>way;exit(0);}
cout<<“待求逆矩阵:\n“; display(QMN);
}
else
{
cout<<“请输入矩阵行数M:“;cin>>M;N=M;cout< Q=new double*[M]; for(int i=0;i cout<<“开始输入“< for(int i=0;i {
for(int j=0;j {
cout<<“Q[“<>Q[i][j];
}
cout< }
cout<<“待求逆矩阵:\n“;display(QMN);
}
clock_t begin end;//clock()2
double cost;
begin = clock();
FILE *fp=fopen(“求逆结果.txt““w“);
double **QE=new double*[N]; for(int i=0;i for(int i=0;i {
for(int j=0;j<2*N;j++)
{
if(j else {if(i+N!=j) QE[i][j]=0;else QE[i][j]=1;}
}
}
double Qvalue=1;
for(int j=0;j {
bool az=true;int nz_i; for(int i=j;i1e-13 ||QE[i][j]<-1e-13){az=falsenz_i=i;break;}
if(az){cout<<“|Q|=0 Matrix irreversible!“< else if(QE[j][j]<1e-13 && QE[j][j]>-1e-13) //QE[j][j]==0
{
double temp;
for(int k=j;k<2*N;k++){temp=QE[j][k]QE[j][k]=QE[nz_i][k]QE[nz_i][k]=temp;}
}
for(int i=j+1;i {
double multiple=QE[i][j]/QE[j][j];
if(multiple>1e-13 ||multiple<-1e-13)
{
for(int k=j;k<2*N;k++) QE[i][k]-=multiple*QE[j][k];
}
}
Qvalue *= QE[j][j];
}
for(int j=N-1;j>=0;j--)
{
for(int i=j-1;i>=0;i--)
{
double multiple=QE[i][j]/QE[j][j];
if(multiple>1e-13 ||multiple<-1e-13)
{
for(int k=j;k<2*N;k++) QE[i][k]-=multiple*QE[j][k];
}
}
if(QE[j][j]!=1) for(int k=2*N-1;k>=j;k--) QE[j][k]/=QE[j][j];
}
double **Q_INV=new double*[N]; for(int i=0;i for(int i=0;i cout<<“逆矩阵:“< display(Q_INVNN);
cout<<“行列式值:|Q| = “< fclose(fp);
cout<<“逆矩阵已存入\“求逆结果.txt\“文件中“< delete [] QQEQ_INV;
end = clock();//clock()3
cost = (double)(end - begin) / CLOCKS_PER_SEC;
if(cost>0.0001)
printf(“求解时间:%15.6lf seconds\n“ cost);
cin>>way;
return 0;
}
int str_cut(char in[]char word[][50])//通过空格、制表符、回车符标志将字符串切分成子串,返回子串个数
{
char endchar[10]=“ \n\t;,;“;
int j=0i=0sumw=0endnull;
for(int i0=0;i0 {
if(!strrchr(endcharin[i0]))
{word[j][i]=in[i0];i++;endnull=0;}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 264 2012-10-13 09:24 矩阵求逆\debug\求逆结果.txt
文件 172032 2012-10-13 09:20 矩阵求逆\debug\矩阵求逆.exe
文件 102 2012-10-13 09:06 矩阵求逆\debug\需要求逆的矩阵.txt
文件 7008 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug\BuildLog.htm
文件 67 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug\mt.dep
文件 125952 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug\vc80.idb
文件 145 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug\矩阵求逆.exe.intermediate.manifest
文件 192248 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug\矩阵求逆.obj
文件 2183 2012-10-11 18:25 矩阵求逆\矩阵求逆\其他\wrong.cpp
文件 3788 2012-10-12 13:32 矩阵求逆\矩阵求逆\其他\复件 (2) 矩阵求逆.cpp
文件 2167 2012-10-12 17:59 矩阵求逆\矩阵求逆\其他\复件 矩阵求逆.cpp
文件 1963 2012-10-11 16:53 矩阵求逆\矩阵求逆\其他\矩阵求逆_cout.cpp
文件 1944 2012-10-11 17:00 矩阵求逆\矩阵求逆\其他\矩阵求逆_printf.cpp
文件 264 2012-10-13 09:14 矩阵求逆\矩阵求逆\求逆结果.txt
文件 4227 2012-10-13 09:20 矩阵求逆\矩阵求逆\矩阵求逆.cpp
文件 3070 2012-10-11 08:43 矩阵求逆\矩阵求逆\矩阵求逆.vcproj
文件 1427 2012-10-13 09:21 矩阵求逆\矩阵求逆\矩阵求逆.vcproj.PC-201110311654.Administrator.user
文件 102 2012-10-13 09:06 矩阵求逆\矩阵求逆\需要求逆的矩阵.txt
文件 1813504 2012-10-13 09:21 矩阵求逆\矩阵求逆.ncb
文件 901 2012-10-11 08:21 矩阵求逆\矩阵求逆.sln
..A..H. 12800 2012-10-13 09:21 矩阵求逆\矩阵求逆.suo
目录 0 2012-10-13 09:20 矩阵求逆\矩阵求逆\Debug
目录 0 2012-10-13 09:21 矩阵求逆\矩阵求逆\其他
目录 0 2012-10-13 09:22 矩阵求逆\debug
目录 0 2012-10-13 09:21 矩阵求逆\矩阵求逆
目录 0 2012-10-11 08:41 矩阵求逆
----------- --------- ---------- ----- ----
2346158 26
- 上一篇:C语言模拟文件系统
- 下一篇:双三次B样条曲面算法
评论
共有 条评论