

| 修改的部分 | 原本的LLL | integral LLL |
| Gram–Schmidt正交化 | for(i從1到m) {for(j從1到i) {\( \displaystyle \mu_{ij}=\frac{v_i \cdot v_j^*}{v_j \cdot v_j} \) \( \displaystyle v_i=v_i-\sum_{j=1}^{i-1}\mu_{ij}\cdot v_j^* \) } } | \( d_0=1 \) //分母初始值是1 for(i從1到m) {for(j從1到i-1) {\( \mu_{ij}=v_i \cdot v_j^* \) //沒有除\( v_j \cdot v_j \)了 \( \displaystyle v_{i}^*=\frac{d_j \cdot v_i^*-\mu_{ij}\cdot v_j^*}{d_{j-1}} \) } \( \mu_{ii}=v_{i}\cdot v_i^* \) \( \displaystyle d_{i}=\frac{v_i^* \cdot v_i^*}{d_{i-1}} \) //計算下一個分母 } |
| Size condition | \( \displaystyle |\; u_{ij} |\; \le \frac{1}{2} \) \( 1 \le j<i \le n \) | \( \displaystyle \Bigg\vert\; \frac{u_{ij}}{d_j} \Bigg\vert\; \le \frac{1}{2} \) \( 1 \le j<i \le n \) |
| Lovász condition | \( \displaystyle \Vert\; v_i^* \Vert\;^2 \ge (\frac{3}{4}-\mu_{i,i-1}^2)\Vert\; v_{i-1}^* \Vert\;^2 \) \( 1<i \le n \) | \( 4d_{i-2}\cdot d_{i} \ge 3d_{i-1}^2-4u_{i,i-1}^2 \) \( 1<i \le n \) |
| maxima的go無法跳出while do迴圈 | maxima和c/c++的round執行結果不一致 |
| 虛擬碼的Goto 99雖然maxima也有對應的go指令 但實際使用時go無法從while do跳出來(出現do loop: 'go' not within 'block': 99錯誤訊息) MLLL():=block( x:1, 99, while x<5 do (x:x+1, if x=3 then (go(99)) else (print("x=",x)) ) )$ MLLL(); \(x=2\) do loop: 'go' not within 'block': 99 #0: MLLL() -- an error. To debug this try: debugmode(true); | maxima的\(round(-2.5)=-2\) c/c++的\(round(-2.5)=-3\) 在第二個範例\(\left[\matrix{4&-1\cr5&4\cr-2&-4}\right]\) 以maxima的round執行結果\(\left[\matrix{-1&1\cr2&1\cr0&0}\right]\) 和書上執行結果不一致\(\left[\matrix{-1&1\cr1&2\cr0&0}\right]\) |



| \(b_1\) | \(b_2\) | \(b_3\) | Place |
\(\matrix{36\cr36\cr12\cr12\cr12\cr12\cr4\cr4}\) | \(\matrix{84\cr12\cr36\cr0\cr100\cr4\cr12\cr0}\) | \(\matrix{100\cr100\cr100\cr100\cr0\cr0\cr0\cr0}\) | \(\matrix{ \cr2\cr5\cr2\cr4\cr2\cr5\cr4}\) |
| \(b_1\) | \(b_2\) | \(b_3\) | Place |
\(\matrix{(4, -1)\cr(4, -1)\cr(4, -1)\cr(4, -1)\cr(-1, 1)\cr(-1, 1)\cr(-1, 1)\cr(-1, 1)\cr(-1, 1)\cr(-1, 1)}\) | \(\matrix{(5, 4)\cr(1, 5)\cr(1, 5)\cr(-1, 1)\cr(4, -1)\cr(1, 2)\cr(1, 2)\cr(-1, 1)\cr(0, 0)\cr(1, 2)}\) | \(\matrix{(-2, -4)\cr(-2, -4)\cr(-1, 1)\cr(1, 5)\cr(1, 5)\cr(1, 5)\cr(-1, 1)\cr(1, 2)\cr(1, 2)\cr(0, 0)}\) | \(\matrix{ \cr2\cr2\cr5\cr5\cr2\cr2\cr5\cr2\cr4}\) |
| \(b_1\) | \(b_2\) | \(b_3\) | Place |
\(\matrix{(48, -124, 292)\cr(48, -124, 292)\cr(123, -18, -151)\cr(123, -18, -151)\cr(123, -18, -151)\cr(123, -18, -151)\cr(51, -30, 5)\cr(51, -30, 5)\cr(51, -30, 5)\cr(51, -30, 5)\cr(51, -30, 5)\cr(-12, 20, -40)\cr(-12, 20, -40)\cr(-12, 20, -40)\cr(-12, 20, -40)\cr(-12, 20, -40)\cr(18, -8, -6)\cr(18, -8, -6)\cr(18, -8, -6)\cr(18, -8, -6)\cr(18, -8, -6)\cr(18, -8, -6)\cr(18, -8, -6)}\) | \(\matrix{(171, -142, 141)\cr(123, -18, -151)\cr(48, -124, 292)\cr(171, -142, 141)\cr(171, -142, 141)\cr(51, -30, 5)\cr(123, -18, -151)\cr(21, 42, -161)\cr(21, 42, -161)\cr(192, -100, -20)\cr(-12, 20, -40)\cr(51, -30, 5)\cr(39, -10, -35)\cr(39, -10, -35)\cr(-18, 52, -126)\cr(18, -8, -6)\cr(-12, 20, -40)\cr(39, -10, -35)\cr(3, 6, -23)\cr(3, 6, -23)\cr(-18, 8, 6)\cr(0, 0, 0)\cr(3, 6, -23)}\) | \(\matrix{(-291, 254, -277)\cr(-291, 254, -277)\cr(-291, 254, -277)\cr(-291, 254, -277)\cr(51, -30, 5)\cr(171, -142, 141)\cr(171, -142, 141)\cr(171, -142, 141)\cr(192, -100, -20)\cr(21, 42, -161)\cr(21, 42, -161)\cr(21, 42, -161)\cr(21, 42, -161)\cr(-18, 52, -126)\cr(39, -10, -35)\cr(39, -10, -35)\cr(39, -10, -35)\cr(-12, 20, -40)\cr(-12, 20, -40)\cr(-18, 8, 6)\cr(3, 6, -23)\cr(3, 6, -23)\cr(0, 0, 0)}\) | \(\matrix{ \cr2\cr5\cr2\cr2\cr5\cr5\cr2\cr2\cr5\cr2\cr5\cr2\cr2\cr5\cr2\cr5\cr5\cr2\cr2\cr5\cr2\cr4}\) |
操作1:大小約化(Size Reduction) | 操作2:兩列交換(Swap) | 操作3:遇到零向量 |
| 將某一列減去另一列的整數倍(\(b_i\leftarrow b_i-r\cdot b_j\))。 將\(H\)對應的某一列減去另一列的整數倍(\(H_i\leftarrow H_i-r\cdot H_j\)) | 當不滿足Lovász條件時,交換相鄰的兩列。 將\(H\)交換對應相鄰的兩列。 | 將零向量推至矩陣底部,\(H\)對應的列也推至矩陣底部。 |
方法 | 範例 |
問題敘述 | |
| 假設\(A\)是一個\(m\times n\)矩陣,\(b\)則是一個\(m \times 1\)的行向量,要找出\(n\times 1\)整數解\(x\),滿足\(Ax=b\)。 | \(A=\left[\matrix{-8&5&7&-7&3&-7&4&9&-6\cr 1&-2&0&-10&-4&3&8&5&2\cr -7&3&6&5&1&2&5&0&-6\cr -9&-3&4&9&-2&6&1&-10&-9\cr -2&1&-5&-4&3&7&-8&-8&-5\cr -1&1&-8&4&-8&-1&-9&8&6}\right]\),\(b=\left[\matrix{3\cr-1\cr-1\cr-7\cr9\cr8}\right]\) 求整數解\(x\)滿足\(Ax=b\)。 |
步驟1:將原問題轉換成求整數線性關係,計算\([A|b]^T\) | |
| \(A\)矩陣由\(n\)個長度為\(m\)的行向量\(A_1,A_2,\ldots,A_n\)組成,\(b\)則是一個\(m \times 1\)的行向量。 方程組\(Ax=b\)可以展開寫成行向量的線性組合形式\(x_1 A_1+x_2 A_2+\ldots+x_n A_n=b\) 移項後可得\(x_1 A_1+x_2 A_2+\ldots+x_n A_n-1 \cdot b = 0\), 求解\(Ax=b\)其實等同於去尋找一組係數\((x_1,x_2,\ldots,x_n,-1)\),使得這\(n+1\)個向量的線性組合結果為零向量。 將矩陣\(A\)和矩陣\(b\)結合在一起,新矩陣大小為\(m\times (n+1)\),其中前\(n\)行是\(A\)的行向量,最後一行是\(b\)。 MLLL是以列運算進行Lattice化簡,所以要將新矩陣轉置,就是在對\(A_1,A_2,\ldots,A_n\)和\(b\)進行線性組合。 | \([A|b]^T=\left[\matrix{-8&1&-7&-9&-2&-1\cr 5&-2&3&-3&1&1\cr 7&0&6&4&-5&-8\cr -7&-10&5&9&-4&4\cr 3&-4&1&-2&3&-8\cr -7&3&2&6&7&-1\cr 4&8&5&1&-8&-9\cr 9&5&0&-10&-8&8\cr -6&2&-6&-9&-5&6\cr 3&-1&-1&-7&9&8}\right]\) |
步驟2:將\([A|b]^T\)利用MLLL化簡,得到轉換矩陣\(H\) | |
| MLLL執行完後產生化簡矩陣\(R\)和轉換矩陣\(H\),滿足\(H\cdot [A|b]^T=R\),其中\(H\)記錄了所有列變換步驟。 | \([R,H]\) :MLLL_H\(([A|b]^T)\) \(R=\left[\matrix{0&0&-1&0&0&0\cr 1&0&0&0&0&0\cr 0&0&0&-1&0&0\cr 0&1&0&0&0&0\cr 0&0&0&0&0&1\cr 0&0&0&0&1&0\cr 0&0&0&0&0&0\cr 0&0&0&0&0&0\cr 0&0&0&0&0&0\cr 0&0&0&0&0&0}\right]\) |
| \(H=\left[\matrix{-37818&-19676&-85649&14204&43543&-24334&48460&0&0&0\cr -189557&-98622&-429305&71196&218253&-121971&242900&0&-1&0\cr 214507&111603&485811&-80567&-246980&138025&-274871&0&1&0\cr -438519&-228151&-993149&164704&504904&-282166&561922&0&-2&0\cr 440143&228996&996827&-165314&-506774&283211&-564003&0&2&0\cr 622969&324116&1410888&-233982&-717277&400851&-798278&0&3&0\cr 3216146&1673283&7283868&-1207958&-3703021&2069439&-4121200&1&17&0\cr -1489972&-775197&-3374459&559621&1715531&-958726&1909263&0&-7&0\cr -31640&-16463&-71657&11884&36430&-20359&40544&0&0&1\cr -86456&-44981&-195803&32472&99544&-55630&110785&0&0&0}\right]\) | |
步驟3:求得整數解\(x\) | |
| 如果\(Ax=b\)存在整數解,在化簡矩陣\(R\)中,必然會出現某一列全為0(因為\(x_1A_1+x_2A_2+\ldots+x_nA_n-b=0\))。 從\(R\)矩陣最後一列開始,符合第\(i\)列全為\(0\),\(H\)矩陣第\(i\)列第\(n+1\)行為\(\pm1\) (1)該值為\(+1\),則整數解\(x\)為\(H\)矩陣第\(i\)行前\(n\)個數字加上負號。 (2)該值為\(-1\),則整數解\(x\)為\(H\)矩陣第\(i\)行前\(n\)個數字。 | \(R\)矩陣第9行全為\(0\),\(H\)矩陣第9行第\(10\)行為\(+1\) \(H[9]=\left[\matrix{-31640&-16463&-71657&11884&36430&-20359&40544&0&0&1}\right]\) 整數解\(x\)為\(H\)矩陣第\(9\)行前\(9\)個數字加上負號 \(x=\left[\matrix{31640&16463&71657&-11884&-36430&20359&-40544&0&0}\right]\) |


| 原本的Gauss/Lagrange方法 | 本論文的Gauss/Lagrange方法 |
| 1 \( do\{\; \) 2 \(if(v_1的長度>v_2的長度)\) 3 \( \{\; v_1和v_2兩個向量交換 \}\; \) 4 \(t=\lfloor\; v_1.v_2/v_1.v_1 \rceil\; \) 5 \(if(t!=0)\) 6 \(\{\; v_2=v_2−tv_1; \}\;\) 7 \(\}\;\) 8 \(while(t!=0);\) | 1 \(G=V^TV\) 2 \(U=I_2\) 3 \( if \) \(G(1,1)<G(2,2)\) 4 \( swap \) \(G(:,1)\) \(and\) \(G(:,2)\) 5 \( swap \) \(G(1,: )\) \(and\) \(G(2,: )\) 6 \( swap \) \(Z(:,1)\) \(and\) \(G(:,2)\) 7 \(end\) 8 9 \(while\) \(G(1,1)>G(2,2)\) 10 \(q=\lfloor\; G(1,2)/G(2,2) \rceil\;\) 11 \(G(:,2)=G(:,2)-q \times G(:,1)\) 12 \(G(2,: )=G(2,: )-q \times G(1,: )\) 13 \(U(:,2)=U(:,2)-q \times U(:,1)\) 14 \(end\) 15 16 \(return\) \(U\) |
| Jacobi方法以列計算 | Jacobi方法以行計算 |
| 1 \(G=VV^T\) 2 \(U=I_n\) 3 4 \(while\) \(not\) \(all\) \(pairs\) \((v_i,v_j)\) \(satisfy\) \( \Vert\; v_i \Vert\; \le \Vert\; v_j \Vert\; \) and \( \displaystyle |\; v_i v_j |\; \le \frac{\Vert\; v_i \Vert\;^2}{2} \) 5 \(for\) \(i=1\) \(to\) \(n-1\) 6 \(for\) \(j=i+1\) \(to\) \(n\) 7 \(q=G(i,j)/G(i,i)\) 8 \(if\) \(|\; q |\;>1/2\) 9 \(G(:,j)=G(:,j)-\lfloor\; q \rceil\; \times G(:,i)\) 10 \(G(j,: )=G(j,: )-\lfloor\; q \rceil\; \times G(i,: )\) 11 \(U(j,: )=U(j,: )-\lfloor\; q \rceil\; \times U(i,: )\) 12 \(end\) 13 \(if\) \(G(i,i)>G(j,j)\) 14 \(swap\) \(G(:,i)\) \(and\) \(G(:,j)\) 15 \(swap\) \(G(i,: )\) \(and\) \(G(j,: )\) 16 \(swap\) \(U(i,: )\) \(and\) \(U(j,: )\) 17 \(end\) 18 \(end\) 19 \(end\) 20 \(end\) 21 22 \(return\) \(UV\) | 1 \(G=V^TV\) 2 \(U=I_n\) 3 4 \(while\) \(not\) \(all\) \(pairs\) \((v_i,v_j)\) \(satisfy\) \( \Vert\; v_i \Vert\; \le \Vert\; v_j \Vert\; \) and \( \displaystyle |\; v_i v_j |\; \le \frac{\Vert\; v_i \Vert\;^2}{2} \) 5 \(for\) \(i=1\) \(to\) \(n-1\) 6 \(for\) \(j=i+1\) \(to\) \(n\) 7 \(q=G(i,j)/G(i,i)\) 8 \(if\) \(|\; q |\;>1/2\) 9 \(G(:,j)=G(:,j)-\lfloor\; q \rceil\; \times G(:,i)\) 10 \(G(j,: )=G(j,: )-\lfloor\; q \rceil\; \times G(i,: )\) 11 \(U(:,j)=U(:,j)-\lfloor\; q \rceil\; \times U(:,i)\) 12 \(end\) 13 \(if\) \(G(i,i)>G(j,j)\) 14 \(swap\) \(G(:,i)\) \(and\) \(G(:,j)\) 15 \(swap\) \(G(i,: )\) \(and\) \(G(j,: )\) 16 \(swap\) \(U(:,i)\) \(and\) \(U(:,j)\) 17 \(end\) 18 \(end\) 19 \(end\) 20 \(end\) 21 22 \(return\) \(VU\) |
| 歡迎光臨 Math Pro 數學補給站 (https://math.pro/db/) | 論壇程式使用 Discuz! 6.1.0 |