1% Test only multipliation: 2easy1 := (x1+1*x2)*(x1-1*x2); 3 4 5 2 2 6easy1 := x1 - x2 7 8easy2 := (a()*partial(x1)+b())*(c()*partial(x1)+d()); 9 10 11 2 12easy2 := (a()*c())*partial(x1) 13 14 + (a()*d() + a()*diff(c(),x1,1) + b()*c())*partial(x1) 15 16 + (a()*diff(d(),x1,1) + b()*d()) 17 18 19% Domain for the next factorizations: 20lpdoset lpdoweyl(1,x1,x2); 21 22 23{-1} 24 25 26% Not really binomial but caused problems at some point: 27b3 := (a-partial(x1))*(a+partial(x1)); 28 29 30 2 2 31b3 := - partial(x1) + a 32 33lpdofactorize b3; 34 35 36{{partial(x1) + abs(a), - partial(x1) + abs(a)}} 37 38 39% Differential binomial formulas: 40bin1 := (a()+partial(x1))*(a()+partial(x1)); 41 42 43 2 2 44bin1 := partial(x1) + (2*a_00_ + 2*a_01_*x2 + 2*a_10_*x1)*partial(x1) + (a_00_ 45 46 2 2 47 + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1 + a_01_ *x2 + 2*a_01_*a_10_*x1*x2 48 49 2 2 50 + a_10_ *x1 + a_10_) 51 52lpdofactorize bin1; 53 54 55{{partial(x1) + (a_00_ + a_01_*x2 + a_10_*x1),partial(x1) 56 57 + (a_00_ + a_01_*x2 + a_10_*x1)}} 58 59bin2 := (a()-partial(x1))*(a()-partial(x1)); 60 61 62 2 63bin2 := partial(x1) + ( - 2*a_00_ - 2*a_01_*x2 - 2*a_10_*x1)*partial(x1) + ( 64 65 2 2 2 66 a_00_ + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1 + a_01_ *x2 67 68 2 2 69 + 2*a_01_*a_10_*x1*x2 + a_10_ *x1 - a_10_) 70 71lpdofactorize bin2; 72 73 74{{partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1), 75 76 partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1)}} 77 78bin3 := (a()-partial(x1))*(a()+partial(x1)); 79 80 81 2 2 82bin3 := - partial(x1) + (a_00_ + 2*a_00_*a_01_*x2 + 2*a_00_*a_10_*x1 83 84 2 2 2 2 85 + a_01_ *x2 + 2*a_01_*a_10_*x1*x2 + a_10_ *x1 - a_10_) 86 87lpdofactorize bin3; 88 89 90{{partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1), 91 92 - partial(x1) + ( - a_00_ - a_01_*x2 - a_10_*x1)}} 93 94 95% Beals-Kartashova 2005, Section 5.3, special case 96bkf := (partial(x1)+partial(x2)+(a10-a01)/2) * 97 (partial(x1)-partial(x2)+(a10+a01)/2); 98 99 100 2 2 101bkf := partial(x1) - partial(x2) + a10*partial(x1) + a01*partial(x2) 102 103 2 2 104 - a01 + a10 105 + ---------------- 106 4 107 108lpdofactorize bkf; 109 110 111 - a01 + a10 112{{partial(x1) + partial(x2) + --------------,partial(x1) - partial(x2) 113 2 114 115 a01 + a10 116 + -----------}} 117 2 118 119 120% Ad hoc example: 121sth := (partial(x1)+partial(x2)+(a10+a01)) * 122 (partial(x1)-partial(x2)+(a10+a01)); 123 124 125 2 2 126sth := partial(x1) - partial(x2) + (2*a01 + 2*a10)*partial(x1) 127 128 2 2 129 + (a01 + 2*a01*a10 + a10 ) 130 131lpdofactorize sth; 132 133 134{{partial(x1) + partial(x2) + (a01 + a10),partial(x1) - partial(x2) 135 136 + (a01 + a10)}} 137 138 139% Blumberg 1912: 140p := partial(x1)+x1*partial(x2); 141 142 143p := partial(x1) + x1*partial(x2) 144 145q := partial(x1)+1; 146 147 148q := partial(x1) + 1 149 150r := partial(x1)^2+x1*partial(x1)*partial(x2)+partial(x1)+ 151 (2+x1)*partial(x2); 152 153 154r := 155 156 2 157partial(x1) + x1*partial(x1)*partial(x2) + partial(x1) + (x1 + 2)*partial(x2) 158 159d := partial(x1)^3+x1*partial(x1)^2*partial(x2)+2*partial(x1)^2+ 160 2*(x1+1)*partial(x1)*partial(x2)+(x1+2)*partial(x2)+partial(x1); 161 162 163 3 2 2 164d := partial(x1) + x1*partial(x1) *partial(x2) + 2*partial(x1) 165 166 + (2*x1 + 2)*partial(x1)*partial(x2) + partial(x1) + (x1 + 2)*partial(x2) 167 168d - q*q*p; 169 170 1710 172 173d - r*q; 174 175 1760 177 178lpdofactorize(d,a()*partial(x1)+b()); 179 180 181 2 182{{partial(x1) + 1,partial(x1) + x1*partial(x1)*partial(x2) + partial(x1) 183 184 + (x1 + 1)*partial(x2)}} 185 186 187% Approximate factorisations: 188 189% Blumberg 1912: 190lpdofactorizex(r,-1<x1<1 and -1<x2<1,q,p); 191 192 193{{epsilon - 1 >= 0,{partial(x1) + 1,partial(x1)}}} 194 195 196sol1 := lpdofactorizex(r,-1<x1<1 and -1<x2<1,q,partial(x1)+a()*partial(x2),1); 197 198 199 3*x1 200sol1 := {{true,{partial(x1) + 1,partial(x1) + ------*partial(x2)}}} 201 2 202 203r - first second first sol1 * second second first sol1; 204 205 206 - x1 - x1 + 1 207-------*partial(x1)*partial(x2) + -----------*partial(x2) 208 2 2 209 210 211sol2 := lpdofactorizex(r,-2<x1<2 and -2<x2<2,q,partial(x1)+a()*partial(x2),1); 212 213 214sol2 := {{true,{partial(x1) + 1,partial(x1) + x1*partial(x2)}}} 215 216r - first second first sol2 * second second first sol2; 217 218 219partial(x2) 220 221 222end; 223 224Tested on x86_64-pc-windows CSL 225Time (counter 1): 750 ms plus GC time: 47 ms 226 227End of Lisp run after 0.75+0.14 seconds 228real 1.13 229user 0.01 230sys 0.06 231