找回密码
 快速注册
搜索
查看: 42|回复: 3

LatticeReduce

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-2 01:19 |阅读模式
en.wikipedia.org/wiki/Lattice_reduction
kconrad.math.uconn.edu/blurbs/grouptheory/SL(2,Z).pdf Example 2.1
尝试用Javascript写下2维LatticeReduce的Lagrange算法:
  1. class Vector extends Array{
  2.     // Add Vector v to this vector
  3.     //   a.add(b);
  4.     add (v) {
  5.       var sum = new Vector();
  6.       for (var i = 0; i < this.length; i++ ) {
  7.         sum[i] = v[i] + this[i];
  8.       }
  9.       return sum;
  10.     }
  11.     // Dot product of Vector v and this vector
  12.     //   a.dot(b); // should return 1*3+2*4+3*5 = 26
  13.     dot (v) {
  14.       var sum = 0;
  15.       for (var i = 0; i < this.length; i++ ) {
  16.         sum += this[i] * v[i];
  17.       }
  18.       return sum;
  19.     }
  20.     // Norm of this vector squared
  21.     normSq () {
  22.       var s = 0;
  23.       for (var i = 0; i < this.length; i++ ) {
  24.         s += Math.pow(this[i], 2);
  25.       }
  26.       return s
  27.     }
  28.     // scalar multiplication
  29.     times (k) {
  30.       var product = new Vector();
  31.       for (var i = 0; i < this.length; i++ ) {
  32.         product[i] = this[i] * k;
  33.       }
  34.       return product;
  35.     }
  36. }
  37. // Input:  (u,v)  a basis for the lattice  L. Assume that  ||v|| \leq ||u|| , otherwise swap them.
  38. //  Output: A basis  (u,v)  with  ||u|| = \lambda_1(L), ||v|| = \lambda_2(L) .
  39. //  While  ||v|| < ||u|| :
  40. //        q := \lfloor {\langle u, \frac{v}{||v||^2} \rangle } \rceil  # Round to nearest integer
  41. //        r := u  - qv
  42. //        u := v
  43. //        v := r
  44. function LLL(u,v){
  45.     while (v.normSq() < u.normSq()){
  46.         var q = Math.round(u.dot(v)/v.normSq());
  47.         var r = u.add(v.times(-q));
  48.         console.log("[" + u.toString() + "] - " + q.toString() + " * ["+v.toString()+"] = ["+r.toString()+"]");
  49.         u = v;
  50.         v = r;
  51.     }
  52.     console.log("result is: [" + u.toString() + "], [" + v.toString() + "]");
  53. }
复制代码

上面while終止的條件是v.normSq() $\ge$ u.normSq(),所以有兩種可能:
終止時v.normSq() $>$ u.normSq()
  1. LLL(new Vector(13, 4),new Vector(12, 2))
复制代码

輸出
[13,4] - 1 * [12,2] = [1,2]
[12,2] - 3 * [1,2] = [9,-4]
result is: [1,2], [9,-4]


終止時v.normSq() $=$ u.normSq()
  1. LLL(new Vector(17, 29),new Vector(7, 12))
复制代码

輸出
[17,29] - 2 * [7,12] = [3,5]
[7,12] - 2 * [3,5] = [1,2]
[3,5] - 3 * [1,2] = [0,-1]
[1,2] - -2 * [0,-1] = [1,0]
result is: [0,-1], [1,0]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-3-2 01:20
两个平行四边形(通过平移)生成相同的格子,那么它们面积相等。
在下图中,粉色和青色的平行四边形生成相同的格子:
$v_1$ = {12, 2};  $v_2$ = {13, 4};
$w_1$ = {1, 2};  $w_2$ = {9, -4};

\[\Bbb Zv_1+\Bbb Zv_2=\Bbb Zw_1+\Bbb Zw_2\]

\begin{align*}
-1 v_1 + 1 v_2&= w_1&3 w_1 + 1 w_2&= v_1\\
4v_1 - 3v_2&= w_2&4 w_1 + 1 w_2&= v_2
\end{align*}
kuing.cjhb.site/forum.php?mod=viewthread&tid=12033

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-3-2 01:21
如何把這個算法推廣到3維?生成相同格子的所有平行六面體中,“最接近方形”的平行六面體滿足何條件?
mathoverflow.net/questions/61933/lattice-reduction-in-r3-r4-or-w ... domain-for-sl3-z-sl4

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2024-3-2 02:35
1#的代碼,應該只適用於2維的整數向量
雖然可以輸入3維的整數向量,但好像結果不是LatticeReduce
  1. LLL(new Vector(17,29,1),new Vector(7,12,1))
复制代码

[17,29,1] - 2 * [7,12,1] = [3,5,-1]
[7,12,1] - 2 * [3,5,-1] = [1,2,3]
[3,5,-1] - 1 * [1,2,3] = [2,3,-4]
result is: [1,2,3], [2,3,-4]

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:27

Powered by Discuz!

× 快速回复 返回顶部 返回列表