| hermann on Mon, 18 Dec 2023 20:08:49 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: Question on "qfminim()" for quadratic form |
On 2023-12-18 18:38, Bill Allombert wrote:
On Mon, Dec 18, 2023 at 04:05:39PM +0100, hermann@stamm-wilbrandt.de wrote:pi@raspberrypi5:~ $ n=101 gp -q < m2.gp 101=[1, 6, 8]I am not sure what you mean by 'maximal norm vector",
S2 is concat(S,-S) sorted by L2 norm. The "norml2()" values are first column in output: ...
all asserts OK 528979 [711, -153, -7]~ [2, 9, 4]~ 10232019 [3127, -673, -31]~ [2, 9, -4]~ ... 97549123438 [305322, -65715, -3023]~ [10, 0, -1]~ 101592175419 [311585, -67063, -3085]~ [10, -1, 0]~ #S2=168
... So question was, whether there is an efficient method to compute either [711, -153, -7]~ from M with minimal norml2 of 528979. Or compute vector [311585, -67063, -3085]~ from M with maximal norml2 of 101592175419.
but it you just want one solution, you can try this forqfvec(v,M,n,if(qfeval(M,v)==n,V=v;break())) Cheers, Bill.
That method is fast, and for n=101 it does compute maximal vector.But for n=149 it does compute neither minimal nor maximal norml2 vector of M:
pi@raspberrypi5:~ $ mindbg=1 n=149 gp -q < S2.b.gp
149=[2, 8, 9]
all asserts OK
64338414 [7898, -1399, -53]~ [-2, -12, 1]~
...
695958036266 [-821436, 145501, 5513]~ [-12, 2, 1]~
#S2=168
12*h(-4*n)=168
617037140090 [773460, -137003, -5191]~ [12, 2, 1]~
pi@raspberrypi5:~ $
Script used, tqf.gp has to be in same directory:
$ cat S2.b.gp
readvec("tqf.gp");
n=eval(getenv("n"));
Q=get_tqf(n);
M=Q~*Q;
S=[x|x<-Vec(qfminim(M,n)[3]),qfeval(M,x)==n];
S2=vecsort(concat(S,-S),norml2);
{if(!eval(getenv("mindbg")),
foreach(S2,s,print(norml2(s)," ",s," ",Q*s)),
print(norml2(S2[1])," ",S2[1]," ",Q*S2[1]);
print("...");
print(norml2(S2[#S2])," ",S2[#S2]," ",Q*S2[#S2]))}
print("#S2=",#S2);
print("12*h(-4*n)=",12*qfbclassno(-4*n));
forqfvec(v,M,n,if(qfeval(M,v)==n,V=v;break()));
print(norml2(V)," ",V," ",Q*V);
$
Regards,
Hermann.