home *** CD-ROM | disk | FTP | other *** search
- stcrmt (lcd,lcv,lcc,n,m,d,v,c)
-
- /* this function computes the correlation matrix for
- n series of data. */
-
- int lcd,lcv,lcc,m,n;
- float c[],d[],v[];
-
- {
- int i,ilrc,ilrd,ij,j,jlrd,k,kj,lrv3,nli,nlj,nv2,nv3,nv4,
- ki,klrc,jm1,ji,jy;
- float s2,xm,xmxm1;
- extern double sqrt();
-
- xm = m;
- xmxm1 = xm * (xm - 1.);
- jlrd = 0;
-
- for(j = 0; j <= n-1; j++)
- {
- nv2 = 1 + j * lcv;
- nv3 = nv2 + 1;
- nv4 = nv3 + 1;
- jy = j * lcv;
- v[jy] = 0.;
- s2 = 0.;
-
- for(k = 0; k <= m-1; k++)
- {
- kj = jlrd + k * lcd;
- v[jy] = v[jy] + d[kj];
- s2 = s2 + d[kj] * d[kj];
- }
- jlrd = jlrd + 1;
- v[nv2] = v[jy] / xm;
- v[nv3] = (xm * s2 - v[jy] * v[jy]) / xmxm1;
- v[nv4] = sqrt(v[nv3]);
- }
- lrv3 = 3;
- ilrc = 0;
- ilrd = 0;
-
- for(i = 0; i <= n-1; i++)
- {
- ij = ilrc + i * lcc;
- jlrd = ilrd;
- for(j = i; j <= n-1; j++)
- {
- nli = lrv3 + i * lcv;
- nlj = lrv3 + j * lcv;
- s2 = 0.;
- for(k = 0; k <= m-1; k++)
- {
- ki = ilrd + k * lcd;
- kj = jlrd + k * lcd;
- s2 = s2 + d[ki] * d[kj];
- }
- jlrd = jlrd + 1;
- c[ij] = (xm * s2 - v[i*lcv] * v[j*lcv])/(xmxm1 * v[nli] * v[nlj]);
- ij = ij + 1;
- }
- ilrd = ilrd + 1;
- ilrc = ilrc + 1;
- }
- klrc = 1;
- for(j = 1; j <= n-1; j++)
- {
- jm1 = j - 1;
- ji = j * lcc;
- if(jm1 < 1) jm1 = 1;
- for(i = 0; i <= jm1-1; i++)
- {
- ij = klrc + i * lcc;
- c[ji] = c[ij];
- ji = ji + 1;
- }
- klrc = klrc + 1;
- }
- for(k = 0; k <= n-1; k++)
- v[k*lcv] = k + 1;
- }