/*  tutrncm.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:  utrncm  utrnhm

    Uses:  hconj  unitary  hmgen  cmcpy  cmprt

    Input parameter:  n  -> size of matrices is n by n
*/
#include "ccmath.h"
void main(int na,char **av)
{ int n,m,k; Cpx *a,*u,*v,*h,*s;
  double *q; unsigned int seed;
  if(na!=2){ printf("para: dim\n"); exit(1);}
  n=atoi(*++av); m=n*n;
  a=(Cpx *)calloc(4*m,sizeof(Cpx));
  q=(double *)calloc(n,sizeof(double));
  h=a+m; u=h+m; v=u+m;
  seed=123456789; setunfl(seed);
  for(k=1; k<=n ;++k) q[k-1]=(double)k;
  unitary(u,n); hmgen(h,q,u,n);
  printf(" matrix h:\n");
  cmprt(h,n,n,"(%7.3f,%7.3f)");
  cmcpy(v,u,n*n); hconj(v,n);

/* transform of h by the unitary matrix v */
  utrncm(a,v,h,n);

  printf(" matrix conjugate vhv^:\n");
  cmprt(a,n,n,"(%7.3f,%7.3f)");

/* transform Hermitian h by the unitary matrix v */
  utrnhm(a,v,h,n);

  printf(" hermitian conjugate a=vhv^:\n");
  cmprt(a,n,n,"(%7.3f,%7.3f)");
/* check transform by inversion */
  utrnhm(v,u,a,n);
  printf(" hermitian conjugate uau^:\n");
  cmprt(v,n,n,"(%7.3f,%7.3f)");
}
/* Test output

 matrix h:
(  2.740, -0.000)(  0.313,  0.438)( -0.587, -0.205)(  0.179, -0.000)
(  0.313, -0.438)(  1.857, -0.000)(  0.457, -0.444)( -0.375, -0.091)
( -0.587,  0.205)(  0.457,  0.444)(  2.482,  0.000)( -0.955,  0.000)
(  0.179,  0.000)( -0.375,  0.091)( -0.955, -0.000)(  2.921, -0.000)
 matrix conjugate vhv^:
(  1.000, -0.000)( -0.000, -0.000)(  0.000, -0.000)(  0.000,  0.000)
( -0.000,  0.000)(  2.000, -0.000)(  0.000, -0.000)(  0.000,  0.000)
(  0.000,  0.000)(  0.000,  0.000)(  3.000, -0.000)(  0.000, -0.000)
( -0.000,  0.000)(  0.000, -0.000)(  0.000,  0.000)(  4.000,  0.000)
 hermitian conjugate a=vhv^:
(  1.000, -0.000)( -0.000, -0.000)(  0.000, -0.000)(  0.000,  0.000)
( -0.000,  0.000)(  2.000, -0.000)(  0.000, -0.000)(  0.000,  0.000)
(  0.000,  0.000)(  0.000,  0.000)(  3.000, -0.000)(  0.000, -0.000)
(  0.000, -0.000)(  0.000, -0.000)(  0.000,  0.000)(  4.000,  0.000)
 hermitian conjugate uau^:
(  2.740, -0.000)(  0.313,  0.438)( -0.587, -0.205)(  0.179, -0.000)
(  0.313, -0.438)(  1.857, -0.000)(  0.457, -0.444)( -0.375, -0.091)
( -0.587,  0.205)(  0.457,  0.444)(  2.482, -0.000)( -0.955,  0.000)
(  0.179,  0.000)( -0.375,  0.091)( -0.955, -0.000)(  2.921, -0.000)
*/


syntax highlighted by Code2HTML, v. 0.9.1