| hermann on Sun, 08 Oct 2023 17:43:31 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: efficient foursquare() and/or threesquare1m4() functions |
On 2023-10-08 12:30, Bill Allombert wrote:
Yes, you need to read the documentation... ? Q=[41,50,1;50,61,0;1,0,62] %1 = [41,50,1;50,61,0;1,0,62] ? M=qfgaussred(Q) %2 = [41,50/41,1/41;0,1/41,-50;0,0,1] ? D=matrix(#M,#M,i,j,if(i==j,M[i,j])) %3 = [41,0,0;0,1/41,0;0,0,1] ? R=matrix(#M,#M,i,j,if(i==j,1,M[i,j])) %4 = [1,50/41,1/41;0,1,-50;0,0,1] ? R~*D*R == Q %5 = 1 ? R~^-1*Q*R^-1 %6 = [41,0,0;0,1/41,0;0,0,1]
The documentation [??qfgaussred] examples were on binary
qudratic forms only.
Thanks for demonstrating use of qfgaussred() for ternary
quadratic form. Setting
? N=R^-1
%13 =
[1 -50/41 -61]
[0 1 50]
[0 0 1]
?
now gives what I asked for, a diagonal matrix:
? N~*Q*N
%14 =
[41 0 0]
[ 0 1/41 0]
[ 0 0 1]
?
But it is not the matrix I wanted to get [a diagonal
matrix with permutation of the elements {1,5,6}
becausse 1^2+5^2+6^2==62].
I found a brute force way to determine the matrix M.
There are 6 permutations, I tried to get matdiagonal([1,5,6]) first.
I started with Q, and set M with 9 variables and determine S:
? Q=[41,50,1;50,61,0;1,0,62];
? M=[a,b,c;d,e,f;g,h,i];
? S=M~*Q*M;
?
S is symmetric:
? S==S~
1
?
These are the non-diagonal entries:
? S[1,2]
(41*b + (50*e + h))*a + ((50*d + g)*b + (61*e*d + 62*h*g))
? S[1,3]
(41*c + (50*f + i))*a + ((50*d + g)*c + (61*f*d + 62*i*g))
? S[2,3]
(41*c + (50*f + i))*b + ((50*e + h)*c + (61*f*e + 62*i*h))
?
These are the diagonal entries, that I want to be 1, 5 and 6:
? S[1,1]
41*a^2 + (100*d + 2*g)*a + (61*d^2 + 62*g^2)
? S[2,2]
41*b^2 + (100*e + 2*h)*b + (61*e^2 + 62*h^2)
? S[3,3]
41*c^2 + (100*f + 2*i)*c + (61*f^2 + 62*i^2)
?
Now I use wolframscript "Solve[]" to determine solutions
(all Raspberry computers have free Mathematica license):
In[1]:= R=Solve[{(41*b + (50*e + h))*a + ((50*d + g)*b + (61*e*d +
62*h*g))==0,
(41*c + (50*f + i))*a + ((50*d + g)*c + (61*f*d + 62*i*g))==0,
(41*c + (50*f + i))*b + ((50*e + h)*c + (61*f*e + 62*i*h))==0,
41*a^2 + (100*d + 2*g)*a + (61*d^2 + 62*g^2)==1,
41*b^2 + (100*e + 2*h)*b + (61*e^2 + 62*h^2)==5,
41*c^2 + (100*f + 2*i)*c + (61*f^2 + 62*i^2)==6},
{a,b,c,d,e,f,g,h,i}]
...
...
In[2]:= Length[R]
Out[2]= 56
In[3]:= R[[56]]
62 5
61 3
Out[3]= {a -> Sqrt[3782], b -> 0, c -> 0, d -> -50 Sqrt[--], e ->
Sqrt[--], f -> 0, g -> -Sqrt[--], h -> 0, i -> Sqrt[--]}
61
61 62 31
In[4]:= Now back to PARI/GP:? M=[sqrt(3782),0,0;-50*sqrt(62/61),sqrt(5/61),0;-sqrt(61/62),0,sqrt(3/31)]
[61.497967446087191801041303617898363588 0 0][-50.408170037776386722165002965490461957 0.28629916715693410895608268247437548775 0]
[-0.99190270074334180324260167125642521916 0 0.31108550841912758050838809830427945755]
? M~*Q*M
[0.99999999999999999999999999999999995693 0.E-35 0.E-37]
[0.E-35 5.0000000000000000000000000000000000000 0]
[0.E-37 0 6.0000000000000000000000000000000000000]
?
I will try the other 5 permutations of {1,5,6} on whether a
"nicer" matrix M is available ...
Regards,
Hermann.