alglib 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +253 -0
  3. data/README.txt +33 -0
  4. data/Rakefile +27 -0
  5. data/ext/Rakefile +24 -0
  6. data/ext/alglib.i +24 -0
  7. data/ext/alglib/Makefile +157 -0
  8. data/ext/alglib/airyf.cpp +372 -0
  9. data/ext/alglib/airyf.h +81 -0
  10. data/ext/alglib/alglib.cpp +8558 -0
  11. data/ext/alglib/alglib_util.cpp +19 -0
  12. data/ext/alglib/alglib_util.h +14 -0
  13. data/ext/alglib/ap.cpp +877 -0
  14. data/ext/alglib/ap.english.html +364 -0
  15. data/ext/alglib/ap.h +666 -0
  16. data/ext/alglib/ap.russian.html +442 -0
  17. data/ext/alglib/apvt.h +754 -0
  18. data/ext/alglib/bdss.cpp +1500 -0
  19. data/ext/alglib/bdss.h +251 -0
  20. data/ext/alglib/bdsvd.cpp +1339 -0
  21. data/ext/alglib/bdsvd.h +164 -0
  22. data/ext/alglib/bessel.cpp +1226 -0
  23. data/ext/alglib/bessel.h +331 -0
  24. data/ext/alglib/betaf.cpp +105 -0
  25. data/ext/alglib/betaf.h +74 -0
  26. data/ext/alglib/bidiagonal.cpp +1328 -0
  27. data/ext/alglib/bidiagonal.h +350 -0
  28. data/ext/alglib/binomialdistr.cpp +247 -0
  29. data/ext/alglib/binomialdistr.h +153 -0
  30. data/ext/alglib/blas.cpp +576 -0
  31. data/ext/alglib/blas.h +132 -0
  32. data/ext/alglib/cblas.cpp +226 -0
  33. data/ext/alglib/cblas.h +57 -0
  34. data/ext/alglib/cdet.cpp +138 -0
  35. data/ext/alglib/cdet.h +92 -0
  36. data/ext/alglib/chebyshev.cpp +216 -0
  37. data/ext/alglib/chebyshev.h +76 -0
  38. data/ext/alglib/chisquaredistr.cpp +157 -0
  39. data/ext/alglib/chisquaredistr.h +144 -0
  40. data/ext/alglib/cholesky.cpp +285 -0
  41. data/ext/alglib/cholesky.h +86 -0
  42. data/ext/alglib/cinverse.cpp +298 -0
  43. data/ext/alglib/cinverse.h +111 -0
  44. data/ext/alglib/clu.cpp +337 -0
  45. data/ext/alglib/clu.h +120 -0
  46. data/ext/alglib/correlation.cpp +280 -0
  47. data/ext/alglib/correlation.h +77 -0
  48. data/ext/alglib/correlationtests.cpp +726 -0
  49. data/ext/alglib/correlationtests.h +134 -0
  50. data/ext/alglib/crcond.cpp +826 -0
  51. data/ext/alglib/crcond.h +148 -0
  52. data/ext/alglib/creflections.cpp +310 -0
  53. data/ext/alglib/creflections.h +165 -0
  54. data/ext/alglib/csolve.cpp +312 -0
  55. data/ext/alglib/csolve.h +99 -0
  56. data/ext/alglib/ctrinverse.cpp +387 -0
  57. data/ext/alglib/ctrinverse.h +98 -0
  58. data/ext/alglib/ctrlinsolve.cpp +297 -0
  59. data/ext/alglib/ctrlinsolve.h +81 -0
  60. data/ext/alglib/dawson.cpp +234 -0
  61. data/ext/alglib/dawson.h +74 -0
  62. data/ext/alglib/descriptivestatistics.cpp +436 -0
  63. data/ext/alglib/descriptivestatistics.h +112 -0
  64. data/ext/alglib/det.cpp +140 -0
  65. data/ext/alglib/det.h +94 -0
  66. data/ext/alglib/dforest.cpp +1819 -0
  67. data/ext/alglib/dforest.h +316 -0
  68. data/ext/alglib/elliptic.cpp +497 -0
  69. data/ext/alglib/elliptic.h +217 -0
  70. data/ext/alglib/estnorm.cpp +429 -0
  71. data/ext/alglib/estnorm.h +107 -0
  72. data/ext/alglib/expintegrals.cpp +422 -0
  73. data/ext/alglib/expintegrals.h +108 -0
  74. data/ext/alglib/faq.english.html +258 -0
  75. data/ext/alglib/faq.russian.html +272 -0
  76. data/ext/alglib/fdistr.cpp +202 -0
  77. data/ext/alglib/fdistr.h +163 -0
  78. data/ext/alglib/fresnel.cpp +211 -0
  79. data/ext/alglib/fresnel.h +91 -0
  80. data/ext/alglib/gammaf.cpp +338 -0
  81. data/ext/alglib/gammaf.h +104 -0
  82. data/ext/alglib/gqgengauss.cpp +235 -0
  83. data/ext/alglib/gqgengauss.h +92 -0
  84. data/ext/alglib/gqgenhermite.cpp +268 -0
  85. data/ext/alglib/gqgenhermite.h +63 -0
  86. data/ext/alglib/gqgenjacobi.cpp +297 -0
  87. data/ext/alglib/gqgenjacobi.h +72 -0
  88. data/ext/alglib/gqgenlaguerre.cpp +265 -0
  89. data/ext/alglib/gqgenlaguerre.h +69 -0
  90. data/ext/alglib/gqgenlegendre.cpp +300 -0
  91. data/ext/alglib/gqgenlegendre.h +62 -0
  92. data/ext/alglib/gqgenlobatto.cpp +305 -0
  93. data/ext/alglib/gqgenlobatto.h +97 -0
  94. data/ext/alglib/gqgenradau.cpp +232 -0
  95. data/ext/alglib/gqgenradau.h +95 -0
  96. data/ext/alglib/hbisinv.cpp +480 -0
  97. data/ext/alglib/hbisinv.h +183 -0
  98. data/ext/alglib/hblas.cpp +228 -0
  99. data/ext/alglib/hblas.h +64 -0
  100. data/ext/alglib/hcholesky.cpp +339 -0
  101. data/ext/alglib/hcholesky.h +91 -0
  102. data/ext/alglib/hermite.cpp +114 -0
  103. data/ext/alglib/hermite.h +49 -0
  104. data/ext/alglib/hessenberg.cpp +370 -0
  105. data/ext/alglib/hessenberg.h +152 -0
  106. data/ext/alglib/hevd.cpp +247 -0
  107. data/ext/alglib/hevd.h +107 -0
  108. data/ext/alglib/hsschur.cpp +1316 -0
  109. data/ext/alglib/hsschur.h +108 -0
  110. data/ext/alglib/htridiagonal.cpp +734 -0
  111. data/ext/alglib/htridiagonal.h +180 -0
  112. data/ext/alglib/ialglib.cpp +6 -0
  113. data/ext/alglib/ialglib.h +9 -0
  114. data/ext/alglib/ibetaf.cpp +960 -0
  115. data/ext/alglib/ibetaf.h +125 -0
  116. data/ext/alglib/igammaf.cpp +430 -0
  117. data/ext/alglib/igammaf.h +157 -0
  118. data/ext/alglib/inv.cpp +274 -0
  119. data/ext/alglib/inv.h +115 -0
  120. data/ext/alglib/inverseupdate.cpp +480 -0
  121. data/ext/alglib/inverseupdate.h +185 -0
  122. data/ext/alglib/jacobianelliptic.cpp +164 -0
  123. data/ext/alglib/jacobianelliptic.h +94 -0
  124. data/ext/alglib/jarquebera.cpp +2271 -0
  125. data/ext/alglib/jarquebera.h +80 -0
  126. data/ext/alglib/kmeans.cpp +356 -0
  127. data/ext/alglib/kmeans.h +76 -0
  128. data/ext/alglib/laguerre.cpp +94 -0
  129. data/ext/alglib/laguerre.h +48 -0
  130. data/ext/alglib/lbfgs.cpp +1167 -0
  131. data/ext/alglib/lbfgs.h +218 -0
  132. data/ext/alglib/lda.cpp +434 -0
  133. data/ext/alglib/lda.h +133 -0
  134. data/ext/alglib/ldlt.cpp +1130 -0
  135. data/ext/alglib/ldlt.h +124 -0
  136. data/ext/alglib/leastsquares.cpp +1252 -0
  137. data/ext/alglib/leastsquares.h +290 -0
  138. data/ext/alglib/legendre.cpp +107 -0
  139. data/ext/alglib/legendre.h +49 -0
  140. data/ext/alglib/linreg.cpp +1185 -0
  141. data/ext/alglib/linreg.h +380 -0
  142. data/ext/alglib/logit.cpp +1523 -0
  143. data/ext/alglib/logit.h +333 -0
  144. data/ext/alglib/lq.cpp +399 -0
  145. data/ext/alglib/lq.h +160 -0
  146. data/ext/alglib/lu.cpp +462 -0
  147. data/ext/alglib/lu.h +119 -0
  148. data/ext/alglib/mannwhitneyu.cpp +4490 -0
  149. data/ext/alglib/mannwhitneyu.h +115 -0
  150. data/ext/alglib/minlm.cpp +918 -0
  151. data/ext/alglib/minlm.h +312 -0
  152. data/ext/alglib/mlpbase.cpp +3375 -0
  153. data/ext/alglib/mlpbase.h +589 -0
  154. data/ext/alglib/mlpe.cpp +1369 -0
  155. data/ext/alglib/mlpe.h +552 -0
  156. data/ext/alglib/mlptrain.cpp +1056 -0
  157. data/ext/alglib/mlptrain.h +283 -0
  158. data/ext/alglib/nearunityunit.cpp +91 -0
  159. data/ext/alglib/nearunityunit.h +17 -0
  160. data/ext/alglib/normaldistr.cpp +377 -0
  161. data/ext/alglib/normaldistr.h +175 -0
  162. data/ext/alglib/nsevd.cpp +1869 -0
  163. data/ext/alglib/nsevd.h +140 -0
  164. data/ext/alglib/pca.cpp +168 -0
  165. data/ext/alglib/pca.h +87 -0
  166. data/ext/alglib/poissondistr.cpp +143 -0
  167. data/ext/alglib/poissondistr.h +130 -0
  168. data/ext/alglib/polinterpolation.cpp +685 -0
  169. data/ext/alglib/polinterpolation.h +206 -0
  170. data/ext/alglib/psif.cpp +173 -0
  171. data/ext/alglib/psif.h +88 -0
  172. data/ext/alglib/qr.cpp +414 -0
  173. data/ext/alglib/qr.h +168 -0
  174. data/ext/alglib/ratinterpolation.cpp +134 -0
  175. data/ext/alglib/ratinterpolation.h +72 -0
  176. data/ext/alglib/rcond.cpp +705 -0
  177. data/ext/alglib/rcond.h +140 -0
  178. data/ext/alglib/reflections.cpp +504 -0
  179. data/ext/alglib/reflections.h +165 -0
  180. data/ext/alglib/rotations.cpp +473 -0
  181. data/ext/alglib/rotations.h +128 -0
  182. data/ext/alglib/rsolve.cpp +221 -0
  183. data/ext/alglib/rsolve.h +99 -0
  184. data/ext/alglib/sbisinv.cpp +217 -0
  185. data/ext/alglib/sbisinv.h +171 -0
  186. data/ext/alglib/sblas.cpp +185 -0
  187. data/ext/alglib/sblas.h +64 -0
  188. data/ext/alglib/schur.cpp +156 -0
  189. data/ext/alglib/schur.h +102 -0
  190. data/ext/alglib/sdet.cpp +193 -0
  191. data/ext/alglib/sdet.h +101 -0
  192. data/ext/alglib/sevd.cpp +116 -0
  193. data/ext/alglib/sevd.h +99 -0
  194. data/ext/alglib/sinverse.cpp +672 -0
  195. data/ext/alglib/sinverse.h +138 -0
  196. data/ext/alglib/spddet.cpp +138 -0
  197. data/ext/alglib/spddet.h +96 -0
  198. data/ext/alglib/spdgevd.cpp +842 -0
  199. data/ext/alglib/spdgevd.h +200 -0
  200. data/ext/alglib/spdinverse.cpp +509 -0
  201. data/ext/alglib/spdinverse.h +122 -0
  202. data/ext/alglib/spdrcond.cpp +421 -0
  203. data/ext/alglib/spdrcond.h +118 -0
  204. data/ext/alglib/spdsolve.cpp +275 -0
  205. data/ext/alglib/spdsolve.h +105 -0
  206. data/ext/alglib/spline2d.cpp +1192 -0
  207. data/ext/alglib/spline2d.h +301 -0
  208. data/ext/alglib/spline3.cpp +1264 -0
  209. data/ext/alglib/spline3.h +290 -0
  210. data/ext/alglib/srcond.cpp +595 -0
  211. data/ext/alglib/srcond.h +127 -0
  212. data/ext/alglib/ssolve.cpp +895 -0
  213. data/ext/alglib/ssolve.h +139 -0
  214. data/ext/alglib/stdafx.h +0 -0
  215. data/ext/alglib/stest.cpp +131 -0
  216. data/ext/alglib/stest.h +94 -0
  217. data/ext/alglib/studenttdistr.cpp +222 -0
  218. data/ext/alglib/studenttdistr.h +115 -0
  219. data/ext/alglib/studentttests.cpp +377 -0
  220. data/ext/alglib/studentttests.h +178 -0
  221. data/ext/alglib/svd.cpp +620 -0
  222. data/ext/alglib/svd.h +126 -0
  223. data/ext/alglib/tdbisinv.cpp +2608 -0
  224. data/ext/alglib/tdbisinv.h +228 -0
  225. data/ext/alglib/tdevd.cpp +1229 -0
  226. data/ext/alglib/tdevd.h +115 -0
  227. data/ext/alglib/tridiagonal.cpp +594 -0
  228. data/ext/alglib/tridiagonal.h +171 -0
  229. data/ext/alglib/trigintegrals.cpp +490 -0
  230. data/ext/alglib/trigintegrals.h +131 -0
  231. data/ext/alglib/trinverse.cpp +345 -0
  232. data/ext/alglib/trinverse.h +98 -0
  233. data/ext/alglib/trlinsolve.cpp +926 -0
  234. data/ext/alglib/trlinsolve.h +73 -0
  235. data/ext/alglib/tsort.cpp +405 -0
  236. data/ext/alglib/tsort.h +54 -0
  237. data/ext/alglib/variancetests.cpp +245 -0
  238. data/ext/alglib/variancetests.h +134 -0
  239. data/ext/alglib/wsr.cpp +6285 -0
  240. data/ext/alglib/wsr.h +96 -0
  241. data/ext/ap.i +97 -0
  242. data/ext/correlation.i +24 -0
  243. data/ext/extconf.rb +6 -0
  244. data/ext/logit.i +89 -0
  245. data/lib/alglib.rb +71 -0
  246. data/lib/alglib/correlation.rb +26 -0
  247. data/lib/alglib/linearregression.rb +63 -0
  248. data/lib/alglib/logit.rb +42 -0
  249. data/test/test_alglib.rb +52 -0
  250. data/test/test_correlation.rb +44 -0
  251. data/test/test_correlationtest.rb +45 -0
  252. data/test/test_linreg.rb +35 -0
  253. data/test/test_logit.rb +43 -0
  254. data/test/test_pca.rb +27 -0
  255. metadata +326 -0
@@ -0,0 +1,442 @@
1
+ <html>
2
+ <head>
3
+ <title>���������� AP ��� C++</title>
4
+ <style type="text/css">
5
+ <!--
6
+ h1 { font-family: Tahoma,sans-serif; font-size : larger; }
7
+ h2 { font-family: Arial,sans-serif; font-size : 11pt; }
8
+ h3 { font-family: Arial,sans-serif; font-size : 9pt; }
9
+ .cond { color:blue; }
10
+ .const { color:#222222; }
11
+ .func { color:#111111; }
12
+ -->
13
+ </style>
14
+ </head>
15
+ <body>
16
+
17
+ <h1>���������� AP ��� C++</h1>
18
+
19
+ <p align=justify>
20
+ ���� �������� ��������� ���������� AP, �������������� ��� ����� C++. ���������� AP ��� �++ �������� ������� ����� �������������� ������� � ������-���������, ������� ��������� ��� ������ �������� � ����� <a href="http://alglib.manual.ru/">"���������� ����������"</a>.
21
+ </p>
22
+
23
+ <h1>�������������</h1>
24
+
25
+ <p align=justify>
26
+ ������ ���������� ������ ���� ���������� � ����� ������������ �++.
27
+ </p>
28
+
29
+ <h1>������ � �������������</h1>
30
+
31
+ <p align=justify>
32
+ � ������ ���������� ������ ����� <code>ap.h</code> � <code>ap.cpp</code>. ��� ������ ������ ���������� ���������� ���� <code>ap.cpp</code> � �������.
33
+ </p>
34
+
35
+ <h1>�������� ���������� AP</h1>
36
+
37
+ <font size=-1>
38
+ <a href="#intro">��������</a><br>
39
+ <a href="#conditionals">��������� �������� ����������</a><br>
40
+ <a href="#constants">���������</a><br>
41
+ <a href="#functions">�������</a><br>
42
+ <a href="#aperror">����� ap_error</a><br>
43
+ <a href="#arrays">������ ��������</a><br>
44
+ <a href="#blas">������� ������������ �������� �������</a><br>
45
+ <a href="#complex">����� ����������� �����</a><br>
46
+ </font>
47
+
48
+ <a name="intro"><h1>��������</h1></a>
49
+
50
+ <p align=justify>
51
+ � ������������ ����� <code>ap.h</code> ������������ ������������ ���� <code>ap</code>. ������� ���������, ��� ����� �������, �������� � �������, ����������� ������, ������� ���������� ��������� <i>ap::</i>
52
+ </p>
53
+
54
+ <a name="conditionals"><h1>��������� �������� ����������</h1></a>
55
+
56
+ <p align=justify>
57
+ <span class=cond>AP_WIN32</span><br>
58
+ ���� ������, <b>���� �� ��������� �������������</b>, �������� ����������, ��� ��� ������������� � Win32. ����������� ����� ������� ��������� ������������ ���������� ABLAS (������� ��������� �������� ������� � ���������� SSE2), ���� ��� ����������� � �������.
59
+ </p>
60
+
61
+ <p align=justify>
62
+ <span class=cond>AP_ASSERT</span><br>
63
+ ���� ������ �������� �������� ������ �������. ���� �� ��������� ���������� define, �� ��� ������ ��������� � ��������� ������������� ������� ����������� ������������ ����������� �������. � ������ ������ ������������ ���������� <code>ap_error</code>. �������� ������ ������� ������ ��������� ����� ��������, �� ��������� ������.
64
+ </p>
65
+
66
+ <p align=justify>
67
+ <span class=cond>NO_AP_ASSERT</span><br>
68
+ ���� ������ ��������� �������� ������ �������. ���� �� ��������� ���������� define, �� ��� ��������� � �������� ������������� ������� ����� ������� �� ������� ������� �� �����������.
69
+ </p>
70
+
71
+ <p align=justify>
72
+ <span class=cond>UNSAFE_MEM_COPY</span><br>
73
+ ��������� define, ������������ ���� ������, ���������. �� ��������� �. ���������� �� �������� ������� ������������ �� ������ ����� �������.
74
+ </p>
75
+
76
+ <a name="constants"><h1>���������</h1></a>
77
+
78
+ <p align=justify>
79
+ <span class=const>machineepsilon</span><br>
80
+ ��� ��������� ���������� �������� �������� ��������, �.�. ����������� �����, �����, ��� <code>1+machineepsilon&ne;1</code> �� ������ ��������� �����. ��������� ����� ���� ����� "� �������", �.�. �������� �������� ����� ���� ��� ����.
81
+ </p>
82
+
83
+ <p align=justify>
84
+ <span class=const>maxrealnumber</span><br>
85
+ ��� ��������� ���������� ������������ ������������� ������������ �����, ������������ �� ������ ������. ��������� ����� ���� ����� "� �������", �.�. �������� ������� ����� ���� ��� ����.
86
+ </p>
87
+
88
+ <p align=justify>
89
+ <span class=const>minrealnumber</span><br>
90
+ ��� ��������� ���������� ����������� ������������� ������������ �����, ������������ �� ������ ������. ��������� ����� ���� ����� "� �������", �.�. �������� ������� ����� ���� ��� ����.
91
+ </p>
92
+
93
+ <a name="functions"><h1>�������</h1></a>
94
+
95
+ <p align=justify>
96
+ <span class=func><b>int</b> sign(<b>double</b> x)</span><br>
97
+ ����������:<br>
98
+ +1, ���� X&gt;0<br>
99
+ -1, ���� X&lt;0<br>
100
+ 0, ���� X=0
101
+ </p>
102
+
103
+ <p align=justify>
104
+ <span class=func><b>double</b> randomreal()</span><br>
105
+ ���������� ��������� ������������ ����� � ������������� [0,1).
106
+ </p>
107
+
108
+ <p align=justify>
109
+ <span class=func><b>int</b> randominteger(<b>int</b> maxv) </span><br>
110
+ ���������� ��������� ����� ����� � ������������� [0, maxv).
111
+ </p>
112
+
113
+ <p align=justify>
114
+ <span class=func><b>double</b> round(<b>double</b> x)</span><br>
115
+ ���������� � ���������� ������. ���� X ��������� ����� ���������� ����� ����� ������, �� ��������� ������� ������� �� ����������.
116
+ </p>
117
+
118
+ <p align=justify>
119
+ <span class=func><b>double</b> trunc(<b>double</b> x)</span><br>
120
+ ������������ ������� ����� X.<br>
121
+ trunc(1.3) = 1<br>
122
+ trunc(-1.3)= -1
123
+ </p>
124
+
125
+ <p align=justify>
126
+ <span class=func><b>double</b> pi()</span><br>
127
+ ���������� ��������� &pi;
128
+ </p>
129
+
130
+ <p align=justify>
131
+ <span class=func><b>double</b> sqr(<b>double</b> x)</span><br>
132
+ ���������� x<sup>2</sup>
133
+ </p>
134
+
135
+ <p align=justify>
136
+ <span class=func><b>double</b> maxreal(<b>double</b> m1, <b>double</b> m2)</span><br>
137
+ ���������� �������� �� ���� ������������ �����.
138
+ </p>
139
+
140
+ <p align=justify>
141
+ <span class=func><b>double</b> minreal(<b>double</b> m1, <b>double</b> m2)</span><br>
142
+ ���������� ������� �� ���� ������������ �����.
143
+ </p>
144
+
145
+ <p align=justify>
146
+ <span class=func><b>int</b> maxint(<b>int</b> m1, <b>int</b> m2)</span><br>
147
+ ���������� �������� �� ���� ����� �����.
148
+ </p>
149
+
150
+ <p align=justify>
151
+ <span class=func><b>int</b> minint(<b>int</b> m1, <b>int</b> m2)</span><br>
152
+ ���������� ������� �� ���� ����� �����.
153
+ </p>
154
+
155
+ <a name="aperror"><h1>����� ap_error</h1></a>
156
+
157
+ <p align=justify>
158
+ ��� ����� ����������, ������� ������������� ��� ��������� ������� ���������� AP, � ��������� - ��� �������� �������� ������� �������, ���� �������� �������� ������ �������. ������� ������ ������ �� �������� ������� ����� � �� ��������� ���������� �������, �� ������� ���������� ���� �������������.
159
+ </p>
160
+
161
+ <a name="arrays"><h1>������ ��������</h1></a>
162
+
163
+ <h2>������ � ���������</h2>
164
+
165
+ <p align=justify>
166
+ ����� �� ���������� ����� �������� ������ � ��������-���������, ����� ���� ����� ����������� ���� ������ � �� ������.
167
+ </p>
168
+
169
+ <p align=justify>
170
+ ������, �������� � ������ ����������� ����������, ��������� ����������� � ��������� � ��������� (����������� � ����������� ���������) ����������� �������, � ���������� ���������� ���������, �.�. ��������� ����� ���������� � ������ �����, ������������� ����� ������ � ����������� ��������. ��� ��� ������ �������� �������� ���������, �� ������� ����� ����������� �������� ���������� ������� �������-������. � ��������� �������-����� �������� ������ ������������ ���������� ������ ����������� ����������, �� ��������� � ���������� ������� ���� ��� ���������� ���� �� �����.
171
+ </p>
172
+
173
+ <p align=justify>
174
+ ������ � �������� ���������� � �������� �������. ������� ��������� �������� ���������� ������-������� � ��������� ������ ��� ������. ��� �������� ���������� ������ ����� �������������� ����������� ��� ����������, ��������� ������ ��� ���������, � ����� �������������� ������������ ����� � ������������, ���������� ���� ������ � ������. � ������ �������� ������� ������������� �� ��������� �� �� �������� ��������� � ������� ���������� � ��� ����� �������� � ����� ���������. ���� ��� ����������� ������-�������� �� ����� ���������� ������ ��� ��������, �� ������-����� ���� �� ����� ��������� ���������. ���� ������-�������� ����� ���������� ��� �������� ������, �� ������-����� �������� ��� �� ����� ������ � �������� � �� ��������. �.�. ��� ����������� ���������� ��� ��������� ����������� ������� � ���������� ����������.
175
+ </p>
176
+
177
+ <p align=justify>
178
+ ����� �������� ������� ������� ������� �������� ������ ��� �������� ��� ������ ������ <code:>setbounds</code:>. ��������� ������ ������ ������� � ������ ������� �������� �������. ������� ������� ������ ���� �� ������ ������. � ���������� ������ � ������ ���������� ����� ��� ���������. ���������� ��������� ��������� ������� �� ���������� � �� ����� ������ ����� ���� ������������� �� ����� ������. ���� ����� <code:>setbounds</code:> ���������� ��� ������� � ��� ���������� �������, �� ����� ��������� ��� �������� ����� ���������� �������� ����� ���������� ���������������, � ������ ���������� ��������.
179
+ </p>
180
+
181
+ <p align=justify>
182
+ ��� ��������� � ��������� ������� ������������ ������������� <code:>operator()</code:>. �.�. ���, ������������ � �������� ������� <code:>a</code:> � ��������� <code:>i, j, k</code:> ����� ��������� ��� <code:>a(i,j,k)</code:>. ���� �������� ������ ���������� ������� �����������, �������������� ������ � ���������.
183
+ </p>
184
+
185
+ <pre>
186
+ integer_1d_array factarr(<b>int</b> n)
187
+ {
188
+ integer_1d_array result;
189
+ result.setbounds(1,n);
190
+ result(1) = 1;
191
+ <b>for</b>(<b>int</b> i=2; i&lt;=n; i++)
192
+ result(i) = result(i-1)*i;
193
+ <b>return</b> result;
194
+ }
195
+ </pre>
196
+
197
+ <h2>����� template_1d_array</h2>
198
+
199
+ <p align=justify>
200
+ ��� �����-������ ������������� ����������� ������� � ����������� ������� � ������ ���������. �� ������ ����� ������ �������� ��������� ������:
201
+ </p>
202
+
203
+ <pre>
204
+ <b>typedef</b> template_1d_array&lt;<b>int</b>&gt; integer_1d_array;
205
+ <b>typedef</b> template_1d_array&lt;<b>double</b>&gt; real_1d_array;
206
+ <b>typedef</b> template_1d_array&lt;<b>bool</b>&gt; boolean_1d_array;
207
+ <b>typedef</b> template_1d_array&lt;complex&gt; complex_1d_array;
208
+ </pre>
209
+
210
+ <h2>�������-����� ������</h2>
211
+
212
+ <p align=justify>
213
+ <span class=func>template_1d_array()</span><br>
214
+ �����������. �������� ������� �������.
215
+ </p>
216
+
217
+ <p align=justify>
218
+ <span class=func>~template_1d_array()</span><br>
219
+ ����������. ��� ������ ������������� ���������� ��� ������ ������
220
+ </p>
221
+
222
+ <p align=justify>
223
+ <span class=func>template_1d_array(<b>const</b> template_1d_array &amp;rhs)</span><br>
224
+ ����������� ����� �������. ��� ���� ���������� ��������� ������� ������, � ������� ���������� ���������� �������-���������.
225
+ </p>
226
+
227
+ <p align=justify>
228
+ <span class=func><b>const</b> template_1d_array&amp; <b>operator=</b>(<b>const</b> template_1d_array &amp;rhs)</span><br>
229
+ ������������ �������. ��� ���� ���������� �������-��������� ��������� � ������������� ���������� ��� ���� ������, ����� ������ ���������� ��������� ������� ������, � ������� ���������� ���������� �������-���������.
230
+ </p>
231
+
232
+ <p align=justify>
233
+ <span class=func>T&amp; operator()(<b>int</b> i)</span><br>
234
+ ��������� � �������� ������� � ������� i
235
+ </p>
236
+
237
+ <p align=justify>
238
+ <span class=func><b>void</b> setbounds(<b>int</b> iLow, <b>int</b> iHigh)</span><br>
239
+ ��������� ������ ��� ������. ��� ���� ������ ���������� ������� ��������� � ������������� ���������� ��� ���� ������, ����� ������ ���������� ��������� ������� ������ ������� iHigh-iLow+1 ���������.<br>
240
+ ��������� ��������� � ����� ������� ���������� � iLow � ������������� iHigh. ���������� ������ ������� �� ����������.
241
+ </p>
242
+
243
+ <p align=justify>
244
+ <span class=func><b>void</b> setcontent(<b>int</b> iLow, <b>int</b> iHigh, <b>const</b> T *pContent)</span><br>
245
+ ����� ���������� ������ setbounds() �� ��� �����������, ��� ����� ��������� ������ � �� ���������� ���������� ������� pContent[].
246
+ </p>
247
+
248
+ <p align=justify>
249
+ <span class=func>T* getcontent()</span><br>
250
+ ����� ��������� �������� ��������� �� ���������� �������. ������, �� ������� ��������� ������������ ���������, ����� ��������, � ��� ���� ��������� ���������� �������.
251
+ </p>
252
+
253
+ <p align=justify>
254
+ <span class=func><b>int</b> getlowbound()<br><b>int</b> gethighbound()</span><br>
255
+ ������ ������������ ��� ��������� ���������� � ������ � ������� �������� �������.
256
+ </p>
257
+
258
+ <p align=justify>
259
+ <span class=func>raw_vector&lt;T&gt; getvector(<b>int</b> iStart, <b>int</b> iEnd)</span><br>
260
+ ����� ������������ �������� �������������� �������� ������� ��� ��������� ������� � ���������� ������ �������. ����� ���������� ������, ���������� � ���� ��������� �� ����� ������� (������� � �������� � �������� iStart � ���������� �������� iEnd). ���� iEnd&lt;iStart, �� ���������, ��� ����� ������ ������.
261
+ </p>
262
+
263
+ <p align=justify>
264
+ <span class=func>const_raw_vector&lt;T&gt; getvector(<b>int</b> iStart, <b>int</b> iEnd) <b>const</b></span><br>
265
+ ����� ������������ �������� �������������� �������� ������� ��� ��������� ������� � ���������� ������ �������. ����� ���������� ������, ���������� � ���� ��������� �� ����� ������� (������� � �������� � �������� iStart � ���������� �������� iEnd). ���� iEnd&lt;iStart, �� ���������, ��� ����� ������ ������. ������������ ������ ��������� �������� ������ ������ ��� ������.
266
+ </p>
267
+
268
+
269
+ <h2>����� template_2d_array</h2>
270
+
271
+ <p align=justify>
272
+ ��� �����-������ ������������� ����������� ������� � ����������� ������� � ������ ���������. �� ������ ����� ������ �������� ��������� ������:
273
+ </p>
274
+
275
+ <pre>
276
+ <b>typedef</b> template_2d_array&lt;<b>int</b>&gt; integer_2d_array;
277
+ <b>typedef</b> template_2d_array&lt;<b>double</b>&gt; real_2d_array;
278
+ <b>typedef</b> template_2d_array&lt;<b>bool</b>&gt; boolean_2d_array;
279
+ <b>typedef</b> template_2d_array&lt;complex&gt; complex_2d_array;
280
+ </pre>
281
+
282
+ <h2>�������-����� ������</h2>
283
+
284
+ <p align=justify>
285
+ <span class=func>template_2d_array()</span><br>
286
+ �����������. �������� ������� �������.
287
+ </p>
288
+
289
+ <p align=justify>
290
+ <span class=func>~template_2d_array()</span><br>
291
+ ����������. ��� ������ ������������� ���������� ��� ������ ������
292
+ </p>
293
+
294
+ <p align=justify>
295
+ <span class=func>template_2d_array(<b>const</b> template_2d_array &amp;rhs)</span><br>
296
+ ����������� ����� �������. ��� ���� ���������� ��������� ������� ������, � ������� ���������� ���������� �������-���������
297
+ </p>
298
+
299
+ <p align=justify>
300
+ <span class=func><b>const</b> template_2d_array&amp; <b>operator=</b>(<b>const</b> template_2d_array &amp;rhs)</span><br>
301
+ ������������ �������. ��� ���� ���������� �������-��������� ��������� � ������������� ���������� ��� ���� ������, ����� ������ ���������� ��������� ������� ������, � ������� ���������� ���������� ���������.
302
+ </p>
303
+
304
+ <p align=justify>
305
+ <span class=func>T&amp; operator()(<b>int</b> i1, <b>int</b> i2)</span><br>
306
+ ��������� � �������� ������� � �������� [i1,i2]
307
+ </p>
308
+
309
+ <p align=justify>
310
+ <span class=func><b>void</b> setbounds(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2)</span><br>
311
+ ��������� ������ ��� ������. ��� ���� ������ ���������� ������� ��������� � ������������� ���������� ��� ���� ������, ����� ������ ���������� ��������� ������� ������ �������� (iHigh1-iLow1+1)*(iHigh2-iLow2+1) ���������.<br>
312
+ ��������� ��������� � ����� ������� �� ������ ����������� ���������� � iLow1 � ������������� iHigh1, ���������� ��� ������ �����������.<br>
313
+ ���������� ������ ������� �� ����������.
314
+ </p>
315
+
316
+ <p align=justify>
317
+ <span class=func><b>void</b> setcontent(<b>int</b> iLow1, <b>int</b> iHigh1, <b>int</b> iLow2, <b>int</b> iHigh2, <b>const</b> T *pContent)</span><br>
318
+ ����� ���������� ������ setbounds() �� ��� �����������, ��� ����� ��������� ������ � �� ���������� ���������� ������� pContent[].<br>
319
+ ������ pContent �������� ���������� ������, ���������� ���������, �.�. ������ ���� ������� [iLow1, iLow2], ����� [iLow1, iLow2+1] � �.�.<br>
320
+ </p>
321
+
322
+ <p align=justify>
323
+ <span class=func><b>int</b> getlowbound(<b>int</b> iBoundNum)<br><b>int</b> gethighbound(<b>int</b> iBoundNum)</span><br>
324
+ ������ ������������ ��� ��������� ���������� � ������ � ������� �������� ������� �� ����������� � ���������� �������.
325
+ </p>
326
+
327
+ <p align=justify>
328
+ <span class=func>
329
+ raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd)<br>
330
+ const_raw_vector<T> getcolumn(<b>int</b> iColumn, <b>int</b> iRowStart, <b>int</b> iRowEnd) <b>const</b><br>
331
+ </span>
332
+ ������ ������������ �������� �������������� �������� ������� ��� ��������� ������� � ���������� ������ �������. ������ ���������� ������, ���������� � ���� ��������� �� ����� ������� iColumn (������� �� ������ iRowStart � ���������� ������� iRowEnd).
333
+ <br>
334
+ �������� iColumn ������ ���� ���������� ������� ������� (�.�. ���������� � �������� ���������� ��� ������ ������). ���� iRowEnd&lt;iRowStart, �� ���������, ��� ����� ������ �������.
335
+ </p>
336
+
337
+ <p align=justify>
338
+ <span class=func>
339
+ raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd)<br>
340
+ const_raw_vector<T> getrow(<b>int</b> iRow, <b>int</b> iColumnStart, <b>int</b> iColumnEnd) <b>const</b><br>
341
+ </span>
342
+ ������ ������������ �������� �������������� �������� ������� ��� ��������� ������� � ���������� ������ �������. ������ ���������� ������, ���������� � ���� ��������� �� ����� ������ iRow (������� �� ������� iColumnStart � ���������� �������� iColumnEnd).
343
+ <br>
344
+ �������� iRow ������ ���� ���������� ������� ������ (�.�. ���������� � �������� ���������� ��� ������ ������). ���� iColumnEnd&lt;iColumnStart, �� ���������, ��� ������ ������ ������.
345
+ </p>
346
+
347
+ <a name="blas"><h1>������� ������������ �������� �������</h1></a>
348
+
349
+ <p align=justify>
350
+ ������� ������������ �������� ������� ���������� AP �� ����� ���������������� ������ � Level 1 BLAS, �������� ������������ ���������� �������� � ���������, � ����� �� �������� � ��������� ������.
351
+ </p>
352
+
353
+ <p align=justify>
354
+ ������ � �������������� �������������� ��������� �������. ������� ���������� �������� ������ ���� <code>raw_vector</code> ��� <code>const_raw_vector</code>, ����������� �� �������������� ����� ������� ��� ������� ��� ������ ������� <code>getcolumn</code>/<code>getrow</code> (��� �������) ��� <code>getvector</code> (��� �������). ������ �������� � ���� ��������� �� ������ ������ (��� �������), ����� ��������� � �������������� ������ � �������� ����� ����� ��������� ����������. ��� ������������� ����������� ����� �������� ������ � ������ (�.�. ��� �������� �� �������) �������� ����� ���������� ����� ������ ����� 1, � �������� ����� ���������� ������ ������� ����� ����� ��������. ���������� ������ ���������� � �������� ��������� � �������������� ������������, ������� ������������ �������� ��� ������ �������, �� ������� ��������� ���������� ��������� �������.
355
+ </p>
356
+
357
+ <p align=justify>
358
+ ���� �������� ������ ������� ����������� �������� �������, ��������� � ������� ���������� AP.
359
+ </p>
360
+
361
+ <p align=justify>
362
+ <span class=func>
363
+ template&lt;<b>class</b> T&gt; T vdotproduct(const_raw_vector&lt;T&gt; v1, const_raw_vector&lt;T&gt; v2)
364
+ </span><br>
365
+ ������������ ��������� ��������� ������������ ���������� ��������.
366
+ </p>
367
+
368
+ <p align=justify>
369
+ <span class=func>
370
+ template&lt;<b>class</b> T&gt; <b>void</b> vmove(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
371
+ template&lt;<b>class</b> T&gt; <b>void</b> vmoveneg(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
372
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vmove(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
373
+ </span>
374
+ ��� ��������� ����������� ������ ��� ��������� ����� ����������� ����������� ������ ������� �� ����� ������� �������: �������� �����������, ����������� � ���������� �� -1, ����������� � ���������� �� �����.
375
+ </p>
376
+
377
+ <p align=justify>
378
+ <span class=func>
379
+ template&lt;<b>class</b> T&gt; <b>void</b> vadd(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
380
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vadd(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
381
+ </span>
382
+ ��� ��������� ����������� ������ ��� ��������� ����� ���������� ������ ������� � �������: �������� ���������� ��� ���������� � ���������� �� �����.
383
+ </p>
384
+
385
+ <p align=justify>
386
+ <span class=func>
387
+ template&lt;<b>class</b> T&gt; <b>void</b> vsub(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc)<br>
388
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vsub(raw_vector&lt;T&gt; vdst, const_raw_vector&lt;T&gt; vsrc, T2 alpha)<br>
389
+ </span>
390
+ ��� ��������� ����������� ������ ��� ��������� ����� ��������� ������ ������� �� �������: �������� ��������� ��� ��������� � ���������� �� �����.
391
+ </p>
392
+
393
+ <p align=justify>
394
+ <span class=func>
395
+ template&lt;<b>class</b> T, <b>class</b> T2> <b>void</b> vmul(raw_vector&lt;T&gt; vdst, T2 alpha)
396
+ </span><br>
397
+ ��� ������������ ������ ��� ��������� ������� �� ����� � ����������� ���������� � ��� �� �����.
398
+ </p>
399
+
400
+ <h2>�������������� ���������</h2>
401
+
402
+ <p align=justify>
403
+ � ������ ���� ��� �������� �������� ��������� � ���������� ����� ����������, ������ 1, � ������ N, ����� ������������ �������������� ���������.
404
+ </p>
405
+
406
+ <p align=justify>
407
+ <span class=func>
408
+ template&lt;<b>class</b> T&gt; T vdotproduct(<b>const</b> T *v1, <b>const</b> T *v2, <b>int</b> N)<br>
409
+ template&lt;<b>class</b> T&gt; <b>void</b> vmove(T *vdst, <b>const</b> T *vsrc, <b>int</b> N)<br>
410
+ template&lt;<b>class</b> T&gt; <b>void</b> vmoveneg(T *vdst, <b>const</b> T *vsrc, <b>int</b> N)<br>
411
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vmove(T *vdst, <b>const</b> T *vsrc, <b>int</b> N, T2 alpha)<br>
412
+ template&lt;<b>class</b> T&gt; <b>void</b> vadd(T *vdst, <b>const</b> T *vsrc, <b>int</b> N)<br>
413
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vadd(T *vdst, <b>const</b> T *vsrc, <b>int</b> N, T2 alpha)<br>
414
+ template&lt;<b>class</b> T&gt; <b>void</b> vsub(T *vdst, <b>const</b> T *vsrc, <b>int</b> N)<br>
415
+ template&lt;<b>class</b> T, <b>class</b> T2&gt; <b>void</b> vsub(T *vdst, <b>const</b> T *vsrc, <b>int</b> N, T2 alpha)<br>
416
+ template&lt;<b>class</b> T, <b>class</b> T2> <b>void</b> vmul(T *vdst, <b>int</b> N, T2 alpha)
417
+ </span>
418
+ </p>
419
+
420
+ <a name="complex"><h1>����� ����������� �����</h1></a>
421
+
422
+ <p align=justify>
423
+ ���������� AP �������� ����� <code>ap::complex</code>, ������� ��������� ������������ �������� � ������������ �������. ������ � �������������� � ������ ������ ������������ ����� �������������� ����� �������� (public) ���� <code>x</code> � <code>y</code>. �������������� �������������� ��������, ��� �� ����������� ������ ������, ����� ���������� �������� ��������, ���������, ��������� � �������. ��������, ��������� � ��������� �������������� ������� �������� (�.�. �� �����������, ������� ����� ����� � ����� �������� �������), �������� ������� �������������� � �������������� �.�. "�����������" ���������, ������� ������� �� �������� � ������������ ��� ���������� ������������� �����������. ����� ���������� �������� � ���� ��������� �������, �������������� ������������ �������� � ������������ �������.
424
+ </p>
425
+
426
+ <p align=justify>
427
+ <span class=func><b>const</b> double abscomplex(<b>const</b> complex &amp;z)</span><br>
428
+ ������� ���������� ������ ������������ �����. ������� ��������, ��� ���������� ������ �������������� � �������������� �.�. "�����������" ���������, ������� ������� �� �������� � ������������ ��� ���������� ������������� �����������.
429
+ </p>
430
+
431
+ <p align=justify>
432
+ <span class=func><b>const</b> complex conj(<b>const</b> complex &amp;z)</span><br>
433
+ ������� ���������� ����������� �����, ����������� ������ ���������.
434
+ </p>
435
+
436
+ <p align=justify>
437
+ <span class=func><b>const</b> complex csqr(<b>const</b> complex &amp;z)</span><br>
438
+ ������� ���������� ������� ���������.
439
+ </p>
440
+
441
+ </body>
442
+ </html>
@@ -0,0 +1,754 @@
1
+ /********************************************************************
2
+ Templates for AP Library
3
+ Copyright (c) 2003-2008, Sergey Bochkanov (ALGLIB project).
4
+ See www.alglib.net or alglib.sources.ru for details.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are
8
+ met:
9
+
10
+ - Redistributions of source code must retain the above copyright
11
+ notice, this list of conditions and the following disclaimer.
12
+
13
+ - Redistributions in binary form must reproduce the above copyright
14
+ notice, this list of conditions and the following disclaimer listed
15
+ in this license in the documentation and/or other materials
16
+ provided with the distribution.
17
+
18
+ - Neither the name of the copyright holders nor the names of its
19
+ contributors may be used to endorse or promote products derived from
20
+ this software without specific prior written permission.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
+ ********************************************************************/
34
+ #ifndef APVT_H
35
+ #define APVT_H
36
+
37
+ /********************************************************************
38
+ Template defining vector in memory. It is used by the basic
39
+ subroutines of linear algebra.
40
+
41
+ Vector consists of Length elements of type T, starting from an element,
42
+ which Data is pointed to. Interval between adjacent elements equals
43
+ the value of Step.
44
+
45
+ The class provides an access for reading only.
46
+ ********************************************************************/
47
+ template<class T>
48
+ class const_raw_vector
49
+ {
50
+ public:
51
+ const_raw_vector(const T *Data, int Length, int Step):
52
+ pData(const_cast<T*>(Data)),iLength(Length),iStep(Step){};
53
+
54
+ const T* GetData() const
55
+ { return pData; };
56
+
57
+ int GetLength() const
58
+ { return iLength; };
59
+
60
+ int GetStep() const
61
+ { return iStep; };
62
+ protected:
63
+ T *pData;
64
+ int iLength, iStep;
65
+ };
66
+
67
+
68
+ /********************************************************************
69
+ Template defining vector in memory, derived from const_raw_vector.
70
+ It is used by the basic subroutines of linear algebra.
71
+
72
+ Vector consists of Length elements of type T, starting from an element,
73
+ which Data is pointed to. Interval between adjacent elements equals
74
+ the value of Step.
75
+
76
+ The class provides an access both for reading and writing.
77
+ ********************************************************************/
78
+ template<class T>
79
+ class raw_vector : public const_raw_vector<T>
80
+ {
81
+ public:
82
+ raw_vector(T *Data, int Length, int Step):const_raw_vector<T>(Data, Length, Step){};
83
+
84
+ T* GetData()
85
+ { return const_raw_vector<T>::pData; };
86
+ };
87
+
88
+
89
+ /********************************************************************
90
+ Dot product
91
+ ********************************************************************/
92
+ template<class T>
93
+ T vdotproduct(const_raw_vector<T> v1, const_raw_vector<T> v2)
94
+ {
95
+ ap_error::make_assertion(v1.GetLength()==v2.GetLength());
96
+ if( v1.GetStep()==1 && v2.GetStep()==1 )
97
+ {
98
+ //
99
+ // fast
100
+ //
101
+ T r = 0;
102
+ const T *p1 = v1.GetData();
103
+ const T *p2 = v2.GetData();
104
+ int imax = v1.GetLength()/4;
105
+ int i;
106
+ for(i=imax; i!=0; i--)
107
+ {
108
+ r += (*p1)*(*p2) + p1[1]*p2[1] + p1[2]*p2[2] + p1[3]*p2[3];
109
+ p1+=4;
110
+ p2+=4;
111
+ }
112
+ for(i=0; i<v1.GetLength()%4; i++)
113
+ r += (*(p1++))*(*(p2++));
114
+ return r;
115
+ }
116
+ else
117
+ {
118
+ //
119
+ // general
120
+ //
121
+ int offset11 = v1.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
122
+ int offset21 = v2.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
123
+ T r = 0;
124
+ const T *p1 = v1.GetData();
125
+ const T *p2 = v2.GetData();
126
+ int imax = v1.GetLength()/4;
127
+ int i;
128
+ for(i=0; i<imax; i++)
129
+ {
130
+ r += (*p1)*(*p2) + p1[offset11]*p2[offset21] + p1[offset12]*p2[offset22] + p1[offset13]*p2[offset23];
131
+ p1+=offset14;
132
+ p2+=offset24;
133
+ }
134
+ for(i=0; i<v1.GetLength()%4; i++)
135
+ {
136
+ r += (*p1)*(*p2);
137
+ p1+=offset11;
138
+ p2+=offset21;
139
+ }
140
+ return r;
141
+ }
142
+ }
143
+
144
+
145
+ /********************************************************************
146
+ Dot product, another form
147
+ ********************************************************************/
148
+ template<class T, class INTTYPE>
149
+ T _vdotproduct(const T *v1, const T *v2, INTTYPE N)
150
+ {
151
+ T r = 0;
152
+ int imax = N/4;
153
+ int i;
154
+ for(i=imax; i!=0; i--)
155
+ {
156
+ r += (*v1)*(*v2) + v1[1]*v2[1] + v1[2]*v2[2] + v1[3]*v2[3];
157
+ v1+=4;
158
+ v2+=4;
159
+ }
160
+ for(i=0; i<N%4; i++)
161
+ r+=(*(v1++))*(*(v2++));
162
+ return r;
163
+ }
164
+
165
+
166
+ /********************************************************************
167
+ Copy one vector into another
168
+ ********************************************************************/
169
+ template<class T>
170
+ void vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc)
171
+ {
172
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
173
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
174
+ {
175
+ //
176
+ // fast
177
+ //
178
+ T *p1 = vdst.GetData();
179
+ const T *p2 = vsrc.GetData();
180
+ int imax = vdst.GetLength()/2;
181
+ int i;
182
+ for(i=imax; i!=0; i--)
183
+ {
184
+ *p1 = *p2;
185
+ p1[1] = p2[1];
186
+ p1 += 2;
187
+ p2 += 2;
188
+ }
189
+ if(vdst.GetLength()%2 != 0)
190
+ *p1 = *p2;
191
+ return;
192
+ }
193
+ else
194
+ {
195
+ //
196
+ // general
197
+ //
198
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
199
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
200
+ T *p1 = vdst.GetData();
201
+ const T *p2 = vsrc.GetData();
202
+ int imax = vdst.GetLength()/4;
203
+ int i;
204
+ for(i=0; i<imax; i++)
205
+ {
206
+ *p1 = *p2;
207
+ p1[offset11] = p2[offset21];
208
+ p1[offset12] = p2[offset22];
209
+ p1[offset13] = p2[offset23];
210
+ p1 += offset14;
211
+ p2 += offset24;
212
+ }
213
+ for(i=0; i<vdst.GetLength()%4; i++)
214
+ {
215
+ *p1 = *p2;
216
+ p1 += vdst.GetStep();
217
+ p2 += vsrc.GetStep();
218
+ }
219
+ return;
220
+ }
221
+ }
222
+
223
+
224
+ /********************************************************************
225
+ vmove, abother form
226
+ ********************************************************************/
227
+ template<class T, class INTTYPE>
228
+ void _vmove(T *vdst, const T* vsrc, INTTYPE N)
229
+ {
230
+ int imax = N/2;
231
+ int i;
232
+ for(i=imax; i!=0; i--)
233
+ {
234
+ *vdst = *vsrc;
235
+ vdst[1] = vsrc[1];
236
+ vdst += 2;
237
+ vsrc += 2;
238
+ }
239
+ if(N%2!=0)
240
+ *vdst = *vsrc;
241
+ }
242
+
243
+
244
+ /********************************************************************
245
+ Copy one vector multiplied by -1 into another.
246
+ ********************************************************************/
247
+ template<class T>
248
+ void vmoveneg(raw_vector<T> vdst, const_raw_vector<T> vsrc)
249
+ {
250
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
251
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
252
+ {
253
+ //
254
+ // fast
255
+ //
256
+ T *p1 = vdst.GetData();
257
+ const T *p2 = vsrc.GetData();
258
+ int imax = vdst.GetLength()/2;
259
+ int i;
260
+ for(i=0; i<imax; i++)
261
+ {
262
+ *p1 = -*p2;
263
+ p1[1] = -p2[1];
264
+ p1 += 2;
265
+ p2 += 2;
266
+ }
267
+ if(vdst.GetLength()%2 != 0)
268
+ *p1 = -*p2;
269
+ return;
270
+ }
271
+ else
272
+ {
273
+ //
274
+ // general
275
+ //
276
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
277
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
278
+ T *p1 = vdst.GetData();
279
+ const T *p2 = vsrc.GetData();
280
+ int imax = vdst.GetLength()/4;
281
+ int i;
282
+ for(i=imax; i!=0; i--)
283
+ {
284
+ *p1 = -*p2;
285
+ p1[offset11] = -p2[offset21];
286
+ p1[offset12] = -p2[offset22];
287
+ p1[offset13] = -p2[offset23];
288
+ p1 += offset14;
289
+ p2 += offset24;
290
+ }
291
+ for(i=0; i<vdst.GetLength()%4; i++)
292
+ {
293
+ *p1 = -*p2;
294
+ p1 += vdst.GetStep();
295
+ p2 += vsrc.GetStep();
296
+ }
297
+ return;
298
+ }
299
+ }
300
+
301
+
302
+ /********************************************************************
303
+ vmoveneg, another form
304
+ ********************************************************************/
305
+ template<class T, class INTTYPE>
306
+ void _vmoveneg(T *vdst, const T *vsrc, INTTYPE N)
307
+ {
308
+ T *p1 = vdst;
309
+ const T *p2 = vsrc;
310
+ int imax = N/2;
311
+ int i;
312
+ for(i=0; i<imax; i++)
313
+ {
314
+ *p1 = -*p2;
315
+ p1[1] = -p2[1];
316
+ p1 += 2;
317
+ p2 += 2;
318
+ }
319
+ if(N%2 != 0)
320
+ *p1 = -*p2;
321
+ }
322
+
323
+
324
+ /********************************************************************
325
+ Copy one vector multiplied by a number into another vector.
326
+ ********************************************************************/
327
+ template<class T, class T2>
328
+ void vmove(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
329
+ {
330
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
331
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
332
+ {
333
+ //
334
+ // fast
335
+ //
336
+ T *p1 = vdst.GetData();
337
+ const T *p2 = vsrc.GetData();
338
+ int imax = vdst.GetLength()/4;
339
+ int i;
340
+ for(i=imax; i!=0; i--)
341
+ {
342
+ *p1 = alpha*(*p2);
343
+ p1[1] = alpha*p2[1];
344
+ p1[2] = alpha*p2[2];
345
+ p1[3] = alpha*p2[3];
346
+ p1 += 4;
347
+ p2 += 4;
348
+ }
349
+ for(i=0; i<vdst.GetLength()%4; i++)
350
+ *(p1++) = alpha*(*(p2++));
351
+ return;
352
+ }
353
+ else
354
+ {
355
+ //
356
+ // general
357
+ //
358
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
359
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
360
+ T *p1 = vdst.GetData();
361
+ const T *p2 = vsrc.GetData();
362
+ int imax = vdst.GetLength()/4;
363
+ int i;
364
+ for(i=0; i<imax; i++)
365
+ {
366
+ *p1 = alpha*(*p2);
367
+ p1[offset11] = alpha*p2[offset21];
368
+ p1[offset12] = alpha*p2[offset22];
369
+ p1[offset13] = alpha*p2[offset23];
370
+ p1 += offset14;
371
+ p2 += offset24;
372
+ }
373
+ for(i=0; i<vdst.GetLength()%4; i++)
374
+ {
375
+ *p1 = alpha*(*p2);
376
+ p1 += vdst.GetStep();
377
+ p2 += vsrc.GetStep();
378
+ }
379
+ return;
380
+ }
381
+ }
382
+
383
+
384
+ /********************************************************************
385
+ vmove, another form
386
+ ********************************************************************/
387
+ template<class T, class T2, class INTTYPE>
388
+ void _vmove(T *vdst, const T *vsrc, INTTYPE N, T2 alpha)
389
+ {
390
+ T *p1 = vdst;
391
+ const T *p2 = vsrc;
392
+ int imax = N/4;
393
+ int i;
394
+ for(i=imax; i!=0; i--)
395
+ {
396
+ *p1 = alpha*(*p2);
397
+ p1[1] = alpha*p2[1];
398
+ p1[2] = alpha*p2[2];
399
+ p1[3] = alpha*p2[3];
400
+ p1 += 4;
401
+ p2 += 4;
402
+ }
403
+ for(i=0; i<N%4; i++)
404
+ *(p1++) = alpha*(*(p2++));
405
+ }
406
+
407
+
408
+ /********************************************************************
409
+ Vector addition
410
+ ********************************************************************/
411
+ template<class T>
412
+ void vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc)
413
+ {
414
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
415
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
416
+ {
417
+ //
418
+ // fast
419
+ //
420
+ T *p1 = vdst.GetData();
421
+ const T *p2 = vsrc.GetData();
422
+ int imax = vdst.GetLength()/4;
423
+ int i;
424
+ for(i=imax; i!=0; i--)
425
+ {
426
+ *p1 += *p2;
427
+ p1[1] += p2[1];
428
+ p1[2] += p2[2];
429
+ p1[3] += p2[3];
430
+ p1 += 4;
431
+ p2 += 4;
432
+ }
433
+ for(i=0; i<vdst.GetLength()%4; i++)
434
+ *(p1++) += *(p2++);
435
+ return;
436
+ }
437
+ else
438
+ {
439
+ //
440
+ // general
441
+ //
442
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
443
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
444
+ T *p1 = vdst.GetData();
445
+ const T *p2 = vsrc.GetData();
446
+ int imax = vdst.GetLength()/4;
447
+ int i;
448
+ for(i=0; i<imax; i++)
449
+ {
450
+ *p1 += *p2;
451
+ p1[offset11] += p2[offset21];
452
+ p1[offset12] += p2[offset22];
453
+ p1[offset13] += p2[offset23];
454
+ p1 += offset14;
455
+ p2 += offset24;
456
+ }
457
+ for(i=0; i<vdst.GetLength()%4; i++)
458
+ {
459
+ *p1 += *p2;
460
+ p1 += vdst.GetStep();
461
+ p2 += vsrc.GetStep();
462
+ }
463
+ return;
464
+ }
465
+ }
466
+
467
+
468
+ /********************************************************************
469
+ vadd, another form
470
+ ********************************************************************/
471
+ template<class T, class INTTYPE>
472
+ void _vadd(T *vdst, const T *vsrc, INTTYPE N)
473
+ {
474
+ T *p1 = vdst;
475
+ const T *p2 = vsrc;
476
+ int imax = N/4;
477
+ int i;
478
+ for(i=imax; i!=0; i--)
479
+ {
480
+ *p1 += *p2;
481
+ p1[1] += p2[1];
482
+ p1[2] += p2[2];
483
+ p1[3] += p2[3];
484
+ p1 += 4;
485
+ p2 += 4;
486
+ }
487
+ for(i=0; i<N%4; i++)
488
+ *(p1++) += *(p2++);
489
+ }
490
+
491
+
492
+ /********************************************************************
493
+ Add one vector multiplied by a number to another vector.
494
+ ********************************************************************/
495
+ template<class T, class T2>
496
+ void vadd(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
497
+ {
498
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
499
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
500
+ {
501
+ //
502
+ // fast
503
+ //
504
+ T *p1 = vdst.GetData();
505
+ const T *p2 = vsrc.GetData();
506
+ int imax = vdst.GetLength()/4;
507
+ int i;
508
+ for(i=imax; i!=0; i--)
509
+ {
510
+ *p1 += alpha*(*p2);
511
+ p1[1] += alpha*p2[1];
512
+ p1[2] += alpha*p2[2];
513
+ p1[3] += alpha*p2[3];
514
+ p1 += 4;
515
+ p2 += 4;
516
+ }
517
+ for(i=0; i<vdst.GetLength()%4; i++)
518
+ *(p1++) += alpha*(*(p2++));
519
+ return;
520
+ }
521
+ else
522
+ {
523
+ //
524
+ // general
525
+ //
526
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
527
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
528
+ T *p1 = vdst.GetData();
529
+ const T *p2 = vsrc.GetData();
530
+ int imax = vdst.GetLength()/4;
531
+ int i;
532
+ for(i=0; i<imax; i++)
533
+ {
534
+ *p1 += alpha*(*p2);
535
+ p1[offset11] += alpha*p2[offset21];
536
+ p1[offset12] += alpha*p2[offset22];
537
+ p1[offset13] += alpha*p2[offset23];
538
+ p1 += offset14;
539
+ p2 += offset24;
540
+ }
541
+ for(i=0; i<vdst.GetLength()%4; i++)
542
+ {
543
+ *p1 += alpha*(*p2);
544
+ p1 += vdst.GetStep();
545
+ p2 += vsrc.GetStep();
546
+ }
547
+ return;
548
+ }
549
+ }
550
+
551
+
552
+ /********************************************************************
553
+ vadd, another form
554
+ ********************************************************************/
555
+ template<class T, class T2, class INTTYPE>
556
+ void _vadd(T *vdst, const T *vsrc, INTTYPE N, T2 alpha)
557
+ {
558
+ T *p1 = vdst;
559
+ const T *p2 = vsrc;
560
+ int imax = N/4;
561
+ int i;
562
+ for(i=imax; i!=0; i--)
563
+ {
564
+ *p1 += alpha*(*p2);
565
+ p1[1] += alpha*p2[1];
566
+ p1[2] += alpha*p2[2];
567
+ p1[3] += alpha*p2[3];
568
+ p1 += 4;
569
+ p2 += 4;
570
+ }
571
+ for(i=0; i<N%4; i++)
572
+ *(p1++) += alpha*(*(p2++));
573
+ }
574
+
575
+
576
+ /********************************************************************
577
+ Vector subtraction
578
+ ********************************************************************/
579
+ template<class T>
580
+ void vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc)
581
+ {
582
+ ap_error::make_assertion(vdst.GetLength()==vsrc.GetLength());
583
+ if( vdst.GetStep()==1 && vsrc.GetStep()==1 )
584
+ {
585
+ //
586
+ // fast
587
+ //
588
+ T *p1 = vdst.GetData();
589
+ const T *p2 = vsrc.GetData();
590
+ int imax = vdst.GetLength()/4;
591
+ int i;
592
+ for(i=imax; i!=0; i--)
593
+ {
594
+ *p1 -= *p2;
595
+ p1[1] -= p2[1];
596
+ p1[2] -= p2[2];
597
+ p1[3] -= p2[3];
598
+ p1 += 4;
599
+ p2 += 4;
600
+ }
601
+ for(i=0; i<vdst.GetLength()%4; i++)
602
+ *(p1++) -= *(p2++);
603
+ return;
604
+ }
605
+ else
606
+ {
607
+ //
608
+ // general
609
+ //
610
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
611
+ int offset21 = vsrc.GetStep(), offset22 = 2*offset21, offset23 = 3*offset21, offset24 = 4*offset21;
612
+ T *p1 = vdst.GetData();
613
+ const T *p2 = vsrc.GetData();
614
+ int imax = vdst.GetLength()/4;
615
+ int i;
616
+ for(i=0; i<imax; i++)
617
+ {
618
+ *p1 -= *p2;
619
+ p1[offset11] -= p2[offset21];
620
+ p1[offset12] -= p2[offset22];
621
+ p1[offset13] -= p2[offset23];
622
+ p1 += offset14;
623
+ p2 += offset24;
624
+ }
625
+ for(i=0; i<vdst.GetLength()%4; i++)
626
+ {
627
+ *p1 -= *p2;
628
+ p1 += vdst.GetStep();
629
+ p2 += vsrc.GetStep();
630
+ }
631
+ return;
632
+ }
633
+ }
634
+
635
+
636
+ /********************************************************************
637
+ vsub, another form
638
+ ********************************************************************/
639
+ template<class T, class INTTYPE>
640
+ void _vsub(T *vdst, const T *vsrc, INTTYPE N)
641
+ {
642
+ T *p1 = vdst;
643
+ const T *p2 = vsrc;
644
+ int imax = N/4;
645
+ int i;
646
+ for(i=imax; i!=0; i--)
647
+ {
648
+ *p1 -= *p2;
649
+ p1[1] -= p2[1];
650
+ p1[2] -= p2[2];
651
+ p1[3] -= p2[3];
652
+ p1 += 4;
653
+ p2 += 4;
654
+ }
655
+ for(i=0; i<N%4; i++)
656
+ *(p1++) -= *(p2++);
657
+ }
658
+
659
+
660
+ /********************************************************************
661
+ Subtract one vector multiplied by a number from another vector.
662
+ ********************************************************************/
663
+ template<class T, class T2>
664
+ void vsub(raw_vector<T> vdst, const_raw_vector<T> vsrc, T2 alpha)
665
+ {
666
+ vadd(vdst, vsrc, -alpha);
667
+ }
668
+
669
+
670
+ /********************************************************************
671
+ vsub, another form
672
+ ********************************************************************/
673
+ template<class T, class T2, class INTTYPE>
674
+ void _vsub(T *vdst, const T *vsrc, INTTYPE N, T2 alpha)
675
+ {
676
+ _vadd(vdst, vsrc, N, -alpha);
677
+ }
678
+
679
+
680
+ /********************************************************************
681
+ In-place vector multiplication
682
+ ********************************************************************/
683
+ template<class T, class T2>
684
+ void vmul(raw_vector<T> vdst, T2 alpha)
685
+ {
686
+ if( vdst.GetStep()==1 )
687
+ {
688
+ //
689
+ // fast
690
+ //
691
+ T *p1 = vdst.GetData();
692
+ int imax = vdst.GetLength()/4;
693
+ int i;
694
+ for(i=imax; i!=0; i--)
695
+ {
696
+ *p1 *= alpha;
697
+ p1[1] *= alpha;
698
+ p1[2] *= alpha;
699
+ p1[3] *= alpha;
700
+ p1 += 4;
701
+ }
702
+ for(i=0; i<vdst.GetLength()%4; i++)
703
+ *(p1++) *= alpha;
704
+ return;
705
+ }
706
+ else
707
+ {
708
+ //
709
+ // general
710
+ //
711
+ int offset11 = vdst.GetStep(), offset12 = 2*offset11, offset13 = 3*offset11, offset14 = 4*offset11;
712
+ T *p1 = vdst.GetData();
713
+ int imax = vdst.GetLength()/4;
714
+ int i;
715
+ for(i=0; i<imax; i++)
716
+ {
717
+ *p1 *= alpha;
718
+ p1[offset11] *= alpha;
719
+ p1[offset12] *= alpha;
720
+ p1[offset13] *= alpha;
721
+ p1 += offset14;
722
+ }
723
+ for(i=0; i<vdst.GetLength()%4; i++)
724
+ {
725
+ *p1 *= alpha;
726
+ p1 += vdst.GetStep();
727
+ }
728
+ return;
729
+ }
730
+ }
731
+
732
+
733
+ /********************************************************************
734
+ vmul, another form
735
+ ********************************************************************/
736
+ template<class T, class T2, class INTTYPE>
737
+ void _vmul(T *vdst, INTTYPE N, T2 alpha)
738
+ {
739
+ T *p1 = vdst;
740
+ int imax = N/4;
741
+ int i;
742
+ for(i=imax; i!=0; i--)
743
+ {
744
+ *p1 *= alpha;
745
+ p1[1] *= alpha;
746
+ p1[2] *= alpha;
747
+ p1[3] *= alpha;
748
+ p1 += 4;
749
+ }
750
+ for(i=0; i<N%4; i++)
751
+ *(p1++) *= alpha;
752
+ }
753
+
754
+ #endif