Hello, there:
I am trying to calculate to the inverse of matrix A.
How to call function to main part? How to write the code for a matrix?
Can someone help me modify the errors?
Thank you very much!
--------
#include "matrix.h"
Matrix solve(const Matrix& A, const Matrix& B){
/*
solve A x = B and return the answer.
It is assumed that A can be factored without pivoting.
The factors are not saved
*/
if( A.row!=A.col || A.row!=B.row )
error("Matrix solve: incompatible sizes\n");
Matrix C(A),X(B); // local copies of A and B
int i,j,k,cr=A.row,xc=B.col;
double a,b;
// First preprocess C
for(i=0; i<cr; i++){ // for each row of C
if( C.m[i*cr+i] == 0.0 ) error(" zero divide in solve ");
a = (C.m[i*cr+i] = 1./C.m[i*cr+i]);
for( j=i+1; j<cr; j++ ) // normalize the current row
C.m[i*cr+j] *=a;
for( k=i+1; k<cr; k++ ){// for each row after i modify the row
if((b = C.m[k*cr+i])!=0.0){ // but only if it is needed.
for( j=i+1; j<cr; j++ )
C.m[k*cr+j] -= b*C.m[i*cr+j];
}
}
}
// now solve the equations
for(k=0; k<xc; k++){ // for each column of X
for(i=0; i<cr; i++ ){ // forward solution
for( j=0; j<i; j++ )
X.m[i*xc+k] -= C.m[i*cr+j]*X.m[j*xc+k];
X.m[i*xc+k] *= C.m[i*cr+i];
}
for(i=cr-2; i>=0; i--) // back solution
for(j=i+1; j<cr;j++ )
X.m[i*xc+k] -= C.m[i*cr+j]*X.m[j*xc+k];
}
return X;
}
main() {
double A[3][3] = {{0, 0, 6}, {1/3, 0, 0}, {0, 1/2, 0}};
double B[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
A beginner