以 下是我的程序:VS 2005环境下编译
#include "stdafx.h"
#include #include #include #define MAX 10 void Inverse(double *matrix1[],double *matrix2[],int n,double d); double Determinant(double* matrix[],int n); double AlCo(double* matrix[],int jie,int row,int column); double Cofactor(double* matrix[],int jie,int row,int column); int _tmain(int argc, _TCHAR* argv[]) { double array[12][3],Y[3]; double A,B,C; A = B = C = 0.0; ZeroMemory(array,sizeof(array)); ZeroMemory(Y,sizeof(Y)); for (int i = 0;i < 12;i++) { for (int j = 0;j < 3;j++) { array[i][j] = (double)rand(); } } for (int i = 0; i < 12;i++) { array[i][0] = 1.0; }//设计了12个最简单的数据点,x = 1平面上的点, double *Matrix[3],*IMatrix[3]; for (int i = 0;i < 3;i++) { Matrix[i] = new double[3]; IMatrix[i] = new double[3]; } for (int i = 0;i < 3;i++) { for (int j = 0;j < 3;j++) { *(Matrix[i] + j) = 0.0; } } for (int j = 0;j < 3;j++) { for (int i = 0;i < 12;i++) { *(Matrix[0] + j) += array[i][0]*array[i][j]; *(Matrix[1] + j) += array[i][1]*array[i][j]; *(Matrix[2] + j) += array[i][2]*array[i][j]; Y[j] -= array[i][j]; } } double d = Determinant(Matrix,3); if (abs(d) < 0.0001) { printf("\\n矩阵奇异"); getchar(); return -1; } Inverse(Matrix,IMatrix,3,d); for (int i = 0;i < 3;i++) { A += *(IMatrix[0] + i)*Y[i]; B += *(IMatrix[1] + i)*Y[i]; C += *(IMatrix[2] + i)*Y[i]; } printf("\\n A = %5.3f,B = %5.3f,C= %5.3f",A,B,C); for (int i = 0;i < 3;i++) { delete[] Matrix[i]; delete[] IMatrix[i]; } getchar(); return 0; } void Inverse(double *matrix1[],double *matrix2[],int n,double d) { int i,j; for(i=0;i for(i=0;i } double Determinant(double* matrix[],int n) { double result=0,temp; int i; if(n==1) result=(*matrix[0]); else { for(i=0;i temp=AlCo(matrix,n,n-1,i); result+=(*(matrix[n-1]+i))*temp; } } return result; } double AlCo(double* matrix[],int jie,int row,int column) { double result; if((row+column)%2 == 0) result = Cofactor(matrix,jie,row,column); else result=(-1)*Cofactor(matrix,jie,row,column); return result; } double Cofactor(double* matrix[],int jie,int row,int column) { double result; int i,j; double* smallmatr[MAX-1]; for(i=0;i for(i=0;i for(i=row;i for(i=0;i for(i=row;i result = Determinant(smallmatr,jie-1); for(i=0;i return result; }