Back to Forum | View unanswered posts | View active topics
Topic review - Singular and Maxima gives different solutions |
Author |
Message |
|
|
Post subject: |
Re: Singular and Maxima gives different solutions |
|
|
As soon as one calls groebner or std in a ring with inexact coefficients (like real or complex), most probably the result will be unusable.
As soon as one calls groebner or std in a ring with inexact coefficients (like real or complex), most probably the result will be unusable.
|
|
|
|
Posted: Mon Jul 04, 2011 11:14 am |
|
|
|
|
|
Post subject: |
Re: Singular and Maxima gives different solutions |
|
|
Previously, the declared ring is Code: ring r1 = real, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp;
It seems like there are something wrong when the ring is declared with real type. I switch to the following ring Code: ring r1 = 0, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp;
and convert all floating point numbers to rational form. The solver gives solution similar to Maxima now. The full working code is as follows: Code: ring r1 = 0, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp;
number rax, ray, raz = 2318/287, -1459/253, 2499/743; number rbx, rby, rbz = 2698/413, -971/157, 837/187; number rcx, rcy, rcz = 8722/1111, -1249/300, 6501/1532; number dax, day, daz = 1139/113, -1781/684, 223/659; number dbx, dby, dbz = 10166/1191, -3200/1059, 695/479; number dcx, dcy, dcz = 3163/321, -2994/2993, 686/563; number la = 1453/280; number lb = 1972/919; number lc = 1836/821; number ta = 6311/1318; number tb = 1283/1371; number tc = 1450/341; number fab = 491/5266; number fac = 571/1115; number fbc = 2042/1923;
poly f1 = raz*maz+ray*may+rax*max - la; poly f2 = daz*maz+day*may+dax*max - ta; poly f3 = rbz*mbz+rby*mby+rbx*mbx - lb; poly f4 = dbz*mbz+dby*mby+dbx*mbx - tb; poly f5 = rcz*mcz+rcy*mcy+rcx*mcx - lc; poly f6 = dcz*mcz+dcy*mcy+dcx*mcx - tc; poly f7 = -raz*rbz*maz*mbz-raz*rby*may*mbz-raz*rbx*max*mbz+la*raz*mbz -ray*rbz*maz*mby-ray*rby*may*mby-ray*rbx*max*mby +la*ray*mby-rax*rbz*maz*mbx-rax*rby*may*mbx -rax*rbx*max*mbx+la*rax*mbx+lb*rbz*maz+lb*rby*may +lb*rbx*max-la*lb+fab ; poly f8 = -raz*rcz*maz*mcz-raz*rcy*may*mcz-raz*rcx*max*mcz+la*raz*mcz -ray*rcz*maz*mcy-ray*rcy*may*mcy-ray*rcx*max*mcy +la*ray*mcy-rax*rcz*maz*mcx-rax*rcy*may*mcx -rax*rcx*max*mcx+la*rax*mcx+lc*rcz*maz+lc*rcy*may +lc*rcx*max-la*lc+fac ; poly f9 = -rbz*rcz*mbz*mcz-rbz*rcy*mby*mcz-rbz*rcx*mbx*mcz+lb*rbz*mcz -rby*rcz*mbz*mcy-rby*rcy*mby*mcy-rby*rcx*mbx*mcy +lb*rby*mcy-rbx*rcz*mbz*mcx-rbx*rcy*mby*mcx -rbx*rcx*mbx*mcx+lb*rbx*mcx+lc*rcz*mbz+lc*rcy*mby +lc*rcx*mbx-lb*lc+fbc ;
ideal I = f1, f2, f3, f4, f5, f6, f7, f8, f9; def s = solve(I, 12);
Could anybody help explain why I cannot define a ring with real data type to use with the solve function? Thanks.
Previously, the declared ring is [code] ring r1 = real, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp; [/code]
It seems like there are something wrong when the ring is declared with real type. I switch to the following ring [code] ring r1 = 0, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp; [/code] and convert all floating point numbers to rational form. The solver gives solution similar to Maxima now.
The full working code is as follows: [code] ring r1 = 0, (max, may, maz, mbx, mby, mbz, mcx, mcy, mcz), lp;
number rax, ray, raz = 2318/287, -1459/253, 2499/743; number rbx, rby, rbz = 2698/413, -971/157, 837/187; number rcx, rcy, rcz = 8722/1111, -1249/300, 6501/1532; number dax, day, daz = 1139/113, -1781/684, 223/659; number dbx, dby, dbz = 10166/1191, -3200/1059, 695/479; number dcx, dcy, dcz = 3163/321, -2994/2993, 686/563; number la = 1453/280; number lb = 1972/919; number lc = 1836/821; number ta = 6311/1318; number tb = 1283/1371; number tc = 1450/341; number fab = 491/5266; number fac = 571/1115; number fbc = 2042/1923;
poly f1 = raz*maz+ray*may+rax*max - la; poly f2 = daz*maz+day*may+dax*max - ta; poly f3 = rbz*mbz+rby*mby+rbx*mbx - lb; poly f4 = dbz*mbz+dby*mby+dbx*mbx - tb; poly f5 = rcz*mcz+rcy*mcy+rcx*mcx - lc; poly f6 = dcz*mcz+dcy*mcy+dcx*mcx - tc; poly f7 = -raz*rbz*maz*mbz-raz*rby*may*mbz-raz*rbx*max*mbz+la*raz*mbz -ray*rbz*maz*mby-ray*rby*may*mby-ray*rbx*max*mby +la*ray*mby-rax*rbz*maz*mbx-rax*rby*may*mbx -rax*rbx*max*mbx+la*rax*mbx+lb*rbz*maz+lb*rby*may +lb*rbx*max-la*lb+fab ; poly f8 = -raz*rcz*maz*mcz-raz*rcy*may*mcz-raz*rcx*max*mcz+la*raz*mcz -ray*rcz*maz*mcy-ray*rcy*may*mcy-ray*rcx*max*mcy +la*ray*mcy-rax*rcz*maz*mcx-rax*rcy*may*mcx -rax*rcx*max*mcx+la*rax*mcx+lc*rcz*maz+lc*rcy*may +lc*rcx*max-la*lc+fac ; poly f9 = -rbz*rcz*mbz*mcz-rbz*rcy*mby*mcz-rbz*rcx*mbx*mcz+lb*rbz*mcz -rby*rcz*mbz*mcy-rby*rcy*mby*mcy-rby*rcx*mbx*mcy +lb*rby*mcy-rbx*rcz*mbz*mcx-rbx*rcy*mby*mcx -rbx*rcx*mbx*mcx+lb*rbx*mcx+lc*rcz*mbz+lc*rcy*mby +lc*rcx*mbx-lb*lc+fbc ;
ideal I = f1, f2, f3, f4, f5, f6, f7, f8, f9; def s = solve(I, 12); [/code]
Could anybody help explain why I cannot define a ring with [i]real[/i] data type to use with the [i]solve[/i] function? Thanks.
|
|
|
|
Posted: Fri Jul 01, 2011 9:23 am |
|
|
|
|
|
Post subject: |
Singular and Maxima gives different solutions |
|
|
Hi, I've a system of linear-quadratic equations to solve. I tried Maxima and it gives me the correct solution. Singular gives me a complex solution, which is not accurate. Below is my code and outputs in Maxima and Singular. Singular: Code: number rax, ray, raz = 8.076651, -5.766802, 3.363392; number rbx, rby, rbz = 6.532685, -6.184719, 4.475940; number rcx, rcy, rcz = 7.850585, -4.163334, 4.243473; number dax, day, daz = 10.079651, -2.603802, 0.338392; number dbx, dby, dbz = 8.535685, -3.021719, 1.450940; number dcx, dcy, dcz = 9.853585, -1.000334, 1.218473; number la = 5.189281; number lb = 2.145810; number lc = 2.236297; number ta = 4.788316; number tb = 0.935814; number tc = 4.252196; number fab = 0.093240; number fac = 0.512108; number fbc = 1.061882;
poly f1 = raz*maz+ray*may+rax*max - la; poly f2 = daz*maz+day*may+dax*max - ta; poly f3 = rbz*mbz+rby*mby+rbx*mbx - lb; poly f4 = dbz*mbz+dby*mby+dbx*mbx - tb; poly f5 = rcz*mcz+rcy*mcy+rcx*mcx - lc; poly f6 = dcz*mcz+dcy*mcy+dcx*mcx - tc; poly f7 = -raz*rbz*maz*mbz-raz*rby*may*mbz-raz*rbx*max*mbz+la*raz*mbz -ray*rbz*maz*mby-ray*rby*may*mby-ray*rbx*max*mby +la*ray*mby-rax*rbz*maz*mbx-rax*rby*may*mbx -rax*rbx*max*mbx+la*rax*mbx+lb*rbz*maz+lb*rby*may +lb*rbx*max-la*lb+fab ; poly f8 = -raz*rcz*maz*mcz-raz*rcy*may*mcz-raz*rcx*max*mcz+la*raz*mcz -ray*rcz*maz*mcy-ray*rcy*may*mcy-ray*rcx*max*mcy +la*ray*mcy-rax*rcz*maz*mcx-rax*rcy*may*mcx -rax*rcx*max*mcx+la*rax*mcx+lc*rcz*maz+lc*rcy*may +lc*rcx*max-la*lc+fac ; poly f9 = -rbz*rcz*mbz*mcz-rbz*rcy*mby*mcz-rbz*rcx*mbx*mcz+lb*rbz*mcz -rby*rcz*mbz*mcy-rby*rcy*mby*mcy-rby*rcx*mbx*mcy +lb*rby*mcy-rbx*rcz*mbz*mcx-rbx*rcy*mby*mcx -rbx*rcx*mbx*mcx+lb*rbx*mcx+lc*rcz*mbz+lc*rcy*mby +lc*rcx*mbx-lb*lc+fbc ;
ideal I = f1, f2, f3, f4, f5, f6, f7, f8, f9; ideal G = groebner(I); dim(G); vdim(G); G;
def s = solve(I, 12);
Maxima: Code: ra : [8.076651, -5.766802, 3.363392]; rb : [6.532685, -6.184719, 4.475940]; rc : [7.850585, -4.163334, 4.243473]; da : [10.079651, -2.603802, 0.338392]; db : [8.535685, -3.021719, 1.450940]; dc : [9.853585, -1.000334, 1.218473]; la : 5.189281; lb : 2.145810; lc : 2.236297; ta : 4.788316; tb : 0.935814; tc : 4.252196; fab : 0.093240; fac : 0.512108; fbc : 1.061882;
ma : [max, may, maz]; mb : [mbx, mby, mbz]; mc : [mcx, mcy, mcz];
Hab : expand((ma . rb - la) * (lb - mb . ra)); Hac : expand((ma . rc - la) * (lc - mc . ra)); Hbc : expand((mb . rc - lb) * (lc - mc . rb));
eqns : [ma . ra = la, ma . da = ta, mb . rb = lb, mb . db = tb, mc . rc = lc, mc . dc = tc, Hab + fab = 0, Hac + fac = 0, Hbc + fbc = 0]; eqns; sols : solve(eqns, [max, may, maz, mbx, mby, mbz, mcx, mcy, mcz]);
solsf : bfloat(sols);
The ground truth solution is Code: ma: 0.397328 -0.288674, 0.093798 mb: -0.007418 -0.283056, 0.099119 mc: 0.459667 0.599035, 0.264318
Output of Singular: Code: [1]: [1]: (0.396501063225-i*0.0585142482085) [2]: (-0.292459889853-i*0.267965150227) [3]: (0.0892914674573-i*0.318934797814) [4]: (-0.0228603746306-i*0.0180139060626) [5]: (-0.380524257884-i*0.113697415565) [6]: (-0.0130221380534-i*0.130812174086) [7]: (0.467285747848+i*0.00508868957766) [8]: (0.302313482452-i*0.198182075022) [9]: (-0.0408951640129-i*0.20385360867) [2]: [1]: (0.396501063225+i*0.0585142482085) [2]: (-0.292459889853+i*0.267965150227) [3]: (0.0892914674573+i*0.318934797814) [4]: (-0.0228603746306+i*0.0180139060626) [5]: (-0.380524257884+i*0.113697415565) [6]: (-0.0130221380534+i*0.130812174086) [7]: (0.467285747848-i*0.00508868957766) [8]: (0.302313482452+i*0.198182075022) [9]: (-0.0408951640129+i*0.20385360867)
Output of Maxima: Code: [[max = 3.463461b-1,may = -5.2214398b-1,maz = -1.8408099b-1, mbx = -2.3113602b-2,mby = -3.8212235b-1,mbz = -1.4860691b-2, mcx = 4.6593653b-1,mcy = 3.5486107b-1,mcz = 1.3156148b-2],
[max = 3.973295b-1,may = -2.8866626b-1,maz = 9.3806532b-2, mbx = -7.4168349b-3,mby = -2.8304991b-1,mbz = 9.9125014b-2, mcx = 4.5966645b-1,mcy = 5.9905295b-1,mcz = 2.6433629b-1]]
Did I do something wrong in Singular? Thanks for your help.
Hi,
I've a system of linear-quadratic equations to solve. I tried Maxima and it gives me the correct solution. Singular gives me a complex solution, which is not accurate. Below is my code and outputs in Maxima and Singular.
Singular: [code] number rax, ray, raz = 8.076651, -5.766802, 3.363392; number rbx, rby, rbz = 6.532685, -6.184719, 4.475940; number rcx, rcy, rcz = 7.850585, -4.163334, 4.243473; number dax, day, daz = 10.079651, -2.603802, 0.338392; number dbx, dby, dbz = 8.535685, -3.021719, 1.450940; number dcx, dcy, dcz = 9.853585, -1.000334, 1.218473; number la = 5.189281; number lb = 2.145810; number lc = 2.236297; number ta = 4.788316; number tb = 0.935814; number tc = 4.252196; number fab = 0.093240; number fac = 0.512108; number fbc = 1.061882;
poly f1 = raz*maz+ray*may+rax*max - la; poly f2 = daz*maz+day*may+dax*max - ta; poly f3 = rbz*mbz+rby*mby+rbx*mbx - lb; poly f4 = dbz*mbz+dby*mby+dbx*mbx - tb; poly f5 = rcz*mcz+rcy*mcy+rcx*mcx - lc; poly f6 = dcz*mcz+dcy*mcy+dcx*mcx - tc; poly f7 = -raz*rbz*maz*mbz-raz*rby*may*mbz-raz*rbx*max*mbz+la*raz*mbz -ray*rbz*maz*mby-ray*rby*may*mby-ray*rbx*max*mby +la*ray*mby-rax*rbz*maz*mbx-rax*rby*may*mbx -rax*rbx*max*mbx+la*rax*mbx+lb*rbz*maz+lb*rby*may +lb*rbx*max-la*lb+fab ; poly f8 = -raz*rcz*maz*mcz-raz*rcy*may*mcz-raz*rcx*max*mcz+la*raz*mcz -ray*rcz*maz*mcy-ray*rcy*may*mcy-ray*rcx*max*mcy +la*ray*mcy-rax*rcz*maz*mcx-rax*rcy*may*mcx -rax*rcx*max*mcx+la*rax*mcx+lc*rcz*maz+lc*rcy*may +lc*rcx*max-la*lc+fac ; poly f9 = -rbz*rcz*mbz*mcz-rbz*rcy*mby*mcz-rbz*rcx*mbx*mcz+lb*rbz*mcz -rby*rcz*mbz*mcy-rby*rcy*mby*mcy-rby*rcx*mbx*mcy +lb*rby*mcy-rbx*rcz*mbz*mcx-rbx*rcy*mby*mcx -rbx*rcx*mbx*mcx+lb*rbx*mcx+lc*rcz*mbz+lc*rcy*mby +lc*rcx*mbx-lb*lc+fbc ;
ideal I = f1, f2, f3, f4, f5, f6, f7, f8, f9; ideal G = groebner(I); dim(G); vdim(G); G;
def s = solve(I, 12); [/code]
Maxima: [code] ra : [8.076651, -5.766802, 3.363392]; rb : [6.532685, -6.184719, 4.475940]; rc : [7.850585, -4.163334, 4.243473]; da : [10.079651, -2.603802, 0.338392]; db : [8.535685, -3.021719, 1.450940]; dc : [9.853585, -1.000334, 1.218473]; la : 5.189281; lb : 2.145810; lc : 2.236297; ta : 4.788316; tb : 0.935814; tc : 4.252196; fab : 0.093240; fac : 0.512108; fbc : 1.061882;
ma : [max, may, maz]; mb : [mbx, mby, mbz]; mc : [mcx, mcy, mcz];
Hab : expand((ma . rb - la) * (lb - mb . ra)); Hac : expand((ma . rc - la) * (lc - mc . ra)); Hbc : expand((mb . rc - lb) * (lc - mc . rb));
eqns : [ma . ra = la, ma . da = ta, mb . rb = lb, mb . db = tb, mc . rc = lc, mc . dc = tc, Hab + fab = 0, Hac + fac = 0, Hbc + fbc = 0]; eqns; sols : solve(eqns, [max, may, maz, mbx, mby, mbz, mcx, mcy, mcz]);
solsf : bfloat(sols); [/code]
The ground truth solution is [code] ma: 0.397328 -0.288674, 0.093798 mb: -0.007418 -0.283056, 0.099119 mc: 0.459667 0.599035, 0.264318 [/code]
Output of Singular: [code] [1]: [1]: (0.396501063225-i*0.0585142482085) [2]: (-0.292459889853-i*0.267965150227) [3]: (0.0892914674573-i*0.318934797814) [4]: (-0.0228603746306-i*0.0180139060626) [5]: (-0.380524257884-i*0.113697415565) [6]: (-0.0130221380534-i*0.130812174086) [7]: (0.467285747848+i*0.00508868957766) [8]: (0.302313482452-i*0.198182075022) [9]: (-0.0408951640129-i*0.20385360867) [2]: [1]: (0.396501063225+i*0.0585142482085) [2]: (-0.292459889853+i*0.267965150227) [3]: (0.0892914674573+i*0.318934797814) [4]: (-0.0228603746306+i*0.0180139060626) [5]: (-0.380524257884+i*0.113697415565) [6]: (-0.0130221380534+i*0.130812174086) [7]: (0.467285747848-i*0.00508868957766) [8]: (0.302313482452+i*0.198182075022) [9]: (-0.0408951640129+i*0.20385360867) [/code]
Output of Maxima: [code] [[max = 3.463461b-1,may = -5.2214398b-1,maz = -1.8408099b-1, mbx = -2.3113602b-2,mby = -3.8212235b-1,mbz = -1.4860691b-2, mcx = 4.6593653b-1,mcy = 3.5486107b-1,mcz = 1.3156148b-2],
[max = 3.973295b-1,may = -2.8866626b-1,maz = 9.3806532b-2, mbx = -7.4168349b-3,mby = -2.8304991b-1,mbz = 9.9125014b-2, mcx = 4.5966645b-1,mcy = 5.9905295b-1,mcz = 2.6433629b-1]] [/code]
Did I do something wrong in Singular? Thanks for your help.
|
|
|
|
Posted: Thu Jun 30, 2011 5:38 am |
|
|
|
|
|
It is currently Fri May 13, 2022 10:59 am
|
|