/*  tsolvru.c    CCMATH mathematics library source code.
 *
 *  Copyright (C)  2000   Daniel A. Atkinson    All rights reserved.
 *  This code may be redistributed under the terms of the GNU library
 *  public license (LGPL). ( See the lgpl.license file for details.)
 * ------------------------------------------------------------------------
 */
/*
    Test:  solvru

    Uses:  vmult  mcopy  matprt

    Input file:  solru.dat
*/
#include "ccmath.h"
void main(int na,char **av)
{ int i,m,n; FILE *fp;
  double *p,*a,*x,*b,*y;
  if(na!=2){ printf("para: input_file\n"); exit(-1);}
  fp=fopen(*++av,"r");
  printf("Test of Linear Equation R-U Decomposition Solver\n");
  fscanf(fp,"%d",&n); m=n*n;
  a=(double *)calloc(2*(m+n),sizeof(double));
  b=a+m; x=b+m; y=x+n;
  for(i=0,p=a; i<m ;++i) fscanf(fp,"%lf",p++);
  for(i=0,p=x; i<n ;++i) fscanf(fp,"%lf",p++);
  printf(" input matrix A:\n"); matprt(a,n,n,"%10f ");
  printf(" input vector x:\n"); matprt(x,1,n,"%10f ");
  mcopy(b,a,n*n);

/* solve the real linear system using R-U decomposition*/
  i=solvru(a,x,n);

  if(i) printf(" matrix singular\n");
  else{ printf(" solution vector y:\n"); matprt(x,1,n,"%10f ");
/* check solution */
    vmul(y,b,x,n);
    printf(" check vector z=A*y\n"); matprt(y,1,n,"%10f ");
   }
}
/* Test output

Test of Linear Equation R-U Decomposition Solver
 input matrix A:
  4.000000  -3.000000   1.000000  -2.000000 
  0.000000  -2.000000   2.000000  -1.000000 
  0.000000   0.000000   3.000000  -2.000000 
  0.000000   0.000000   0.000000   3.000000 
 input vector x:
  1.000000   0.500000  -1.000000  -2.000000 
 solution vector y:
 -0.409722  -0.694444  -0.777778  -0.666667 
 check vector z=A*y
  1.000000   0.500000  -1.000000  -2.000000 
*/


syntax highlighted by Code2HTML, v. 0.9.1