/* tcmops.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: cmattr trncm
Uses: cmmult cmprt
Input file: cm42.dat
*/
#include "ccmath.h"
char cfmt[]="(%7.3f,%7.3f)";
void main(int na,char **av)
{ Cpx *a,*b,*c,*p;
int i,j,n,m; FILE *fp;
if(na!=2){ printf("para: input_file\n"); exit(-1);}
fp=fopen(*++av,"r");
fscanf(fp,"%d %d",&n,&m);
b=(Cpx *)calloc(2*n*m,sizeof(Cpx)); c=b+n*m;
a=(Cpx *)calloc(n*n,sizeof(Cpx));
for(i=0,p=b; i<n ;++i){
for(j=0; j<m ;++j,++p) fscanf(fp,"%lf %lf",&(p->re),&(p->im));
}
printf(" Mat b:\n"); cmprt(b,n,m,cfmt);
/* general complex transpose */
cmattr(c,b,n,m);
printf(" Mat b':\n"); cmprt(c,m,n,cfmt);
for(i=0,p=c; i<n*m ;++i,++p) p->im= -(p->im);
cmmult(a,b,c,n,m,n);
printf(" Mat a=b*b^:\n"); cmprt(a,n,n,cfmt);
/* square matrix transpose */
trncm(a,n);
printf(" Mat a':\n"); cmprt(a,n,n,cfmt);
}
/* Test output
Mat b:
( -0.542, 1.345)( -0.830, -1.434)
( -2.256, 0.567)( -1.018, -0.849)
( -0.832, 0.843)( -0.999, -1.059)
( 0.147, 0.758)( 0.673, -0.536)
Mat b':
( -0.542, 1.345)( -2.256, 0.567)( -0.832, 0.843)( 0.147, 0.758)
( -0.830, -1.434)( -1.018, -0.849)( -0.999, -1.059)( 0.673, -0.536)
Mat a=b*b^:
( 4.848, 0.000)( 4.048, -1.972)( 3.933, -0.109)( 1.150, -0.801)
( 4.048, 1.972)( 7.168, 0.000)( 4.271, 1.200)( -0.132, 0.676)
( 3.933, 0.109)( 4.271, -1.200)( 3.522, 0.000)( 0.412, -0.494)
( 1.150, 0.801)( -0.132, -0.676)( 0.412, 0.494)( 1.336, 0.000)
Mat a':
( 4.848, 0.000)( 4.048, 1.972)( 3.933, 0.109)( 1.150, 0.801)
( 4.048, -1.972)( 7.168, 0.000)( 4.271, -1.200)( -0.132, -0.676)
( 3.933, -0.109)( 4.271, 1.200)( 3.522, 0.000)( 0.412, 0.494)
( 1.150, -0.801)( -0.132, 0.676)( 0.412, -0.494)( 1.336, 0.000)
*/
syntax highlighted by Code2HTML, v. 0.9.1