alglib4 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +47 -0
  3. data/ext/alglib/alglib.cpp +537 -0
  4. data/ext/alglib/alglib_array_converters.cpp +86 -0
  5. data/ext/alglib/alglib_array_converters.h +15 -0
  6. data/ext/alglib/alglib_utils.cpp +10 -0
  7. data/ext/alglib/alglib_utils.h +6 -0
  8. data/ext/alglib/alglibinternal.cpp +21749 -0
  9. data/ext/alglib/alglibinternal.h +2168 -0
  10. data/ext/alglib/alglibmisc.cpp +9106 -0
  11. data/ext/alglib/alglibmisc.h +2114 -0
  12. data/ext/alglib/ap.cpp +20094 -0
  13. data/ext/alglib/ap.h +7244 -0
  14. data/ext/alglib/dataanalysis.cpp +52588 -0
  15. data/ext/alglib/dataanalysis.h +10601 -0
  16. data/ext/alglib/diffequations.cpp +1342 -0
  17. data/ext/alglib/diffequations.h +282 -0
  18. data/ext/alglib/extconf.rb +5 -0
  19. data/ext/alglib/fasttransforms.cpp +4696 -0
  20. data/ext/alglib/fasttransforms.h +1018 -0
  21. data/ext/alglib/integration.cpp +4249 -0
  22. data/ext/alglib/integration.h +869 -0
  23. data/ext/alglib/interpolation.cpp +74502 -0
  24. data/ext/alglib/interpolation.h +12264 -0
  25. data/ext/alglib/kernels_avx2.cpp +2171 -0
  26. data/ext/alglib/kernels_avx2.h +201 -0
  27. data/ext/alglib/kernels_fma.cpp +1065 -0
  28. data/ext/alglib/kernels_fma.h +137 -0
  29. data/ext/alglib/kernels_sse2.cpp +735 -0
  30. data/ext/alglib/kernels_sse2.h +100 -0
  31. data/ext/alglib/linalg.cpp +65182 -0
  32. data/ext/alglib/linalg.h +9927 -0
  33. data/ext/alglib/optimization.cpp +135331 -0
  34. data/ext/alglib/optimization.h +19235 -0
  35. data/ext/alglib/solvers.cpp +20488 -0
  36. data/ext/alglib/solvers.h +4781 -0
  37. data/ext/alglib/specialfunctions.cpp +10672 -0
  38. data/ext/alglib/specialfunctions.h +2305 -0
  39. data/ext/alglib/statistics.cpp +19791 -0
  40. data/ext/alglib/statistics.h +1359 -0
  41. data/ext/alglib/stdafx.h +2 -0
  42. data/gpl2.txt +339 -0
  43. data/gpl3.txt +674 -0
  44. data/lib/alglib/version.rb +3 -0
  45. data/lib/alglib.rb +4 -0
  46. metadata +101 -0
@@ -0,0 +1,1018 @@
1
+ /*************************************************************************
2
+ ALGLIB 4.04.0 (source code generated 2024-12-21)
3
+ Copyright (c) Sergey Bochkanov (ALGLIB project).
4
+
5
+ >>> SOURCE LICENSE >>>
6
+ This program is free software; you can redistribute it and/or modify
7
+ it under the terms of the GNU General Public License as published by
8
+ the Free Software Foundation (www.fsf.org); either version 2 of the
9
+ License, or (at your option) any later version.
10
+
11
+ This program is distributed in the hope that it will be useful,
12
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ GNU General Public License for more details.
15
+
16
+ A copy of the GNU General Public License is available at
17
+ http://www.fsf.org/licensing/licenses
18
+ >>> END OF LICENSE >>>
19
+ *************************************************************************/
20
+ #ifndef _fasttransforms_pkg_h
21
+ #define _fasttransforms_pkg_h
22
+ #include "ap.h"
23
+ #include "alglibinternal.h"
24
+ #include "alglibmisc.h"
25
+
26
+ /////////////////////////////////////////////////////////////////////////
27
+ //
28
+ // THIS SECTION CONTAINS COMPUTATIONAL CORE DECLARATIONS (DATATYPES)
29
+ //
30
+ /////////////////////////////////////////////////////////////////////////
31
+ namespace alglib_impl
32
+ {
33
+ #if defined(AE_COMPILE_FFT) || !defined(AE_PARTIAL_BUILD)
34
+ #endif
35
+ #if defined(AE_COMPILE_FHT) || !defined(AE_PARTIAL_BUILD)
36
+ #endif
37
+ #if defined(AE_COMPILE_CONV) || !defined(AE_PARTIAL_BUILD)
38
+ #endif
39
+ #if defined(AE_COMPILE_CORR) || !defined(AE_PARTIAL_BUILD)
40
+ #endif
41
+
42
+ }
43
+
44
+ /////////////////////////////////////////////////////////////////////////
45
+ //
46
+ // THIS SECTION CONTAINS C++ INTERFACE
47
+ //
48
+ /////////////////////////////////////////////////////////////////////////
49
+ namespace alglib
50
+ {
51
+
52
+ #if defined(AE_COMPILE_FFT) || !defined(AE_PARTIAL_BUILD)
53
+
54
+ #endif
55
+
56
+ #if defined(AE_COMPILE_FHT) || !defined(AE_PARTIAL_BUILD)
57
+
58
+ #endif
59
+
60
+ #if defined(AE_COMPILE_CONV) || !defined(AE_PARTIAL_BUILD)
61
+
62
+ #endif
63
+
64
+ #if defined(AE_COMPILE_CORR) || !defined(AE_PARTIAL_BUILD)
65
+
66
+ #endif
67
+
68
+ #if defined(AE_COMPILE_FFT) || !defined(AE_PARTIAL_BUILD)
69
+ /*************************************************************************
70
+ 1-dimensional complex FFT.
71
+
72
+ Array size N may be arbitrary number (composite or prime). Composite N's
73
+ are handled with cache-oblivious variation of a Cooley-Tukey algorithm.
74
+ Small prime-factors are transformed using hard coded codelets (similar to
75
+ FFTW codelets, but without low-level optimization), large prime-factors
76
+ are handled with Bluestein's algorithm.
77
+
78
+ Fastests transforms are for smooth N's (prime factors are 2, 3, 5 only),
79
+ most fast for powers of 2. When N have prime factors larger than these,
80
+ but orders of magnitude smaller than N, computations will be about 4 times
81
+ slower than for nearby highly composite N's. When N itself is prime, speed
82
+ will be 6 times lower.
83
+
84
+ Algorithm has O(N*logN) complexity for any N (composite or prime).
85
+
86
+ INPUT PARAMETERS
87
+ A - array[0..N-1] - complex function to be transformed
88
+ N - problem size
89
+
90
+ OUTPUT PARAMETERS
91
+ A - DFT of a input array, array[0..N-1]
92
+ A_out[j] = SUM(A_in[k]*exp(-2*pi*sqrt(-1)*j*k/N), k = 0..N-1)
93
+
94
+
95
+ -- ALGLIB --
96
+ Copyright 29.05.2009 by Bochkanov Sergey
97
+ *************************************************************************/
98
+ void fftc1d(complex_1d_array &a, const ae_int_t n, const xparams _xparams = alglib::xdefault);
99
+ void fftc1d(complex_1d_array &a, const xparams _xparams = alglib::xdefault);
100
+
101
+
102
+ /*************************************************************************
103
+ 1-dimensional complex inverse FFT.
104
+
105
+ Array size N may be arbitrary number (composite or prime). Algorithm has
106
+ O(N*logN) complexity for any N (composite or prime).
107
+
108
+ See FFTC1D() description for more information about algorithm performance.
109
+
110
+ INPUT PARAMETERS
111
+ A - array[0..N-1] - complex array to be transformed
112
+ N - problem size
113
+
114
+ OUTPUT PARAMETERS
115
+ A - inverse DFT of a input array, array[0..N-1]
116
+ A_out[j] = SUM(A_in[k]/N*exp(+2*pi*sqrt(-1)*j*k/N), k = 0..N-1)
117
+
118
+
119
+ -- ALGLIB --
120
+ Copyright 29.05.2009 by Bochkanov Sergey
121
+ *************************************************************************/
122
+ void fftc1dinv(complex_1d_array &a, const ae_int_t n, const xparams _xparams = alglib::xdefault);
123
+ void fftc1dinv(complex_1d_array &a, const xparams _xparams = alglib::xdefault);
124
+
125
+
126
+ /*************************************************************************
127
+ 1-dimensional real FFT.
128
+
129
+ Algorithm has O(N*logN) complexity for any N (composite or prime).
130
+
131
+ INPUT PARAMETERS
132
+ A - array[0..N-1] - real function to be transformed
133
+ N - problem size
134
+
135
+ OUTPUT PARAMETERS
136
+ F - DFT of a input array, array[0..N-1]
137
+ F[j] = SUM(A[k]*exp(-2*pi*sqrt(-1)*j*k/N), k = 0..N-1)
138
+
139
+ NOTE: there is a buffered version of this function, FFTR1DBuf(), which
140
+ reuses memory previously allocated for A as much as possible.
141
+
142
+ NOTE:
143
+ F[] satisfies symmetry property F[k] = conj(F[N-k]), so just one half
144
+ of array is usually needed. But for convinience subroutine returns full
145
+ complex array (with frequencies above N/2), so its result may be used by
146
+ other FFT-related subroutines.
147
+
148
+
149
+ -- ALGLIB --
150
+ Copyright 01.06.2009 by Bochkanov Sergey
151
+ *************************************************************************/
152
+ void fftr1d(const real_1d_array &a, const ae_int_t n, complex_1d_array &f, const xparams _xparams = alglib::xdefault);
153
+ void fftr1d(const real_1d_array &a, complex_1d_array &f, const xparams _xparams = alglib::xdefault);
154
+
155
+
156
+ /*************************************************************************
157
+ 1-dimensional real FFT, a buffered function which does not reallocate F[]
158
+ if its length is enough to store the result (i.e. it reuses previously
159
+ allocated memory as much as possible).
160
+
161
+ -- ALGLIB --
162
+ Copyright 01.06.2009 by Bochkanov Sergey
163
+ *************************************************************************/
164
+ void fftr1dbuf(const real_1d_array &a, const ae_int_t n, complex_1d_array &f, const xparams _xparams = alglib::xdefault);
165
+ void fftr1dbuf(const real_1d_array &a, complex_1d_array &f, const xparams _xparams = alglib::xdefault);
166
+
167
+
168
+ /*************************************************************************
169
+ 1-dimensional real inverse FFT.
170
+
171
+ Algorithm has O(N*logN) complexity for any N (composite or prime).
172
+
173
+ INPUT PARAMETERS
174
+ F - array[0..floor(N/2)] - frequencies from forward real FFT
175
+ N - problem size
176
+
177
+ OUTPUT PARAMETERS
178
+ A - inverse DFT of a input array, array[0..N-1]
179
+
180
+ NOTE: there is a buffered version of this function, FFTR1DInvBuf(), which
181
+ reuses memory previously allocated for A as much as possible.
182
+
183
+ NOTE:
184
+ F[] should satisfy symmetry property F[k] = conj(F[N-k]), so just one
185
+ half of frequencies array is needed - elements from 0 to floor(N/2). F[0]
186
+ is ALWAYS real. If N is even F[floor(N/2)] is real too. If N is odd, then
187
+ F[floor(N/2)] has no special properties.
188
+
189
+ Relying on properties noted above, FFTR1DInv subroutine uses only elements
190
+ from 0th to floor(N/2)-th. It ignores imaginary part of F[0], and in case
191
+ N is even it ignores imaginary part of F[floor(N/2)] too.
192
+
193
+ When you call this function using full arguments list - "FFTR1DInv(F,N,A)"
194
+ - you can pass either either frequencies array with N elements or reduced
195
+ array with roughly N/2 elements - subroutine will successfully transform
196
+ both.
197
+
198
+ If you call this function using reduced arguments list - "FFTR1DInv(F,A)"
199
+ - you must pass FULL array with N elements (although higher N/2 are still
200
+ not used) because array size is used to automatically determine FFT length
201
+
202
+ -- ALGLIB --
203
+ Copyright 01.06.2009 by Bochkanov Sergey
204
+ *************************************************************************/
205
+ void fftr1dinv(const complex_1d_array &f, const ae_int_t n, real_1d_array &a, const xparams _xparams = alglib::xdefault);
206
+ void fftr1dinv(const complex_1d_array &f, real_1d_array &a, const xparams _xparams = alglib::xdefault);
207
+
208
+
209
+ /*************************************************************************
210
+ 1-dimensional real inverse FFT, buffered version, which does not reallocate
211
+ A[] if its length is enough to store the result (i.e. it reuses previously
212
+ allocated memory as much as possible).
213
+
214
+ -- ALGLIB --
215
+ Copyright 01.06.2009 by Bochkanov Sergey
216
+ *************************************************************************/
217
+ void fftr1dinvbuf(const complex_1d_array &f, const ae_int_t n, real_1d_array &a, const xparams _xparams = alglib::xdefault);
218
+ void fftr1dinvbuf(const complex_1d_array &f, real_1d_array &a, const xparams _xparams = alglib::xdefault);
219
+ #endif
220
+
221
+ #if defined(AE_COMPILE_FHT) || !defined(AE_PARTIAL_BUILD)
222
+ /*************************************************************************
223
+ 1-dimensional Fast Hartley Transform.
224
+
225
+ Algorithm has O(N*logN) complexity for any N (composite or prime).
226
+
227
+ INPUT PARAMETERS
228
+ A - array[0..N-1] - real function to be transformed
229
+ N - problem size
230
+
231
+ OUTPUT PARAMETERS
232
+ A - FHT of a input array, array[0..N-1],
233
+ A_out[k] = sum(A_in[j]*(cos(2*pi*j*k/N)+sin(2*pi*j*k/N)), j=0..N-1)
234
+
235
+
236
+ -- ALGLIB --
237
+ Copyright 04.06.2009 by Bochkanov Sergey
238
+ *************************************************************************/
239
+ void fhtr1d(real_1d_array &a, const ae_int_t n, const xparams _xparams = alglib::xdefault);
240
+
241
+
242
+ /*************************************************************************
243
+ 1-dimensional inverse FHT.
244
+
245
+ Algorithm has O(N*logN) complexity for any N (composite or prime).
246
+
247
+ INPUT PARAMETERS
248
+ A - array[0..N-1] - complex array to be transformed
249
+ N - problem size
250
+
251
+ OUTPUT PARAMETERS
252
+ A - inverse FHT of a input array, array[0..N-1]
253
+
254
+
255
+ -- ALGLIB --
256
+ Copyright 29.05.2009 by Bochkanov Sergey
257
+ *************************************************************************/
258
+ void fhtr1dinv(real_1d_array &a, const ae_int_t n, const xparams _xparams = alglib::xdefault);
259
+ #endif
260
+
261
+ #if defined(AE_COMPILE_CONV) || !defined(AE_PARTIAL_BUILD)
262
+ /*************************************************************************
263
+ 1-dimensional complex convolution.
264
+
265
+ For given A/B returns conv(A,B) (non-circular). Subroutine can automatically
266
+ choose between three implementations: straightforward O(M*N) formula for
267
+ very small N (or M), overlap-add algorithm for cases where max(M,N) is
268
+ significantly larger than min(M,N), but O(M*N) algorithm is too slow, and
269
+ general FFT-based formula for cases where two previous algorithms are too
270
+ slow.
271
+
272
+ Algorithm has max(M,N)*log(max(M,N)) complexity for any M/N.
273
+
274
+ INPUT PARAMETERS
275
+ A - array[M] - complex function to be transformed
276
+ M - problem size
277
+ B - array[N] - complex function to be transformed
278
+ N - problem size
279
+
280
+ OUTPUT PARAMETERS
281
+ R - convolution: A*B. array[N+M-1]
282
+
283
+ NOTE:
284
+ It is assumed that A is zero at T<0, B is zero too. If one or both
285
+ functions have non-zero values at negative T's, you can still use this
286
+ subroutine - just shift its result correspondingly.
287
+
288
+ NOTE: there is a buffered version of this function, ConvC1DBuf(), which
289
+ can reuse space previously allocated in its output parameter R.
290
+
291
+ -- ALGLIB --
292
+ Copyright 21.07.2009 by Bochkanov Sergey
293
+ *************************************************************************/
294
+ void convc1d(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
295
+
296
+
297
+ /*************************************************************************
298
+ 1-dimensional complex convolution, buffered version of ConvC1DBuf(), which
299
+ does not reallocate R[] if its length is enough to store the result (i.e.
300
+ it reuses previously allocated memory as much as possible).
301
+
302
+ -- ALGLIB --
303
+ Copyright 30.11.2023 by Bochkanov Sergey
304
+ *************************************************************************/
305
+ void convc1dbuf(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
306
+
307
+
308
+ /*************************************************************************
309
+ 1-dimensional complex non-circular deconvolution (inverse of ConvC1D()).
310
+
311
+ Algorithm has M*log(M)) complexity for any M (composite or prime).
312
+
313
+ INPUT PARAMETERS
314
+ A - array[0..M-1] - convolved signal, A = conv(R, B)
315
+ M - convolved signal length
316
+ B - array[0..N-1] - response
317
+ N - response length, N<=M
318
+
319
+ OUTPUT PARAMETERS
320
+ R - deconvolved signal. array[0..M-N].
321
+
322
+ NOTE:
323
+ deconvolution is unstable process and may result in division by zero
324
+ (if your response function is degenerate, i.e. has zero Fourier coefficient).
325
+
326
+ NOTE:
327
+ It is assumed that A is zero at T<0, B is zero too. If one or both
328
+ functions have non-zero values at negative T's, you can still use this
329
+ subroutine - just shift its result correspondingly.
330
+
331
+ NOTE: there is a buffered version of this function, ConvC1DInvBuf(),
332
+ which can reuse space previously allocated in its output parameter R
333
+
334
+ -- ALGLIB --
335
+ Copyright 21.07.2009 by Bochkanov Sergey
336
+ *************************************************************************/
337
+ void convc1dinv(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
338
+
339
+
340
+ /*************************************************************************
341
+ 1-dimensional complex non-circular deconvolution (inverse of ConvC1D()).
342
+
343
+ A buffered version, which does not reallocate R[] if its length is enough
344
+ to store the result (i.e. it reuses previously allocated memory as much as
345
+ possible).
346
+
347
+ -- ALGLIB --
348
+ Copyright 30.11.2023 by Bochkanov Sergey
349
+ *************************************************************************/
350
+ void convc1dinvbuf(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
351
+
352
+
353
+ /*************************************************************************
354
+ 1-dimensional circular complex convolution.
355
+
356
+ For given S/R returns conv(S,R) (circular). Algorithm has linearithmic
357
+ complexity for any M/N.
358
+
359
+ IMPORTANT: normal convolution is commutative, i.e. it is symmetric -
360
+ conv(A,B)=conv(B,A). Cyclic convolution IS NOT. One function - S - is a
361
+ signal, periodic function, and another - R - is a response, non-periodic
362
+ function with limited length.
363
+
364
+ INPUT PARAMETERS
365
+ S - array[M] - complex periodic signal
366
+ M - problem size
367
+ B - array[N] - complex non-periodic response
368
+ N - problem size
369
+
370
+ OUTPUT PARAMETERS
371
+ R - convolution: A*B. array[M].
372
+
373
+ NOTE:
374
+ It is assumed that B is zero at T<0. If it has non-zero values at
375
+ negative T's, you can still use this subroutine - just shift its result
376
+ correspondingly.
377
+
378
+ NOTE: there is a buffered version of this function, ConvC1DCircularBuf(),
379
+ which can reuse space previously allocated in its output parameter R.
380
+
381
+ -- ALGLIB --
382
+ Copyright 21.07.2009 by Bochkanov Sergey
383
+ *************************************************************************/
384
+ void convc1dcircular(const complex_1d_array &s, const ae_int_t m, const complex_1d_array &r, const ae_int_t n, complex_1d_array &c, const xparams _xparams = alglib::xdefault);
385
+
386
+
387
+ /*************************************************************************
388
+ 1-dimensional circular complex convolution.
389
+
390
+ Buffered version of ConvC1DCircular(), which does not reallocate C[] if
391
+ its length is enough to store the result (i.e. it reuses previously
392
+ allocated memory as much as possible).
393
+
394
+ -- ALGLIB --
395
+ Copyright 30.11.2023 by Bochkanov Sergey
396
+ *************************************************************************/
397
+ void convc1dcircularbuf(const complex_1d_array &s, const ae_int_t m, const complex_1d_array &r, const ae_int_t n, complex_1d_array &c, const xparams _xparams = alglib::xdefault);
398
+
399
+
400
+ /*************************************************************************
401
+ 1-dimensional circular complex deconvolution (inverse of ConvC1DCircular()).
402
+
403
+ Algorithm has M*log(M)) complexity for any M (composite or prime).
404
+
405
+ INPUT PARAMETERS
406
+ A - array[0..M-1] - convolved periodic signal, A = conv(R, B)
407
+ M - convolved signal length
408
+ B - array[0..N-1] - non-periodic response
409
+ N - response length
410
+
411
+ OUTPUT PARAMETERS
412
+ R - deconvolved signal. array[0..M-1].
413
+
414
+ NOTE:
415
+ deconvolution is unstable process and may result in division by zero
416
+ (if your response function is degenerate, i.e. has zero Fourier coefficient).
417
+
418
+ NOTE:
419
+ It is assumed that B is zero at T<0. If it has non-zero values at
420
+ negative T's, you can still use this subroutine - just shift its result
421
+ correspondingly.
422
+
423
+ NOTE: there is a buffered version of this function, ConvC1DCircularInvBuf(),
424
+ which can reuse space previously allocated in its output parameter R.
425
+
426
+ -- ALGLIB --
427
+ Copyright 21.07.2009 by Bochkanov Sergey
428
+ *************************************************************************/
429
+ void convc1dcircularinv(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
430
+
431
+
432
+ /*************************************************************************
433
+ 1-dimensional circular complex deconvolution (inverse of ConvC1DCircular()).
434
+
435
+ Buffered version of ConvC1DCircularInv(), which does not reallocate R[] if
436
+ its length is enough to store the result (i.e. it reuses previously
437
+ allocated memory as much as possible).
438
+
439
+ -- ALGLIB --
440
+ Copyright 30.11.2023 by Bochkanov Sergey
441
+ *************************************************************************/
442
+ void convc1dcircularinvbuf(const complex_1d_array &a, const ae_int_t m, const complex_1d_array &b, const ae_int_t n, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
443
+
444
+
445
+ /*************************************************************************
446
+ 1-dimensional real convolution.
447
+
448
+ Analogous to ConvC1D(), see ConvC1D() comments for more details.
449
+
450
+ INPUT PARAMETERS
451
+ A - array[0..M-1] - real function to be transformed
452
+ M - problem size
453
+ B - array[0..N-1] - real function to be transformed
454
+ N - problem size
455
+
456
+ OUTPUT PARAMETERS
457
+ R - convolution: A*B. array[0..N+M-2].
458
+
459
+ NOTE:
460
+ It is assumed that A is zero at T<0, B is zero too. If one or both
461
+ functions have non-zero values at negative T's, you can still use this
462
+ subroutine - just shift its result correspondingly.
463
+
464
+ NOTE: there is a buffered version of this function, ConvR1DBuf(),
465
+ which can reuse space previously allocated in its output parameter R.
466
+
467
+
468
+ -- ALGLIB --
469
+ Copyright 21.07.2009 by Bochkanov Sergey
470
+ *************************************************************************/
471
+ void convr1d(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
472
+
473
+
474
+ /*************************************************************************
475
+ 1-dimensional real convolution.
476
+
477
+ Buffered version of ConvR1D(), which does not reallocate R[] if its length
478
+ is enough to store the result (i.e. it reuses previously allocated memory
479
+ as much as possible).
480
+
481
+ -- ALGLIB --
482
+ Copyright 30.11.2023 by Bochkanov Sergey
483
+ *************************************************************************/
484
+ void convr1dbuf(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
485
+
486
+
487
+ /*************************************************************************
488
+ 1-dimensional real deconvolution (inverse of ConvC1D()).
489
+
490
+ Algorithm has M*log(M)) complexity for any M (composite or prime).
491
+
492
+ INPUT PARAMETERS
493
+ A - array[0..M-1] - convolved signal, A = conv(R, B)
494
+ M - convolved signal length
495
+ B - array[0..N-1] - response
496
+ N - response length, N<=M
497
+
498
+ OUTPUT PARAMETERS
499
+ R - deconvolved signal. array[0..M-N].
500
+
501
+ NOTE:
502
+ deconvolution is unstable process and may result in division by zero
503
+ (if your response function is degenerate, i.e. has zero Fourier coefficient).
504
+
505
+ NOTE:
506
+ It is assumed that A is zero at T<0, B is zero too. If one or both
507
+ functions have non-zero values at negative T's, you can still use this
508
+ subroutine - just shift its result correspondingly.
509
+
510
+ NOTE: there is a buffered version of this function, ConvR1DInvBuf(),
511
+ which can reuse space previously allocated in its output parameter R.
512
+
513
+ -- ALGLIB --
514
+ Copyright 21.07.2009 by Bochkanov Sergey
515
+ *************************************************************************/
516
+ void convr1dinv(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
517
+
518
+
519
+ /*************************************************************************
520
+ 1-dimensional real deconvolution (inverse of ConvR1D()), buffered version,
521
+ which does not reallocate R[] if its length is enough to store the result
522
+ (i.e. it reuses previously allocated memory as much as possible).
523
+
524
+
525
+ -- ALGLIB --
526
+ Copyright 30.11.2023 by Bochkanov Sergey
527
+ *************************************************************************/
528
+ void convr1dinvbuf(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
529
+
530
+
531
+ /*************************************************************************
532
+ 1-dimensional circular real convolution.
533
+
534
+ Analogous to ConvC1DCircular(), see ConvC1DCircular() comments for more details.
535
+
536
+ INPUT PARAMETERS
537
+ S - array[0..M-1] - real signal
538
+ M - problem size
539
+ B - array[0..N-1] - real response
540
+ N - problem size
541
+
542
+ OUTPUT PARAMETERS
543
+ R - convolution: A*B. array[0..M-1].
544
+
545
+ NOTE:
546
+ It is assumed that B is zero at T<0. If it has non-zero values at
547
+ negative T's, you can still use this subroutine - just shift its result
548
+ correspondingly.
549
+
550
+ NOTE: there is a buffered version of this function, ConvR1DCurcularBuf(),
551
+ which can reuse space previously allocated in its output parameter R.
552
+
553
+ -- ALGLIB --
554
+ Copyright 21.07.2009 by Bochkanov Sergey
555
+ *************************************************************************/
556
+ void convr1dcircular(const real_1d_array &s, const ae_int_t m, const real_1d_array &r, const ae_int_t n, real_1d_array &c, const xparams _xparams = alglib::xdefault);
557
+
558
+
559
+ /*************************************************************************
560
+ 1-dimensional circular real convolution, buffered version, which does not
561
+ reallocate C[] if its length is enough to store the result (i.e. it reuses
562
+ previously allocated memory as much as possible).
563
+
564
+ -- ALGLIB --
565
+ Copyright 30.11.2023 by Bochkanov Sergey
566
+ *************************************************************************/
567
+ void convr1dcircularbuf(const real_1d_array &s, const ae_int_t m, const real_1d_array &r, const ae_int_t n, real_1d_array &c, const xparams _xparams = alglib::xdefault);
568
+
569
+
570
+ /*************************************************************************
571
+ 1-dimensional complex deconvolution (inverse of ConvC1D()).
572
+
573
+ Algorithm has M*log(M)) complexity for any M (composite or prime).
574
+
575
+ INPUT PARAMETERS
576
+ A - array[0..M-1] - convolved signal, A = conv(R, B)
577
+ M - convolved signal length
578
+ B - array[0..N-1] - response
579
+ N - response length
580
+
581
+ OUTPUT PARAMETERS
582
+ R - deconvolved signal. array[0..M-N].
583
+
584
+ NOTE:
585
+ deconvolution is unstable process and may result in division by zero
586
+ (if your response function is degenerate, i.e. has zero Fourier coefficient).
587
+
588
+ NOTE:
589
+ It is assumed that B is zero at T<0. If it has non-zero values at
590
+ negative T's, you can still use this subroutine - just shift its result
591
+ correspondingly.
592
+
593
+ -- ALGLIB --
594
+ Copyright 21.07.2009 by Bochkanov Sergey
595
+ *************************************************************************/
596
+ void convr1dcircularinv(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
597
+
598
+
599
+ /*************************************************************************
600
+ 1-dimensional complex deconvolution, inverse of ConvR1DCircular().
601
+
602
+ Buffered version, which does not reallocate R[] if its length is enough to
603
+ store the result (i.e. it reuses previously allocated memory as much as
604
+ possible).
605
+
606
+ -- ALGLIB --
607
+ Copyright 21.07.2009 by Bochkanov Sergey
608
+ *************************************************************************/
609
+ void convr1dcircularinvbuf(const real_1d_array &a, const ae_int_t m, const real_1d_array &b, const ae_int_t n, real_1d_array &r, const xparams _xparams = alglib::xdefault);
610
+ #endif
611
+
612
+ #if defined(AE_COMPILE_CORR) || !defined(AE_PARTIAL_BUILD)
613
+ /*************************************************************************
614
+ 1-dimensional complex cross-correlation.
615
+
616
+ For given Pattern/Signal returns corr(Pattern,Signal) (non-circular).
617
+
618
+ Correlation is calculated using reduction to convolution. Algorithm with
619
+ max(N,N)*log(max(N,N)) complexity is used (see ConvC1D() for more info
620
+ about performance).
621
+
622
+ IMPORTANT:
623
+ for historical reasons subroutine accepts its parameters in reversed
624
+ order: CorrC1D(Signal, Pattern) = Pattern x Signal (using traditional
625
+ definition of cross-correlation, denoting cross-correlation as "x").
626
+
627
+ INPUT PARAMETERS
628
+ Signal - array[0..N-1] - complex function to be transformed,
629
+ signal containing pattern
630
+ N - problem size
631
+ Pattern - array[0..M-1] - complex function to be transformed,
632
+ pattern to 'search' within a signal
633
+ M - problem size
634
+
635
+ OUTPUT PARAMETERS
636
+ R - cross-correlation, array[0..N+M-2]:
637
+ * positive lags are stored in R[0..N-1],
638
+ R[i] = sum(conj(pattern[j])*signal[i+j]
639
+ * negative lags are stored in R[N..N+M-2],
640
+ R[N+M-1-i] = sum(conj(pattern[j])*signal[-i+j]
641
+
642
+ NOTE:
643
+ It is assumed that pattern domain is [0..M-1]. If Pattern is non-zero
644
+ on [-K..M-1], you can still use this subroutine, just shift result by K.
645
+
646
+ NOTE: there is a buffered version of this function, CorrC1DBuf(), which
647
+ can reuse space previously allocated in its output parameter R.
648
+
649
+ -- ALGLIB --
650
+ Copyright 21.07.2009 by Bochkanov Sergey
651
+ *************************************************************************/
652
+ void corrc1d(const complex_1d_array &signal, const ae_int_t n, const complex_1d_array &pattern, const ae_int_t m, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
653
+
654
+
655
+ /*************************************************************************
656
+ 1-dimensional complex cross-correlation, a buffered version of CorrC1D()
657
+ which does not reallocate R[] if its length is enough to store the result
658
+ (i.e. it reuses previously allocated memory as much as possible).
659
+
660
+ -- ALGLIB --
661
+ Copyright 21.07.2009 by Bochkanov Sergey
662
+ *************************************************************************/
663
+ void corrc1dbuf(const complex_1d_array &signal, const ae_int_t n, const complex_1d_array &pattern, const ae_int_t m, complex_1d_array &r, const xparams _xparams = alglib::xdefault);
664
+
665
+
666
+ /*************************************************************************
667
+ 1-dimensional circular complex cross-correlation.
668
+
669
+ For given Pattern/Signal returns corr(Pattern,Signal) (circular).
670
+ Algorithm has linearithmic complexity for any M/N.
671
+
672
+ IMPORTANT:
673
+ for historical reasons subroutine accepts its parameters in reversed
674
+ order: CorrC1DCircular(Signal, Pattern) = Pattern x Signal (using
675
+ traditional definition of cross-correlation, denoting cross-correlation
676
+ as "x").
677
+
678
+ INPUT PARAMETERS
679
+ Signal - array[0..N-1] - complex function to be transformed,
680
+ periodic signal containing pattern
681
+ N - problem size
682
+ Pattern - array[0..M-1] - complex function to be transformed,
683
+ non-periodic pattern to 'search' within a signal
684
+ M - problem size
685
+
686
+ OUTPUT PARAMETERS
687
+ R - convolution: A*B. array[0..M-1].
688
+
689
+ NOTE: there is a buffered version of this function, CorrC1DCircular(),
690
+ which can reuse space previously allocated in its output parameter R.
691
+
692
+ -- ALGLIB --
693
+ Copyright 21.07.2009 by Bochkanov Sergey
694
+ *************************************************************************/
695
+ void corrc1dcircular(const complex_1d_array &signal, const ae_int_t m, const complex_1d_array &pattern, const ae_int_t n, complex_1d_array &c, const xparams _xparams = alglib::xdefault);
696
+
697
+
698
+ /*************************************************************************
699
+ 1-dimensional circular complex cross-correlation.
700
+
701
+ A buffered function which does not reallocate C[] if its length is enough
702
+ to store the result (i.e. it reuses previously allocated memory as much as
703
+ possible).
704
+
705
+ -- ALGLIB --
706
+ Copyright 21.07.2009 by Bochkanov Sergey
707
+ *************************************************************************/
708
+ void corrc1dcircularbuf(const complex_1d_array &signal, const ae_int_t m, const complex_1d_array &pattern, const ae_int_t n, complex_1d_array &c, const xparams _xparams = alglib::xdefault);
709
+
710
+
711
+ /*************************************************************************
712
+ 1-dimensional real cross-correlation.
713
+
714
+ For given Pattern/Signal returns corr(Pattern,Signal) (non-circular).
715
+
716
+ Correlation is calculated using reduction to convolution. Algorithm with
717
+ max(N,N)*log(max(N,N)) complexity is used (see ConvC1D() for more info
718
+ about performance).
719
+
720
+ IMPORTANT:
721
+ for historical reasons subroutine accepts its parameters in reversed
722
+ order: CorrR1D(Signal, Pattern) = Pattern x Signal (using traditional
723
+ definition of cross-correlation, denoting cross-correlation as "x").
724
+
725
+ INPUT PARAMETERS
726
+ Signal - array[0..N-1] - real function to be transformed,
727
+ signal containing pattern
728
+ N - problem size
729
+ Pattern - array[0..M-1] - real function to be transformed,
730
+ pattern to 'search' withing signal
731
+ M - problem size
732
+
733
+ OUTPUT PARAMETERS
734
+ R - cross-correlation, array[0..N+M-2]:
735
+ * positive lags are stored in R[0..N-1],
736
+ R[i] = sum(pattern[j]*signal[i+j]
737
+ * negative lags are stored in R[N..N+M-2],
738
+ R[N+M-1-i] = sum(pattern[j]*signal[-i+j]
739
+
740
+ NOTE:
741
+ It is assumed that pattern domain is [0..M-1]. If Pattern is non-zero
742
+ on [-K..M-1], you can still use this subroutine, just shift result by K.
743
+
744
+ NOTE: there is a buffered version of this function, CorrR1DBuf(), which
745
+ can reuse space previously allocated in its output parameter R.
746
+
747
+ -- ALGLIB --
748
+ Copyright 21.07.2009 by Bochkanov Sergey
749
+ *************************************************************************/
750
+ void corrr1d(const real_1d_array &signal, const ae_int_t n, const real_1d_array &pattern, const ae_int_t m, real_1d_array &r, const xparams _xparams = alglib::xdefault);
751
+
752
+
753
+ /*************************************************************************
754
+ 1-dimensional real cross-correlation, buffered function, which does not
755
+ reallocate R[] if its length is enough to store the result (i.e. it reuses
756
+ previously allocated memory as much as possible).
757
+
758
+ -- ALGLIB --
759
+ Copyright 21.07.2009 by Bochkanov Sergey
760
+ *************************************************************************/
761
+ void corrr1dbuf(const real_1d_array &signal, const ae_int_t n, const real_1d_array &pattern, const ae_int_t m, real_1d_array &r, const xparams _xparams = alglib::xdefault);
762
+
763
+
764
+ /*************************************************************************
765
+ 1-dimensional circular real cross-correlation.
766
+
767
+ For given Pattern/Signal returns corr(Pattern,Signal) (circular).
768
+ Algorithm has linearithmic complexity for any M/N.
769
+
770
+ IMPORTANT:
771
+ for historical reasons subroutine accepts its parameters in reversed
772
+ order: CorrR1DCircular(Signal, Pattern) = Pattern x Signal (using
773
+ traditional definition of cross-correlation, denoting cross-correlation
774
+ as "x").
775
+
776
+ INPUT PARAMETERS
777
+ Signal - array[0..N-1] - real function to be transformed,
778
+ periodic signal containing pattern
779
+ N - problem size
780
+ Pattern - array[0..M-1] - real function to be transformed,
781
+ non-periodic pattern to search withing signal
782
+ M - problem size
783
+
784
+ OUTPUT PARAMETERS
785
+ R - convolution: A*B. array[0..M-1].
786
+
787
+ NOTE: there is a buffered version of this function, CorrR1DCircularBuf(),
788
+ which can reuse space previously allocated in its output parameter C.
789
+
790
+ -- ALGLIB --
791
+ Copyright 21.07.2009 by Bochkanov Sergey
792
+ *************************************************************************/
793
+ void corrr1dcircular(const real_1d_array &signal, const ae_int_t m, const real_1d_array &pattern, const ae_int_t n, real_1d_array &c, const xparams _xparams = alglib::xdefault);
794
+
795
+
796
+ /*************************************************************************
797
+ 1-dimensional circular real cross-correlation, buffered version , which
798
+ does not reallocate C[] if its length is enough to store the result (i.e.
799
+ it reuses previously allocated memory as much as possible).
800
+
801
+ -- ALGLIB --
802
+ Copyright 21.07.2009 by Bochkanov Sergey
803
+ *************************************************************************/
804
+ void corrr1dcircularbuf(const real_1d_array &signal, const ae_int_t m, const real_1d_array &pattern, const ae_int_t n, real_1d_array &c, const xparams _xparams = alglib::xdefault);
805
+ #endif
806
+ }
807
+
808
+ /////////////////////////////////////////////////////////////////////////
809
+ //
810
+ // THIS SECTION CONTAINS COMPUTATIONAL CORE DECLARATIONS (FUNCTIONS)
811
+ //
812
+ /////////////////////////////////////////////////////////////////////////
813
+ namespace alglib_impl
814
+ {
815
+ #if defined(AE_COMPILE_FFT) || !defined(AE_PARTIAL_BUILD)
816
+ void fftc1d(/* Complex */ ae_vector* a, ae_int_t n, ae_state *_state);
817
+ void fftc1dinv(/* Complex */ ae_vector* a, ae_int_t n, ae_state *_state);
818
+ void fftr1d(/* Real */ const ae_vector* a,
819
+ ae_int_t n,
820
+ /* Complex */ ae_vector* f,
821
+ ae_state *_state);
822
+ void fftr1dbuf(/* Real */ const ae_vector* a,
823
+ ae_int_t n,
824
+ /* Complex */ ae_vector* f,
825
+ ae_state *_state);
826
+ void fftr1dinv(/* Complex */ const ae_vector* f,
827
+ ae_int_t n,
828
+ /* Real */ ae_vector* a,
829
+ ae_state *_state);
830
+ void fftr1dinvbuf(/* Complex */ const ae_vector* f,
831
+ ae_int_t n,
832
+ /* Real */ ae_vector* a,
833
+ ae_state *_state);
834
+ void fftr1dinternaleven(/* Real */ ae_vector* a,
835
+ ae_int_t n,
836
+ /* Real */ ae_vector* buf,
837
+ fasttransformplan* plan,
838
+ ae_state *_state);
839
+ void fftr1dinvinternaleven(/* Real */ ae_vector* a,
840
+ ae_int_t n,
841
+ /* Real */ ae_vector* buf,
842
+ fasttransformplan* plan,
843
+ ae_state *_state);
844
+ #endif
845
+ #if defined(AE_COMPILE_FHT) || !defined(AE_PARTIAL_BUILD)
846
+ void fhtr1d(/* Real */ ae_vector* a, ae_int_t n, ae_state *_state);
847
+ void fhtr1dinv(/* Real */ ae_vector* a, ae_int_t n, ae_state *_state);
848
+ #endif
849
+ #if defined(AE_COMPILE_CONV) || !defined(AE_PARTIAL_BUILD)
850
+ void convc1d(/* Complex */ const ae_vector* a,
851
+ ae_int_t m,
852
+ /* Complex */ const ae_vector* b,
853
+ ae_int_t n,
854
+ /* Complex */ ae_vector* r,
855
+ ae_state *_state);
856
+ void convc1dbuf(/* Complex */ const ae_vector* a,
857
+ ae_int_t m,
858
+ /* Complex */ const ae_vector* b,
859
+ ae_int_t n,
860
+ /* Complex */ ae_vector* r,
861
+ ae_state *_state);
862
+ void convc1dinv(/* Complex */ const ae_vector* a,
863
+ ae_int_t m,
864
+ /* Complex */ const ae_vector* b,
865
+ ae_int_t n,
866
+ /* Complex */ ae_vector* r,
867
+ ae_state *_state);
868
+ void convc1dinvbuf(/* Complex */ const ae_vector* a,
869
+ ae_int_t m,
870
+ /* Complex */ const ae_vector* b,
871
+ ae_int_t n,
872
+ /* Complex */ ae_vector* r,
873
+ ae_state *_state);
874
+ void convc1dcircular(/* Complex */ const ae_vector* s,
875
+ ae_int_t m,
876
+ /* Complex */ const ae_vector* r,
877
+ ae_int_t n,
878
+ /* Complex */ ae_vector* c,
879
+ ae_state *_state);
880
+ void convc1dcircularbuf(/* Complex */ const ae_vector* s,
881
+ ae_int_t m,
882
+ /* Complex */ const ae_vector* r,
883
+ ae_int_t n,
884
+ /* Complex */ ae_vector* c,
885
+ ae_state *_state);
886
+ void convc1dcircularinv(/* Complex */ const ae_vector* a,
887
+ ae_int_t m,
888
+ /* Complex */ const ae_vector* b,
889
+ ae_int_t n,
890
+ /* Complex */ ae_vector* r,
891
+ ae_state *_state);
892
+ void convc1dcircularinvbuf(/* Complex */ const ae_vector* a,
893
+ ae_int_t m,
894
+ /* Complex */ const ae_vector* b,
895
+ ae_int_t n,
896
+ /* Complex */ ae_vector* r,
897
+ ae_state *_state);
898
+ void convr1d(/* Real */ const ae_vector* a,
899
+ ae_int_t m,
900
+ /* Real */ const ae_vector* b,
901
+ ae_int_t n,
902
+ /* Real */ ae_vector* r,
903
+ ae_state *_state);
904
+ void convr1dbuf(/* Real */ const ae_vector* a,
905
+ ae_int_t m,
906
+ /* Real */ const ae_vector* b,
907
+ ae_int_t n,
908
+ /* Real */ ae_vector* r,
909
+ ae_state *_state);
910
+ void convr1dinv(/* Real */ const ae_vector* a,
911
+ ae_int_t m,
912
+ /* Real */ const ae_vector* b,
913
+ ae_int_t n,
914
+ /* Real */ ae_vector* r,
915
+ ae_state *_state);
916
+ void convr1dinvbuf(/* Real */ const ae_vector* a,
917
+ ae_int_t m,
918
+ /* Real */ const ae_vector* b,
919
+ ae_int_t n,
920
+ /* Real */ ae_vector* r,
921
+ ae_state *_state);
922
+ void convr1dcircular(/* Real */ const ae_vector* s,
923
+ ae_int_t m,
924
+ /* Real */ const ae_vector* r,
925
+ ae_int_t n,
926
+ /* Real */ ae_vector* c,
927
+ ae_state *_state);
928
+ void convr1dcircularbuf(/* Real */ const ae_vector* s,
929
+ ae_int_t m,
930
+ /* Real */ const ae_vector* r,
931
+ ae_int_t n,
932
+ /* Real */ ae_vector* c,
933
+ ae_state *_state);
934
+ void convr1dcircularinv(/* Real */ const ae_vector* a,
935
+ ae_int_t m,
936
+ /* Real */ const ae_vector* b,
937
+ ae_int_t n,
938
+ /* Real */ ae_vector* r,
939
+ ae_state *_state);
940
+ void convr1dcircularinvbuf(/* Real */ const ae_vector* a,
941
+ ae_int_t m,
942
+ /* Real */ const ae_vector* b,
943
+ ae_int_t n,
944
+ /* Real */ ae_vector* r,
945
+ ae_state *_state);
946
+ void convc1dx(/* Complex */ const ae_vector* a,
947
+ ae_int_t m,
948
+ /* Complex */ const ae_vector* b,
949
+ ae_int_t n,
950
+ ae_bool circular,
951
+ ae_int_t alg,
952
+ ae_int_t q,
953
+ /* Complex */ ae_vector* r,
954
+ ae_state *_state);
955
+ void convr1dx(/* Real */ const ae_vector* a,
956
+ ae_int_t m,
957
+ /* Real */ const ae_vector* b,
958
+ ae_int_t n,
959
+ ae_bool circular,
960
+ ae_int_t alg,
961
+ ae_int_t q,
962
+ /* Real */ ae_vector* r,
963
+ ae_state *_state);
964
+ #endif
965
+ #if defined(AE_COMPILE_CORR) || !defined(AE_PARTIAL_BUILD)
966
+ void corrc1d(/* Complex */ const ae_vector* signal,
967
+ ae_int_t n,
968
+ /* Complex */ const ae_vector* pattern,
969
+ ae_int_t m,
970
+ /* Complex */ ae_vector* r,
971
+ ae_state *_state);
972
+ void corrc1dbuf(/* Complex */ const ae_vector* signal,
973
+ ae_int_t n,
974
+ /* Complex */ const ae_vector* pattern,
975
+ ae_int_t m,
976
+ /* Complex */ ae_vector* r,
977
+ ae_state *_state);
978
+ void corrc1dcircular(/* Complex */ const ae_vector* signal,
979
+ ae_int_t m,
980
+ /* Complex */ const ae_vector* pattern,
981
+ ae_int_t n,
982
+ /* Complex */ ae_vector* c,
983
+ ae_state *_state);
984
+ void corrc1dcircularbuf(/* Complex */ const ae_vector* signal,
985
+ ae_int_t m,
986
+ /* Complex */ const ae_vector* pattern,
987
+ ae_int_t n,
988
+ /* Complex */ ae_vector* c,
989
+ ae_state *_state);
990
+ void corrr1d(/* Real */ const ae_vector* signal,
991
+ ae_int_t n,
992
+ /* Real */ const ae_vector* pattern,
993
+ ae_int_t m,
994
+ /* Real */ ae_vector* r,
995
+ ae_state *_state);
996
+ void corrr1dbuf(/* Real */ const ae_vector* signal,
997
+ ae_int_t n,
998
+ /* Real */ const ae_vector* pattern,
999
+ ae_int_t m,
1000
+ /* Real */ ae_vector* r,
1001
+ ae_state *_state);
1002
+ void corrr1dcircular(/* Real */ const ae_vector* signal,
1003
+ ae_int_t m,
1004
+ /* Real */ const ae_vector* pattern,
1005
+ ae_int_t n,
1006
+ /* Real */ ae_vector* c,
1007
+ ae_state *_state);
1008
+ void corrr1dcircularbuf(/* Real */ const ae_vector* signal,
1009
+ ae_int_t m,
1010
+ /* Real */ const ae_vector* pattern,
1011
+ ae_int_t n,
1012
+ /* Real */ ae_vector* c,
1013
+ ae_state *_state);
1014
+ #endif
1015
+
1016
+ }
1017
+ #endif
1018
+