利用MMA出题:求解五个整点的整系数二次曲线

我们出题:求过给定五点的非退化二次曲线,自然要求点以及二次曲线的系数都尽量简单,为此可以利用MMA编程如下:

A = {{0}};
X = {{x1}, {x2}, {x3}};
l = 0;
r = 2; (*系数以及点的坐标范围*)
a = 0;
n = 0;
maxn = 500;
While[(a == 0 || l != 5 || Det[A] == 0) && n < maxn,
 frlist = Table[RandomInteger[{-r, r}], {i, 6}];
 A = {{frlist[[1]], frlist[[4]], frlist[[6]]},
   {frlist[[4]], frlist[[2]], frlist[[5]]},
   {frlist[[6]], frlist[[5]], frlist[[3]]}};
 res = FindInstance[
   Transpose[X].A.X == 0 && 
    x1^2 + x2^2 + x3^2 != 0 && -r < x1 < r && -r < x2 < r && -r < x3 <
      r && (x3 == 1 || x3 == 0), {x1, x2, x3}, Integers, 5];
 l = Length[res];
 If[l == 5,
  a1 = X /. res[[1]] // Flatten;
  a2 = X /. res[[2]] // Flatten;
  a3 = X /. res[[3]] // Flatten;
  a4 = X /. res[[4]] // Flatten;
  a5 = X /. res[[5]] // Flatten;
  a = Det[{a1, a2, a3}]
    Det[{a1, a2, a4}] Det[{a1, a3, a4}] Det[{a2, a3, a4}]
    Det[{a1, a2, a5}] Det[{a1, a3, a5}] Det[{a1, a4, a5}] Det[{a2, a3,
       a5}] Det[{a2, a4, a5}] Det[{a3, a4, a5}]
  ; n++
  ];
 ]
A // MatrixForm
res
a

这段代码首先随机生成6个系数作为非退化二阶曲线的系数,然后检查他是否是非退化的;若是在其上找5个点,使得它们任何三点不共线。

你可能感兴趣的:(利用MMA出题:求解五个整点的整系数二次曲线)