Example #1
0
void
mmul(double *c,double *a,double *b,int n)
{
  double *p,*q,s;
  int i,j,k;
  trnm(b,n);
  for(i=0; i<n ; ++i,a+=n) {
    for(j=0,q=b; j<n ; ++j) {
      for(k=0,p=a,s=0.; k<n ; ++k) s+= *p++ * *q++;
      *c++ =s;
    }
  }
  trnm(b,n);
}
Example #2
0
static void do_stuff(void)
{
	//int m = 7;
	int m = 3;
	int n = 3;
	double a[n*m], d[n], u[m*m], v[n*n], dmat[n*m];

	// build and print a matrix of random numbers
	FORI(n*m) a[i] = randombounds(10, 99);
	PMATRIX(a, m, n);

	// compute the SVD
	int r = svd(d, a, u, m, v, n);

	// show the results
	FORI(n*m) dmat[i] = 0;
	FORI(n) dmat[n*i+i] = d[i];
	PMATRIX(dmat, m, n);
	PMATRIX(u, m, m);
	PMATRIX(v, n, n);

	// check the reconstruction
	double ud[m*n], udv[m*n];
	rmmult(ud, u, dmat, m, m, n);
	trnm(v,n);
	rmmult(udv, ud, v, m, n, n);
	PMATRIX(udv, m, n);
}
Example #3
0
void
eigen(double *a,double *ev,int n)
{
  double *dp;
  dp=(double *)calloc(n,sizeof(double));
  housev(a,ev,dp,n);
  qrevec(ev,a,dp,n);
  trnm(a,n);
  free(dp);
}