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.