# Worksheet to execute the examples in Gao, Kaltofen, May, Yang, & Zhi: > # Factorization routines: > read("multifac_1.3.mpl"): # Example 15a: Two Factors (2,2), three vars, Kaltofen challenge JSC # 29/6, pp. 891-919 (2000) > f1:=9*x^2+4*y^2+18*sqrt(2)*z^2-36; 2 2 1/2 2 f1 := 9 x + 4 y + 18 2 z - 36 > f2:=9*x^2+4*y^2-18*sqrt(2)*z^2-36; 2 2 1/2 2 f2 := 9 x + 4 y - 18 2 z - 36 > cleanF15a:=expand(f1*f2); cleanF15a := 4 2 2 2 4 2 4 81 x + 72 x y - 648 x + 16 y - 288 y - 648 z + 1296 > noiseF15a:=`*`(1/1000,-3*z^4+2*x^2*z^2+y^2*z^2-7*z^2); 4 2 2 2 2 2 noiseF15a := -3/1000 z + 1/500 x z + 1/1000 y z - 7/1000 z # Test for irreducibility over the complex numbers > evala(AFactor(cleanF15a+noiseF15a)); 4 2 2 2 4 2 648003 4 81 x + 72 x y - 648 x + 16 y - 288 y - ------ z + 1296 1000 2 2 2 2 2 + 1/500 x z + 1/1000 y z - 7/1000 z > F15a := expand(evalf(cleanF15a + noiseF15a)); 4 2 2 2 4 2 F15a := 81. x + 72. x y - 648. x + 16. y - 288. y 4 2 2 - 648.0030000 z + 1296. + .002000000000 x z 2 2 2 + .001000000000 y z - .007000000000 z > norm(evalf(noiseF15a),2) / norm(F15a,2); > ceil(log10(%)); -5 .4908926268 10 -5 > t15a:=time(): > facF15a:=appfac(F15a,[x,y,z]); > t15a:=time()-t15a; ` the biggest gap, the last r-th singular values and the number of factors `, 1447809980., .1809170997e-10, 2 ` The time for computing the number of factors*****`, .150 `The time for the entire factorization******`, 1.181 2 -15 facF15a := [.724882182394597230 z - .251703428045328650 10 y z 2 -16 - .113904541262907249 y + .236839953344648017 10 x z -15 2 - .598935342130579175 10 x y - .256285077962699892 x -15 -16 + .501284809346199925 10 z - .689610496445877650 10 y -17 + .559085750137752370 10 x + 1.02513975274996660, 2 -15 -.724886097511812988 z + .251702590274272791 10 y z 2 -14 - .113904037990324530 y + .247625924410343855 10 x z -14 2 - .139976368594689776 10 x y - .256284225304789559 x -15 -16 - .501283140867157479 10 z + .689608201142607244 10 y -20 - .106950748324069367 10 x + 1.02513746093992730] t15a := 1.181 > f1app:=9*facF15a[1]/coeff(facF15a[1],x^2); 2 -14 2 f1app := -25.45579202 z + .8839105538 10 y z + 4.000002184 y -15 -13 - .8317142756 10 x z + .2103289869 10 x y 2 -13 -14 + 9.000000000 x - .1760369086 10 z + .2421715114 10 y -15 - .1963349482 10 x - 35.99998037 > evalf(f2-f1app); -5 2 2 -14 -.00001963 - .2184 10 y - .00005210 z - .8839105538 10 y z -15 -13 + .8317142756 10 x z - .2103289869 10 x y -13 -14 + .1760369086 10 z - .2421715114 10 y -15 + .1963349482 10 x > f2app:=9*facF15a[2]/coeff(facF15a[2],x^2); 2 -14 2 f2app := 25.45601420 z - .8839105528 10 y z + 3.999997818 y -13 -13 - .8695944189 10 x z + .4915586654 10 x y 2 -13 -14 + 9.000000000 x + .1760369083 10 z - .2421715110 10 y -19 + .3755817329 10 x - 36.00001966 > evalf(f1-f2app); -5 2 2 -14 .00001966 + .2182 10 y - .00017008 z + .8839105528 10 y z -13 -13 + .8695944189 10 x z - .4915586654 10 x y -13 -14 - .1760369083 10 z + .2421715110 10 y -19 - .3755817329 10 x > berror19:=backward_error(F15a, convert(facF15a, `*`), [x,y,z]); > ceil(log10(%)); c = 1233.217906 -8 berror19 := .1656042421 10 -8 # A note about backward_error(F, G, [vars]): # We compute c so that ||F-c*G||_2 is as small as possible. The output # is ||F - c*G||_2 / ||F||_2. > # # # #