• xunhuan Jacobi method SVD


    单纯的cpp程序 ,svd, 循环Jacobimethod

    1. #include <stdio.h>
    2. #include <math.h>
    3. #include <stdlib.h>
    4. void printFloatMatrixRowMajor(float* A, int M, int N, int lda);
    5. void printFloatMatrixColMajor(float* A, int M, int N, int lda);
    6. int jcbi_roll(float* a, int n, float* v, float eps, int jt) {
    7. int i, j, p, q, u, w, t, s, loops;
    8. float fm, cn, sn, omega, x, y, d;
    9. loops = 1;
    10. int contiCount = 0;
    11. for (i = 0; i <= n - 1; i++)//Let V = I;
    12. {
    13. v[i * n + i] = 1.0;
    14. for (j = 0; j <= n - 1; j++)
    15. if (i != j) v[i * n + j] = 0.0;
    16. }
    17. while (1 == 1)
    18. {
    19. fm = 0.0;
    20. for (p = 1; p <= n - 1; p++)
    21. {
    22. for (q = 0; q <= p - 1; q++)
    23. {
    24. if (loops > jt) { printf("\n\ncontiCount = %d\n", contiCount); return(-1); }// 超过迭代次数,依然没有收敛,退出,返回-1
    25. loops = loops + 1;//loopCount++ ;
    26. u = p * n + q; //A(p, q)
    27. w = p * n + p; //A(p, p)
    28. t = q * n + p; //A(q, p)
    29. s = q * n + q; //A(q, q)
    30. if (fabs(a[u]) < eps) { contiCount++; continue; }
    31. //计算sin(2θ)
    32. x = -a[u]; // m = -A(p,q)
    33. y = (a[s] - a[w]) / 2.0; // n = 1/2(A(q,q)-A(pp))
    34. omega = x / sqrt(x * x + y * y); // m/(sqrt(m^2 + n^2))
    35. if (y < 0.0) omega = -omega; //sgn(n)* sin(2θ)=omega
    36. //计算sin(θ)
    37. sn = 1.0 + sqrt(1.0 - omega * omega);
    38. sn = omega / sqrt(2.0 * sn); // sin(θ)
    39. //计算cos(θ)
    40. cn = sqrt(1.0 - sn * sn); // cos(θ)
    41. fm = a[w]; // A(p,p)
    42. //计算 四个元素
    43. a[w] = fm * cn * cn + a[s] * sn * sn + a[u] * omega; // A(p,p)' = A(p,p)cos(θ)^2 + A(q,q)sin(θ)^2 + A(p,q)sin(2θ)
    44. a[s] = fm * sn * sn + a[s] * cn * cn - a[u] * omega; // A(q,q)' = A(p,p)sin(θ)^2 + A(q,q)cos(θ)^2 - A(p,q)sin(2θ)
    45. a[u] = 0.0; // A(p,q)' = 0;
    46. a[t] = 0.0; // A(q,p)' = 0;
    47. //计算第p行 和第q行
    48. for (j = 0; j <= n - 1; j++) // updat row p and row q;
    49. if ((j != p) && (j != q))
    50. {
    51. u = p * n + j; // 遍历第 p 行的每一个元素
    52. w = q * n + j; // 遍历第 q 行的每一个元素
    53. fm = a[u]; //
    54. a[u] = fm * cn + a[w] * sn; // 自己的上次值 累加上 伴随行的元素上次值
    55. a[w] = -fm * sn + a[w] * cn; // 自己的原值 累加上 伴随行的元素值
    56. }
    57. //计算第p列和第q列
    58. for (i = 0; i <= n - 1; i++) // update column p and column q
    59. if ((i != p) && (i != q))
    60. {
    61. u = i * n + p; // A(i, p) 遍历 p-th column
    62. w = i * n + q; // A(i, q) 遍历 q-th column
    63. fm = a[u]; //
    64. a[u] = fm * cn + a[w] * sn; // 自己的上次值 累加上 伴随行的元素上次值
    65. a[w] = -fm * sn + a[w] * cn; // 自己的上次值 累加上 伴随行的元素上次值
    66. }
    67. for (i = 0; i <= n - 1; i++) // update EigenVectors p-th and q-th
    68. {
    69. u = i * n + p; // V(i, p) 遍历 p-th column
    70. w = i * n + q; // V(i, q) 遍历 q-th column
    71. fm = v[u]; //
    72. v[u] = fm * cn + v[w] * sn; //
    73. v[w] = -fm * sn + v[w] * cn; //
    74. }
    75. }///LLLL
    76. }
    77. }
    78. printf("\n\ncontiCount=%d\n", contiCount);
    79. return(1);
    80. }
    81. int jcbi(float* a, int n, float* v, float eps, int jt){
    82. int i, j, p, q, u, w, t, s, loops;
    83. float fm, cn, sn, omega, x, y, d;
    84. loops = 1;
    85. for (i = 0; i <= n - 1; i++)//Let V = I;
    86. {
    87. v[i * n + i] = 1.0;
    88. for (j = 0; j <= n - 1; j++)
    89. if (i != j) v[i * n + j] = 0.0;
    90. }
    91. while (1 == 1)
    92. {
    93. fm = 0.0;
    94. for (i = 1; i <= n - 1; i++) {//only check the lower triangle matrix of D_i, without the diag elements
    95. for (j = 0; j <= i - 1; j++)// q 恒小于 p; q 不可能等于 p
    96. {
    97. d = fabs(a[i * n + j]);
    98. if ((i != j) && (d > fm))
    99. {
    100. fm = d;//当前最大值
    101. p = i;//行号
    102. q = j;//列号
    103. }
    104. }
    105. }
    106. if (fm < eps) return(1);//the max element is less than eps, tolerance
    107. if ( loops > jt) return(-1);// 超过迭代次数,依然没有收敛,退出,返回-1
    108. loops = loops + 1;//loopCount++ ;
    109. u = p * n + q; //A(p, q)
    110. w = p * n + p; //A(p, p)
    111. t = q * n + p; //A(q, p)
    112. s = q * n + q; //A(q, q)
    113. //计算sin(2θ)
    114. x = -a[u]; // m = -A(p,q)
    115. y = (a[s] - a[w]) / 2.0; // n = 1/2(A(q,q)-A(pp))
    116. omega = x / sqrt(x * x + y * y); // m/(sqrt(m^2 + n^2))
    117. if (y < 0.0) omega = -omega; //sgn(n)* sin(2θ)=omega
    118. //计算sin(θ)
    119. sn = 1.0 + sqrt(1.0 - omega * omega);
    120. sn = omega / sqrt(2.0 * sn); // sin(θ)
    121. //计算cos(θ)
    122. cn = sqrt(1.0 - sn * sn); // cos(θ)
    123. fm = a[w]; // A(p,p)
    124. //计算 四个元素
    125. a[w] = fm * cn * cn + a[s] * sn * sn + a[u] * omega; // A(p,p)' = A(p,p)cos(θ)^2 + A(q,q)sin(θ)^2 + A(p,q)sin(2θ)
    126. a[s] = fm * sn * sn + a[s] * cn * cn - a[u] * omega; // A(q,q)' = A(p,p)sin(θ)^2 + A(q,q)cos(θ)^2 - A(p,q)sin(2θ)
    127. a[u] = 0.0; // A(p,q)' = 0;
    128. a[t] = 0.0; // A(q,p)' = 0;
    129. //计算第p行 和第q行
    130. for (j = 0; j <= n - 1; j++) // updat row p and row q;
    131. if ((j != p) && (j != q))
    132. {
    133. u = p * n + j; // 遍历第 p 行的每一个元素
    134. w = q * n + j; // 遍历第 q 行的每一个元素
    135. fm = a[u]; //
    136. a[u] = fm * cn + a[w] * sn; // 自己的上次值 累加上 伴随行的元素上次值
    137. a[w] = -fm * sn + a[w] * cn; // 自己的原值 累加上 伴随行的元素值
    138. }
    139. //计算第p列和第q列
    140. for (i = 0; i <= n - 1; i++) // update column p and column q
    141. if ((i != p) && (i != q))
    142. {
    143. u = i * n + p; // A(i, p) 遍历 p-th column
    144. w = i * n + q; // A(i, q) 遍历 q-th column
    145. fm = a[u]; //
    146. a[u] = fm * cn + a[w] * sn; // 自己的上次值 累加上 伴随行的元素上次值
    147. a[w] = -fm * sn + a[w] * cn; // 自己的上次值 累加上 伴随行的元素上次值
    148. }
    149. for (i = 0; i <= n - 1; i++) // update EigenVectors p-th and q-th
    150. {
    151. u = i * n + p; // V(i, p) 遍历 p-th column
    152. w = i * n + q; // V(i, q) 遍历 q-th column
    153. fm = v[u]; //
    154. v[u] = fm * cn + v[w] * sn; //
    155. v[w] = -fm * sn + v[w] * cn; //
    156. }
    157. }
    158. return(1);
    159. }
    160. void transpositionColMajor(float* A, int M, int N, float* At, int lda, int ldat) {
    161. for (int i = 0; i < N; i++) {
    162. for (int j = 0; j < M; j++) {
    163. At[i + j * ldat] = A[j + i * lda];
    164. }
    165. }
    166. }
    167. void transpositionRowMajor(float* A, int M, int N, float* At, int lda, int ldat) {
    168. for (int i = 0; i < N; i++) {
    169. for (int j = 0; j < M; j++) {
    170. At[i * ldat + j] = A[j * lda + i];
    171. }
    172. }
    173. }
    174. void SGemmColMajor(float* A, float* B, int M, int N, int K, float* C, int lda, int ldb, int ldc) {
    175. for (int i = 0; i < M; i++) {
    176. for (int j = 0; j < N; j++) {
    177. C[i + j * ldc] = 0.0f;
    178. for (int k = 0; k < K; k++) {
    179. C[i + j * ldc] += A[i + k * lda] * B[k + j * ldb];
    180. }
    181. }
    182. }
    183. }
    184. void SGemmRowMajor(float* A, float* B, int M, int N, int K, float* C, int lda, int ldb, int ldc) {
    185. for (int i = 0; i < M; i++) {
    186. for (int j = 0; j < N; j++) {
    187. C[i * ldc + j] = 0.0f;
    188. for (int k = 0; k < K; k++) {
    189. C[i * ldc + j] += A[i * lda + k] * B[k * ldb + j];
    190. }
    191. }
    192. }
    193. }
    194. void printFloatMatrixColMajor(float* A, int M, int N, int lda) {
    195. for (int i = 0; i < M; i++) {
    196. for (int j = 0; j < N; j++) {
    197. printf(" %9.7f", A[i + j * lda]);
    198. }
    199. printf("\n\n");
    200. }
    201. }
    202. void printFloatMatrixRowMajor(float* A, int M, int N, int lda) {
    203. for (int i = 0; i < M; i++) {
    204. for (int j = 0; j < N; j++) {
    205. printf(" %6.4f", A[i * lda + j]);
    206. }
    207. printf("\n\n");
    208. }
    209. }
    210. void gemmTest() {
    211. int m, n, k;
    212. m = 4;
    213. n = 2;
    214. k = 3;
    215. float A[12] = { 5,3,6,0,2,8,0,1,4,2,4,6 };
    216. float B[6] = { 2,1,3,4,3,2 };
    217. float C[8] = { 0.0 };
    218. printf("\nA=\n");
    219. printFloatMatrixColMajor(A, m, k, m);
    220. printf("\nB=\n");
    221. printFloatMatrixColMajor(B, k, n, k);
    222. SGemmColMajor(A, B, m, n, k, C, m, k, m);
    223. printf("\nC=\n");
    224. printFloatMatrixColMajor(C, m, n, m);
    225. }
    226. void transpositionTest() {
    227. int m, n, k;
    228. m = 4;
    229. n = 3;
    230. float A[12] = { 5,3,6,0,2,8,0,1,4,2,4,6 };
    231. float At[12];
    232. //void transpositionColMajor(float* A, int M, int N, float* At, int lda, int ldat)
    233. transpositionColMajor(A, m, n, At, m, n);
    234. printf("\nA=\n");
    235. printFloatMatrixColMajor(A, m, n, m);
    236. printf("\nAt=\n");
    237. printFloatMatrixColMajor(At, n, m, n);
    238. }
    239. void svd_sym_Little_Test() {
    240. int n = 6;
    241. //float A[36] = { 2, -1, 0, -1, 2, -1, 0, -1, 2 };
    242. float A[36] = {
    243. 1.9757, 2.4581, 1.4726, 1.3031, 1.5231, 0.8238,
    244. 2.4581, 3.5969, 1.9414, 2.3095, 2.3901, 1.4690,
    245. 1.4726, 1.9414, 1.5127, 1.2891, 0.9270, 0.5674,
    246. 1.3031, 2.3095, 1.2891, 1.8225, 1.4753, 1.0712,
    247. 1.5231, 2.3901, 0.9270, 1.4753, 2.0327, 0.9849,
    248. 0.8238, 1.4690, 0.5674, 1.0712, 0.9849, 0.9280
    249. };
    250. printf("\nA=\n");
    251. printFloatMatrixRowMajor(A, n, n, n);
    252. int jt;
    253. float eps;
    254. int result = 0;
    255. float eigenVs[36];
    256. jt = 100;
    257. eps = 0.000001;
    258. result = jcbi(A, n, eigenVs, eps, jt);
    259. printf("\neigenValus=\n");
    260. printFloatMatrixRowMajor(A, n, n, n);
    261. printf("\neigenVs=\n");
    262. printFloatMatrixRowMajor(eigenVs, n, n, n);
    263. }
    264. void svd_Little_mGEn_Test() {
    265. int m, n, k;
    266. m = 4;
    267. n = 3;
    268. //float A[12] = { 5,3,6,0,2,8,0,1,4,2,4,6 };
    269. float A[12] = { 5,2,4,3,8,2,6,0,4,0,1,6 };
    270. float At[12];
    271. //void transpositionRowMajor(float* A, int M, int N, float* At, int lda, int ldat)
    272. transpositionRowMajor(A, m, n, At, n, m);
    273. printf("\nA=\n");
    274. printFloatMatrixRowMajor(A, m, n, n);
    275. printf("\nAt=\n");
    276. printFloatMatrixRowMajor(At, n, m, m);
    277. float A_x_At[16];
    278. float At_x_A[9];
    279. //void SGemmColMajor(float* A, float* B, int M, int N, int K, float* C, int lda, int ldb, int ldc)
    280. SGemmRowMajor(At, A, n, n, m, At_x_A, m, n, n);
    281. printf("\nAt_x_A=\n");
    282. printFloatMatrixRowMajor(At_x_A, n, n, n);
    283. int jt;
    284. float eps;
    285. int result = 0;
    286. float v_At_x_A[9];
    287. jt = 100;
    288. eps = 0.000001;
    289. result = jcbi(At_x_A, n, v_At_x_A, eps, jt);
    290. printf("\nSigma in At_x_A=\n");
    291. printFloatMatrixRowMajor(At_x_A, n, n, n);
    292. printf("\nV of At_x_A=\n");
    293. printFloatMatrixRowMajor(v_At_x_A, n, n, n);
    294. }
    295. void svd_Little_mLTn_Test() {
    296. int m, n, k;
    297. m = 4;
    298. n = 3;
    299. //float A[12] = { 5,3,6,0,2,8,0,1,4,2,4,6 };
    300. float A[12] = { 5,2,4,3,8,2,6,0,4,0,1,6 };
    301. float At[12];
    302. //void transpositionColMajor(float* A, int M, int N, float* At, int lda, int ldat)
    303. transpositionColMajor(A, m, n, At, m, n);
    304. printf("\nA=\n");
    305. printFloatMatrixColMajor(A, m, n, m);
    306. printf("\nAt=\n");
    307. printFloatMatrixColMajor(At, n, m, n);
    308. float A_x_At[16];
    309. float At_x_A[9];
    310. //void SGemmColMajor(float* A, float* B, int M, int N, int K, float* C, int lda, int ldb, int ldc)
    311. /****
    312. SGemmColMajor(A, At, m, m, n, A_x_At, m, n, m);
    313. printf("\nA_x_At=\n");
    314. printFloatMatrixColMajor(A_x_At, m, m, m);
    315. *****/
    316. SGemmColMajor(At, A, n, n, m, At_x_A, n, m, n);
    317. printf("\nAt_x_A=\n");
    318. printFloatMatrixColMajor(At_x_A, n, n, n);
    319. int jt;
    320. float eps;
    321. int result = 0;
    322. float v_A_x_At[16];
    323. float v_At_x_A[9];
    324. jt = 100;
    325. eps = 0.000001;
    326. /****
    327. result = jcbi(A_x_At, m, v_A_x_At, eps, jt);
    328. printf("\nA_x_At=\n");
    329. printFloatMatrixColMajor(A_x_At, m, m, m);
    330. printf("\nV of A_x_At=\n");
    331. printFloatMatrixColMajor(v_A_x_At, m, m, m);
    332. *****/
    333. result = jcbi(At_x_A, n, v_At_x_A, eps, jt);
    334. printf("\nAt_x_A=\n");
    335. printFloatMatrixColMajor(At_x_A, n, n, n);
    336. printf("\nV of At_x_A=\n");
    337. printFloatMatrixColMajor(v_At_x_A, n, n, n);
    338. }
    339. void printFloatVector(float* X, int n) {
    340. for (int idx = 0; idx < n; idx++) {
    341. printf(" %9.7e,", X[idx]);
    342. }
    343. printf("\n");
    344. }
    345. void svd_Big_Test() {
    346. int m, n, k;
    347. int batchSize = 1;
    348. m = 300;
    349. n = 181;
    350. float* A;
    351. float* At;
    352. A = (float*)malloc(sizeof(float) * m * n * batchSize);
    353. At = (float*)malloc(sizeof(float) * n * m * batchSize);
    354. const char* fileName = "test_svd.bin";
    355. //void transpositionColMajor(float* A, int M, int N, float* At, int lda, int ldat)
    356. //transpositionColMajor(A, m, n, At, m, n);
    357. FILE* fp = fopen(fileName, "rb");
    358. if (fp == NULL) {
    359. printf("FILE OPEN FAIL!\n");
    360. return;
    361. }
    362. fread(A, sizeof(float), m * n * batchSize, fp);
    363. //fread(A, sizeof(float), 7, fp);
    364. transpositionColMajor(A, m, n, At, m, n);
    365. printf("A=\n\n");
    366. printFloatVector(A, 7);
    367. printf("\nA=\n");
    368. //printFloatMatrixColMajor(A, m, n, m);
    369. printf("\nAt=\n");
    370. //printFloatMatrixColMajor(At, n, m, n);
    371. float* A_x_At;
    372. float* At_x_A;
    373. A_x_At = (float*)malloc(m * m * sizeof(float) * batchSize);
    374. At_x_A = (float*)malloc(n * n * sizeof(float) * batchSize);
    375. //void SGemmColMajor(float* A, float* B, int M, int N, int K, float* C, int lda, int ldb, int ldc)
    376. SGemmColMajor(A, At, m, m, n, A_x_At, m, n, m);
    377. printf("\nA_x_At=\n");
    378. printFloatMatrixColMajor(A_x_At, m, m, m);
    379. SGemmColMajor(At, A, n, n, m, At_x_A, n, m, n);
    380. printf("\nAt_x_A=\n");
    381. printFloatMatrixColMajor(At_x_A, n, n, n);
    382. int jt;
    383. float eps;
    384. int result = 0;
    385. float* v_A_x_At;
    386. float* v_At_x_A;
    387. v_A_x_At = (float*)malloc(m * m * sizeof(float) * batchSize);
    388. v_At_x_A = (float*)malloc(n * n * sizeof(float) * batchSize);
    389. jt = 100;
    390. eps = 0.000001;
    391. result = jcbi(A_x_At, m, v_A_x_At, eps, jt);
    392. printf("\nA_x_At=\n");
    393. printFloatMatrixColMajor(A_x_At, m, m, m);
    394. printf("\nU of A_x_At=\n");
    395. printFloatMatrixColMajor(v_A_x_At, m, m, m);
    396. result = jcbi(At_x_A, n, v_At_x_A, eps, jt);
    397. printf("\nAt_x_A=\n");
    398. printFloatMatrixColMajor(At_x_A, n, n, n);
    399. printf("\nV of At_x_A=\n");
    400. printFloatMatrixColMajor(v_At_x_A, n, n, n);
    401. /****/
    402. }
    403. void svd_sym_Test() {
    404. int m, n;
    405. m = 7;
    406. n = 7;
    407. float A[49] = {
    408. 6, 6, 0, 9, 7, 2, 6,
    409. 6, 5, 9, 4, 2, 5, 5,
    410. 0, 9, 8, 3, 5, 0, 6,
    411. 9, 4, 3, 8, 9, 9, 4,
    412. 7, 2, 5, 9, 0, 6, 0,
    413. 2, 5, 0, 9, 6, 4, 4,
    414. 6, 5, 6, 4, 0, 4, 9
    415. };
    416. /**
    417. float A[4096] = {
    418. 9, 10, 7, 9, 2, 0, 19, 12, 16, 4, 0, 1, 12, 4, 7, 4, 14, 18, 11, 1, 12, 19, 14, 12, 12, 0, 9, 10, 3, 8, 6, 16, 15, 5, 10, 4, 10, 14, 4, 10, 13, 10, 4, 1, 7, 3, 3, 11, 1, 15, 7, 19, 19, 14, 0, 13, 4, 19, 19, 7, 6, 3, 0, 12
    419. , 10, 14, 11, 10, 0, 11, 19, 15, 13, 19, 5, 14, 1, 3, 8, 7, 9, 14, 12, 2, 16, 14, 3, 19, 1, 2, 3, 18, 19, 9, 15, 0, 2, 18, 18, 15, 2, 14, 11, 12, 16, 11, 10, 6, 11, 5, 9, 5, 9, 1, 14, 17, 4, 4, 10, 0, 17, 7, 1, 18, 16, 5, 3, 14
    420. , 7, 11, 16, 19, 13, 1, 2, 1, 13, 4, 15, 17, 4, 0, 1, 18, 13, 4, 14, 13, 10, 12, 12, 19, 8, 10, 0, 4, 4, 1, 17, 14, 2, 14, 9, 14, 15, 2, 18, 13, 16, 2, 15, 7, 14, 4, 1, 0, 2, 8, 1, 1, 3, 6, 17, 9, 15, 12, 4, 4, 13, 8, 14, 1
    421. , 9, 10, 19, 0, 2, 4, 11, 16, 6, 6, 18, 6, 16, 2, 9, 11, 5, 4, 5, 1, 11, 9, 13, 3, 2, 3, 3, 16, 6, 9, 11, 0, 19, 11, 10, 13, 6, 6, 13, 3, 12, 6, 18, 4, 8, 9, 13, 14, 13, 16, 19, 14, 12, 11, 18, 11, 9, 5, 4, 9, 3, 4, 4, 1
    422. , 2, 0, 13, 2, 10, 11, 16, 19, 17, 17, 11, 15, 15, 19, 19, 10, 2, 13, 1, 9, 2, 6, 4, 9, 17, 9, 17, 5, 12, 16, 9, 5, 18, 7, 6, 12, 9, 18, 13, 8, 12, 9, 10, 0, 8, 12, 14, 17, 0, 5, 14, 8, 11, 9, 0, 4, 2, 5, 0, 5, 1, 0, 7, 8
    423. , 0, 11, 1, 4, 11, 10, 11, 15, 8, 15, 17, 6, 9, 3, 16, 4, 16, 0, 15, 16, 4, 0, 18, 3, 9, 14, 6, 7, 11, 1, 11, 17, 4, 15, 10, 13, 6, 15, 14, 12, 5, 3, 6, 1, 4, 7, 9, 16, 12, 2, 17, 8, 7, 5, 17, 6, 3, 14, 1, 16, 4, 13, 10, 10
    424. , 19, 19, 2, 11, 16, 11, 5, 5, 7, 6, 17, 12, 5, 14, 16, 18, 19, 6, 16, 16, 19, 9, 1, 0, 9, 6, 15, 7, 18, 6, 18, 4, 8, 12, 16, 15, 13, 7, 11, 8, 12, 3, 1, 19, 8, 13, 8, 6, 6, 9, 11, 11, 11, 7, 16, 2, 19, 14, 16, 19, 5, 7, 6, 8
    425. , 12, 15, 1, 16, 19, 15, 5, 2, 3, 17, 10, 0, 9, 7, 6, 9, 1, 6, 7, 16, 16, 17, 17, 9, 18, 4, 2, 9, 16, 1, 16, 4, 0, 5, 18, 6, 0, 6, 12, 14, 4, 8, 19, 3, 7, 5, 7, 11, 12, 15, 13, 8, 6, 15, 11, 18, 11, 7, 6, 3, 17, 16, 17, 4
    426. , 16, 13, 13, 6, 17, 8, 7, 3, 0, 7, 13, 2, 8, 12, 19, 5, 14, 1, 4, 17, 0, 5, 8, 13, 6, 0, 17, 7, 8, 5, 4, 14, 12, 2, 14, 1, 1, 0, 5, 13, 10, 9, 6, 1, 17, 8, 5, 6, 10, 14, 3, 5, 6, 0, 7, 4, 8, 17, 19, 10, 6, 2, 7, 12
    427. , 4, 19, 4, 6, 17, 15, 6, 17, 7, 12, 4, 1, 12, 1, 9, 5, 10, 0, 16, 1, 3, 0, 0, 18, 7, 4, 7, 11, 0, 14, 2, 15, 2, 2, 11, 9, 11, 16, 8, 16, 9, 7, 17, 9, 4, 3, 1, 5, 7, 19, 5, 5, 9, 17, 14, 10, 15, 19, 5, 9, 15, 0, 10, 19
    428. , 0, 5, 15, 18, 11, 17, 17, 10, 13, 4, 3, 10, 2, 17, 19, 6, 5, 5, 4, 18, 8, 15, 14, 18, 9, 2, 2, 18, 10, 17, 14, 7, 13, 1, 11, 6, 17, 6, 1, 18, 9, 4, 15, 11, 4, 11, 16, 18, 3, 9, 18, 2, 2, 1, 4, 17, 4, 16, 14, 5, 6, 19, 15, 18
    429. , 1, 14, 17, 6, 15, 6, 12, 0, 2, 1, 10, 4, 19, 5, 6, 19, 4, 1, 0, 2, 1, 9, 2, 12, 5, 17, 6, 9, 14, 14, 2, 4, 17, 4, 2, 6, 10, 18, 5, 8, 10, 14, 18, 13, 8, 7, 1, 1, 6, 14, 17, 4, 19, 12, 4, 15, 15, 16, 3, 11, 9, 3, 10, 1
    430. , 12, 1, 4, 16, 15, 9, 5, 9, 8, 12, 2, 19, 9, 6, 11, 7, 15, 5, 7, 19, 5, 1, 12, 8, 13, 3, 14, 11, 16, 10, 10, 13, 17, 9, 11, 19, 12, 4, 8, 18, 10, 10, 0, 3, 5, 0, 0, 19, 5, 5, 16, 19, 18, 4, 2, 17, 8, 1, 3, 17, 10, 7, 0, 2
    431. , 4, 3, 0, 2, 19, 3, 14, 7, 12, 1, 17, 5, 6, 4, 7, 2, 6, 2, 7, 1, 16, 10, 14, 1, 1, 6, 17, 7, 19, 8, 10, 0, 0, 10, 13, 5, 0, 0, 13, 18, 13, 14, 1, 11, 12, 8, 16, 8, 2, 17, 3, 13, 19, 1, 6, 0, 7, 12, 8, 6, 15, 7, 9, 19
    432. , 7, 8, 1, 9, 19, 16, 16, 6, 19, 9, 19, 6, 11, 7, 16, 11, 14, 0, 7, 15, 7, 4, 1, 9, 5, 18, 8, 1, 0, 0, 17, 1, 1, 3, 12, 1, 17, 19, 14, 11, 10, 0, 17, 0, 11, 1, 14, 19, 17, 0, 7, 11, 16, 5, 10, 4, 2, 1, 10, 14, 15, 3, 7, 12
    433. , 4, 7, 18, 11, 10, 4, 18, 9, 5, 5, 6, 19, 7, 2, 11, 14, 15, 7, 8, 10, 15, 10, 0, 10, 14, 16, 14, 4, 13, 13, 9, 19, 4, 15, 18, 12, 14, 5, 3, 0, 13, 12, 14, 3, 6, 19, 0, 6, 14, 13, 8, 12, 2, 7, 13, 16, 0, 0, 5, 16, 2, 8, 9, 11
    434. , 14, 9, 13, 5, 2, 16, 19, 1, 14, 10, 5, 4, 15, 6, 14, 15, 7, 3, 14, 2, 10, 15, 16, 0, 7, 8, 4, 17, 10, 3, 19, 15, 0, 7, 2, 14, 1, 4, 8, 18, 14, 4, 5, 10, 4, 17, 17, 6, 11, 4, 7, 3, 7, 9, 6, 15, 6, 10, 19, 19, 19, 7, 6, 5
    435. , 18, 14, 4, 4, 13, 0, 6, 6, 1, 0, 5, 1, 5, 2, 0, 7, 3, 2, 3, 0, 5, 2, 13, 8, 19, 8, 17, 3, 4, 11, 19, 17, 17, 10, 19, 15, 15, 15, 7, 8, 7, 1, 17, 16, 18, 4, 18, 8, 11, 8, 8, 4, 9, 12, 16, 3, 13, 6, 19, 13, 9, 5, 15, 8
    436. , 11, 12, 14, 5, 1, 15, 16, 7, 4, 16, 4, 0, 7, 7, 7, 8, 14, 3, 10, 3, 0, 4, 2, 12, 18, 1, 15, 6, 4, 6, 5, 18, 0, 9, 16, 2, 17, 15, 9, 7, 15, 8, 19, 0, 16, 15, 16, 0, 2, 17, 12, 0, 6, 3, 11, 2, 10, 18, 16, 18, 16, 18, 6, 6
    437. , 1, 2, 13, 1, 9, 16, 16, 16, 17, 1, 18, 2, 19, 1, 15, 10, 2, 0, 3, 16, 18, 4, 19, 11, 14, 13, 2, 3, 18, 6, 16, 7, 10, 2, 18, 4, 15, 9, 12, 18, 0, 7, 18, 1, 14, 8, 7, 2, 9, 4, 15, 4, 1, 0, 16, 2, 15, 1, 15, 14, 0, 13, 4, 3
    438. , 12, 16, 10, 11, 2, 4, 19, 16, 0, 3, 8, 1, 5, 16, 7, 15, 10, 5, 0, 18, 2, 14, 14, 3, 14, 14, 9, 10, 3, 4, 6, 13, 1, 9, 10, 16, 6, 12, 4, 5, 14, 8, 2, 18, 18, 0, 4, 11, 4, 7, 3, 11, 16, 8, 4, 8, 19, 1, 3, 1, 17, 16, 14, 4
    439. , 19, 14, 12, 9, 6, 0, 9, 17, 5, 0, 15, 9, 1, 10, 4, 10, 15, 2, 4, 4, 14, 12, 6, 8, 0, 4, 18, 5, 5, 10, 10, 13, 13, 8, 13, 18, 0, 12, 13, 0, 12, 1, 5, 14, 7, 11, 11, 12, 1, 3, 10, 4, 4, 10, 6, 0, 7, 12, 4, 2, 9, 1, 18, 16
    440. , 14, 3, 12, 13, 4, 18, 1, 17, 8, 0, 14, 2, 12, 14, 1, 0, 16, 13, 2, 19, 14, 6, 7, 16, 1, 11, 16, 11, 18, 15, 3, 18, 1, 12, 19, 1, 9, 8, 10, 3, 7, 9, 5, 4, 18, 9, 3, 8, 19, 0, 3, 2, 5, 2, 2, 1, 5, 3, 19, 2, 2, 8, 4, 16
    441. , 12, 19, 19, 3, 9, 3, 0, 9, 13, 18, 18, 12, 8, 1, 9, 10, 0, 8, 12, 11, 3, 8, 16, 13, 5, 1, 16, 14, 9, 7, 17, 8, 4, 16, 19, 2, 19, 19, 16, 15, 6, 1, 2, 5, 0, 8, 19, 12, 2, 8, 0, 3, 4, 16, 16, 8, 1, 14, 17, 0, 16, 19, 19, 4
    442. , 12, 1, 8, 2, 17, 9, 9, 18, 6, 7, 9, 5, 13, 1, 5, 14, 7, 19, 18, 14, 14, 0, 1, 5, 9, 0, 2, 5, 8, 14, 7, 6, 19, 0, 15, 16, 10, 7, 18, 9, 9, 11, 5, 18, 7, 13, 6, 12, 3, 4, 18, 7, 5, 1, 12, 11, 19, 3, 6, 18, 2, 15, 19, 7
    443. , 0, 2, 10, 3, 9, 14, 6, 4, 0, 4, 2, 17, 3, 6, 18, 16, 8, 8, 1, 13, 14, 4, 11, 1, 0, 17, 19, 4, 18, 16, 13, 19, 17, 19, 15, 17, 7, 2, 7, 3, 7, 0, 7, 9, 19, 4, 4, 1, 5, 8, 11, 5, 16, 8, 14, 7, 17, 8, 18, 17, 5, 2, 18, 3
    444. , 9, 3, 0, 3, 17, 6, 15, 2, 17, 7, 2, 6, 14, 17, 8, 14, 4, 17, 15, 2, 9, 18, 16, 16, 2, 19, 1, 18, 19, 19, 13, 2, 4, 13, 2, 19, 8, 9, 2, 0, 5, 10, 16, 6, 3, 4, 8, 6, 17, 0, 13, 11, 16, 8, 17, 3, 6, 3, 5, 16, 6, 13, 12, 19
    445. , 10, 18, 4, 16, 5, 7, 7, 9, 7, 11, 18, 9, 11, 7, 1, 4, 17, 3, 6, 3, 10, 5, 11, 14, 5, 4, 18, 17, 8, 19, 17, 1, 9, 4, 18, 5, 0, 10, 5, 2, 2, 16, 2, 10, 6, 2, 15, 12, 18, 17, 11, 11, 6, 10, 18, 9, 14, 19, 17, 14, 2, 7, 13, 14
    446. , 3, 19, 4, 6, 12, 11, 18, 16, 8, 0, 10, 14, 16, 19, 0, 13, 10, 4, 4, 18, 3, 5, 18, 9, 8, 18, 19, 8, 0, 1, 16, 16, 6, 17, 8, 4, 1, 10, 17, 6, 3, 3, 8, 13, 10, 12, 15, 15, 0, 10, 13, 17, 18, 12, 5, 12, 7, 10, 14, 15, 10, 3, 19, 4
    447. , 8, 9, 1, 9, 16, 1, 6, 1, 5, 14, 17, 14, 10, 8, 0, 13, 3, 11, 6, 6, 4, 10, 15, 7, 14, 16, 19, 19, 1, 19, 10, 6, 16, 16, 5, 13, 17, 8, 18, 19, 16, 4, 7, 17, 13, 5, 3, 0, 16, 17, 12, 0, 5, 13, 2, 18, 15, 1, 19, 7, 4, 3, 7, 10
    448. , 6, 15, 17, 11, 9, 11, 18, 16, 4, 2, 14, 2, 10, 10, 17, 9, 19, 19, 5, 16, 6, 10, 3, 17, 7, 13, 13, 17, 16, 10, 15, 17, 4, 6, 10, 10, 19, 5, 17, 9, 19, 17, 12, 10, 6, 18, 2, 19, 3, 3, 15, 15, 13, 18, 8, 16, 12, 14, 8, 10, 18, 1, 2, 10
    449. , 16, 0, 14, 0, 5, 17, 4, 4, 14, 15, 7, 4, 13, 0, 1, 19, 15, 17, 18, 7, 13, 13, 18, 8, 6, 19, 2, 1, 16, 6, 17, 6, 6, 8, 17, 5, 9, 11, 15, 7, 12, 12, 10, 3, 11, 11, 3, 4, 3, 5, 12, 0, 10, 8, 17, 14, 2, 4, 2, 13, 7, 16, 15, 9
    450. , 15, 2, 2, 19, 18, 4, 8, 0, 12, 2, 13, 17, 17, 0, 1, 4, 0, 17, 0, 10, 1, 13, 1, 4, 19, 17, 4, 9, 6, 16, 4, 6, 18, 7, 5, 1, 19, 5, 16, 18, 11, 4, 5, 12, 17, 2, 10, 4, 13, 3, 4, 19, 14, 7, 14, 18, 14, 9, 14, 11, 0, 18, 7, 18
    451. , 5, 18, 14, 11, 7, 15, 12, 5, 2, 2, 1, 4, 9, 10, 3, 15, 7, 10, 9, 2, 9, 8, 12, 16, 0, 19, 13, 4, 17, 16, 6, 8, 7, 6, 1, 18, 8, 1, 17, 15, 0, 15, 9, 3, 1, 4, 7, 19, 13, 4, 2, 9, 11, 1, 13, 13, 4, 19, 5, 8, 16, 0, 5, 9
    452. , 10, 18, 9, 10, 6, 10, 16, 18, 14, 11, 11, 2, 11, 13, 12, 18, 2, 19, 16, 18, 10, 13, 19, 19, 15, 15, 2, 18, 8, 5, 10, 17, 5, 1, 12, 6, 19, 13, 7, 18, 0, 7, 10, 3, 4, 9, 3, 16, 0, 0, 3, 13, 8, 10, 9, 8, 15, 14, 8, 5, 14, 4, 19, 16
    453. , 4, 15, 14, 13, 12, 13, 15, 6, 1, 9, 6, 6, 19, 5, 1, 12, 14, 15, 2, 4, 16, 18, 1, 2, 16, 17, 19, 5, 4, 13, 10, 5, 1, 18, 6, 16, 17, 2, 3, 15, 0, 6, 5, 5, 15, 9, 17, 10, 12, 2, 8, 18, 1, 3, 5, 4, 18, 7, 16, 4, 14, 4, 10, 3
    454. , 10, 2, 15, 6, 9, 6, 13, 0, 1, 11, 17, 10, 12, 0, 17, 14, 1, 15, 17, 15, 6, 0, 9, 19, 10, 7, 8, 0, 1, 17, 19, 9, 19, 8, 19, 17, 14, 0, 12, 2, 7, 18, 2, 3, 0, 14, 7, 5, 9, 17, 7, 0, 4, 8, 9, 13, 9, 0, 15, 8, 14, 10, 16, 16
    455. , 14, 14, 2, 6, 18, 15, 7, 6, 0, 16, 6, 18, 4, 0, 19, 5, 4, 15, 15, 9, 12, 12, 8, 19, 7, 2, 9, 10, 10, 8, 5, 11, 5, 1, 13, 2, 0, 4, 15, 1, 1, 10, 2, 17, 16, 17, 3, 13, 9, 10, 7, 17, 13, 3, 14, 11, 0, 3, 16, 12, 9, 12, 8, 6
    456. , 4, 11, 18, 13, 13, 14, 11, 12, 5, 8, 1, 5, 8, 13, 14, 3, 8, 7, 9, 12, 4, 13, 10, 16, 18, 7, 2, 5, 17, 18, 17, 15, 16, 17, 7, 3, 12, 15, 1, 10, 15, 7, 1, 9, 9, 17, 4, 15, 12, 3, 15, 14, 14, 8, 4, 4, 16, 7, 14, 18, 13, 15, 4, 9
    457. , 10, 12, 13, 3, 8, 12, 8, 14, 13, 16, 18, 8, 18, 18, 11, 0, 18, 8, 7, 18, 5, 0, 3, 15, 9, 3, 0, 2, 6, 19, 9, 7, 18, 15, 18, 15, 2, 1, 10, 10, 1, 16, 19, 14, 7, 11, 19, 8, 19, 8, 16, 6, 14, 19, 13, 9, 11, 18, 2, 16, 7, 5, 4, 4
    458. , 13, 16, 16, 12, 12, 5, 12, 4, 10, 9, 9, 10, 10, 13, 10, 13, 14, 7, 15, 0, 14, 12, 7, 6, 9, 7, 5, 2, 3, 16, 19, 12, 11, 0, 0, 0, 7, 1, 15, 1, 3, 9, 1, 18, 3, 12, 7, 3, 3, 6, 11, 0, 8, 0, 19, 2, 0, 6, 8, 15, 12, 11, 19, 15
    459. , 10, 11, 2, 6, 9, 3, 3, 8, 9, 7, 4, 14, 10, 14, 0, 12, 4, 1, 8, 7, 8, 1, 9, 1, 11, 0, 10, 16, 3, 4, 17, 12, 4, 15, 7, 6, 18, 10, 7, 16, 9, 7, 17, 13, 11, 18, 13, 1, 19, 11, 10, 17, 0, 12, 14, 10, 15, 12, 15, 15, 11, 10, 10, 5
    460. , 4, 10, 15, 18, 10, 6, 1, 19, 6, 17, 15, 18, 0, 1, 17, 14, 5, 17, 19, 18, 2, 5, 5, 2, 5, 7, 16, 2, 8, 7, 12, 10, 5, 9, 10, 5, 2, 2, 1, 19, 1, 17, 16, 19, 2, 18, 15, 1, 4, 15, 14, 18, 15, 3, 16, 16, 17, 18, 18, 7, 3, 11, 7, 4
    461. , 1, 6, 7, 4, 0, 1, 19, 3, 1, 9, 11, 13, 3, 11, 0, 3, 10, 16, 0, 1, 18, 14, 4, 5, 18, 9, 6, 10, 13, 17, 10, 3, 12, 3, 3, 5, 3, 17, 9, 14, 18, 13, 19, 15, 0, 19, 11, 13, 9, 15, 3, 12, 10, 4, 14, 1, 9, 12, 0, 12, 10, 8, 10, 18
    462. , 7, 11, 14, 8, 8, 4, 8, 7, 17, 4, 4, 8, 5, 12, 11, 6, 4, 18, 16, 14, 18, 7, 18, 0, 7, 19, 3, 6, 10, 13, 6, 11, 17, 1, 4, 15, 0, 16, 9, 7, 3, 11, 2, 0, 15, 5, 19, 0, 1, 19, 1, 9, 2, 14, 0, 15, 0, 8, 11, 15, 2, 1, 10, 9
    463. , 3, 5, 4, 9, 12, 7, 13, 5, 8, 3, 11, 7, 0, 8, 1, 19, 17, 4, 15, 8, 0, 11, 9, 8, 13, 4, 4, 2, 12, 5, 18, 11, 2, 4, 9, 9, 14, 17, 17, 11, 12, 18, 18, 19, 5, 14, 5, 18, 4, 15, 8, 10, 12, 14, 6, 18, 10, 5, 17, 6, 18, 19, 0, 16
    464. , 3, 9, 1, 13, 14, 9, 8, 7, 5, 1, 16, 1, 0, 16, 14, 0, 17, 18, 16, 7, 4, 11, 3, 19, 6, 4, 8, 15, 15, 3, 2, 3, 10, 7, 3, 17, 7, 3, 4, 19, 7, 13, 15, 11, 19, 5, 1, 7, 10, 12, 16, 4, 16, 15, 18, 19, 12, 14, 12, 6, 3, 8, 16, 16
    465. , 11, 5, 0, 14, 17, 16, 6, 11, 6, 5, 18, 1, 19, 8, 19, 6, 6, 8, 0, 2, 11, 12, 8, 12, 12, 1, 6, 12, 15, 0, 19, 4, 4, 19, 16, 10, 5, 13, 15, 8, 3, 1, 1, 13, 0, 18, 7, 14, 10, 15, 18, 9, 3, 12, 13, 1, 7, 0, 3, 6, 5, 10, 9, 5
    466. , 1, 9, 2, 13, 0, 12, 6, 12, 10, 7, 3, 6, 5, 2, 17, 14, 11, 11, 2, 9, 4, 1, 19, 2, 3, 5, 17, 18, 0, 16, 3, 3, 13, 13, 0, 12, 9, 9, 12, 19, 3, 19, 4, 9, 1, 4, 10, 10, 7, 2, 19, 1, 5, 2, 19, 11, 11, 16, 17, 4, 16, 2, 4, 19
    467. , 15, 1, 8, 16, 5, 2, 9, 15, 14, 19, 9, 14, 5, 17, 0, 13, 4, 8, 17, 4, 7, 3, 0, 8, 4, 8, 0, 17, 10, 17, 3, 5, 3, 4, 0, 2, 17, 10, 3, 8, 6, 11, 15, 15, 19, 15, 12, 15, 2, 19, 13, 1, 9, 1, 13, 13, 19, 6, 0, 10, 9, 9, 9, 1
    468. , 7, 14, 1, 19, 14, 17, 11, 13, 3, 5, 18, 17, 16, 3, 7, 8, 7, 8, 12, 15, 3, 10, 3, 0, 18, 11, 13, 11, 13, 12, 15, 12, 4, 2, 3, 8, 7, 7, 15, 16, 11, 10, 14, 3, 1, 8, 16, 18, 19, 13, 0, 15, 3, 12, 8, 8, 15, 5, 19, 16, 16, 7, 12, 4
    469. , 19, 17, 1, 14, 8, 8, 11, 8, 5, 5, 2, 4, 19, 13, 11, 12, 3, 4, 0, 4, 11, 4, 2, 3, 7, 5, 11, 11, 17, 0, 15, 0, 19, 9, 13, 18, 0, 17, 14, 6, 0, 17, 18, 12, 9, 10, 4, 9, 1, 1, 15, 17, 18, 7, 15, 11, 8, 13, 18, 0, 3, 8, 18, 7
    470. , 19, 4, 3, 12, 11, 7, 11, 6, 6, 9, 2, 19, 18, 19, 16, 2, 7, 9, 6, 1, 16, 4, 5, 4, 5, 16, 16, 6, 18, 5, 13, 10, 14, 11, 8, 1, 4, 13, 14, 14, 8, 0, 15, 10, 2, 12, 16, 3, 5, 9, 3, 18, 12, 10, 10, 12, 0, 4, 15, 18, 4, 18, 4, 10
    471. , 14, 4, 6, 11, 9, 5, 7, 15, 0, 17, 1, 12, 4, 1, 5, 7, 9, 12, 3, 0, 8, 10, 2, 16, 1, 8, 8, 10, 12, 13, 18, 8, 7, 1, 10, 3, 8, 3, 8, 19, 0, 12, 3, 4, 14, 14, 15, 12, 2, 1, 12, 7, 10, 0, 9, 6, 9, 2, 8, 4, 18, 17, 8, 10
    472. , 0, 10, 17, 18, 0, 17, 16, 11, 7, 14, 4, 4, 2, 6, 10, 13, 6, 16, 11, 16, 4, 6, 2, 16, 12, 14, 17, 18, 5, 2, 8, 17, 14, 13, 9, 5, 9, 14, 4, 13, 19, 14, 16, 14, 0, 6, 18, 13, 19, 13, 8, 15, 10, 9, 16, 4, 9, 12, 5, 0, 8, 19, 17, 1
    473. , 13, 0, 9, 11, 4, 6, 2, 18, 4, 10, 17, 15, 17, 0, 4, 16, 15, 3, 2, 2, 8, 0, 1, 8, 11, 7, 3, 9, 12, 18, 16, 14, 18, 13, 8, 4, 13, 11, 4, 9, 2, 10, 16, 1, 15, 18, 19, 1, 11, 13, 8, 11, 12, 6, 4, 11, 19, 17, 18, 8, 1, 0, 0, 18
    474. , 4, 17, 15, 9, 2, 3, 19, 11, 8, 15, 4, 15, 8, 7, 2, 0, 6, 13, 10, 15, 19, 7, 5, 1, 19, 17, 6, 14, 7, 15, 12, 2, 14, 4, 15, 18, 9, 0, 16, 11, 0, 15, 17, 9, 0, 10, 12, 7, 11, 19, 15, 8, 0, 9, 9, 19, 12, 9, 8, 8, 18, 11, 7, 19
    475. , 19, 7, 12, 5, 5, 14, 14, 7, 17, 19, 16, 16, 1, 12, 1, 0, 10, 6, 18, 1, 1, 12, 3, 14, 3, 8, 3, 19, 10, 1, 14, 4, 9, 19, 14, 7, 0, 3, 7, 18, 6, 12, 18, 12, 8, 5, 14, 0, 16, 6, 5, 13, 4, 2, 12, 17, 9, 8, 7, 9, 6, 11, 7, 6
    476. , 19, 1, 4, 4, 0, 1, 16, 6, 19, 5, 14, 3, 3, 8, 10, 5, 19, 19, 16, 15, 3, 4, 19, 17, 6, 18, 5, 17, 14, 19, 8, 2, 14, 5, 8, 16, 15, 16, 14, 2, 8, 15, 18, 0, 11, 17, 12, 3, 17, 0, 19, 18, 15, 8, 5, 18, 8, 7, 7, 19, 2, 8, 16, 2
    477. , 7, 18, 4, 9, 5, 16, 19, 3, 10, 9, 5, 11, 17, 6, 14, 16, 19, 13, 18, 14, 1, 2, 2, 0, 18, 17, 16, 14, 15, 7, 10, 13, 11, 8, 5, 4, 8, 12, 18, 16, 15, 15, 7, 12, 15, 6, 6, 6, 4, 10, 16, 0, 18, 4, 0, 8, 8, 9, 19, 9, 7, 5, 15, 10
    478. , 6, 16, 13, 3, 1, 4, 5, 17, 6, 15, 6, 9, 10, 15, 15, 2, 19, 9, 16, 0, 17, 9, 2, 16, 2, 5, 6, 2, 10, 4, 18, 7, 0, 16, 14, 14, 14, 9, 13, 7, 12, 11, 3, 10, 2, 18, 3, 5, 16, 9, 16, 3, 4, 18, 8, 1, 18, 6, 2, 7, 15, 11, 11, 2
    479. , 3, 5, 8, 4, 0, 13, 7, 16, 2, 0, 19, 3, 7, 7, 3, 8, 7, 5, 18, 13, 16, 1, 8, 19, 15, 2, 13, 7, 3, 3, 1, 16, 18, 0, 4, 4, 10, 12, 15, 5, 11, 10, 11, 8, 1, 19, 8, 10, 2, 9, 7, 8, 18, 17, 19, 0, 11, 11, 8, 5, 11, 2, 17, 1
    480. , 0, 3, 14, 4, 7, 10, 6, 17, 7, 10, 15, 10, 0, 9, 7, 9, 6, 15, 6, 4, 14, 18, 4, 19, 19, 18, 12, 13, 19, 7, 2, 15, 7, 5, 19, 10, 16, 8, 4, 4, 19, 10, 7, 10, 10, 0, 16, 9, 4, 9, 12, 18, 4, 8, 17, 0, 7, 7, 16, 15, 11, 17, 18, 18
    481. , 12, 14, 1, 1, 8, 10, 8, 4, 12, 19, 18, 1, 2, 19, 12, 11, 5, 8, 6, 3, 4, 16, 16, 4, 7, 3, 19, 14, 4, 10, 10, 9, 18, 9, 16, 3, 16, 6, 9, 4, 15, 5, 4, 18, 9, 16, 16, 5, 19, 1, 4, 7, 10, 10, 1, 18, 19, 6, 2, 10, 2, 1, 18, 14
    482. };
    483. */
    484. /**
    485. float A[441] = {
    486. 13, 20, 16, 7, 29, 0, 23, 4, 6, 2, 1, 15, 21, 3, 27, 1, 20, 23, 6, 21, 4
    487. , 20, 1, 8, 16, 24, 28, 18, 8, 4, 26, 13, 19, 6, 12, 24, 27, 6, 22, 6, 17, 9
    488. , 16, 8, 21, 11, 20, 9, 11, 10, 13, 7, 22, 10, 7, 19, 8, 28, 26, 20, 22, 19, 16
    489. , 7, 16, 11, 25, 16, 13, 26, 2, 13, 18, 2, 18, 9, 14, 1, 27, 19, 6, 0, 18, 26
    490. , 29, 24, 20, 16, 23, 6, 26, 1, 10, 27, 6, 16, 14, 20, 23, 29, 24, 0, 17, 9, 1
    491. , 0, 28, 9, 13, 6, 18, 4, 27, 18, 28, 20, 13, 2, 20, 10, 4, 6, 6, 5, 11, 25
    492. , 23, 18, 11, 26, 26, 4, 16, 8, 7, 28, 26, 10, 19, 24, 15, 2, 23, 23, 24, 22, 29
    493. , 4, 8, 10, 2, 1, 27, 8, 28, 20, 17, 18, 1, 26, 25, 25, 16, 22, 15, 15, 1, 24
    494. , 6, 4, 13, 13, 10, 18, 7, 20, 15, 27, 23, 2, 23, 15, 14, 26, 20, 14, 9, 14, 15
    495. , 2, 26, 7, 18, 27, 28, 28, 17, 27, 7, 5, 11, 28, 18, 25, 23, 5, 6, 12, 12, 12
    496. , 1, 13, 22, 2, 6, 20, 26, 18, 23, 5, 7, 22, 13, 14, 11, 0, 17, 23, 3, 8, 29
    497. , 15, 19, 10, 18, 16, 13, 10, 1, 2, 11, 22, 25, 13, 25, 12, 18, 14, 7, 23, 2, 16
    498. , 21, 6, 7, 9, 14, 2, 19, 26, 23, 28, 13, 13, 3, 10, 25, 6, 26, 28, 14, 9, 5
    499. , 3, 12, 19, 14, 20, 20, 24, 25, 15, 18, 14, 25, 10, 0, 4, 29, 23, 0, 24, 6, 23
    500. , 27, 24, 8, 1, 23, 10, 15, 25, 14, 25, 11, 12, 25, 4, 10, 9, 9, 7, 5, 22, 2
    501. , 1, 27, 28, 27, 29, 4, 2, 16, 26, 23, 0, 18, 6, 29, 9, 14, 22, 19, 8, 16, 29
    502. , 20, 6, 26, 19, 24, 6, 23, 22, 20, 5, 17, 14, 26, 23, 9, 22, 28, 20, 25, 29, 13
    503. , 23, 22, 20, 6, 0, 6, 23, 15, 14, 6, 23, 7, 28, 0, 7, 19, 20, 5, 15, 13, 13
    504. , 6, 6, 22, 0, 17, 5, 24, 15, 9, 12, 3, 23, 14, 24, 5, 8, 25, 15, 17, 27, 18
    505. , 21, 17, 19, 18, 9, 11, 22, 1, 14, 12, 8, 2, 9, 6, 22, 16, 29, 13, 27, 3, 23
    506. , 4, 9, 16, 26, 1, 25, 29, 24, 15, 12, 29, 16, 5, 23, 2, 29, 13, 13, 18, 23, 22
    507. };
    508. */
    509. printf("\nA=\n");
    510. printFloatMatrixRowMajor(A, m, n, n);
    511. int jt;
    512. float eps;
    513. int result = 0;
    514. float v_A[49];
    515. jt = 89;
    516. eps = 0.000001;
    517. //result = jcbi(A, n, v_A, eps, jt);
    518. result = jcbi_roll(A, n, v_A, eps, jt);
    519. printf("\nSigma_A=\n");
    520. printFloatMatrixRowMajor(A, n, n, n);
    521. printf("\nV_A=\n");
    522. printFloatMatrixRowMajor(v_A, n, n, n);
    523. }
    524. int main() {
    525. svd_sym_Test();
    526. //svd_Little_mGEn_Test();// A'*A => V S
    527. return 0;
    528. }

  • 相关阅读:
    EMAS Serverless 到底有多便利?
    自动驾驶学习笔记(八)——路线规划
    图像滤波算法
    Vuex环境搭建
    全球第4大操作系统(鸿蒙)的软件后缀.hap
    大话机器学习准确率(Accuracy)、精确率(Pecision)、召回率(Recall)以及TP、FP、TN、FN
    H3C 6520X 配置IRF+BFD
    C专家编程 第7章 对内存的思考 7.4 cache存储器
    【深度学习笔记】计算机视觉——图像增广
    Linux基础操作
  • 原文地址:https://blog.csdn.net/eloudy/article/details/128116759