home *** CD-ROM | disk | FTP | other *** search
Unknown | 1994-02-28 | 11.0 KB |
open in:
MacOS 8.1
|
Win98
|
DOS
view JSON data
|
view as text
This file was not able to be converted.
This format is not currently supported by dexvert.
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| file
| data
| default
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 20 20 20 61 31 32 20 3d | 20 73 70 5f 67 65 74 5f | a12 =| sp_get_|
|00000010| 76 61 6c 28 41 2c 69 2c | 69 2b 31 29 3b 0a 09 20 |val(A,i,|i+1);.. |
|00000020| 20 20 20 62 31 20 3d 20 | 74 6d 70 5f 76 65 5b 69 | b1 = |tmp_ve[i|
|00000030| 5d 3b 0a 09 20 20 20 20 | 62 32 20 3d 20 74 6d 70 |];.. |b2 = tmp|
|00000040| 5f 76 65 5b 69 2b 31 5d | 3b 0a 09 20 20 20 20 64 |_ve[i+1]|;.. d|
|00000050| 65 74 20 3d 20 61 31 31 | 2a 61 32 32 2d 61 31 32 |et = a11|*a22-a12|
|00000060| 2a 61 31 32 3b 09 2f 2a | 20 3c 20 30 20 3a 20 73 |*a12;./*| < 0 : s|
|00000070| 65 65 20 42 4b 50 66 61 | 63 74 6f 72 28 29 20 2a |ee BKPfa|ctor() *|
|00000080| 2f 0a 09 20 20 20 20 69 | 66 20 28 20 64 65 74 20 |/.. i|f ( det |
|00000090| 3d 3d 20 30 2e 30 20 29 | 0a 09 09 65 72 72 6f 72 |== 0.0 )|...error|
|000000a0| 28 45 5f 53 49 4e 47 2c | 22 42 4b 50 73 6f 6c 76 |(E_SING,|"BKPsolv|
|000000b0| 65 22 29 3b 0a 09 20 20 | 20 20 64 65 74 20 3d 20 |e");.. | det = |
|000000c0| 31 2f 64 65 74 3b 0a 09 | 20 20 20 20 74 6d 70 5f |1/det;..| tmp_|
|000000d0| 76 65 5b 69 5d 20 20 20 | 3d 20 64 65 74 2a 28 61 |ve[i] |= det*(a|
|000000e0| 32 32 2a 62 31 2d 61 31 | 32 2a 62 32 29 3b 0a 09 |22*b1-a1|2*b2);..|
|000000f0| 20 20 20 20 74 6d 70 5f | 76 65 5b 69 2b 31 5d 20 | tmp_|ve[i+1] |
|00000100| 3d 20 64 65 74 2a 28 61 | 31 31 2a 62 32 2d 61 31 |= det*(a|11*b2-a1|
|00000110| 32 2a 62 31 29 3b 0a 09 | 7d 0a 20 20 20 20 7d 0a |2*b1);..|}. }.|
|00000120| 0a 20 20 20 20 2f 2a 20 | 70 72 69 6e 74 66 28 22 |. /* |printf("|
|00000130| 23 20 42 4b 50 73 6f 6c | 76 65 3a 20 73 6f 6c 76 |# BKPsol|ve: solv|
|00000140| 69 6e 67 20 44 20 70 61 | 72 74 3a 20 74 6d 70 20 |ing D pa|rt: tmp |
|00000150| 3d 5c 6e 22 29 3b 09 76 | 5f 6f 75 74 70 75 74 28 |=\n");.v|_output(|
|00000160| 74 6d 70 29 3b 20 2a 2f | 0a 20 20 20 20 2f 2a 20 |tmp); */|. /* |
|00000170| 73 6f 6c 76 65 20 66 6f | 72 20 74 72 61 6e 73 70 |solve fo|r transp|
|00000180| 6f 73 65 20 6f 66 20 6c | 6f 77 65 72 20 74 72 69 |ose of l|ower tri|
|00000190| 61 6e 67 75 6c 61 72 20 | 70 61 72 74 20 2a 2f 0a |angular |part */.|
|000001a0| 20 20 20 20 66 6f 72 20 | 28 20 69 20 3d 20 6e 2d | for |( i = n-|
|000001b0| 32 3b 20 69 20 3e 3d 20 | 30 3b 20 69 2d 2d 20 29 |2; i >= |0; i-- )|
|000001c0| 0a 20 20 20 20 7b 0a 09 | 73 75 6d 20 3d 20 74 6d |. {..|sum = tm|
|000001d0| 70 5f 76 65 5b 69 5d 3b | 0a 09 69 66 20 28 20 62 |p_ve[i];|..if ( b|
|000001e0| 6c 6f 63 6b 2d 3e 70 65 | 5b 69 5d 20 3e 20 69 20 |lock->pe|[i] > i |
|000001f0| 29 0a 09 7b 0a 09 20 20 | 20 20 2f 2a 20 6f 6e 65 |)..{.. | /* one|
|00000200| 62 79 6f 6e 65 20 69 73 | 20 66 61 6c 73 65 20 2a |byone is| false *|
|00000210| 2f 0a 09 20 20 20 20 2f | 2a 20 66 6f 72 20 28 20 |/.. /|* for ( |
|00000220| 6a 20 3d 20 69 2b 32 3b | 20 6a 20 3c 20 6e 3b 20 |j = i+2;| j < n; |
|00000230| 6a 2b 2b 20 29 0a 09 09 | 20 20 73 75 6d 20 2d 3d |j++ )...| sum -=|
|00000240| 20 41 5f 6d 65 5b 69 5d | 5b 6a 5d 2a 74 6d 70 5f | A_me[i]|[j]*tmp_|
|00000250| 76 65 5b 6a 5d 3b 20 2a | 2f 0a 09 20 20 20 20 69 |ve[j]; *|/.. i|
|00000260| 66 20 28 20 69 2b 32 20 | 3e 3d 20 6e 20 29 0a 09 |f ( i+2 |>= n )..|
|00000270| 09 63 6f 6e 74 69 6e 75 | 65 3b 0a 09 20 20 20 20 |.continu|e;.. |
|00000280| 72 20 3d 20 26 28 41 2d | 3e 72 6f 77 5b 69 5d 29 |r = &(A-|>row[i])|
|00000290| 3b 0a 09 20 20 20 20 69 | 64 78 20 3d 20 73 70 72 |;.. i|dx = spr|
|000002a0| 6f 77 5f 69 64 78 28 72 | 2c 69 2b 32 29 3b 0a 09 |ow_idx(r|,i+2);..|
|000002b0| 20 20 20 20 69 64 78 20 | 3d 20 66 69 78 69 6e 64 | idx |= fixind|
|000002c0| 65 78 28 69 64 78 29 3b | 0a 09 20 20 20 20 65 20 |ex(idx);|.. e |
|000002d0| 3d 20 26 28 72 2d 3e 65 | 6c 74 5b 69 64 78 5d 29 |= &(r->e|lt[idx])|
|000002e0| 3b 0a 09 20 20 20 20 66 | 6f 72 20 28 20 3b 20 69 |;.. f|or ( ; i|
|000002f0| 64 78 20 3c 20 72 2d 3e | 6c 65 6e 3b 20 69 64 78 |dx < r->|len; idx|
|00000300| 2b 2b 2c 20 65 2b 2b 20 | 29 0a 09 09 73 75 6d 20 |++, e++ |)...sum |
|00000310| 2d 3d 20 65 2d 3e 76 61 | 6c 2a 74 6d 70 5f 76 65 |-= e->va|l*tmp_ve|
|00000320| 5b 65 2d 3e 63 6f 6c 5d | 3b 0a 09 7d 0a 09 65 6c |[e->col]|;..}..el|
|00000330| 73 65 20 2f 2a 20 6f 6e | 65 62 79 6f 6e 65 20 2a |se /* on|ebyone *|
|00000340| 2f 0a 09 7b 0a 09 20 20 | 20 20 2f 2a 20 66 6f 72 |/..{.. | /* for|
|00000350| 20 28 20 6a 20 3d 20 69 | 2b 31 3b 20 6a 20 3c 20 | ( j = i|+1; j < |
|00000360| 6e 3b 20 6a 2b 2b 20 29 | 0a 09 09 20 20 73 75 6d |n; j++ )|... sum|
|00000370| 20 2d 3d 20 41 5f 6d 65 | 5b 69 5d 5b 6a 5d 2a 74 | -= A_me|[i][j]*t|
|00000380| 6d 70 5f 76 65 5b 6a 5d | 3b 20 2a 2f 0a 09 20 20 |mp_ve[j]|; */.. |
|00000390| 20 20 72 20 3d 20 26 28 | 41 2d 3e 72 6f 77 5b 69 | r = &(|A->row[i|
|000003a0| 5d 29 3b 0a 09 20 20 20 | 20 69 64 78 20 3d 20 73 |]);.. | idx = s|
|000003b0| 70 72 6f 77 5f 69 64 78 | 28 72 2c 69 2b 31 29 3b |prow_idx|(r,i+1);|
|000003c0| 0a 09 20 20 20 20 69 64 | 78 20 3d 20 66 69 78 69 |.. id|x = fixi|
|000003d0| 6e 64 65 78 28 69 64 78 | 29 3b 0a 09 20 20 20 20 |ndex(idx|);.. |
|000003e0| 65 20 3d 20 26 28 72 2d | 3e 65 6c 74 5b 69 64 78 |e = &(r-|>elt[idx|
|000003f0| 5d 29 3b 0a 09 20 20 20 | 20 66 6f 72 20 28 20 3b |]);.. | for ( ;|
|00000400| 20 69 64 78 20 3c 20 72 | 2d 3e 6c 65 6e 3b 20 69 | idx < r|->len; i|
|00000410| 64 78 2b 2b 2c 20 65 2b | 2b 20 29 0a 09 09 73 75 |dx++, e+|+ )...su|
|00000420| 6d 20 2d 3d 20 65 2d 3e | 76 61 6c 2a 74 6d 70 5f |m -= e->|val*tmp_|
|00000430| 76 65 5b 65 2d 3e 63 6f | 6c 5d 3b 0a 09 7d 0a 09 |ve[e->co|l];..}..|
|00000440| 74 6d 70 5f 76 65 5b 69 | 5d 20 3d 20 73 75 6d 3b |tmp_ve[i|] = sum;|
|00000450| 0a 20 20 20 20 7d 0a 0a | 20 20 20 20 2f 2a 20 70 |. }..| /* p|
|00000460| 72 69 6e 74 66 28 22 23 | 20 42 4b 50 73 6f 6c 76 |rintf("#| BKPsolv|
|00000470| 65 3a 20 73 6f 6c 76 69 | 6e 67 20 4c 5e 54 20 70 |e: solvi|ng L^T p|
|00000480| 61 72 74 3a 20 74 6d 70 | 20 3d 5c 6e 22 29 3b 76 |art: tmp| =\n");v|
|00000490| 5f 6f 75 74 70 75 74 28 | 74 6d 70 29 3b 20 2a 2f |_output(|tmp); */|
|000004a0| 0a 20 20 20 20 2f 2a 20 | 61 6e 64 20 64 6f 20 66 |. /* |and do f|
|000004b0| 69 6e 61 6c 20 70 65 72 | 6d 75 74 61 74 69 6f 6e |inal per|mutation|
|000004c0| 20 2a 2f 0a 20 20 20 20 | 78 20 3d 20 70 78 69 6e | */. |x = pxin|
|000004d0| 76 5f 76 65 63 28 70 69 | 76 6f 74 2c 74 6d 70 2c |v_vec(pi|vot,tmp,|
|000004e0| 78 29 3b 0a 0a 20 20 20 | 20 72 65 74 75 72 6e 20 |x);.. | return |
|000004f0| 78 3b 0a 7d 0a 0a 0a 0a | 46 69 6c 65 44 61 74 61 |x;.}....|FileData|
|00000500| 82 73 70 63 68 66 63 74 | 72 00 00 00 29 3e 00 00 |.spchfct|r...)>..|
|00000510| 45 ff ff ff 0c a3 3f 17 | 03 00 2b f0 0a 2f 2a 2a |E.....?.|..+../**|
|00000520| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000530| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000540| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000550| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000560| 2a 2a 2a 2a 2a 2a 2a 2a | 0a 2a 2a 0a 2a 2a 20 43 |********|.**.** C|
|00000570| 6f 70 79 72 69 67 68 74 | 20 28 43 29 20 31 39 39 |opyright| (C) 199|
|00000580| 33 20 44 61 76 69 64 20 | 45 2e 20 53 74 65 77 61 |3 David |E. Stewa|
|00000590| 72 64 20 26 20 5a 62 69 | 67 6e 69 65 77 20 4c 65 |rd & Zbi|gniew Le|
|000005a0| 79 6b 2c 20 61 6c 6c 20 | 72 69 67 68 74 73 20 72 |yk, all |rights r|
|000005b0| 65 73 65 72 76 65 64 2e | 0a 2a 2a 0a 2a 2a 09 09 |eserved.|.**.**..|
|000005c0| 09 20 20 20 20 20 4d 65 | 73 63 68 61 63 68 20 4c |. Me|schach L|
|000005d0| 69 62 72 61 72 79 0a 2a | 2a 20 0a 2a 2a 20 54 68 |ibrary.*|* .** Th|
|000005e0| 69 73 20 4d 65 73 63 68 | 61 63 68 20 4c 69 62 72 |is Mesch|ach Libr|
|000005f0| 61 72 79 20 69 73 20 70 | 72 6f 76 69 64 65 64 20 |ary is p|rovided |
|00000600| 22 61 73 20 69 73 22 20 | 77 69 74 68 6f 75 74 20 |"as is" |without |
|00000610| 61 6e 79 20 65 78 70 72 | 65 73 73 20 0a 2a 2a 20 |any expr|ess .** |
|00000620| 6f 72 20 69 6d 70 6c 69 | 65 64 20 77 61 72 72 61 |or impli|ed warra|
|00000630| 6e 74 79 20 6f 66 20 61 | 6e 79 20 6b 69 6e 64 20 |nty of a|ny kind |
|00000640| 77 69 74 68 20 72 65 73 | 70 65 63 74 20 74 6f 20 |with res|pect to |
|00000650| 74 68 69 73 20 73 6f 66 | 74 77 61 72 65 2e 20 0a |this sof|tware. .|
|00000660| 2a 2a 20 49 6e 20 70 61 | 72 74 69 63 75 6c 61 72 |** In pa|rticular|
|00000670| 20 74 68 65 20 61 75 74 | 68 6f 72 73 20 73 68 61 | the aut|hors sha|
|00000680| 6c 6c 20 6e 6f 74 20 62 | 65 20 6c 69 61 62 6c 65 |ll not b|e liable|
|00000690| 20 66 6f 72 20 61 6e 79 | 20 64 69 72 65 63 74 2c | for any| direct,|
|000006a0| 20 0a 2a 2a 20 69 6e 64 | 69 72 65 63 74 2c 20 73 | .** ind|irect, s|
|000006b0| 70 65 63 69 61 6c 2c 20 | 69 6e 63 69 64 65 6e 74 |pecial, |incident|
|000006c0| 61 6c 20 6f 72 20 63 6f | 6e 73 65 71 75 65 6e 74 |al or co|nsequent|
|000006d0| 69 61 6c 20 64 61 6d 61 | 67 65 73 20 61 72 69 73 |ial dama|ges aris|
|000006e0| 69 6e 67 20 0a 2a 2a 20 | 69 6e 20 61 6e 79 20 77 |ing .** |in any w|
|000006f0| 61 79 20 66 72 6f 6d 20 | 75 73 65 20 6f 66 20 74 |ay from |use of t|
|00000700| 68 65 20 73 6f 66 74 77 | 61 72 65 2e 0a 2a 2a 20 |he softw|are..** |
|00000710| 0a 2a 2a 20 45 76 65 72 | 79 6f 6e 65 20 69 73 20 |.** Ever|yone is |
|00000720| 67 72 61 6e 74 65 64 20 | 70 65 72 6d 69 73 73 69 |granted |permissi|
|00000730| 6f 6e 20 74 6f 20 63 6f | 70 79 2c 20 6d 6f 64 69 |on to co|py, modi|
|00000740| 66 79 20 61 6e 64 20 72 | 65 64 69 73 74 72 69 62 |fy and r|edistrib|
|00000750| 75 74 65 20 74 68 69 73 | 0a 2a 2a 20 4d 65 73 63 |ute this|.** Mesc|
|00000760| 68 61 63 68 20 4c 69 62 | 72 61 72 79 2c 20 70 72 |hach Lib|rary, pr|
|00000770| 6f 76 69 64 65 64 3a 0a | 2a 2a 20 20 31 2e 20 20 |ovided:.|** 1. |
|00000780| 41 6c 6c 20 63 6f 70 69 | 65 73 20 63 6f 6e 74 61 |All copi|es conta|
|00000790| 69 6e 20 74 68 69 73 20 | 63 6f 70 79 72 69 67 68 |in this |copyrigh|
|000007a0| 74 20 6e 6f 74 69 63 65 | 2e 0a 2a 2a 20 20 32 2e |t notice|..** 2.|
|000007b0| 20 20 41 6c 6c 20 6d 6f | 64 69 66 69 65 64 20 63 | All mo|dified c|
|000007c0| 6f 70 69 65 73 20 73 68 | 61 6c 6c 20 63 61 72 72 |opies sh|all carr|
|000007d0| 79 20 61 20 6e 6f 74 69 | 63 65 20 73 74 61 74 69 |y a noti|ce stati|
|000007e0| 6e 67 20 77 68 6f 0a 2a | 2a 20 20 20 20 20 20 6d |ng who.*|* m|
|000007f0| 61 64 65 20 74 68 65 20 | 6c 61 73 74 20 6d 6f 64 |ade the |last mod|
|00000800| 69 66 69 63 61 74 69 6f | 6e 20 61 6e 64 20 74 68 |ificatio|n and th|
|00000810| 65 20 64 61 74 65 20 6f | 66 20 73 75 63 68 20 6d |e date o|f such m|
|00000820| 6f 64 69 66 69 63 61 74 | 69 6f 6e 2e 0a 2a 2a 20 |odificat|ion..** |
|00000830| 20 33 2e 20 20 4e 6f 20 | 63 68 61 72 67 65 20 69 | 3. No |charge i|
|00000840| 73 20 6d 61 64 65 20 66 | 6f 72 20 74 68 69 73 20 |s made f|or this |
|00000850| 73 6f 66 74 77 61 72 65 | 20 6f 72 20 77 6f 72 6b |software| or work|
|00000860| 73 20 64 65 72 69 76 65 | 64 20 66 72 6f 6d 20 69 |s derive|d from i|
|00000870| 74 2e 20 20 0a 2a 2a 20 | 20 20 20 20 20 54 68 69 |t. .** | Thi|
|00000880| 73 20 63 6c 61 75 73 65 | 20 73 68 61 6c 6c 20 6e |s clause| shall n|
|00000890| 6f 74 20 62 65 20 63 6f | 6e 73 74 72 75 65 64 20 |ot be co|nstrued |
|000008a0| 61 73 20 63 6f 6e 73 74 | 72 61 69 6e 69 6e 67 20 |as const|raining |
|000008b0| 6f 74 68 65 72 20 73 6f | 66 74 77 61 72 65 0a 2a |other so|ftware.*|
|000008c0| 2a 20 20 20 20 20 20 64 | 69 73 74 72 69 62 75 74 |* d|istribut|
|000008d0| 65 64 20 6f 6e 20 74 68 | 65 20 73 61 6d 65 20 6d |ed on th|e same m|
|000008e0| 65 64 69 75 6d 20 61 73 | 20 74 68 69 73 20 73 6f |edium as| this so|
|000008f0| 66 74 77 61 72 65 2c 20 | 6e 6f 72 20 69 73 20 61 |ftware, |nor is a|
|00000900| 0a 2a 2a 20 20 20 20 20 | 20 64 69 73 74 72 69 62 |.** | distrib|
|00000910| 75 74 69 6f 6e 20 66 65 | 65 20 63 6f 6e 73 69 64 |ution fe|e consid|
|00000920| 65 72 65 64 20 61 20 63 | 68 61 72 67 65 2e 0a 2a |ered a c|harge..*|
|00000930| 2a 0a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |*.******|********|
|00000940| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000950| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000960| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000970| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2f 0a 0a |********|*****/..|
|00000980| 0a 2f 2a 0a 09 53 70 61 | 72 73 65 20 43 68 6f 6c |./*..Spa|rse Chol|
|00000990| 65 73 6b 79 20 66 61 63 | 74 6f 72 69 73 61 74 69 |esky fac|torisati|
|000009a0| 6f 6e 20 63 6f 64 65 0a | 09 54 6f 20 62 65 20 75 |on code.|.To be u|
|000009b0| 73 65 64 20 77 69 74 68 | 20 73 70 61 72 73 65 2e |sed with| sparse.|
|000009c0| 68 2c 20 73 70 61 72 73 | 65 2e 63 20 65 74 63 0a |h, spars|e.c etc.|
|000009d0| 0a 2a 2f 0a 0a 73 74 61 | 74 69 63 20 63 68 61 72 |.*/..sta|tic char|
|000009e0| 09 72 63 73 69 64 5b 5d | 20 3d 20 22 24 49 64 3a |.rcsid[]| = "$Id:|
|000009f0| 20 73 70 63 68 66 63 74 | 72 2e 63 2c 76 20 31 2e | spchfct|r.c,v 1.|
|00000a00| 34 20 31 39 39 34 2f 30 | 31 2f 31 33 20 30 35 3a |4 1994/0|1/13 05:|
|00000a10| 33 31 3a 33 32 20 64 65 | 73 20 45 78 70 20 24 22 |31:32 de|s Exp $"|
|00000a20| 3b 0a 0a 23 69 6e 63 6c | 75 64 65 09 3c 73 74 64 |;..#incl|ude.<std|
|00000a30| 69 6f 2e 68 3e 0a 23 69 | 6e 63 6c 75 64 65 09 3c |io.h>.#i|nclude.<|
|00000a40| 6d 61 74 68 2e 68 3e 0a | 23 69 6e 63 6c 75 64 65 |math.h>.|#include|
|00000a50| 09 22 6d 61 74 72 69 78 | 2e 68 22 0a 23 69 6e 63 |."matrix|.h".#inc|
|00000a60| 6c 75 64 65 09 22 73 70 | 61 72 73 65 2e 68 22 0a |lude."sp|arse.h".|
|00000a70| 23 69 6e 63 6c 75 64 65 | 20 20 20 20 20 20 20 20 |#include| |
|00000a80| 22 73 70 61 72 73 65 32 | 2e 68 22 0a 0a 0a 23 69 |"sparse2|.h"...#i|
|00000a90| 66 6e 64 65 66 20 4d 41 | 4c 4c 4f 43 44 45 43 4c |fndef MA|LLOCDECL|
|00000aa0| 0a 23 69 66 6e 64 65 66 | 20 41 4e 53 49 5f 43 0a |.#ifndef| ANSI_C.|
|00000ab0| 65 78 74 65 72 6e 09 63 | 68 61 72 09 2a 63 61 6c |extern.c|har.*cal|
|00000ac0| 6c 6f 63 28 29 2c 20 2a | 72 65 61 6c 6c 6f 63 28 |loc(), *|realloc(|
|00000ad0| 29 3b 0a 23 65 6e 64 69 | 66 0a 23 65 6e 64 69 66 |);.#endi|f.#endif|
|00000ae0| 0a 0a 0a 0a 2f 2a 20 73 | 70 72 6f 77 5f 69 70 20 |..../* s|prow_ip |
|00000af0| 2d 2d 20 66 69 6e 64 73 | 20 74 68 65 20 28 70 61 |-- finds| the (pa|
|00000b00| 72 74 69 61 6c 29 20 69 | 6e 6e 65 72 20 70 72 6f |rtial) i|nner pro|
|00000b10| 64 75 63 74 20 6f 66 20 | 61 20 70 61 69 72 20 6f |duct of |a pair o|
|00000b20| 66 20 73 70 61 72 73 65 | 20 72 6f 77 73 0a 09 2d |f sparse| rows..-|
|00000b30| 2d 20 75 73 65 73 20 61 | 20 22 6d 65 72 67 69 6e |- uses a| "mergin|
|00000b40| 67 22 20 61 70 70 72 6f | 61 63 68 20 26 20 61 73 |g" appro|ach & as|
|00000b50| 73 75 6d 65 73 20 63 6f | 6c 75 6d 6e 20 6f 72 64 |sumes co|lumn ord|
|00000b60| 65 72 65 64 20 72 6f 77 | 73 0a 09 2d 2d 20 72 6f |ered row|s..-- ro|
|00000b70| 77 20 69 6e 64 69 63 65 | 73 20 66 6f 72 20 69 6e |w indice|s for in|
|00000b80| 6e 65 72 20 70 72 6f 64 | 75 63 74 20 61 72 65 20 |ner prod|uct are |
|00000b90| 61 6c 6c 20 3c 20 6c 69 | 6d 20 2a 2f 0a 64 6f 75 |all < li|m */.dou|
|00000ba0| 62 6c 65 09 73 70 72 6f | 77 5f 69 70 28 72 6f 77 |ble.spro|w_ip(row|
|00000bb0| 31 2c 20 72 6f 77 32 2c | 20 6c 69 6d 29 0a 53 50 |1, row2,| lim).SP|
|00000bc0| 52 4f 57 09 2a 72 6f 77 | 31 2c 20 2a 72 6f 77 32 |ROW.*row|1, *row2|
|00000bd0| 3b 0a 69 6e 74 09 6c 69 | 6d 3b 0a 7b 0a 09 69 6e |;.int.li|m;.{..in|
|00000be0| 74 09 09 09 69 64 78 31 | 2c 20 69 64 78 32 2c 20 |t...idx1|, idx2, |
|00000bf0| 6c 65 6e 31 2c 20 6c 65 | 6e 32 2c 20 74 6d 70 3b |len1, le|n2, tmp;|
|00000c00| 0a 09 69 6e 74 09 09 09 | 73 70 72 6f 77 5f 69 64 |..int...|sprow_id|
|00000c10| 78 28 29 3b 0a 09 72 65 | 67 69 73 74 65 72 20 72 |x();..re|gister r|
|00000c20| 6f 77 5f 65 6c 74 09 2a | 65 6c 74 73 31 2c 20 2a |ow_elt.*|elts1, *|
|00000c30| 65 6c 74 73 32 3b 0a 09 | 72 65 67 69 73 74 65 72 |elts2;..|register|
|00000c40| 20 52 65 61 6c 09 09 73 | 75 6d 3b 0a 0a 09 65 6c | Real..s|um;...el|
|00000c50| 74 73 31 20 3d 20 72 6f | 77 31 2d 3e 65 6c 74 3b |ts1 = ro|w1->elt;|
|00000c60| 09 65 6c 74 73 32 20 3d | 20 72 6f 77 32 2d 3e 65 |.elts2 =| row2->e|
|00000c70| 6c 74 3b 0a 09 6c 65 6e | 31 20 3d 20 72 6f 77 31 |lt;..len|1 = row1|
|00000c80| 2d 3e 6c 65 6e 3b 09 6c | 65 6e 32 20 3d 20 72 6f |->len;.l|en2 = ro|
|00000c90| 77 32 2d 3e 6c 65 6e 3b | 0a 0a 09 73 75 6d 20 3d |w2->len;|...sum =|
|00000ca0| 20 30 2e 30 3b 0a 0a 09 | 69 66 20 28 20 6c 65 6e | 0.0;...|if ( len|
|00000cb0| 31 20 3c 3d 20 30 20 7c | 7c 20 6c 65 6e 32 20 3c |1 <= 0 ||| len2 <|
|00000cc0| 3d 20 30 20 29 0a 09 09 | 72 65 74 75 72 6e 20 30 |= 0 )...|return 0|
|00000cd0| 2e 30 3b 0a 09 69 66 20 | 28 20 65 6c 74 73 31 2d |.0;..if |( elts1-|
|00000ce0| 3e 63 6f 6c 20 3e 3d 20 | 6c 69 6d 20 7c 7c 20 65 |>col >= |lim || e|
|00000cf0| 6c 74 73 32 2d 3e 63 6f | 6c 20 3e 3d 20 6c 69 6d |lts2->co|l >= lim|
|00000d00| 20 29 0a 09 09 72 65 74 | 75 72 6e 20 30 2e 30 3b | )...ret|urn 0.0;|
|00000d10| 0a 0a 09 2f 2a 20 75 73 | 65 20 73 70 72 6f 77 5f |.../* us|e sprow_|
|00000d20| 69 64 78 28 29 20 74 6f | 20 73 70 65 65 64 20 75 |idx() to| speed u|
|00000d30| 70 20 69 6e 6e 65 72 20 | 70 72 6f 64 75 63 74 20 |p inner |product |
|00000d40| 77 68 65 72 65 20 6f 6e | 65 20 72 6f 77 20 69 73 |where on|e row is|
|00000d50| 0a 09 09 6d 75 63 68 20 | 6c 6f 6e 67 65 72 20 74 |...much |longer t|
|00000d60| 68 61 6e 20 74 68 65 20 | 6f 74 68 65 72 20 2a 2f |han the |other */|
|00000d70| 0a 09 69 64 78 31 20 3d | 20 69 64 78 32 20 3d 20 |..idx1 =| idx2 = |
|00000d80| 30 3b 0a 09 69 66 20 28 | 20 6c 65 6e 31 20 3e 20 |0;..if (| len1 > |
|00000d90| 32 2a 6c 65 6e 32 20 29 | 0a 09 7b 0a 09 09 69 64 |2*len2 )|..{...id|
|00000da0| 78 31 20 3d 20 73 70 72 | 6f 77 5f 69 64 78 28 72 |x1 = spr|ow_idx(r|
|00000db0| 6f 77 31 2c 65 6c 74 73 | 32 2d 3e 63 6f 6c 29 3b |ow1,elts|2->col);|
|00000dc0| 0a 09 09 69 64 78 31 20 | 3d 20 28 69 64 78 31 20 |...idx1 |= (idx1 |
|00000dd0| 3c 20 30 29 20 3f 20 2d | 28 69 64 78 31 2b 32 29 |< 0) ? -|(idx1+2)|
|00000de0| 20 3a 20 69 64 78 31 3b | 0a 09 09 69 66 20 28 20 | : idx1;|...if ( |
|00000df0| 69 64 78 31 20 3c 20 30 | 20 29 0a 09 09 09 65 72 |idx1 < 0| )....er|
|00000e00| 72 6f 72 28 45 5f 55 4e | 4b 4e 4f 57 4e 2c 22 73 |ror(E_UN|KNOWN,"s|
|00000e10| 70 72 6f 77 5f 69 70 22 | 29 3b 0a 09 09 6c 65 6e |prow_ip"|);...len|
|00000e20| 31 20 2d 3d 20 69 64 78 | 31 3b 0a 09 7d 0a 09 65 |1 -= idx|1;..}..e|
|00000e30| 6c 73 65 20 69 66 20 28 | 20 6c 65 6e 32 20 3e 20 |lse if (| len2 > |
|00000e40| 32 2a 6c 65 6e 31 20 29 | 0a 09 7b 0a 09 09 69 64 |2*len1 )|..{...id|
|00000e50| 78 32 20 3d 20 73 70 72 | 6f 77 5f 69 64 78 28 72 |x2 = spr|ow_idx(r|
|00000e60| 6f 77 32 2c 65 6c 74 73 | 31 2d 3e 63 6f 6c 29 3b |ow2,elts|1->col);|
|00000e70| 0a 09 09 69 64 78 32 20 | 3d 20 28 69 64 78 32 20 |...idx2 |= (idx2 |
|00000e80| 3c 20 30 29 20 3f 20 2d | 28 69 64 78 32 2b 32 29 |< 0) ? -|(idx2+2)|
|00000e90| 20 3a 20 69 64 78 32 3b | 0a 09 09 69 66 20 28 20 | : idx2;|...if ( |
|00000ea0| 69 64 78 32 20 3c 20 30 | 20 29 0a 09 09 09 65 72 |idx2 < 0| )....er|
|00000eb0| 72 6f 72 28 45 5f 55 4e | 4b 4e 4f 57 4e 2c 22 73 |ror(E_UN|KNOWN,"s|
|00000ec0| 70 72 6f 77 5f 69 70 22 | 29 3b 0a 09 09 6c 65 6e |prow_ip"|);...len|
|00000ed0| 32 20 2d 3d 20 69 64 78 | 32 3b 0a 09 7d 0a 09 69 |2 -= idx|2;..}..i|
|00000ee0| 66 20 28 20 6c 65 6e 31 | 20 3c 3d 20 30 20 7c 7c |f ( len1| <= 0 |||
|00000ef0| 20 6c 65 6e 32 20 3c 3d | 20 30 20 29 0a 09 09 72 | len2 <=| 0 )...r|
|00000f00| 65 74 75 72 6e 20 30 2e | 30 3b 0a 0a 09 65 6c 74 |eturn 0.|0;...elt|
|00000f10| 73 31 20 3d 20 26 28 65 | 6c 74 73 31 5b 69 64 78 |s1 = &(e|lts1[idx|
|00000f20| 31 5d 29 3b 09 09 65 6c | 74 73 32 20 3d 20 26 28 |1]);..el|ts2 = &(|
|00000f30| 65 6c 74 73 32 5b 69 64 | 78 32 5d 29 3b 0a 0a 0a |elts2[id|x2]);...|
|00000f40| 09 66 6f 72 20 28 20 3b | 20 3b 20 29 09 2f 2a 20 |.for ( ;| ; )./* |
|00000f50| 66 6f 72 65 76 65 72 20 | 64 6f 2e 2e 2e 20 2a 2f |forever |do... */|
|00000f60| 0a 09 7b 0a 09 09 69 66 | 20 28 20 28 74 6d 70 3d |..{...if| ( (tmp=|
|00000f70| 65 6c 74 73 31 2d 3e 63 | 6f 6c 2d 65 6c 74 73 32 |elts1->c|ol-elts2|
|00000f80| 2d 3e 63 6f 6c 29 20 3c | 20 30 20 29 0a 09 09 7b |->col) <| 0 )...{|
|00000f90| 0a 09 09 20 20 20 20 6c | 65 6e 31 2d 2d 3b 09 09 |... l|en1--;..|
|00000fa0| 65 6c 74 73 31 2b 2b 3b | 0a 09 09 20 20 20 20 69 |elts1++;|... i|
|00000fb0| 66 20 28 20 21 20 6c 65 | 6e 31 20 7c 7c 20 65 6c |f ( ! le|n1 || el|
|00000fc0| 74 73 31 2d 3e 63 6f 6c | 20 3e 3d 20 6c 69 6d 20 |ts1->col| >= lim |
|00000fd0| 29 0a 09 09 09 62 72 65 | 61 6b 3b 0a 09 09 7d 0a |)....bre|ak;...}.|
|00000fe0| 09 09 65 6c 73 65 20 69 | 66 20 28 20 74 6d 70 20 |..else i|f ( tmp |
|00000ff0| 3e 20 30 20 29 0a 09 09 | 7b 0a 09 09 20 20 20 20 |> 0 )...|{... |
|00001000| 6c 65 6e 32 2d 2d 3b 09 | 09 65 6c 74 73 32 2b 2b |len2--;.|.elts2++|
|00001010| 3b 0a 09 09 20 20 20 20 | 69 66 20 28 20 21 20 6c |;... |if ( ! l|
|00001020| 65 6e 32 20 7c 7c 20 65 | 6c 74 73 32 2d 3e 63 6f |en2 || e|lts2->co|
|00001030| 6c 20 3e 3d 20 6c 69 6d | 20 29 0a 09 09 09 62 72 |l >= lim| )....br|
|00001040| 65 61 6b 3b 0a 09 09 7d | 0a 09 09 65 6c 73 65 0a |eak;...}|...else.|
|00001050| 09 09 7b 0a 09 09 20 20 | 20 20 73 75 6d 20 2b 3d |..{... | sum +=|
|00001060| 20 65 6c 74 73 31 2d 3e | 76 61 6c 20 2a 20 65 6c | elts1->|val * el|
|00001070| 74 73 32 2d 3e 76 61 6c | 3b 0a 09 09 20 20 20 20 |ts2->val|;... |
|00001080| 6c 65 6e 31 2d 2d 3b 09 | 09 65 6c 74 73 31 2b 2b |len1--;.|.elts1++|
|00001090| 3b 0a 09 09 20 20 20 20 | 6c 65 6e 32 2d 2d 3b 09 |;... |len2--;.|
|000010a0| 09 65 6c 74 73 32 2b 2b | 3b 0a 09 09 20 20 20 20 |.elts2++|;... |
|000010b0| 69 66 20 28 20 21 20 6c | 65 6e 31 20 7c 7c 20 21 |if ( ! l|en1 || !|
|000010c0| 20 6c 65 6e 32 20 7c 7c | 0a 09 09 09 09 65 6c 74 | len2 |||.....elt|
|000010d0| 73 31 2d 3e 63 6f 6c 20 | 3e 3d 20 6c 69 6d 20 7c |s1->col |>= lim ||
|000010e0| 7c 20 65 6c 74 73 32 2d | 3e 63 6f 6c 20 3e 3d 20 || elts2-|>col >= |
|000010f0| 6c 69 6d 20 29 0a 09 09 | 09 62 72 65 61 6b 3b 0a |lim )...|.break;.|
|00001100| 09 09 7d 0a 09 7d 0a 0a | 09 72 65 74 75 72 6e 20 |..}..}..|.return |
|00001110| 73 75 6d 3b 0a 7d 0a 0a | 2f 2a 20 73 70 72 6f 77 |sum;.}..|/* sprow|
|00001120| 5f 73 71 72 20 2d 2d 20 | 72 65 74 75 72 6e 73 20 |_sqr -- |returns |
|00001130| 73 61 6d 65 20 61 73 20 | 73 70 72 6f 77 5f 69 70 |same as |sprow_ip|
|00001140| 28 72 6f 77 2c 20 72 6f | 77 2c 20 6c 69 6d 29 20 |(row, ro|w, lim) |
|00001150| 2a 2f 0a 64 6f 75 62 6c | 65 09 73 70 72 6f 77 5f |*/.doubl|e.sprow_|
|00001160| 73 71 72 28 72 6f 77 2c | 20 6c 69 6d 29 0a 53 50 |sqr(row,| lim).SP|
|00001170| 52 4f 57 09 2a 72 6f 77 | 3b 0a 69 6e 74 09 6c 69 |ROW.*row|;.int.li|
|00001180| 6d 3b 0a 7b 0a 09 72 65 | 67 69 73 74 65 72 09 72 |m;.{..re|gister.r|
|00001190| 6f 77 5f 65 6c 74 09 2a | 65 6c 74 73 3b 0a 09 69 |ow_elt.*|elts;..i|
|000011a0| 6e 74 09 09 69 64 78 2c | 20 6c 65 6e 3b 0a 09 72 |nt..idx,| len;..r|
|000011b0| 65 67 69 73 74 65 72 09 | 52 65 61 6c 09 73 75 6d |egister.|Real.sum|
|000011c0| 2c 20 74 6d 70 3b 0a 0a | 09 73 75 6d 20 3d 20 30 |, tmp;..|.sum = 0|
|000011d0| 2e 30 3b 0a 09 65 6c 74 | 73 20 3d 20 72 6f 77 2d |.0;..elt|s = row-|
|000011e0| 3e 65 6c 74 3b 09 6c 65 | 6e 20 3d 20 72 6f 77 2d |>elt;.le|n = row-|
|000011f0| 3e 6c 65 6e 3b 0a 09 66 | 6f 72 20 28 20 69 64 78 |>len;..f|or ( idx|
|00001200| 20 3d 20 30 3b 20 69 64 | 78 20 3c 20 6c 65 6e 3b | = 0; id|x < len;|
|00001210| 20 69 64 78 2b 2b 2c 20 | 65 6c 74 73 2b 2b 20 29 | idx++, |elts++ )|
|00001220| 0a 09 7b 0a 09 09 69 66 | 20 28 20 65 6c 74 73 2d |..{...if| ( elts-|
|00001230| 3e 63 6f 6c 20 3e 3d 20 | 6c 69 6d 20 29 0a 09 09 |>col >= |lim )...|
|00001240| 09 62 72 65 61 6b 3b 0a | 09 09 74 6d 70 20 3d 20 |.break;.|..tmp = |
|00001250| 65 6c 74 73 2d 3e 76 61 | 6c 3b 0a 09 09 73 75 6d |elts->va|l;...sum|
|00001260| 20 2b 3d 20 74 6d 70 2a | 74 6d 70 3b 0a 09 7d 0a | += tmp*|tmp;..}.|
|00001270| 0a 09 72 65 74 75 72 6e | 20 73 75 6d 3b 0a 7d 0a |..return| sum;.}.|
|00001280| 0a 73 74 61 74 69 63 09 | 69 6e 74 09 2a 73 63 61 |.static.|int.*sca|
|00001290| 6e 5f 72 6f 77 20 3d 20 | 28 69 6e 74 20 2a 29 4e |n_row = |(int *)N|
|000012a0| 55 4c 4c 2c 20 2a 73 63 | 61 6e 5f 69 64 78 20 3d |ULL, *sc|an_idx =|
|000012b0| 20 28 69 6e 74 20 2a 29 | 4e 55 4c 4c 2c 0a 09 09 | (int *)|NULL,...|
|000012c0| 09 2a 63 6f 6c 5f 6c 69 | 73 74 20 3d 20 28 69 6e |.*col_li|st = (in|
|000012d0| 74 20 2a 29 4e 55 4c 4c | 3b 0a 73 74 61 74 69 63 |t *)NULL|;.static|
|000012e0| 09 69 6e 74 09 73 63 61 | 6e 5f 6c 65 6e 20 3d 20 |.int.sca|n_len = |
|000012f0| 30 3b 0a 0a 2f 2a 20 73 | 65 74 5f 73 63 61 6e 20 |0;../* s|et_scan |
|00001300| 2d 2d 20 65 78 70 61 6e | 64 20 73 63 61 6e 5f 72 |-- expan|d scan_r|
|00001310| 6f 77 20 61 6e 64 20 73 | 63 61 6e 5f 69 64 78 20 |ow and s|can_idx |
|00001320| 61 72 72 61 79 73 0a 09 | 2d 2d 20 72 65 74 75 72 |arrays..|-- retur|
|00001330| 6e 20 6e 65 77 20 6c 65 | 6e 67 74 68 20 2a 2f 0a |n new le|ngth */.|
|00001340| 69 6e 74 09 73 65 74 5f | 73 63 61 6e 28 6e 65 77 |int.set_|scan(new|
|00001350| 5f 6c 65 6e 29 0a 69 6e | 74 09 6e 65 77 5f 6c 65 |_len).in|t.new_le|
|00001360| 6e 3b 0a 7b 0a 09 69 66 | 20 28 20 6e 65 77 5f 6c |n;.{..if| ( new_l|
|00001370| 65 6e 20 3c 3d 20 73 63 | 61 6e 5f 6c 65 6e 20 29 |en <= sc|an_len )|
|00001380| 0a 09 09 72 65 74 75 72 | 6e 20 73 63 61 6e 5f 6c |...retur|n scan_l|
|00001390| 65 6e 3b 0a 09 69 66 20 | 28 20 6e 65 77 5f 6c 65 |en;..if |( new_le|
|000013a0| 6e 20 3c 3d 20 73 63 61 | 6e 5f 6c 65 6e 2b 35 20 |n <= sca|n_len+5 |
|000013b0| 29 0a 09 09 6e 65 77 5f | 6c 65 6e 20 2b 3d 20 35 |)...new_|len += 5|
|000013c0| 3b 0a 0a 09 69 66 20 28 | 20 21 20 73 63 61 6e 5f |;...if (| ! scan_|
|000013d0| 72 6f 77 20 7c 7c 20 21 | 20 73 63 61 6e 5f 69 64 |row || !| scan_id|
|000013e0| 78 20 7c 7c 20 21 20 63 | 6f 6c 5f 6c 69 73 74 20 |x || ! c|ol_list |
|000013f0| 29 0a 09 7b 0a 09 09 73 | 63 61 6e 5f 72 6f 77 20 |)..{...s|can_row |
|00001400| 3d 20 28 69 6e 74 20 2a | 29 63 61 6c 6c 6f 63 28 |= (int *|)calloc(|
|00001410| 6e 65 77 5f 6c 65 6e 2c | 73 69 7a 65 6f 66 28 69 |new_len,|sizeof(i|
|00001420| 6e 74 29 29 3b 0a 09 09 | 73 63 61 6e 5f 69 64 78 |nt));...|scan_idx|
|00001430| 20 3d 20 28 69 6e 74 20 | 2a 29 63 61 6c 6c 6f 63 | = (int |*)calloc|
|00001440| 28 6e 65 77 5f 6c 65 6e | 2c 73 69 7a 65 6f 66 28 |(new_len|,sizeof(|
|00001450| 69 6e 74 29 29 3b 0a 09 | 09 63 6f 6c 5f 6c 69 73 |int));..|.col_lis|
|00001460| 74 20 3d 20 28 69 6e 74 | 20 2a 29 63 61 6c 6c 6f |t = (int| *)callo|
|00001470| 63 28 6e 65 77 5f 6c 65 | 6e 2c 73 69 7a 65 6f 66 |c(new_le|n,sizeof|
|00001480| 28 69 6e 74 29 29 3b 0a | 09 7d 0a 09 65 6c 73 65 |(int));.|.}..else|
|00001490| 0a 09 7b 0a 09 09 73 63 | 61 6e 5f 72 6f 77 20 3d |..{...sc|an_row =|
|000014a0| 20 28 69 6e 74 20 2a 29 | 72 65 61 6c 6c 6f 63 28 | (int *)|realloc(|
|000014b0| 28 63 68 61 72 20 2a 29 | 73 63 61 6e 5f 72 6f 77 |(char *)|scan_row|
|000014c0| 2c 6e 65 77 5f 6c 65 6e | 2a 73 69 7a 65 6f 66 28 |,new_len|*sizeof(|
|000014d0| 69 6e 74 29 29 3b 0a 09 | 09 73 63 61 6e 5f 69 64 |int));..|.scan_id|
|000014e0| 78 20 3d 20 28 69 6e 74 | 20 2a 29 72 65 61 6c 6c |x = (int| *)reall|
|000014f0| 6f 63 28 28 63 68 61 72 | 20 2a 29 73 63 61 6e 5f |oc((char| *)scan_|
|00001500| 69 64 78 2c 6e 65 77 5f | 6c 65 6e 2a 73 69 7a 65 |idx,new_|len*size|
|00001510| 6f 66 28 69 6e 74 29 29 | 3b 0a 09 09 63 6f 6c 5f |of(int))|;...col_|
|00001520| 6c 69 73 74 20 3d 20 28 | 69 6e 74 20 2a 29 72 65 |list = (|int *)re|
|00001530| 61 6c 6c 6f 63 28 28 63 | 68 61 72 20 2a 29 63 6f |alloc((c|har *)co|
|00001540| 6c 5f 6c 69 73 74 2c 6e | 65 77 5f 6c 65 6e 2a 73 |l_list,n|ew_len*s|
|00001550| 69 7a 65 6f 66 28 69 6e | 74 29 29 3b 0a 09 7d 0a |izeof(in|t));..}.|
|00001560| 0a 09 69 66 20 28 20 21 | 20 73 63 61 6e 5f 72 6f |..if ( !| scan_ro|
|00001570| 77 20 7c 7c 20 21 20 73 | 63 61 6e 5f 69 64 78 20 |w || ! s|can_idx |
|00001580| 7c 7c 20 21 20 63 6f 6c | 5f 6c 69 73 74 20 29 0a ||| ! col|_list ).|
|00001590| 09 09 65 72 72 6f 72 28 | 45 5f 4d 45 4d 2c 22 73 |..error(|E_MEM,"s|
|000015a0| 65 74 5f 73 63 61 6e 22 | 29 3b 0a 09 72 65 74 75 |et_scan"|);..retu|
|000015b0| 72 6e 20 6e 65 77 5f 6c | 65 6e 3b 0a 7d 0a 0a 2f |rn new_l|en;.}../|
|000015c0| 2a 20 73 70 43 48 66 61 | 63 74 6f 72 20 2d 2d 20 |* spCHfa|ctor -- |
|000015d0| 73 70 61 72 73 65 20 43 | 68 6f 6c 65 73 6b 79 20 |sparse C|holesky |
|000015e0| 66 61 63 74 6f 72 69 73 | 61 74 69 6f 6e 0a 09 2d |factoris|ation..-|
|000015f0| 2d 20 6f 6e 6c 79 20 74 | 68 65 20 6c 6f 77 65 72 |- only t|he lower|
|00001600| 20 74 72 69 61 6e 67 75 | 6c 61 72 20 70 61 72 74 | triangu|lar part|
|00001610| 20 6f 66 20 41 20 28 69 | 6e 63 6c 2e 20 64 69 61 | of A (i|ncl. dia|
|00001620| 67 6f 6e 61 6c 29 20 69 | 73 20 75 73 65 64 20 2a |gonal) i|s used *|
|00001630| 2f 0a 53 50 4d 41 54 09 | 2a 73 70 43 48 66 61 63 |/.SPMAT.|*spCHfac|
|00001640| 74 6f 72 28 41 29 0a 53 | 50 4d 41 54 09 2a 41 3b |tor(A).S|PMAT.*A;|
|00001650| 0a 7b 0a 09 72 65 67 69 | 73 74 65 72 20 09 69 6e |.{..regi|ster .in|
|00001660| 74 09 69 3b 0a 09 69 6e | 74 09 69 64 78 2c 20 6b |t.i;..in|t.idx, k|
|00001670| 2c 20 6d 2c 20 6d 69 6e | 69 6d 2c 20 6e 2c 20 6e |, m, min|im, n, n|
|00001680| 75 6d 5f 73 63 61 6e 2c | 20 64 69 61 67 5f 69 64 |um_scan,| diag_id|
|00001690| 78 2c 20 74 6d 70 31 3b | 0a 09 52 65 61 6c 09 70 |x, tmp1;|..Real.p|
|000016a0| 69 76 6f 74 2c 20 74 6d | 70 32 3b 0a 09 53 50 52 |ivot, tm|p2;..SPR|
|000016b0| 4f 57 09 2a 72 5f 70 69 | 76 2c 20 2a 72 5f 6f 70 |OW.*r_pi|v, *r_op|
|000016c0| 3b 0a 09 72 6f 77 5f 65 | 6c 74 09 2a 65 6c 74 5f |;..row_e|lt.*elt_|
|000016d0| 70 69 76 2c 20 2a 65 6c | 74 5f 6f 70 2c 20 2a 6f |piv, *el|t_op, *o|
|000016e0| 6c 64 5f 65 6c 74 3b 0a | 0a 09 69 66 20 28 20 41 |ld_elt;.|..if ( A|
|000016f0| 20 3d 3d 20 53 4d 4e 55 | 4c 4c 20 29 0a 09 09 65 | == SMNU|LL )...e|
|00001700| 72 72 6f 72 28 45 5f 4e | 55 4c 4c 2c 22 73 70 43 |rror(E_N|ULL,"spC|
|00001710| 48 66 61 63 74 6f 72 22 | 29 3b 0a 09 69 66 20 28 |Hfactor"|);..if (|
|00001720| 20 41 2d 3e 6d 20 21 3d | 20 41 2d 3e 6e 20 29 0a | A->m !=| A->n ).|
|00001730| 09 09 65 72 72 6f 72 28 | 45 5f 53 51 55 41 52 45 |..error(|E_SQUARE|
|00001740| 2c 22 73 70 43 48 66 61 | 63 74 6f 72 22 29 3b 0a |,"spCHfa|ctor");.|
|00001750| 0a 09 2f 2a 20 73 65 74 | 20 75 70 20 61 63 63 65 |../* set| up acce|
|00001760| 73 73 20 70 61 74 68 73 | 20 69 66 20 6e 6f 74 20 |ss paths| if not |
|00001770| 61 6c 72 65 61 64 79 20 | 64 6f 6e 65 20 73 6f 20 |already |done so |
|00001780| 2a 2f 0a 09 73 70 5f 63 | 6f 6c 5f 61 63 63 65 73 |*/..sp_c|ol_acces|
|00001790| 73 28 41 29 3b 0a 09 73 | 70 5f 64 69 61 67 5f 61 |s(A);..s|p_diag_a|
|000017a0| 63 63 65 73 73 28 41 29 | 3b 0a 0a 09 2f 2a 20 70 |ccess(A)|;.../* p|
|000017b0| 72 69 6e 74 66 28 22 73 | 70 43 48 66 61 63 74 6f |rintf("s|pCHfacto|
|000017c0| 72 28 29 20 2d 2d 20 63 | 68 65 63 6b 70 6f 69 6e |r() -- c|heckpoin|
|000017d0| 74 20 31 5c 6e 22 29 3b | 20 2a 2f 0a 09 6d 20 3d |t 1\n");| */..m =|
|000017e0| 20 41 2d 3e 6d 3b 09 6e | 20 3d 20 41 2d 3e 6e 3b | A->m;.n| = A->n;|
|000017f0| 0a 09 66 6f 72 20 28 20 | 6b 20 3d 20 30 3b 20 6b |..for ( |k = 0; k|
|00001800| 20 3c 20 6d 3b 20 6b 2b | 2b 20 29 0a 09 7b 0a 09 | < m; k+|+ )..{..|
|00001810| 09 72 5f 70 69 76 20 3d | 20 26 28 41 2d 3e 72 6f |.r_piv =| &(A->ro|
|00001820| 77 5b 6b 5d 29 3b 0a 09 | 09 69 66 20 28 20 72 5f |w[k]);..|.if ( r_|
|00001830| 70 69 76 2d 3e 6c 65 6e | 20 3e 20 73 63 61 6e 5f |piv->len| > scan_|
|00001840| 6c 65 6e 20 29 0a 09 09 | 09 73 65 74 5f 73 63 61 |len )...|.set_sca|
|00001850| 6e 28 72 5f 70 69 76 2d | 3e 6c 65 6e 29 3b 0a 09 |n(r_piv-|>len);..|
|00001860| 09 65 6c 74 5f 70 69 76 | 20 3d 20 72 5f 70 69 76 |.elt_piv| = r_piv|
|00001870| 2d 3e 65 6c 74 3b 0a 09 | 09 64 69 61 67 5f 69 64 |->elt;..|.diag_id|
|00001880| 78 20 3d 20 73 70 72 6f | 77 5f 69 64 78 32 28 72 |x = spro|w_idx2(r|
|00001890| 5f 70 69 76 2c 6b 2c 72 | 5f 70 69 76 2d 3e 64 69 |_piv,k,r|_piv->di|
|000018a0| 61 67 29 3b 0a 09 09 69 | 66 20 28 20 64 69 61 67 |ag);...i|f ( diag|
|000018b0| 5f 69 64 78 20 3c 20 30 | 20 29 0a 09 09 09 65 72 |_idx < 0| )....er|
|000018c0| 72 6f 72 28 45 5f 50 4f | 53 44 45 46 2c 22 73 70 |ror(E_PO|SDEF,"sp|
|000018d0| 43 48 66 61 63 74 6f 72 | 22 29 3b 0a 09 09 6f 6c |CHfactor|");...ol|
|000018e0| 64 5f 65 6c 74 20 3d 20 | 26 28 65 6c 74 5f 70 69 |d_elt = |&(elt_pi|
|000018f0| 76 5b 64 69 61 67 5f 69 | 64 78 5d 29 3b 0a 09 09 |v[diag_i|dx]);...|
|00001900| 66 6f 72 20 28 20 69 20 | 3d 20 30 3b 20 69 20 3c |for ( i |= 0; i <|
|00001910| 20 72 5f 70 69 76 2d 3e | 6c 65 6e 3b 20 69 2b 2b | r_piv->|len; i++|
|00001920| 20 29 0a 09 09 7b 0a 09 | 09 09 69 66 20 28 20 65 | )...{..|..if ( e|
|00001930| 6c 74 5f 70 69 76 5b 69 | 5d 2e 63 6f 6c 20 3e 20 |lt_piv[i|].col > |
|00001940| 6b 20 29 0a 09 09 09 09 | 62 72 65 61 6b 3b 0a 09 |k ).....|break;..|
|00001950| 09 09 63 6f 6c 5f 6c 69 | 73 74 5b 69 5d 20 3d 20 |..col_li|st[i] = |
|00001960| 65 6c 74 5f 70 69 76 5b | 69 5d 2e 63 6f 6c 3b 0a |elt_piv[|i].col;.|
|00001970| 09 09 09 73 63 61 6e 5f | 72 6f 77 5b 69 5d 20 3d |...scan_|row[i] =|
|00001980| 20 65 6c 74 5f 70 69 76 | 5b 69 5d 2e 6e 78 74 5f | elt_piv|[i].nxt_|
|00001990| 72 6f 77 3b 0a 09 09 09 | 73 63 61 6e 5f 69 64 78 |row;....|scan_idx|
|000019a0| 5b 69 5d 20 3d 20 65 6c | 74 5f 70 69 76 5b 69 5d |[i] = el|t_piv[i]|
|000019b0| 2e 6e 78 74 5f 69 64 78 | 3b 0a 09 09 7d 0a 09 09 |.nxt_idx|;...}...|
|000019c0| 2f 2a 20 70 72 69 6e 74 | 66 28 22 73 70 43 48 66 |/* print|f("spCHf|
|000019d0| 61 63 74 6f 72 28 29 20 | 2d 2d 20 63 68 65 63 6b |actor() |-- check|
|000019e0| 70 6f 69 6e 74 20 32 5c | 6e 22 29 3b 20 2a 2f 0a |point 2\|n"); */.|
|000019f0| 09 09 6e 75 6d 5f 73 63 | 61 6e 20 3d 20 69 3b 09 |..num_sc|an = i;.|
|00001a00| 2f 2a 20 6e 75 6d 62 65 | 72 20 6f 66 20 61 63 74 |/* numbe|r of act|
|00001a10| 75 61 6c 20 65 6e 74 72 | 69 65 73 20 69 6e 20 73 |ual entr|ies in s|
|00001a20| 63 61 6e 5f 72 6f 77 20 | 65 74 63 2e 20 2a 2f 0a |can_row |etc. */.|
|00001a30| 09 09 2f 2a 20 70 72 69 | 6e 74 66 28 22 6e 75 6d |../* pri|ntf("num|
|00001a40| 5f 73 63 61 6e 20 3d 20 | 25 64 5c 6e 22 2c 6e 75 |_scan = |%d\n",nu|
|00001a50| 6d 5f 73 63 61 6e 29 3b | 20 2a 2f 0a 0a 09 09 2f |m_scan);| */..../|
|00001a60| 2a 20 73 65 74 20 64 69 | 61 67 6f 6e 61 6c 20 65 |* set di|agonal e|
|00001a70| 6e 74 72 79 20 6f 66 20 | 43 68 6f 6c 65 73 6b 79 |ntry of |Cholesky|
|00001a80| 20 66 61 63 74 6f 72 20 | 2a 2f 0a 09 09 74 6d 70 | factor |*/...tmp|
|00001a90| 32 20 3d 20 65 6c 74 5f | 70 69 76 5b 64 69 61 67 |2 = elt_|piv[diag|
|00001aa0| 5f 69 64 78 5d 2e 76 61 | 6c 20 2d 20 73 70 72 6f |_idx].va|l - spro|
|00001ab0| 77 5f 73 71 72 28 72 5f | 70 69 76 2c 6b 29 3b 0a |w_sqr(r_|piv,k);.|
|00001ac0| 09 09 69 66 20 28 20 74 | 6d 70 32 20 3c 3d 20 30 |..if ( t|mp2 <= 0|
|00001ad0| 2e 30 20 29 0a 09 09 09 | 65 72 72 6f 72 28 45 5f |.0 )....|error(E_|
|00001ae0| 50 4f 53 44 45 46 2c 22 | 73 70 43 48 66 61 63 74 |POSDEF,"|spCHfact|
|00001af0| 6f 72 22 29 3b 0a 09 09 | 65 6c 74 5f 70 69 76 5b |or");...|elt_piv[|
|00001b00| 64 69 61 67 5f 69 64 78 | 5d 2e 76 61 6c 20 3d 20 |diag_idx|].val = |
|00001b10| 70 69 76 6f 74 20 3d 20 | 73 71 72 74 28 74 6d 70 |pivot = |sqrt(tmp|
|00001b20| 32 29 3b 0a 0a 09 09 2f | 2a 20 6e 6f 77 20 73 65 |2);..../|* now se|
|00001b30| 74 20 74 68 65 20 6b 2d | 74 68 20 63 6f 6c 75 6d |t the k-|th colum|
|00001b40| 6e 20 6f 66 20 74 68 65 | 20 43 68 6f 6c 65 73 6b |n of the| Cholesk|
|00001b50| 79 20 66 61 63 74 6f 72 | 73 20 2a 2f 0a 09 09 2f |y factor|s */.../|
|00001b60| 2a 20 70 72 69 6e 74 66 | 28 22 6b 20 3d 20 25 64 |* printf|("k = %d|
|00001b70| 5c 6e 22 2c 6b 29 3b 20 | 2a 2f 0a 09 09 66 6f 72 |\n",k); |*/...for|
|00001b80| 20 28 20 3b 20 3b 20 29 | 09 2f 2a 20 66 6f 72 65 | ( ; ; )|./* fore|
|00001b90| 76 65 72 20 64 6f 2e 2e | 2e 20 2a 2f 0a 09 09 7b |ver do..|. */...{|
|00001ba0| 0a 09 09 20 20 20 20 2f | 2a 20 70 72 69 6e 74 66 |... /|* printf|
|00001bb0| 28 22 73 70 43 48 66 61 | 63 74 6f 72 28 29 20 2d |("spCHfa|ctor() -|
|00001bc0| 2d 20 63 68 65 63 6b 70 | 6f 69 6e 74 20 33 5c 6e |- checkp|oint 3\n|
|00001bd0| 22 29 3b 20 2a 2f 0a 09 | 09 20 20 20 20 2f 2a 20 |"); */..|. /* |
|00001be0| 66 69 6e 64 20 6e 65 78 | 74 20 72 6f 77 20 77 68 |find nex|t row wh|
|00001bf0| 65 72 65 20 73 6f 6d 65 | 74 68 69 6e 67 20 28 6e |ere some|thing (n|
|00001c00| 6f 6e 2d 74 72 69 76 69 | 61 6c 29 20 68 61 70 70 |on-trivi|al) happ|
|00001c10| 65 6e 73 0a 09 09 09 69 | 2e 65 2e 20 66 69 6e 64 |ens....i|.e. find|
|00001c20| 20 6d 69 6e 28 73 63 61 | 6e 5f 72 6f 77 29 20 2a | min(sca|n_row) *|
|00001c30| 2f 0a 09 09 20 20 20 20 | 2f 2a 20 70 72 69 6e 74 |/... |/* print|
|00001c40| 66 28 22 73 63 61 6e 5f | 72 6f 77 3a 20 22 29 3b |f("scan_|row: ");|
|00001c50| 20 2a 2f 0a 09 09 20 20 | 20 20 6d 69 6e 69 6d 20 | */... | minim |
|00001c60| 3d 20 6e 3b 0a 09 09 20 | 20 20 20 66 6f 72 20 28 |= n;... | for (|
|00001c70| 20 69 20 3d 20 30 3b 20 | 69 20 3c 20 6e 75 6d 5f | i = 0; |i < num_|
|00001c80| 73 63 61 6e 3b 20 69 2b | 2b 20 29 0a 09 09 20 20 |scan; i+|+ )... |
|00001c90| 20 20 7b 0a 09 09 09 74 | 6d 70 31 20 3d 20 73 63 | {....t|mp1 = sc|
|00001ca0| 61 6e 5f 72 6f 77 5b 69 | 5d 3b 0a 09 09 09 2f 2a |an_row[i|];..../*|
|00001cb0| 20 70 72 69 6e 74 66 28 | 22 25 64 20 22 2c 74 6d | printf(|"%d ",tm|
|00001cc0| 70 31 29 3b 20 2a 2f 0a | 09 09 09 6d 69 6e 69 6d |p1); */.|...minim|
|00001cd0| 20 3d 20 28 20 74 6d 70 | 31 20 3e 3d 20 30 20 26 | = ( tmp|1 >= 0 &|
|00001ce0| 26 20 74 6d 70 31 20 3c | 20 6d 69 6e 69 6d 20 29 |& tmp1 <| minim )|
|00001cf0| 20 3f 20 74 6d 70 31 20 | 3a 20 6d 69 6e 69 6d 3b | ? tmp1 |: minim;|
|00001d00| 0a 09 09 20 20 20 20 7d | 0a 09 09 20 20 20 20 2f |... }|... /|
|00001d10| 2a 20 70 72 69 6e 74 66 | 28 22 6d 69 6e 69 6d 20 |* printf|("minim |
|00001d20| 3d 20 25 64 5c 6e 22 2c | 6d 69 6e 69 6d 29 3b 20 |= %d\n",|minim); |
|00001d30| 2a 2f 0a 09 09 20 20 20 | 20 2f 2a 20 70 72 69 6e |*/... | /* prin|
|00001d40| 74 66 28 22 63 6f 6c 5f | 6c 69 73 74 3a 20 22 29 |tf("col_|list: ")|
|00001d50| 3b 20 2a 2f 0a 2f 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |; */./**|********|
|00001d60| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001d70| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001d80| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001d90| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 0a 09 09 20 |********|****... |
|00001da0| 20 20 20 66 6f 72 20 28 | 20 69 20 3d 20 30 3b 20 | for (| i = 0; |
|00001db0| 69 20 3c 20 6e 75 6d 5f | 73 63 61 6e 3b 20 69 2b |i < num_|scan; i+|
|00001dc0| 2b 20 29 0a 09 09 09 70 | 72 69 6e 74 66 28 22 25 |+ )....p|rintf("%|
|00001dd0| 64 20 22 2c 63 6f 6c 5f | 6c 69 73 74 5b 69 5d 29 |d ",col_|list[i])|
|00001de0| 3b 0a 09 09 20 20 20 20 | 70 72 69 6e 74 66 28 22 |;... |printf("|
|00001df0| 5c 6e 22 29 3b 0a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |\n");.**|********|
|00001e00| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001e10| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001e20| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00001e30| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2f 0a 0a 09 |********|****/...|
|00001e40| 09 20 20 20 20 69 66 20 | 28 20 6d 69 6e 69 6d 20 |. if |( minim |
|00001e50| 3e 3d 20 6e 20 29 0a 09 | 09 09 62 72 65 61 6b 3b |>= n )..|..break;|
|00001e60| 09 2f 2a 20 6e 6f 74 68 | 69 6e 67 20 6d 6f 72 65 |./* noth|ing more|
|00001e70| 20 74 6f 20 64 6f 20 66 | 6f 72 20 74 68 69 73 20 | to do f|or this |
|00001e80| 63 6f 6c 75 6d 6e 20 2a | 2f 0a 09 09 20 20 20 20 |column *|/... |
|00001e90| 72 5f 6f 70 20 3d 20 26 | 28 41 2d 3e 72 6f 77 5b |r_op = &|(A->row[|
|00001ea0| 6d 69 6e 69 6d 5d 29 3b | 0a 09 09 20 20 20 20 65 |minim]);|... e|
|00001eb0| 6c 74 5f 6f 70 20 3d 20 | 72 5f 6f 70 2d 3e 65 6c |lt_op = |r_op->el|
|00001ec0| 74 3b 0a 0a 09 09 20 20 | 20 20 2f 2a 20 73 65 74 |t;.... | /* set|
|00001ed0| 20 6e 65 78 74 20 65 6e | 74 72 79 20 69 6e 20 63 | next en|try in c|
|00001ee0| 6f 6c 75 6d 6e 20 6b 20 | 6f 66 20 43 68 6f 6c 65 |olumn k |of Chole|
|00001ef0| 73 6b 79 20 66 61 63 74 | 6f 72 73 20 2a 2f 0a 09 |sky fact|ors */..|
|00001f00| 09 20 20 20 20 69 64 78 | 20 3d 20 73 70 72 6f 77 |. idx| = sprow|
|00001f10| 5f 69 64 78 32 28 72 5f | 6f 70 2c 6b 2c 73 63 61 |_idx2(r_|op,k,sca|
|00001f20| 6e 5f 69 64 78 5b 6e 75 | 6d 5f 73 63 61 6e 2d 31 |n_idx[nu|m_scan-1|
|00001f30| 5d 29 3b 0a 09 09 20 20 | 20 20 69 66 20 28 20 69 |]);... | if ( i|
|00001f40| 64 78 20 3c 20 30 20 29 | 0a 09 09 20 20 20 20 7b |dx < 0 )|... {|
|00001f50| 09 2f 2a 20 66 69 6c 6c | 2d 69 6e 20 2a 2f 0a 09 |./* fill|-in */..|
|00001f60| 09 09 73 70 5f 73 65 74 | 5f 76 61 6c 28 41 2c 6d |..sp_set|_val(A,m|
|00001f70| 69 6e 69 6d 2c 6b 2c 0a | 09 09 09 09 09 2d 73 70 |inim,k,.|.....-sp|
|00001f80| 72 6f 77 5f 69 70 28 72 | 5f 70 69 76 2c 72 5f 6f |row_ip(r|_piv,r_o|
|00001f90| 70 2c 6b 29 2f 70 69 76 | 6f 74 29 3b 0a 09 09 09 |p,k)/piv|ot);....|
|00001fa0| 2f 2a 20 69 6e 20 63 61 | 73 65 20 61 20 72 65 61 |/* in ca|se a rea|
|00001fb0| 6c 6c 6f 63 28 29 20 68 | 61 73 20 6f 63 63 75 72 |lloc() h|as occur|
|00001fc0| 72 65 64 2e 2e 2e 20 2a | 2f 0a 09 09 09 65 6c 74 |red... *|/....elt|
|00001fd0| 5f 6f 70 20 3d 20 72 5f | 6f 70 2d 3e 65 6c 74 3b |_op = r_|op->elt;|
|00001fe0| 0a 09 09 09 2f 2a 20 6e | 6f 77 20 73 65 74 20 75 |..../* n|ow set u|
|00001ff0| 70 20 63 6f 6c 75 6d 6e | 20 61 63 63 65 73 73 20 |p column| access |
|00002000| 70 61 74 68 20 61 67 61 | 69 6e 20 2a 2f 0a 09 09 |path aga|in */...|
|00002010| 09 69 64 78 20 3d 20 73 | 70 72 6f 77 5f 69 64 78 |.idx = s|prow_idx|
|00002020| 32 28 72 5f 6f 70 2c 6b | 2c 2d 28 69 64 78 2b 32 |2(r_op,k|,-(idx+2|
|00002030| 29 29 3b 0a 09 09 09 74 | 6d 70 31 20 3d 20 6f 6c |));....t|mp1 = ol|
|00002040| 64 5f 65 6c 74 2d 3e 6e | 78 74 5f 72 6f 77 3b 0a |d_elt->n|xt_row;.|
|00002050| 09 09 09 6f 6c 64 5f 65 | 6c 74 2d 3e 6e 78 74 5f |...old_e|lt->nxt_|
|00002060| 72 6f 77 20 3d 20 6d 69 | 6e 69 6d 3b 0a 09 09 09 |row = mi|nim;....|
|00002070| 72 5f 6f 70 2d 3e 65 6c | 74 5b 69 64 78 5d 2e 6e |r_op->el|t[idx].n|
|00002080| 78 74 5f 72 6f 77 20 3d | 20 74 6d 70 31 3b 0a 09 |xt_row =| tmp1;..|
|00002090| 09 09 74 6d 70 31 20 3d | 20 6f 6c 64 5f 65 6c 74 |..tmp1 =| old_elt|
|000020a0| 2d 3e 6e 78 74 5f 69 64 | 78 3b 0a 09 09 09 6f 6c |->nxt_id|x;....ol|
|000020b0| 64 5f 65 6c 74 2d 3e 6e | 78 74 5f 69 64 78 20 3d |d_elt->n|xt_idx =|
|000020c0| 20 69 64 78 3b 0a 09 09 | 09 72 5f 6f 70 2d 3e 65 | idx;...|.r_op->e|
|000020d0| 6c 74 5b 69 64 78 5d 2e | 6e 78 74 5f 69 64 78 20 |lt[idx].|nxt_idx |
|000020e0| 3d 20 74 6d 70 31 3b 0a | 09 09 20 20 20 20 7d 0a |= tmp1;.|.. }.|
|000020f0| 09 09 20 20 20 20 65 6c | 73 65 0a 09 09 20 20 20 |.. el|se... |
|00002100| 20 20 20 20 20 65 6c 74 | 5f 6f 70 5b 69 64 78 5d | elt|_op[idx]|
|00002110| 2e 76 61 6c 20 3d 20 28 | 65 6c 74 5f 6f 70 5b 69 |.val = (|elt_op[i|
|00002120| 64 78 5d 2e 76 61 6c 20 | 2d 0a 09 09 09 09 73 70 |dx].val |-.....sp|
|00002130| 72 6f 77 5f 69 70 28 72 | 5f 70 69 76 2c 72 5f 6f |row_ip(r|_piv,r_o|
|00002140| 70 2c 6b 29 29 2f 70 69 | 76 6f 74 3b 0a 0a 09 09 |p,k))/pi|vot;....|
|00002150| 20 20 20 20 2f 2a 20 70 | 72 69 6e 74 66 28 22 73 | /* p|rintf("s|
|00002160| 70 43 48 66 61 63 74 6f | 72 28 29 20 2d 2d 20 63 |pCHfacto|r() -- c|
|00002170| 68 65 63 6b 70 6f 69 6e | 74 20 34 5c 6e 22 29 3b |heckpoin|t 4\n");|
|00002180| 20 2a 2f 0a 0a 09 09 20 | 20 20 20 2f 2a 20 72 65 | */.... | /* re|
|00002190| 6d 65 6d 62 65 72 20 63 | 75 72 72 65 6e 74 20 65 |member c|urrent e|
|000021a0| 6c 65 6d 65 6e 74 20 69 | 6e 20 63 6f 6c 75 6d 6e |lement i|n column|
|000021b0| 20 6b 20 66 6f 72 20 63 | 6f 6c 75 6d 6e 20 63 68 | k for c|olumn ch|
|000021c0| 61 69 6e 20 2a 2f 0a 09 | 09 20 20 20 20 69 64 78 |ain */..|. idx|
|000021d0| 20 3d 20 73 70 72 6f 77 | 5f 69 64 78 32 28 72 5f | = sprow|_idx2(r_|
|000021e0| 6f 70 2c 6b 2c 69 64 78 | 29 3b 0a 09 09 20 20 20 |op,k,idx|);... |
|000021f0| 20 6f 6c 64 5f 65 6c 74 | 20 3d 20 26 28 72 5f 6f | old_elt| = &(r_o|
|00002200| 70 2d 3e 65 6c 74 5b 69 | 64 78 5d 29 3b 0a 0a 09 |p->elt[i|dx]);...|
|00002210| 09 20 20 20 20 2f 2a 20 | 75 70 64 61 74 65 20 73 |. /* |update s|
|00002220| 63 61 6e 5f 72 6f 77 20 | 2a 2f 0a 09 09 20 20 20 |can_row |*/... |
|00002230| 20 2f 2a 20 70 72 69 6e | 74 66 28 22 73 70 43 48 | /* prin|tf("spCH|
|00002240| 66 61 63 74 6f 72 28 29 | 20 2d 2d 20 63 68 65 63 |factor()| -- chec|
|00002250| 6b 70 6f 69 6e 74 20 35 | 5c 6e 22 29 3b 20 2a 2f |kpoint 5|\n"); */|
|00002260| 0a 09 09 20 20 20 20 2f | 2a 20 70 72 69 6e 74 66 |... /|* printf|
|00002270| 28 22 6d 69 6e 69 6d 20 | 3d 20 25 64 5c 6e 22 2c |("minim |= %d\n",|
|00002280| 6d 69 6e 69 6d 29 3b 20 | 2a 2f 0a 09 09 20 20 20 |minim); |*/... |
|00002290| 20 66 6f 72 20 28 20 69 | 20 3d 20 30 3b 20 69 20 | for ( i| = 0; i |
|000022a0| 3c 20 6e 75 6d 5f 73 63 | 61 6e 3b 20 69 2b 2b 20 |< num_sc|an; i++ |
|000022b0| 29 0a 09 09 20 20 20 20 | 7b 0a 09 09 09 69 66 20 |)... |{....if |
|000022c0| 28 20 73 63 61 6e 5f 72 | 6f 77 5b 69 5d 2e 30 29 |( scan_r|ow[i].0)|
|000022d0| 3b 0a 09 09 74 31 32 20 | 3d 20 64 5f 76 65 5b 69 |;...t12 |= d_ve[i|
|000022e0| 5f 6d 61 78 2d 31 5d 2a | 66 5f 76 65 5b 69 5f 6d |_max-1]*|f_ve[i_m|
|000022f0| 61 78 2d 31 5d 3b 0a 09 | 09 74 32 32 20 3d 20 64 |ax-1];..|.t22 = d|
|00002300| 5f 76 65 5b 69 5f 6d 61 | 78 5d 2a 64 5f 76 65 5b |_ve[i_ma|x]*d_ve[|
|00002310| 69 5f 6d 61 78 5d 20 2b | 20 66 5f 76 65 5b 69 5f |i_max] +| f_ve[i_|
|00002320| 6d 61 78 2d 31 5d 2a 66 | 5f 76 65 5b 69 5f 6d 61 |max-1]*f|_ve[i_ma|
|00002330| 78 2d 31 5d 3b 0a 09 09 | 2f 2a 20 75 73 65 20 65 |x-1];...|/* use e|
|00002340| 2d 76 61 6c 20 6f 66 20 | 5b 5b 74 31 31 2c 74 31 |-val of |[[t11,t1|
|00002350| 32 5d 2c 5b 74 31 32 2c | 74 32 32 5d 5d 20 6d 61 |2],[t12,|t22]] ma|
|00002360| 74 72 69 78 0a 09 09 09 | 09 63 6c 6f 73 65 73 74 |trix....|.closest|
|00002370| 20 74 6f 20 74 32 32 20 | 2a 2f 0a 09 09 64 69 66 | to t22 |*/...dif|
|00002380| 66 20 3d 20 28 74 31 31 | 2d 74 32 32 29 2f 32 3b |f = (t11|-t22)/2;|
|00002390| 0a 09 09 73 68 69 66 74 | 20 3d 20 74 32 32 20 2d |...shift| = t22 -|
|000023a0| 20 74 31 32 2a 74 31 32 | 2f 28 64 69 66 66 20 2b | t12*t12|/(diff +|
|000023b0| 0a 09 09 09 73 67 6e 28 | 64 69 66 66 29 2a 73 71 |....sgn(|diff)*sq|
|000023c0| 72 74 28 64 69 66 66 2a | 64 69 66 66 2b 74 31 32 |rt(diff*|diff+t12|
|000023d0| 2a 74 31 32 29 29 3b 0a | 0a 09 09 2f 2a 20 69 6e |*t12));.|.../* in|
|000023e0| 69 74 69 61 6c 20 47 69 | 76 65 6e 73 27 20 72 6f |itial Gi|vens' ro|
|000023f0| 74 61 74 69 6f 6e 20 2a | 2f 0a 09 09 67 69 76 65 |tation *|/...give|
|00002400| 6e 73 28 64 5f 76 65 5b | 69 5f 6d 69 6e 5d 2a 64 |ns(d_ve[|i_min]*d|
|00002410| 5f 76 65 5b 69 5f 6d 69 | 6e 5d 2d 73 68 69 66 74 |_ve[i_mi|n]-shift|
|00002420| 2c 0a 09 09 09 64 5f 76 | 65 5b 69 5f 6d 69 6e 5d |,....d_v|e[i_min]|
|00002430| 2a 66 5f 76 65 5b 69 5f | 6d 69 6e 5d 2c 20 26 63 |*f_ve[i_|min], &c|
|00002440| 2c 20 26 73 29 3b 0a 0a | 09 09 2f 2a 20 64 6f 20 |, &s);..|../* do |
|00002450| 69 6e 69 74 69 61 6c 20 | 47 69 76 65 6e 73 27 20 |initial |Givens' |
|00002460| 72 6f 74 61 74 69 6f 6e | 73 20 2a 2f 0a 09 09 64 |rotation|s */...d|
|00002470| 5f 74 6d 70 20 20 20 20 | 20 20 20 20 20 3d 20 63 |_tmp | = c|
|00002480| 2a 64 5f 76 65 5b 69 5f | 6d 69 6e 5d 20 2b 20 73 |*d_ve[i_|min] + s|
|00002490| 2a 66 5f 76 65 5b 69 5f | 6d 69 6e 5d 3b 0a 09 09 |*f_ve[i_|min];...|
|000024a0| 66 5f 76 65 5b 69 5f 6d | 69 6e 5d 20 20 20 3d 20 |f_ve[i_m|in] = |
|000024b0| 63 2a 66 5f 76 65 5b 69 | 5f 6d 69 6e 5d 20 2d 20 |c*f_ve[i|_min] - |
|000024c0| 73 2a 64 5f 76 65 5b 69 | 5f 6d 69 6e 5d 3b 0a 09 |s*d_ve[i|_min];..|
|000024d0| 09 64 5f 76 65 5b 69 5f | 6d 69 6e 5d 20 20 20 3d |.d_ve[i_|min] =|
|000024e0| 20 64 5f 74 6d 70 3b 0a | 09 09 7a 20 20 20 20 20 | d_tmp;.|..z |
|000024f0| 20 20 20 20 20 20 20 20 | 3d 20 73 2a 64 5f 76 65 | |= s*d_ve|
|00002500| 5b 69 5f 6d 69 6e 2b 31 | 5d 3b 0a 09 09 64 5f 76 |[i_min+1|];...d_v|
|00002510| 65 5b 69 5f 6d 69 6e 2b | 31 5d 20 3d 20 63 2a 64 |e[i_min+|1] = c*d|
|00002520| 5f 76 65 5b 69 5f 6d 69 | 6e 2b 31 5d 3b 0a 09 09 |_ve[i_mi|n+1];...|
|00002530| 69 66 20 28 20 56 20 29 | 0a 09 09 20 20 20 20 72 |if ( V )|... r|
|00002540| 6f 74 5f 72 6f 77 73 28 | 56 2c 69 5f 6d 69 6e 2c |ot_rows(|V,i_min,|
|00002550| 69 5f 6d 69 6e 2b 31 2c | 63 2c 73 2c 56 29 3b 0a |i_min+1,|c,s,V);.|
|00002560| 09 09 2f 2a 20 32 6e 64 | 20 47 69 76 65 6e 73 27 |../* 2nd| Givens'|
|00002570| 20 72 6f 74 61 74 69 6f | 6e 20 2a 2f 0a 09 09 67 | rotatio|n */...g|
|00002580| 69 76 65 6e 73 28 64 5f | 76 65 5b 69 5f 6d 69 6e |ivens(d_|ve[i_min|
|00002590| 5d 2c 7a 2c 20 26 63 2c | 20 26 73 29 3b 0a 09 09 |],z, &c,| &s);...|
|000025a0| 64 5f 76 65 5b 69 5f 6d | 69 6e 5d 20 20 20 3d 20 |d_ve[i_m|in] = |
|000025b0| 63 2a 64 5f 76 65 5b 69 | 5f 6d 69 6e 5d 20 2b 20 |c*d_ve[i|_min] + |
|000025c0| 73 2a 7a 3b 0a 09 09 64 | 5f 74 6d 70 20 20 20 20 |s*z;...d|_tmp |
|000025d0| 20 20 20 20 20 3d 20 63 | 2a 64 5f 76 65 5b 69 5f | = c|*d_ve[i_|
|000025e0| 6d 69 6e 2b 31 5d 20 2d | 20 73 2a 66 5f 76 65 5b |min+1] -| s*f_ve[|
|000025f0| 69 5f 6d 69 6e 5d 3b 0a | 09 09 66 5f 76 65 5b 69 |i_min];.|..f_ve[i|
|00002600| 5f 6d 69 6e 5d 20 20 20 | 3d 20 73 2a 64 5f 76 65 |_min] |= s*d_ve|
|00002610| 5b 69 5f 6d 69 6e 2b 31 | 5d 20 2b 20 63 2a 66 5f |[i_min+1|] + c*f_|
|00002620| 76 65 5b 69 5f 6d 69 6e | 5d 3b 0a 09 09 64 5f 76 |ve[i_min|];...d_v|
|00002630| 65 5b 69 5f 6d 69 6e 2b | 31 5d 20 3d 20 64 5f 74 |e[i_min+|1] = d_t|
|00002640| 6d 70 3b 0a 09 09 69 66 | 20 28 20 69 5f 6d 69 6e |mp;...if| ( i_min|
|00002650| 2b 31 20 3c 20 69 5f 6d | 61 78 20 29 0a 09 09 7b |+1 < i_m|ax )...{|
|00002660| 0a 09 09 20 20 20 20 7a | 20 20 20 20 20 20 20 20 |... z| |
|00002670| 20 20 20 20 20 3d 20 73 | 2a 66 5f 76 65 5b 69 5f | = s|*f_ve[i_|
|00002680| 6d 69 6e 2b 31 5d 3b 0a | 09 09 20 20 20 20 66 5f |min+1];.|.. f_|
|00002690| 76 65 5b 69 5f 6d 69 6e | 2b 31 5d 20 3d 20 63 2a |ve[i_min|+1] = c*|
|000026a0| 66 5f 76 65 5b 69 5f 6d | 69 6e 2b 31 5d 3b 0a 09 |f_ve[i_m|in+1];..|
|000026b0| 09 7d 0a 09 09 69 66 20 | 28 20 55 20 29 0a 09 09 |.}...if |( U )...|
|000026c0| 20 20 20 20 72 6f 74 5f | 72 6f 77 73 28 55 2c 69 | rot_|rows(U,i|
|000026d0| 5f 6d 69 6e 2c 69 5f 6d | 69 6e 2b 31 2c 63 2c 73 |_min,i_m|in+1,c,s|
|000026e0| 2c 55 29 3b 0a 0a 09 09 | 66 6f 72 20 28 20 69 20 |,U);....|for ( i |
|000026f0| 3d 20 69 5f 6d 69 6e 2b | 31 3b 20 69 20 3c 20 69 |= i_min+|1; i < i|
|00002700| 5f 6d 61 78 3b 20 69 2b | 2b 20 29 0a 09 09 7b 0a |_max; i+|+ )...{.|
|00002710| 09 09 20 20 20 20 2f 2a | 20 67 65 74 20 47 69 76 |.. /*| get Giv|
|00002720| 65 6e 73 27 20 72 6f 74 | 61 74 69 6f 6e 20 66 6f |ens' rot|ation fo|
|00002730| 72 20 7a 65 72 6f 69 6e | 67 20 7a 20 2a 2f 0a 09 |r zeroin|g z */..|
|00002740| 09 20 20 20 20 67 69 76 | 65 6e 73 28 66 5f 76 65 |. giv|ens(f_ve|
|00002750| 5b 69 2d 31 5d 2c 7a 2c | 20 26 63 2c 20 26 73 29 |[i-1],z,| &c, &s)|
|00002760| 3b 0a 09 09 20 20 20 20 | 66 5f 76 65 5b 69 2d 31 |;... |f_ve[i-1|
|00002770| 5d 20 3d 20 63 2a 66 5f | 76 65 5b 69 2d 31 5d 20 |] = c*f_|ve[i-1] |
|00002780| 2b 20 73 2a 7a 3b 0a 09 | 09 20 20 20 20 64 5f 74 |+ s*z;..|. d_t|
|00002790| 6d 70 20 20 20 20 20 3d | 20 63 2a 64 5f 76 65 5b |mp =| c*d_ve[|
|000027a0| 69 5d 20 2b 20 73 2a 66 | 5f 76 65 5b 69 5d 3b 0a |i] + s*f|_ve[i];.|
|000027b0| 09 09 20 20 20 20 66 5f | 76 65 5b 69 5d 20 20 20 |.. f_|ve[i] |
|000027c0| 3d 20 63 2a 66 5f 76 65 | 5b 69 5d 20 2d 20 73 2a |= c*f_ve|[i] - s*|
|000027d0| 64 5f 76 65 5b 69 5d 3b | 0a 09 09 20 20 20 20 64 |d_ve[i];|... d|
|000027e0| 5f 76 65 5b 69 5d 20 20 | 20 3d 20 64 5f 74 6d 70 |_ve[i] | = d_tmp|
|000027f0| 3b 0a 09 09 20 20 20 20 | 7a 20 20 20 20 20 20 20 |;... |z |
|00002800| 20 20 3d 20 73 2a 64 5f | 76 65 5b 69 2b 31 5d 3b | = s*d_|ve[i+1];|
|00002810| 0a 09 09 20 20 20 20 64 | 5f 76 65 5b 69 2b 31 5d |... d|_ve[i+1]|
|00002820| 20 3d 20 63 2a 64 5f 76 | 65 5b 69 2b 31 5d 3b 0a | = c*d_v|e[i+1];.|
|00002830| 09 09 20 20 20 20 69 66 | 20 28 20 56 20 29 0a 09 |.. if| ( V )..|
|00002840| 09 09 72 6f 74 5f 72 6f | 77 73 28 56 2c 69 2c 69 |..rot_ro|ws(V,i,i|
|00002850| 2b 31 2c 63 2c 73 2c 56 | 29 3b 0a 09 09 20 20 20 |+1,c,s,V|);... |
|00002860| 20 2f 2a 20 67 65 74 20 | 32 6e 64 20 47 69 76 65 | /* get |2nd Give|
|00002870| 6e 73 27 20 72 6f 74 61 | 74 69 6f 6e 20 2a 2f 0a |ns' rota|tion */.|
|00002880| 09 09 20 20 20 20 67 69 | 76 65 6e 73 28 64 5f 76 |.. gi|vens(d_v|
|00002890| 65 5b 69 5d 2c 7a 2c 20 | 26 63 2c 20 26 73 29 3b |e[i],z, |&c, &s);|
|000028a0| 0a 09 09 20 20 20 20 64 | 5f 76 65 5b 69 5d 20 20 |... d|_ve[i] |
|000028b0| 20 3d 20 63 2a 64 5f 76 | 65 5b 69 5d 20 2b 20 73 | = c*d_v|e[i] + s|
|000028c0| 2a 7a 3b 0a 09 09 20 20 | 20 20 64 5f 74 6d 70 20 |*z;... | d_tmp |
|000028d0| 20 20 20 20 3d 20 63 2a | 64 5f 76 65 5b 69 2b 31 | = c*|d_ve[i+1|
|000028e0| 5d 20 2d 20 73 2a 66 5f | 76 65 5b 69 5d 3b 0a 09 |] - s*f_|ve[i];..|
|000028f0| 09 20 20 20 20 66 5f 76 | 65 5b 69 5d 20 20 20 3d |. f_v|e[i] =|
|00002900| 20 63 2a 66 5f 76 65 5b | 69 5d 20 2b 20 73 2a 64 | c*f_ve[|i] + s*d|
|00002910| 5f 76 65 5b 69 2b 31 5d | 3b 0a 09 09 20 20 20 20 |_ve[i+1]|;... |
|00002920| 64 5f 76 65 5b 69 2b 31 | 5d 20 3d 20 64 5f 74 6d |d_ve[i+1|] = d_tm|
|00002930| 70 3b 0a 09 09 20 20 20 | 20 69 66 20 28 20 69 2b |p;... | if ( i+|
|00002940| 31 20 3c 20 69 5f 6d 61 | 78 20 29 0a 09 09 20 20 |1 < i_ma|x )... |
|00002950| 20 20 7b 0a 09 09 09 7a | 20 20 20 20 20 20 20 20 | {....z| |
|00002960| 20 3d 20 73 2a 66 5f 76 | 65 5b 69 2b 31 5d 3b 0a | = s*f_v|e[i+1];.|
|00002970| 09 09 09 66 5f 76 65 5b | 69 2b 31 5d 20 3d 20 63 |...f_ve[|i+1] = c|
|00002980| 2a 66 5f 76 65 5b 69 2b | 31 5d 3b 0a 09 09 20 20 |*f_ve[i+|1];... |
|00002990| 20 20 7d 0a 09 09 20 20 | 20 20 69 66 20 28 20 55 | }... | if ( U|
|000029a0| 20 29 0a 09 09 09 72 6f | 74 5f 72 6f 77 73 28 55 | )....ro|t_rows(U|
|000029b0| 2c 69 2c 69 2b 31 2c 63 | 2c 73 2c 55 29 3b 0a 09 |,i,i+1,c|,s,U);..|
|000029c0| 09 7d 0a 09 09 2f 2a 20 | 73 68 6f 75 6c 64 20 6d |.}.../* |should m|
|000029d0| 61 74 72 69 78 20 62 65 | 20 73 70 6c 69 74 3f 20 |atrix be| split? |
|000029e0| 2a 2f 0a 09 09 66 6f 72 | 20 28 20 69 20 3d 20 69 |*/...for| ( i = i|
|000029f0| 5f 6d 69 6e 3b 20 69 20 | 3c 20 69 5f 6d 61 78 3b |_min; i |< i_max;|
|00002a00| 20 69 2b 2b 20 29 0a 09 | 09 20 20 20 20 69 66 20 | i++ )..|. if |
|00002a10| 28 20 66 61 62 73 28 66 | 5f 76 65 5b 69 5d 29 20 |( fabs(f|_ve[i]) |
|00002a20| 3c 0a 09 09 09 09 4d 41 | 43 48 45 50 53 2a 28 66 |<.....MA|CHEPS*(f|
|00002a30| 61 62 73 28 64 5f 76 65 | 5b 69 5d 29 2b 66 61 62 |abs(d_ve|[i])+fab|
|00002a40| 73 28 64 5f 76 65 5b 69 | 2b 31 5d 29 29 20 29 0a |s(d_ve[i|+1])) ).|
|00002a50| 09 09 20 20 20 20 7b 0a | 09 09 09 73 70 6c 69 74 |.. {.|...split|
|00002a60| 20 3d 20 54 52 55 45 3b | 0a 09 09 09 66 5f 76 65 | = TRUE;|....f_ve|
|00002a70| 5b 69 5d 20 3d 20 30 2e | 30 3b 0a 09 09 20 20 20 |[i] = 0.|0;... |
|00002a80| 20 7d 0a 09 09 20 20 20 | 20 65 6c 73 65 20 69 66 | }... | else if|
|00002a90| 20 28 20 66 61 62 73 28 | 64 5f 76 65 5b 69 5d 29 | ( fabs(|d_ve[i])|
|00002aa0| 20 3c 20 4d 41 43 48 45 | 50 53 2a 73 69 7a 65 20 | < MACHE|PS*size |
|00002ab0| 29 0a 09 09 20 20 20 20 | 7b 0a 09 09 09 73 70 6c |)... |{....spl|
|00002ac0| 69 74 20 3d 20 54 52 55 | 45 3b 0a 09 09 09 64 5f |it = TRU|E;....d_|
|00002ad0| 76 65 5b 69 5d 20 3d 20 | 30 2e 30 3b 0a 09 09 20 |ve[i] = |0.0;... |
|00002ae0| 20 20 20 7d 0a 09 09 20 | 20 20 20 2f 2a 20 70 72 | }... | /* pr|
|00002af0| 69 6e 74 66 28 22 62 69 | 73 76 64 3a 20 64 20 3d |intf("bi|svd: d =|
|00002b00| 5c 6e 22 29 3b 09 76 5f | 6f 75 74 70 75 74 28 64 |\n");.v_|output(d|
|00002b10| 29 3b 20 2a 2f 0a 09 09 | 20 20 20 20 2f 2a 20 70 |); */...| /* p|
|00002b20| 72 69 6e 74 66 28 22 62 | 69 73 76 64 3a 20 66 20 |rintf("b|isvd: f |
|00002b30| 3d 20 5c 6e 22 29 3b 09 | 76 5f 6f 75 74 70 75 74 |= \n");.|v_output|
|00002b40| 28 66 29 3b 20 2a 2f 0a | 09 09 7d 0a 09 7d 0a 09 |(f); */.|..}..}..|
|00002b50| 66 69 78 73 76 64 28 64 | 2c 55 2c 56 29 3b 0a 0a |fixsvd(d|,U,V);..|
|00002b60| 09 72 65 74 75 72 6e 20 | 64 3b 0a 7d 0a 0a 2f 2a |.return |d;.}../*|
|00002b70| 20 62 69 66 61 63 74 6f | 72 20 2d 2d 20 70 65 72 | bifacto|r -- per|
|00002b80| 66 6f 72 6d 20 70 72 65 | 6c 69 6d 69 6e 61 72 79 |form pre|liminary|
|00002b90| 20 66 61 63 74 6f 72 69 | 73 61 74 69 6f 6e 20 66 | factori|sation f|
|00002ba0| 6f 72 20 62 69 73 76 64 | 0a 09 2d 2d 20 75 70 64 |or bisvd|..-- upd|
|00002bb0| 61 74 65 73 20 55 20 61 | 6e 64 2f 6f 72 20 56 2c |ates U a|nd/or V,|
|00002bc0| 20 77 68 69 63 68 20 65 | 76 65 72 20 69 73 20 6e | which e|ver is n|
|00002bd0| 6f 74 20 4e 55 4c 4c 20 | 2a 2f 0a 4d 41 54 09 2a |ot NULL |*/.MAT.*|
|00002be0| 62 69 66 61 63 74 6f 72 | 28 41 2c 55 2c 56 29 0a |bifactor|(A,U,V).|
|00002bf0| 4d 41 54 09 2a 41 2c 20 | 2a 55 2c 20 2a 56 3b 0a |MAT.*A, |*U, *V;.|
|00002c00| 7b 0a 09 69 6e 74 09 6b | 3b 0a 09 73 74 61 74 69 |{..int.k|;..stati|
|00002c10| 63 20 56 45 43 09 | |c VEC. | |
+--------+-------------------------+-------------------------+--------+--------+