VRfCorSym


Routine

double VRfCorSym (const float x[], int N)

Purpose

Find the correlation coefficient for a vector and its reversal

Description

This procedure returns a value which indicates whether a given array of double values is symmetric or anti-symmetric. The correlation coefficient for the vectors x[i] and x[N-1-i] is calculated as
        SUM x[i] x[N-1-i]
  rho = ----------------- .
            SUM x[i]^2

An alternate interpretation is in terms of the even (symmetric) and odd (anti-symmetric) parts of a vector,

  xe[i] = 0.5 (x[n] + x[N-1-i]),
  xo[i] = 0.5 (x[n] - x[N-1-i]).
Then
        SUM xe[i]^2 - SUM xo[i]^2
  rho = ------------------------- .
        SUM xe[i]^2 + SUM xo[i]^2
If the vector is symmetric (x[i] = x[N-1-i]), rho is +1. If the vector is anti-symmetric (x[i] = - x[N-1-i], the result is -1. All other cases fall in between these values.

A test for near symmetry or near anti-symmetry is suggested by

              SUM xo[i]^2         SUM xe[i]^2
  rho = 1 - 2 ----------- = 1 - 2 ----------- .
              SUM x[i]^2          SUM x[i]^2
 Then if SUM xo[i]^2 = eps SUM x[i]^2,
   rho = 1 - 2 eps.
 Choosing a small value for eps, a suitable test for near symmetry or near
 anti-symmetry is
   (int) (1./(1.-2.*eps) * rho).
 This returns +1 for a near symmetric vector, -1 for a near anti-symmetric
 vector and 0 otherwise.

Parameters

<- double VRfCorSym
Correlation coefficient in the range -1 to +1. If the vector has all zero coefficients, the value 0 is returned.
-> const float x[]
vector of doubles (N elements)
-> int N
Number of elements in the input array

Author / revision

P. Kabal / Revision 1.1 2001/01/12


Main Index libtsp