資源簡介
因為矩陣AA-1=E,于是可以利用AX=E來求A-1。
程序先初始化兩個n維矩陣p[],q[],,p[]用來存放要求逆的矩陣,通過高斯列主元消元法變成上三角矩陣,q[]與p[]同時變換。通過追趕法解出每一行的解存放在q[]中

代碼片段和文件信息
#include?“Stdio.h“
#include?“math.h“
int?inversion(int?ndouble?p[]double?q[]);
FILE?*fp?;
void?main()
{
?int?nij;
?double?p[100]q[100];
?float?r[100];
?printf(“Input?n:“);
?scanf(“%d“&n);
??if(n==-1)?return;
??printf(“\n“);
for(i=0;i ??{
??for(j=0;j ??{
????p[i*n+j]=0.0;
????}
????}
??printf(“Input?the?matrix:“);
??for(i=0;i ??{
??for(j=0;j ??{
??scanf(“%f“&(r[i*n+j]));
????p[i*n+j]=r[i*n+j];
????if(j==i)?q[i*n+j]=1.0;
????else?q[i*n+j]=0.0;
????}
????}
???fp=fopen(“matrix?inversion.txt““wb“);
???if(inversion(npq))
??{
???for(i=0;i ??{
??for(j=0;j ??{
????printf(“%18.8e“(q[i*n+j]));
????fprintf(fp“%18.8e“(q[i*n+j]));
????}
????printf(“\n“);
????fprintf(fp“\n“);
????}
???}
???fclose(fp);
}
int?inversion(int?ndouble?p[]double?q[])
?{
???int?ijk;
???double?s;
????for(i=0;i ????{
????s=fabs(p[i*n+i]);
????j=i;
????for(k=i;k<=n-1;k++)
????{??
???????if(fabs(p[k*n+i])>s)
???????{
???????j=k;
???????s=fabs(p[k*n+i]);
???????}
???????}
???????if(j!=i)
???????{
????????for(k=i;k ????????{
?????????s=p[i*n+k];
?????????p[i*n+k]=p[j*n+k];
?????????p[j*n+k]=s;
????????}
????????for(k=0;k ????????{
?????????s=q[i*n+k];
?????????q[i*n+k]=q[j*n+k];
?????????q[j*n+k]=s;
?????????}
?????????}
?????????for(k=i+1;k ?????????{
??????????s=p[k*n+i]/p[i*n+i];
??????????p[k*n+i]=0;
??????????for(j=i+1;j ??????????{
???????????p[k*n+j]=p[k*n+j]-s*p[i*n+j];
???????????}
???????????for(j=0;j ???????????{
???????????q[k*n+j]=q[k*n+j]-s*q[i*n+j];
???????????}
???????????}
???????????}
????????????if(p[(n-1)*n+n-1]==0)
????????????{
????????????printf(“The?matrix?is?singular.\n“);
????????????fprintf(fp“The?matrix?is?singular.\n“);
????????????return?0;
????????????}
???????????for(j=0;j ???????????{
???????????q[(n-1)*n+j]=q[(n-1)*n+j]/p[(n-1)*n+n-1];
???????????for(i=n-2;i>=0;i--)
???????????{??s=0;
????????????for(k=i+1;k ????????????{
????????????s+=p[i*n+k]*q[k*n+j];
????????????}
????????????q[i*n+j]=(q[i*n+j]-s)/p[i*n+i];
????????????}
????????????}
????????????return?1;
????????????}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2233??2009-11-09?13:33??2\2.cpp
?????文件???????3341??2008-11-26?15:41??2\2.dsp
?????文件????????527??2008-11-26?15:41??2\2.dsw
?????文件??????41984??2008-12-11?16:24??2\2.ncb
?????文件??????53760??2008-12-11?16:24??2\2.opt
?????文件????????717??2008-12-11?16:21??2\2.plg
?????文件?????196673??2008-12-11?16:21??2\Debug\2.exe
?????文件???????6873??2008-12-11?16:21??2\Debug\2.obj
?????文件?????377856??2008-12-11?16:21??2\Debug\2.pdb
?????文件??????53248??2008-12-11?16:21??2\Debug\vc60.pdb
?????文件????????165??2008-12-11?16:22??2\matrix?inversion.txt
?????目錄??????????0??2008-11-26?15:38??2\Debug
?????目錄??????????0??2008-11-26?15:38??2
-----------?---------??----------?-----??----
???????????????737377????????????????????13
- 上一篇:c++職工信息管理系統課程設計報告
- 下一篇:dos.cpp
評論
共有 條評論