The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

scnvcor (3)
  • >> scnvcor (3) ( Solaris man: Библиотечные вызовы )
  • 
    NAME
         scnvcor - compute the convolution  or  correlation  of  real
         vectors
    
         SUBROUTINE SCNVCOR (CNVCOR, FOUR,  NX,  X,  IFX,  INCX,  NY,
                   NPRE,  M,  Y,  IFY,  INC1Y,  INC2Y, NZ, K, Z, IFZ,
                   INC1Z, INC2Z, WORK, LWORK)
    
         CHARACTER CNVCOR, FOUR
    
         INTEGER IFX, IFY, IFZ, INCX, INC1Y, INC2Y, INC1Z, INC2Z,  K,
                   LWORK, NPRE, NX, NY, M, NZ
    
         REAL X(*), Y(*), Z(*)
    
         REAL WORK(*)
    
    
    
         #include <sunperf.h>
    
         void scnvcor(char cnvcor, char four, int nx, float  *x,  int
                   ifx,  int incx, int ny, int npre, int m, float *y,
                   int ify, int inc1y, int  inc2y,  int  nz,  int  k,
                   float  *z,  int  ifz,  int inc1z, int inc2z, float
                   *work, int lwork);
    
    PURPOSE
         SCNVCOR computes the convolution or correlation of real vec-
         tors.
    
    ARGUMENTS
         CNVCOR    (input) CHARACTER
                   'V' or 'v' if convolution is desired, 'R'  or  'r'
                   or correlation is desired.
    
         FOUR      (input) CHARACTER
                   'T' or 't' if the Fourier transform method  is  to
                   be  used,  'D' or 'd' if the computation should be
                   done directly from the  definition.   The  Fourier
                   transform  method  is generally faster, but it may
                   introduce noticeable errors into certain  results,
                   notably when both the filter and data vectors con-
                   sist entirely of integers or  vectors  where  ele-
                   ments  of either the filter vector or a given data
                   vector differ significantly in magnitude from  the
                   1-norm of the vector.
    
         NX        (input) INTEGER
                   Length of the filter vector.  NX  >=  0.   SCNVCOR
                   will return immediately if NX = 0.
    
         X         (input) REAL(*)
                   Filter vector.
    
         IFX       (input) COMPLEX(*)
                   Index of the first element of X.  NX >= IFX >= 1.
    
         INCX      (input) INTEGER
                   Stride between elements of the filter vector in X.
                   INCX > 0.
    
         NY        (input) INTEGER
                   Length of the input vectors.  NY  >=  0.   SCNVCOR
                   will return immediately if NY = 0.
    
         NPRE      (input) INTEGER
                   The number of implicit zeros prepended  to  the  Y
                   vectors.  NPRE >= 0.
    
         Y         (input) REAL(*)
                   Input vectors.
    
         IFY       (input) COMPLEX(*)
                   Index of the first element of Y.  NY >= IFY >= 1.
    
         INC1Y     (input) INTEGER
                   Stride between elements of the input vectors in Y.
                   INC1Y > 0.
    
         INC2Y     (input) INTEGER
                   Stride between the input vectors in Y.  INC2Y > 0.
    
         NZ        (input) INTEGER
                   Length of the output vectors.  NZ >=  0.   SCNVCOR
                   will  return immediately if NZ = 0.  See the Notes
                   section below for information about how this argu-
                   ment  interacts with NX and NY to control circular
                   versus end-off shifting.
    
         K         (input) INTEGER
                   Number of Z vectors.  K >=  0.   If  K  =  0  then
                   SCNVCOR  will  return  immediately.  If K < M then
                   only the first K input vectors will be  processed.
                   If  K > M then all input vectors will be processed
                   and the last M-K output vectors  will  be  set  to
                   zero on exit.
    
         Z         (output) REAL(*)
                   Result vectors.
    
         IFZ       (input) COMPLEX(*)
                   Index of the first element of Z.  NZ >= IFZ >= 1.
    
         INC1Z     (input) INTEGER
                   Stride between elements of the output  vectors  in
                   Z.  INC1Z > 0.
    
         INC2Z     (input) INTEGER
                   Stride between the output vectors in Z.   INC2Z  >
                   0.
    
         WORK      (input/scratch) REAL(LWORK)
                   Scratch space.  Before the first call  to  SCNVCOR
                   with  particular  values  of the integer arguments
                   the first element of WORK must be set to zero.  If
                   WORK  is  written  between  calls to SCNVCOR or if
                   SCNVCOR is called with  different  values  of  the
                   integer  arguments  then the first element of WORK
                   must again be set to zero before  each  call.   If
                   WORK  has  not been written and the same values of
                   the integer arguments are used then the first ele-
                   ment of WORK to zero.  This can avoid certain ini-
                   tializations that store their results  into  WORK,
                   and  avoiding  the initialization can make SCNVCOR
                   run faster.
    
         LWORK     (input) INTEGER
                   Length of WORK.  LWORK >= 4*MAX(NX,NY,NZ)+15.
    
    NOTES
         If any vector overlaps a writable vector, either because  of
         argument  aliasing  or  ill-chosen values of the various INC
         arguments, the results are undefined and may vary  from  one
         run to the next.
    
         The most common form of the computation, and the  case  that
         executes  fastest, is applying a filter vector X to a series
         of vectors stored in the columns of Y with the result placed
         into  the  columns of Z.  In that case, INCX = 1, INC1Y = 1,
         INC2Y >= NY, INC1Z = 1, INC2Z >= NZ.  Another common form is
         applying  a filter vector X to a series of vectors stored in
         the rows of Y and store the result in the row of Z, in which
         case  INCX  =  1,  INC1Y  >= NY, INC2Y = 1, INC1Z >= NZ, and
         INC2Z = 1.
    
         A common use of convolution is to compute  the  products  of
         polynomials.  The following code uses SCNVCOR to compute the
         product of  1 + 2x + 3x**2 and  4 + 5x + 6x**2:
    
               PROGRAM TEST
               IMPLICIT NONE C
               INTEGER     LWORK, NX, NY, NZ
               PARAMETER  (NX = 3)
               PARAMETER  (NY = NX)
               PARAMETER  (NZ = 2*NY-1)
               PARAMETER  (LWORK = 4*NZ+32) C
               REAL        X(NX), Y(NY), Z(NZ), WORK(LWORK) C
               DATA X / 1, 2, 3 /,  Y / 4, 5, 6 /, WORK / LWORK*0 / C
               PRINT 1000, 'X'
               PRINT 1010, X
               PRINT 1000, 'Y'
               PRINT 1010, Y
               CALL SCNVCOR ('V', 'T', NX, X, 1, 1,
              $   NY, 0, 1, Y, 1, 1, 1,
              $   NZ, 1, Z, 1, 1, 1, WORK, LWORK)
               PRINT 1020, 'Z'
               PRINT 1010, Z C
          1000 FORMAT (1X, 'Input vector ', A1)
          1010 FORMAT (1X, 300F5.0)
          1020 FORMAT (1X, 'Output vector ', A1) C
               END
    
         The program above produces the following output:
    
          Input vector X
             1.   2.   3.
          Input vector Y
             4.   5.   6.
          Output vector Z
             4.  13.  28.  27.  18.
    
         Making the output vector longer than the input  vectors,  as
         in  the  example  above, implicitly adds zeros to the end of
         the input.  No zeros are actually required  in  any  of  the
         vectors,  and  none are used in the example, but the padding
         provided by the implied zeros has the effect of  an  end-off
         shift rather than an end-around shift of the input vectors.
    
         The following code will compute the product between the vec-
         tor  [  1,  2,  3 ]  and the circulant matrix defined by the
         initial column vector [ 4, 5, 6 ]:
    
               PROGRAM TEST
               IMPLICIT NONE C
               INTEGER     LWORK, NX, NY, NZ
               PARAMETER  (NX = 3)
               PARAMETER  (NY = NX)
               PARAMETER  (NZ = NY)
               PARAMETER  (LWORK = 4*NZ+32) C
               REAL        X(NX), Y(NY), Z(NZ), WORK(LWORK) C
               DATA X / 1, 2, 3 /,  Y / 4, 5, 6 /, WORK / LWORK*0 / C
               PRINT 1000, 'X'
               PRINT 1010, X
               PRINT 1000, 'Y'
               PRINT 1010, Y
               CALL SCNVCOR ('V', 'T', NX, X, 1, 1,
              $   NY, 0, 1, Y, 1, 1, 1,
              $   NZ, 1, Z, 1, 1, 1, WORK, LWORK)
               PRINT 1020, 'Z'
               PRINT 1010, Z C
          1000 FORMAT (1X, 'Input vector ', A1)
          1010 FORMAT (1X, 300F5.0)
          1020 FORMAT (1X, 'Output vector ', A1) C
               END
    
         The program above produces the following output:
    
          Input vector X
             1.   2.   3.
          Input vector Y
             4.   5.   6.
          Output vector Z
            31.  31.  28.
    
         The difference between this example and the previous example
         is  that  the length of the output vector is the same as the
         length of the input vectors, so there are no  implied  zeros
         on the end.  With no implied zeros to shift into, the effect
         of an end-off shift from the previous example does not occur
         and  the end-around shift results in a circulant matrix pro-
         duct.
    
    
    
    


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру