home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c129 / 1.ddi / CGJ.C < prev    next >
Encoding:
C/C++ Source or Header  |  1988-02-01  |  1.5 KB  |  50 lines

  1. # include <stdlib.h>
  2. # include <math.h>
  3. # define nearzero 1.0E-20
  4. # include "complex.h"
  5. # include "gj.h"
  6.  
  7. void ComplexGaussJordan(struct complext *coefary,struct complext *constary,
  8.                         int numcol,struct complext *solcoef,
  9.                         struct complext *invary,float *det)
  10. {
  11.    float *inv;
  12.    float *coef;
  13.    float *sol;
  14.    float *cons;
  15.    int nn;
  16.    int i;
  17.    int j;
  18.    float de;
  19.  
  20.    inv = (float *) calloc(4*numcol*numcol,4);
  21.    coef = (float *) calloc(4*numcol*numcol,4);
  22.    sol = (float *) calloc(2*numcol,4);
  23.    cons = (float *) calloc(2*numcol,4);
  24.  
  25.    for ( i = 0; i <= numcol-1; ++i ) {
  26.       for ( j = 0; j <= numcol-1; ++j ) {
  27.          coef[(i * 2 )*2*numcol+(j * 2 )] = coefary[i*numcol +j].x;
  28.          coef[(i * 2 )*2*numcol +(j * 2+1)] = -coefary[i*numcol+j].y;
  29.          coef[(i * 2+1)*2*numcol +(j * 2 )] = coefary[i*numcol+j].y;
  30.          coef[(i * 2+1)*2*numcol +(j * 2+1)] = coefary[i*numcol +j].x;
  31.  
  32.       }
  33.       cons[i * 2 ] = constary[i].x;
  34.       cons[i * 2+1] = constary[i].y;
  35.    }
  36.    nn = 2 * numcol;
  37.    GaussJordan(coef,cons,nn,sol,inv,&de);
  38.    for ( i = 0; i <= numcol-1; ++i ) {
  39.       for ( j = 0; j <= numcol-1; ++j ) {
  40.          invary[i*numcol +j].x = inv[(i * 2)*2*numcol +(j * 2 )];
  41.          invary[i*numcol +j].y = inv[(i * 2+1)*2*numcol +(j * 2 )];
  42.              }
  43.     solcoef[i].x = sol[i * 2 ];
  44.     solcoef[i].y = sol[i * 2+1];
  45.    }
  46.    (*det) = de;
  47.    free(coef); free(inv); free(sol) ; free(cons);
  48.  
  49. }
  50.