矩阵求逆的算法

2008-02-23 05:33:25来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

操作系统: win98
编程工具: vc 6
问题: 矩阵求逆的算法
水平: 中级(王钦军)
矩阵求逆一般使用Gauss-Jordan消去法。具体程式能够参考徐士良编的《C语言常用算法程式集》(清华大学出版社出版,ISBN 7-302-02290-9)或Template Numerical Toolkit(http://math.nist.gov/tnt/index.html)。

自由马的意见:
假如是对称正定矩阵,采用ldl分解更为快速有效。

askye的意见:
用C写的,做成DLL使用很方便。
double * MatrixOpp(double A[],int m,int n) /*矩阵求逆*/
{
int i,j,x,y,k;
double *SP=NULL,*AB=NULL,*B=NULL,X,*C;
SP=(double *)malloc(m*n*sizeof(double));
AB=(double *)malloc(m*n*sizeof(double));
B=(double *)malloc(m*n*sizeof(double));

X=Surplus(A,m,n);
X=1/X;

for(i=0;i<m;i )
for(j=0;j<n;j )
{for(k=0;k<m*n;k )
B[k]=A[k];
{for(x=0;x<n;x )
B[i*n x]=0;
for(y=0;y<m;y )
B[m*y j]=0;
B[i*n j]=1;
SP[i*n j]=Surplus(B,m,n);
AB[i*n j]=X*SP[i*n j];
}
}
C=MatrixInver(AB,m,n);

return C;
}

double * MatrixInver(double A[],int m,int n) /*矩阵转置*/
{
int i,j;
double *B=NULL;
B=(double *)malloc(m*n*sizeof(double));

for(i=0;i<n;i )
for(j=0;j<m;j )
B[i*m j]=A[j*n i];

return B;
}

double Surplus(double A[],int m,int n) /*求矩阵行列式*/
{

int i,j,k,p,r;
double X,temp=1,temp1=1,s=0,s1=0;

if(n==2)
{for(i=0;i<m;i )
for(j=0;j<n;j )
if((i j)%2) temp1*=A[i*n j];
else temp*=A[i*n j];
X=temp-temp1;}
else

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 如何能在VC 7.0中使用新标准的流

下一篇: (c )两个类相互包含引用的问题