实对称正定矩阵求逆矩阵

来源:百度知道 编辑:UC知道 时间:2024/05/30 06:07:26
根据线性代数理论,实对称正定矩阵显然有逆矩阵,而且逆矩阵也是对称矩阵,即aij=aji(i不等于j).以下为书上原程序,但运行后结果不对(结果不是对称矩阵),正确结果为:
68 -41 -17 10
-41 25 10 -6
-17 10 5 -3
10 -6 -3 2
请将程序稍加修改,运行结果正确后再答复给我。高手指教。
/* 试验未通过 */
/* 正定矩阵求逆 */
#include <stdio.h>
#include <stdlib.h>
/* #include <malloc.h> */
/* 新系数的计算公式: */
int GJ(int,double **); /* a11'=1/a11 */
double **TwoArrayAlloc(int,int); /* a1j'=-a1j/a11 j=2,3,...,n */
void TwoArrayFree(double **); /* ai1'=ai1/a11 i=2,3,...,n */
/* aij'=aij-ai1*a1j/a11 i,j=2,3,...,n */
void main()
{
int i,j,n;
double **a;
n=4;
a=TwoArrayAlloc(n,n);
a[0][0]=5; a[0][1]=7; a[0][2]=6; a[0][3]=5;
a[1][0]=7; a[1][1]=10; a[1][2]=8; a[1][3]=7;
a[2][0]=6; a[2][1]=8; a[2][2]=10; a[2][3]=9;
a[3][0]=5; a[3][1]=7; a[

应当对称:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4
double A[N][N]={{68,-41,-17,10 },{-41,25 ,10 ,-6 },{-17, 10, 5, -3
},{10,-6,-3,2 }};

void swap(double *a,double *b){double c; c= *a; *a= *b; *b= c;};

int DinV(double A[N][N],int n)
{
int i,j,k;
double d;
int JS[N],IS[N];
for (k=0;k<n;k++)
{
d=0;
for (i=k;i<n;i++)
for (j=k;j<n;j++){
if (fabs(A[i][j])>d){
d=fabs(A[i][j]);
IS[k]=i;
JS[k]=j;
}; // end if
}; // end j
if (d+1.0==1.0) return 0;
if (IS[k]!=k) for (j=0;j<n;j++) swap( &A[k][j], &A[IS[k]][j]);
if (JS[k]!=k) for (i=0;i<n;i++) swap( &A[i][k], &A[i][JS[k]]);
A[k][k]=1/A[k][k];
for (j=0;j<n;j++) if (j!=k) A[k][j]=A[k][j]*A[k][k];
for (i=0;i<n;i++) if (i!=k) for (j=0;j<n;j++)