UNPKG

algebrite

Version:

Computer Algebra System in Coffeescript

1,072 lines (1,021 loc) 32.6 kB
### Table of integrals The symbol f is just a dummy symbol for creating a list f(A,B,C,C,...) where A is the template expression B is the result expression C is an optional list of conditional expressions ### itab = [ # 1 "f(a,a*x)", # 9 (need a caveat for 7 so we can put 9 after 7) "f(1/x,log(x))", # 7 "f(x^a,x^(a+1)/(a+1))", # five specialisations of case 7 for speed. # Covers often-occurring exponents: each of # these case ends up in a dedicated entry, so we # only have to do one sure-shot match. "f(x^(-2),-x^(-1))", "f(x^(-1/2),2*x^(1/2))", "f(x^(1/2),2/3*x^(3/2))", "f(x,x^2/2)", "f(x^2,x^3/3)", # 12 "f(exp(a*x),1/a*exp(a*x))", "f(exp(a*x+b),1/a*exp(a*x+b))", "f(x*exp(a*x^2),exp(a*x^2)/(2*a))", "f(x*exp(a*x^2+b),exp(a*x^2+b)/(2*a))", # 14 "f(log(a*x),x*log(a*x)-x)", # 15 "f(a^x,a^x/log(a),or(not(number(a)),a>0))", # 16 "f(1/(a+x^2),1/sqrt(a)*arctan(x/sqrt(a)),or(not(number(a)),a>0))", # 17 "f(1/(a-x^2),1/sqrt(a)*arctanh(x/sqrt(a)))", # 19 "f(1/sqrt(a-x^2),arcsin(x/(sqrt(a))))", # 20 "f(1/sqrt(a+x^2),log(x+sqrt(a+x^2)))", # 27 "f(1/(a+b*x),1/b*log(a+b*x))", # 28 "f(1/(a+b*x)^2,-1/(b*(a+b*x)))", # 29 "f(1/(a+b*x)^3,-1/(2*b)*1/(a+b*x)^2)", # 30 "f(x/(a+b*x),x/b-a*log(a+b*x)/b/b)", # 31 "f(x/(a+b*x)^2,1/b^2*(log(a+b*x)+a/(a+b*x)))", # 33 "f(x^2/(a+b*x),1/b^2*(1/2*(a+b*x)^2-2*a*(a+b*x)+a^2*log(a+b*x)))", # 34 "f(x^2/(a+b*x)^2,1/b^3*(a+b*x-2*a*log(a+b*x)-a^2/(a+b*x)))", # 35 "f(x^2/(a+b*x)^3,1/b^3*(log(a+b*x)+2*a/(a+b*x)-1/2*a^2/(a+b*x)^2))", # 37 "f(1/x*1/(a+b*x),-1/a*log((a+b*x)/x))", # 38 "f(1/x*1/(a+b*x)^2,1/a*1/(a+b*x)-1/a^2*log((a+b*x)/x))", # 39 "f(1/x*1/(a+b*x)^3,1/a^3*(1/2*((2*a+b*x)/(a+b*x))^2+log(x/(a+b*x))))", # 40 "f(1/x^2*1/(a+b*x),-1/(a*x)+b/a^2*log((a+b*x)/x))", # 41 "f(1/x^3*1/(a+b*x),(2*b*x-a)/(2*a^2*x^2)+b^2/a^3*log(x/(a+b*x)))", # 42 "f(1/x^2*1/(a+b*x)^2,-(a+2*b*x)/(a^2*x*(a+b*x))+2*b/a^3*log((a+b*x)/x))", # 60 "f(1/(a+b*x^2),1/sqrt(a*b)*arctan(x*sqrt(a*b)/a),or(not(number(a*b)),a*b>0))", # 61 "f(1/(a+b*x^2),1/(2*sqrt(-a*b))*log((a+x*sqrt(-a*b))/(a-x*sqrt(-a*b))),or(not(number(a*b)),a*b<0))", # 62 is the same as 60 # 63 "f(x/(a+b*x^2),1/2*1/b*log(a+b*x^2))", #64 "f(x^2/(a+b*x^2),x/b-a/b*integral(1/(a+b*x^2),x))", #65 "f(1/(a+b*x^2)^2,x/(2*a*(a+b*x^2))+1/2*1/a*integral(1/(a+b*x^2),x))", #66 is covered by 61 #70 "f(1/x*1/(a+b*x^2),1/2*1/a*log(x^2/(a+b*x^2)))", #71 "f(1/x^2*1/(a+b*x^2),-1/(a*x)-b/a*integral(1/(a+b*x^2),x))", #74 "f(1/(a+b*x^3),1/3*1/a*(a/b)^(1/3)*(1/2*log(((a/b)^(1/3)+x)^3/(a+b*x^3))+sqrt(3)*arctan((2*x-(a/b)^(1/3))*(a/b)^(-1/3)/sqrt(3))))", #76 "f(x^2/(a+b*x^3),1/3*1/b*log(a+b*x^3))", # float(defint(1/(2+3*X^4),X,0,pi)) gave wrong result. # Also, the tests related to the indefinite integral # fail since we rationalise expressions "better", so I'm thinking # to take this out completely as it seemed to give the # wrong results in the first place. #77 #"f(1/(a+b*x^4),1/2*1/a*(a/b/4)^(1/4)*(1/2*log((x^2+2*(a/b/4)^(1/4)*x+2*(a/b/4)^(1/2))/(x^2-2*(a/b/4)^(1/4)*x+2*(a/b/4)^(1/2)))+arctan(2*(a/b/4)^(1/4)*x/(2*(a/b/4)^(1/2)-x^2))),or(not(number(a*b)),a*b>0))", #78 #"f(1/(a+b*x^4),1/2*(-a/b)^(1/4)/a*(1/2*log((x+(-a/b)^(1/4))/(x-(-a/b)^(1/4)))+arctan(x*(-a/b)^(-1/4))),or(not(number(a*b)),a*b<0))", #79 "f(x/(a+b*x^4),1/2*sqrt(b/a)/b*arctan(x^2*sqrt(b/a)),or(not(number(a*b)),a*b>0))", #80 "f(x/(a+b*x^4),1/4*sqrt(-b/a)/b*log((x^2-sqrt(-a/b))/(x^2+sqrt(-a/b))),or(not(number(a*b)),a*b<0))", # float(defint(X^2/(2+3*X^4),X,0,pi)) gave wrong result. # Also, the tests related to the indefinite integral # fail since we rationalise expressions "better", so I'm thinking # to take this out completely as it seemed to give the # wrong results in the first place. #81 #"f(x^2/(a+b*x^4),1/4*1/b*(a/b/4)^(-1/4)*(1/2*log((x^2-2*(a/b/4)^(1/4)*x+2*sqrt(a/b/4))/(x^2+2*(a/b/4)^(1/4)*x+2*sqrt(a/b/4)))+arctan(2*(a/b/4)^(1/4)*x/(2*sqrt(a/b/4)-x^2))),or(not(number(a*b)),a*b>0))", #82 #"f(x^2/(a+b*x^4),1/4*1/b*(-a/b)^(-1/4)*(log((x-(-a/b)^(1/4))/(x+(-a/b)^(1/4)))+2*arctan(x*(-a/b)^(-1/4))),or(not(number(a*b)),a*b<0))", #83 "f(x^3/(a+b*x^4),1/4*1/b*log(a+b*x^4))", #124 "f(sqrt(a+b*x),2/3*1/b*sqrt((a+b*x)^3))", #125 "f(x*sqrt(a+b*x),-2*(2*a-3*b*x)*sqrt((a+b*x)^3)/15/b^2)", #126 "f(x^2*sqrt(a+b*x),2*(8*a^2-12*a*b*x+15*b^2*x^2)*sqrt((a+b*x)^3)/105/b^3)", #128 "f(sqrt(a+b*x)/x,2*sqrt(a+b*x)+a*integral(1/x*1/sqrt(a+b*x),x))", #129 "f(sqrt(a+b*x)/x^2,-sqrt(a+b*x)/x+b/2*integral(1/x*1/sqrt(a+b*x),x))", #131 "f(1/sqrt(a+b*x),2*sqrt(a+b*x)/b)", #132 "f(x/sqrt(a+b*x),-2/3*(2*a-b*x)*sqrt(a+b*x)/b^2)", #133 "f(x^2/sqrt(a+b*x),2/15*(8*a^2-4*a*b*x+3*b^2*x^2)*sqrt(a+b*x)/b^3)", #135 "f(1/x*1/sqrt(a+b*x),1/sqrt(a)*log((sqrt(a+b*x)-sqrt(a))/(sqrt(a+b*x)+sqrt(a))),or(not(number(a)),a>0))", #136 "f(1/x*1/sqrt(a+b*x),2/sqrt(-a)*arctan(sqrt(-(a+b*x)/a)),or(not(number(a)),a<0))", #137 "f(1/x^2*1/sqrt(a+b*x),-sqrt(a+b*x)/a/x-1/2*b/a*integral(1/x*1/sqrt(a+b*x),x))", #156 "f(sqrt(x^2+a),1/2*(x*sqrt(x^2+a)+a*log(x+sqrt(x^2+a))))", #157 "f(1/sqrt(x^2+a),log(x+sqrt(x^2+a)))", #158 "f(1/x*1/sqrt(x^2+a),arcsec(x/sqrt(-a))/sqrt(-a),or(not(number(a)),a<0))", #159 "f(1/x*1/sqrt(x^2+a),-1/sqrt(a)*log((sqrt(a)+sqrt(x^2+a))/x),or(not(number(a)),a>0))", #160 "f(sqrt(x^2+a)/x,sqrt(x^2+a)-sqrt(a)*log((sqrt(a)+sqrt(x^2+a))/x),or(not(number(a)),a>0))", #161 "f(sqrt(x^2+a)/x,sqrt(x^2+a)-sqrt(-a)*arcsec(x/sqrt(-a)),or(not(number(a)),a<0))", #162 "f(x/sqrt(x^2+a),sqrt(x^2+a))", #163 "f(x*sqrt(x^2+a),1/3*sqrt((x^2+a)^3))", #164 need an unexpanded version? "f(sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/4*(x*sqrt((x^2+a^(1/3))^3)+3/2*a^(1/3)*x*sqrt(x^2+a^(1/3))+3/2*a^(2/3)*log(x+sqrt(x^2+a^(1/3)))))", # match doesn't work for the following "f(sqrt(-a+x^6-3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/4*(x*sqrt((x^2-a^(1/3))^3)-3/2*a^(1/3)*x*sqrt(x^2-a^(1/3))+3/2*a^(2/3)*log(x+sqrt(x^2-a^(1/3)))))", #165 "f(1/sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),x/a^(1/3)/sqrt(x^2+a^(1/3)))", #166 "f(x/sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),-1/sqrt(x^2+a^(1/3)))", #167 "f(x*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/5*sqrt((x^2+a^(1/3))^5))", #168 "f(x^2*sqrt(x^2+a),1/4*x*sqrt((x^2+a)^3)-1/8*a*x*sqrt(x^2+a)-1/8*a^2*log(x+sqrt(x^2+a)))", #169 "f(x^3*sqrt(x^2+a),(1/5*x^2-2/15*a)*sqrt((x^2+a)^3),and(number(a),a>0))", #170 "f(x^3*sqrt(x^2+a),sqrt((x^2+a)^5)/5-a*sqrt((x^2+a)^3)/3,and(number(a),a<0))", #171 "f(x^2/sqrt(x^2+a),1/2*x*sqrt(x^2+a)-1/2*a*log(x+sqrt(x^2+a)))", #172 "f(x^3/sqrt(x^2+a),1/3*sqrt((x^2+a)^3)-a*sqrt(x^2+a))", #173 "f(1/x^2*1/sqrt(x^2+a),-sqrt(x^2+a)/a/x)", #174 "f(1/x^3*1/sqrt(x^2+a),-1/2*sqrt(x^2+a)/a/x^2+1/2*log((sqrt(a)+sqrt(x^2+a))/x)/a^(3/2),or(not(number(a)),a>0))", #175 "f(1/x^3*1/sqrt(x^2-a),1/2*sqrt(x^2-a)/a/x^2+1/2*1/(a^(3/2))*arcsec(x/(a^(1/2))),or(not(number(a)),a>0))", #176+ "f(x^2*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/6*x*sqrt((x^2+a^(1/3))^5)-1/24*a^(1/3)*x*sqrt((x^2+a^(1/3))^3)-1/16*a^(2/3)*x*sqrt(x^2+a^(1/3))-1/16*a*log(x+sqrt(x^2+a^(1/3))),or(not(number(a)),a>0))", #176- "f(x^2*sqrt(-a-3*a^(1/3)*x^4+3*a^(2/3)*x^2+x^6),1/6*x*sqrt((x^2-a^(1/3))^5)+1/24*a^(1/3)*x*sqrt((x^2-a^(1/3))^3)-1/16*a^(2/3)*x*sqrt(x^2-a^(1/3))+1/16*a*log(x+sqrt(x^2-a^(1/3))),or(not(number(a)),a>0))", #177+ "f(x^3*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/7*sqrt((x^2+a^(1/3))^7)-1/5*a^(1/3)*sqrt((x^2+a^(1/3))^5),or(not(number(a)),a>0))", #177- "f(x^3*sqrt(-a-3*a^(1/3)*x^4+3*a^(2/3)*x^2+x^6),1/7*sqrt((x^2-a^(1/3))^7)+1/5*a^(1/3)*sqrt((x^2-a^(1/3))^5),or(not(number(a)),a>0))", #196 "f(1/(x-a)/sqrt(x^2-a^2),-sqrt(x^2-a^2)/a/(x-a))", #197 "f(1/(x+a)/sqrt(x^2-a^2),sqrt(x^2-a^2)/a/(x+a))", #200+ "f(sqrt(a-x^2),1/2*(x*sqrt(a-x^2)+a*arcsin(x/sqrt(abs(a)))))", #201 (seems to be handled somewhere else) #202 "f(1/x*1/sqrt(a-x^2),-1/sqrt(a)*log((sqrt(a)+sqrt(a-x^2))/x),or(not(number(a)),a>0))", #203 "f(sqrt(a-x^2)/x,sqrt(a-x^2)-sqrt(a)*log((sqrt(a)+sqrt(a-x^2))/x),or(not(number(a)),a>0))", #204 "f(x/sqrt(a-x^2),-sqrt(a-x^2))", #205 "f(x*sqrt(a-x^2),-1/3*sqrt((a-x^2)^3))", #210 "f(x^2*sqrt(a-x^2),-x/4*sqrt((a-x^2)^3)+1/8*a*(x*sqrt(a-x^2)+a*arcsin(x/sqrt(a))),or(not(number(a)),a>0))", #211 "f(x^3*sqrt(a-x^2),(-1/5*x^2-2/15*a)*sqrt((a-x^2)^3),or(not(number(a)),a>0))", #214 "f(x^2/sqrt(a-x^2),-x/2*sqrt(a-x^2)+a/2*arcsin(x/sqrt(a)),or(not(number(a)),a>0))", #215 "f(1/x^2*1/sqrt(a-x^2),-sqrt(a-x^2)/a/x,or(not(number(a)),a>0))", #216 "f(sqrt(a-x^2)/x^2,-sqrt(a-x^2)/x-arcsin(x/sqrt(a)),or(not(number(a)),a>0))", #217 "f(sqrt(a-x^2)/x^3,-1/2*sqrt(a-x^2)/x^2+1/2*log((sqrt(a)+sqrt(a-x^2))/x)/sqrt(a),or(not(number(a)),a>0))", #218 "f(sqrt(a-x^2)/x^4,-1/3*sqrt((a-x^2)^3)/a/x^3,or(not(number(a)),a>0))", # 273 "f(sqrt(a*x^2+b),x*sqrt(a*x^2+b)/2+b*log(x*sqrt(a)+sqrt(a*x^2+b))/2/sqrt(a),and(number(a),a>0))", # 274 "f(sqrt(a*x^2+b),x*sqrt(a*x^2+b)/2+b*arcsin(x*sqrt(-a/b))/2/sqrt(-a),and(number(a),a<0))", # 290 "f(sin(a*x),-cos(a*x)/a)", # 291 "f(cos(a*x),sin(a*x)/a)", # 292 "f(tan(a*x),-log(cos(a*x))/a)", # 293 "f(1/tan(a*x),log(sin(a*x))/a)", # 294 "f(1/cos(a*x),log(tan(pi/4+a*x/2))/a)", # 295 "f(1/sin(a*x),log(tan(a*x/2))/a)", # 296 "f(sin(a*x)^2,x/2-sin(2*a*x)/(4*a))", # 297 "f(sin(a*x)^3,-cos(a*x)*(sin(a*x)^2+2)/(3*a))", # 298 "f(sin(a*x)^4,3/8*x-sin(2*a*x)/(4*a)+sin(4*a*x)/(32*a))", # 302 "f(cos(a*x)^2,x/2+sin(2*a*x)/(4*a))", # 303 "f(cos(a*x)^3,sin(a*x)*(cos(a*x)^2+2)/(3*a))", # 304 "f(cos(a*x)^4,3/8*x+sin(2*a*x)/(4*a)+sin(4*a*x)/(32*a))", # 308 "f(1/sin(a*x)^2,-1/(a*tan(a*x)))", # 312 "f(1/cos(a*x)^2,tan(a*x)/a)", # 318 "f(sin(a*x)*cos(a*x),sin(a*x)^2/(2*a))", # 320 "f(sin(a*x)^2*cos(a*x)^2,-sin(4*a*x)/(32*a)+x/8)", # 326 "f(sin(a*x)/cos(a*x)^2,1/(a*cos(a*x)))", # 327 "f(sin(a*x)^2/cos(a*x),(log(tan(pi/4+a*x/2))-sin(a*x))/a)", # 328 "f(cos(a*x)/sin(a*x)^2,-1/(a*sin(a*x)))", # 329 "f(1/(sin(a*x)*cos(a*x)),log(tan(a*x))/a)", # 330 "f(1/(sin(a*x)*cos(a*x)^2),(1/cos(a*x)+log(tan(a*x/2)))/a)", # 331 "f(1/(sin(a*x)^2*cos(a*x)),(log(tan(pi/4+a*x/2))-1/sin(a*x))/a)", # 333 "f(1/(sin(a*x)^2*cos(a*x)^2),-2/(a*tan(2*a*x)))", # 335 "f(sin(a+b*x),-cos(a+b*x)/b)", # 336 "f(cos(a+b*x),sin(a+b*x)/b)", # 337+ (with the addition of b) "f(1/(b+b*sin(a*x)),-tan(pi/4-a*x/2)/a/b)", # 337- (with the addition of b) "f(1/(b-b*sin(a*x)),tan(pi/4+a*x/2)/a/b)", # 338 (with the addition of b) "f(1/(b+b*cos(a*x)),tan(a*x/2)/a/b)", # 339 (with the addition of b) "f(1/(b-b*cos(a*x)),-1/tan(a*x/2)/a/b)", # 340 "f(1/(a+b*sin(x)),1/sqrt(b^2-a^2)*log((a*tan(x/2)+b-sqrt(b^2-a^2))/(a*tan(x/2)+b+sqrt(b^2-a^2))),b^2-a^2)", # check that b^2-a^2 is not zero # 341 "f(1/(a+b*cos(x)),1/sqrt(b^2-a^2)*log((sqrt(b^2-a^2)*tan(x/2)+a+b)/(sqrt(b^2-a^2)*tan(x/2)-a-b)),b^2-a^2)", # check that b^2-a^2 is not zero # 389 "f(x*sin(a*x),sin(a*x)/a^2-x*cos(a*x)/a)", # 390 "f(x^2*sin(a*x),2*x*sin(a*x)/a^2-(a^2*x^2-2)*cos(a*x)/a^3)", # 393 "f(x*cos(a*x),cos(a*x)/a^2+x*sin(a*x)/a)", # 394 "f(x^2*cos(a*x),2*x*cos(a*x)/a^2+(a^2*x^2-2)*sin(a*x)/a^3)", # 441 "f(arcsin(a*x),x*arcsin(a*x)+sqrt(1-a^2*x^2)/a)", # 442 "f(arccos(a*x),x*arccos(a*x)-sqrt(1-a^2*x^2)/a)", # 443 "f(arctan(a*x),x*arctan(a*x)-1/2*log(1+a^2*x^2)/a)", # 485 (with addition of a) # however commenting out since it's a duplicate of 14 # "f(log(a*x),x*log(a*x)-x)", # 486 (with addition of a) "f(x*log(a*x),x^2*log(a*x)/2-x^2/4)", # 487 (with addition of a) "f(x^2*log(a*x),x^3*log(a*x)/3-1/9*x^3)", # 489 "f(log(x)^2,x*log(x)^2-2*x*log(x)+2*x)", # 493 (with addition of a) "f(1/x*1/(a+log(x)),log(a+log(x)))", # 499 "f(log(a*x+b),(a*x+b)*log(a*x+b)/a-x)", # 500 "f(log(a*x+b)/x^2,a/b*log(x)-(a*x+b)*log(a*x+b)/b/x)", # 554 "f(sinh(x),cosh(x))", # 555 "f(cosh(x),sinh(x))", # 556 "f(tanh(x),log(cosh(x)))", # 560 "f(x*sinh(x),x*cosh(x)-sinh(x))", # 562 "f(x*cosh(x),x*sinh(x)-cosh(x))", # 566 "f(sinh(x)^2,sinh(2*x)/4-x/2)", # 569 "f(tanh(x)^2,x-tanh(x))", # 572 "f(cosh(x)^2,sinh(2*x)/4+x/2)", # ? "f(x^3*exp(a*x^2),exp(a*x^2)*(x^2/a-1/(a^2))/2)", # ? "f(x^3*exp(a*x^2+b),exp(a*x^2)*exp(b)*(x^2/a-1/(a^2))/2)", # ? "f(exp(a*x^2),-i*sqrt(pi)*erf(i*sqrt(a)*x)/sqrt(a)/2)", # ? "f(erf(a*x),x*erf(a*x)+exp(-a^2*x^2)/a/sqrt(pi))", # these are needed for the surface integral in the manual "f(x^2*(1-x^2)^(3/2),(x*sqrt(1-x^2)*(-8*x^4+14*x^2-3)+3*arcsin(x))/48)", "f(x^2*(1-x^2)^(5/2),(x*sqrt(1-x^2)*(48*x^6-136*x^4+118*x^2-15)+15*arcsin(x))/384)", "f(x^4*(1-x^2)^(3/2),(-x*sqrt(1-x^2)*(16*x^6-24*x^4+2*x^2+3)+3*arcsin(x))/128)", "f(x*exp(a*x),exp(a*x)*(a*x-1)/(a^2))", "f(x*exp(a*x+b),exp(a*x+b)*(a*x-1)/(a^2))", "f(x^2*exp(a*x),exp(a*x)*(a^2*x^2-2*a*x+2)/(a^3))", "f(x^2*exp(a*x+b),exp(a*x+b)*(a^2*x^2-2*a*x+2)/(a^3))", "f(x^3*exp(a*x),exp(a*x)*x^3/a-3/a*integral(x^2*exp(a*x),x))", "f(x^3*exp(a*x+b),exp(a*x+b)*x^3/a-3/a*integral(x^2*exp(a*x+b),x))", 0 ] #define F p3 #define X p4 #define N p5 Eval_integral = -> i = 0 n = 0 # evaluate 1st arg to get function F p1 = cdr(p1) push(car(p1)) Eval() # evaluate 2nd arg and then... # example result of 2nd arg what to do # # integral(f) nil guess X, N = nil # integral(f,2) 2 guess X, N = 2 # integral(f,x) x X = x, N = nil # integral(f,x,2) x X = x, N = 2 # integral(f,x,y) x X = x, N = y p1 = cdr(p1) push(car(p1)) Eval() p2 = pop() if (p2 == symbol(NIL)) guess() push(symbol(NIL)) else if (isNumericAtom(p2)) guess() push(p2) else push(p2) p1 = cdr(p1) push(car(p1)) Eval() p5 = pop() p4 = pop() p3 = pop() while (1) # N might be a symbol instead of a number if (isNumericAtom(p5)) push(p5) n = pop_integer() if (isNaN(n)) stop("nth integral: check n") else n = 1 push(p3) if (n >= 0) for i in [0...n] push(p4) integral() else n = -n for i in [0...n] push(p4) derivative() p3 = pop() # if N is nil then arglist is exhausted if (p5 == symbol(NIL)) break # otherwise... # N arg1 what to do # # number nil break # number number N = arg1, continue # number symbol X = arg1, N = arg2, continue # # symbol nil X = N, N = nil, continue # symbol number X = N, N = arg1, continue # symbol symbol X = N, N = arg1, continue if (isNumericAtom(p5)) p1 = cdr(p1) push(car(p1)) Eval() p5 = pop() if (p5 == symbol(NIL)) break; # arglist exhausted if (isNumericAtom(p5)) doNothing = 1 # N = arg1 else p4 = p5; # X = arg1 p1 = cdr(p1) push(car(p1)) Eval() p5 = pop(); # N = arg2 else p4 = p5; # X = N p1 = cdr(p1) push(car(p1)) Eval() p5 = pop(); # N = arg1 push(p3); # final result integral = -> save() p2 = pop() p1 = pop() if (car(p1) == symbol(ADD)) integral_of_sum() else if (car(p1) == symbol(MULTIPLY)) integral_of_product() else integral_of_form() p1 = pop() if (Find(p1, symbol(INTEGRAL))) stop("integral: sorry, could not find a solution") push(p1) simplify(); # polish the result Eval(); # normalize the result restore() integral_of_sum = -> p1 = cdr(p1) push(car(p1)) push(p2) integral() p1 = cdr(p1) while (iscons(p1)) push(car(p1)) push(p2) integral() add() p1 = cdr(p1) integral_of_product = -> push(p1) push(p2) partition() p1 = pop(); # pop variable part integral_of_form() multiply(); # multiply constant part integral_of_form = -> hc = italu_hashcode(p1, p2).toFixed(6) tab = hashed_itab[hc] # console.log('hashcode('+p1+', '+p2+') = ' + hc + ' '+!!tab); if (!tab) # debugger # italu_hashcode(p1, p2) push_symbol(INTEGRAL) push(p1) push(p2) list(3) return push(p1) # free variable push(p2) # input expression transform(tab, false) p3 = pop() if (p3 == symbol(NIL)) push_symbol(INTEGRAL) push(p1) push(p2) list(3) else push(p3) # Implementation of hash codes based on ITALU (An Integral Table Look-Up) # https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19680004891.pdf # see Appendix A, page 153 # The first two values are from the ITALU paper. # The others are just arbitrary constants. hashcode_values = 'x':0.95532, 'constexp':1.43762, 'constant':1.14416593629414332, 'constbase':1.20364122304218824, 'sin': 1.73305482518303221, 'arcsin': 1.6483368529465804, 'cos': 1.058672123686340116, 'arccos': 1.8405225918106694, 'tan': 1.12249437762925064, 'arctan': 1.1297397925394962, 'sinh':1.8176164926060078, 'cosh':1.9404934661708022, 'tanh':1.6421307715103121, 'log':1.47744370135492387, 'erf':1.0825269225702916, italu_hashcode = (u, x) -> if (issymbol(u)) if (equal(u, x)) return hashcode_values.x else return hashcode_values.constant else if (iscons(u)) switch (symnum(car(u))) when ADD then return hash_addition(cdr(u),x) when MULTIPLY then return hash_multiplication(cdr(u), x) when POWER then return hash_power(cadr(u), caddr(u), x) when EXP then return hash_power(symbol(E), cadr(u), x) when SQRT push_double(0.5) half = pop() return hash_power(cadr(u), half, x) else return hash_function(u, x) return hashcode_values.constant hash_function = (u, x) -> if !Find(cadr(u), x) return hashcode_values.constant name = car(u) arg_hash = italu_hashcode(cadr(u), x) base = hashcode_values[name.printname] if (!base) throw new Error('Unsupported function ' + name.printname) return Math.pow(base, arg_hash) hash_addition = (terms, x) -> term_set = {} while (iscons(terms)) term = car(terms) terms = cdr(terms) term_hash = 0 if Find(term, x) term_hash = italu_hashcode(term, x) else # The original algorithm would skip this, # but recording that it was present helps # prevent collisions. term_hash = hashcode_values.constant term_set[term_hash.toFixed(6)] = true sum = 0 for own k,v of term_set sum = sum + parseFloat(k,10) return sum hash_multiplication = (terms, x) -> product = 1 while (iscons(terms)) term = car(terms) terms = cdr(terms) if (Find(term, x)) product = product * italu_hashcode(term, x) return product hash_power = (base, power, x) -> base_hash = hashcode_values.constant exp_hash = hashcode_values.constexp if (Find(base, x)) base_hash = italu_hashcode(base, x) if (Find(power, x)) exp_hash = italu_hashcode(power, x) else # constant to constant = constant if base_hash == hashcode_values.constant return hashcode_values.constant if isminusone(power) exp_hash = -1 else if isoneovertwo(power) exp_hash = 0.5 else if isminusoneovertwo(power) exp_hash = -0.5 else if equalq(power, 2, 1) exp_hash = 2 else if equalq(power, -2, 1) exp_hash = -2 return Math.pow(base_hash, exp_hash) make_hashed_itab = () -> tab = {} for s in itab if !s break scan_meta(s) f = pop() u = cadr(f) h = italu_hashcode(u, symbol(METAX)) key = h.toFixed(6) if (!tab[key]) tab[key]=[] tab[key].push(s) console.log('hashed_itab = '+JSON.stringify(tab, null, 2)) return tab $.make_hashed_itab = make_hashed_itab # pre-calculated hashed integral table. # in case the integral table is changed, use this # Algebrite.make_hashed_itab() # and copy the resulting JSON in here. hashed_itab = { "1.144166": [ "f(a,a*x)" ], "1.046770": [ "f(1/x,log(x))" ], "0.936400": [ "f(x^a,x^(a+1)/(a+1))" ], "1.095727": [ "f(x^(-2),-x^(-1))" ], "1.023118": [ "f(x^(-1/2),2*x^(1/2))" ], "0.977405": [ "f(x^(1/2),2/3*x^(3/2))" ], "0.955320": [ "f(x,x^2/2)" ], "0.912636": [ "f(x^2,x^3/3)" ], "1.137302": [ "f(exp(a*x),1/a*exp(a*x))", "f(a^x,a^x/log(a),or(not(number(a)),a>0))" ], "1.326774": [ "f(exp(a*x+b),1/a*exp(a*x+b))" ], "1.080259": [ "f(x*exp(a*x^2),exp(a*x^2)/(2*a))" ], "1.260228": [ "f(x*exp(a*x^2+b),exp(a*x^2+b)/(2*a))" ], "1.451902": [ "f(log(a*x),x*log(a*x)-x)" ], "0.486192": [ "f(1/(a+x^2),1/sqrt(a)*arctan(x/sqrt(a)),or(not(number(a)),a>0))", "f(1/(a-x^2),1/sqrt(a)*arctanh(x/sqrt(a)))", "f(1/(a+b*x^2),1/sqrt(a*b)*arctan(x*sqrt(a*b)/a),or(not(number(a*b)),a*b>0))", "f(1/(a+b*x^2),1/(2*sqrt(-a*b))*log((a+x*sqrt(-a*b))/(a-x*sqrt(-a*b))),or(not(number(a*b)),a*b<0))" ], "0.697274": [ "f(1/sqrt(a-x^2),arcsin(x/(sqrt(a))))", "f(1/sqrt(a+x^2),log(x+sqrt(a+x^2)))", "f(1/sqrt(x^2+a),log(x+sqrt(x^2+a)))" ], "0.476307": [ "f(1/(a+b*x),1/b*log(a+b*x))" ], "0.226868": [ "f(1/(a+b*x)^2,-1/(b*(a+b*x)))" ], "2.904531": [ "f(1/(a+b*x)^3,-1/(2*b)*1/(a+b*x)^2)" ], "0.455026": [ "f(x/(a+b*x),x/b-a*log(a+b*x)/b/b)" ], "0.216732": [ "f(x/(a+b*x)^2,1/b^2*(log(a+b*x)+a/(a+b*x)))" ], "0.434695": [ "f(x^2/(a+b*x),1/b^2*(1/2*(a+b*x)^2-2*a*(a+b*x)+a^2*log(a+b*x)))" ], "0.207048": [ "f(x^2/(a+b*x)^2,1/b^3*(a+b*x-2*a*log(a+b*x)-a^2/(a+b*x)))" ], "2.650781": [ "f(x^2/(a+b*x)^3,1/b^3*(log(a+b*x)+2*a/(a+b*x)-1/2*a^2/(a+b*x)^2))" ], "0.498584": [ "f(1/x*1/(a+b*x),-1/a*log((a+b*x)/x))" ], "0.237479": [ "f(1/x*1/(a+b*x)^2,1/a*1/(a+b*x)-1/a^2*log((a+b*x)/x))" ], "3.040375": [ "f(1/x*1/(a+b*x)^3,1/a^3*(1/2*((2*a+b*x)/(a+b*x))^2+log(x/(a+b*x))))" ], "0.521902": [ "f(1/x^2*1/(a+b*x),-1/(a*x)+b/a^2*log((a+b*x)/x))" ], "0.446014": [ "f(1/x^3*1/(a+b*x),(2*b*x-a)/(2*a^2*x^2)+b^2/a^3*log(x/(a+b*x)))" ], "0.248586": [ "f(1/x^2*1/(a+b*x)^2,-(a+2*b*x)/(a^2*x*(a+b*x))+2*b/a^3*log((a+b*x)/x))" ], "0.464469": [ "f(x/(a+b*x^2),1/2*1/b*log(a+b*x^2))" ], "0.443716": [ "f(x^2/(a+b*x^2),x/b-a/b*integral(1/(a+b*x^2),x))" ], "0.236382": [ "f(1/(a+b*x^2)^2,x/(2*a*(a+b*x^2))+1/2*1/a*integral(1/(a+b*x^2),x))" ], "0.508931": [ "f(1/x*1/(a+b*x^2),1/2*1/a*log(x^2/(a+b*x^2)))" ], "0.532733": [ "f(1/x^2*1/(a+b*x^2),-1/(a*x)-b/a*integral(1/(a+b*x^2),x))" ], "0.480638": [ "f(1/(a+b*x^3),1/3*1/a*(a/b)^(1/3)*(1/2*log(((a/b)^(1/3)+x)^3/(a+b*x^3))+sqrt(3)*arctan((2*x-(a/b)^(1/3))*(a/b)^(-1/3)/sqrt(3))))" ], "0.438648": [ "f(x^2/(a+b*x^3),1/3*1/b*log(a+b*x^3))" ], "0.459164": [ "f(x/(a+b*x^4),1/2*sqrt(b/a)/b*arctan(x^2*sqrt(b/a)),or(not(number(a*b)),a*b>0))", "f(x/(a+b*x^4),1/4*sqrt(-b/a)/b*log((x^2-sqrt(-a/b))/(x^2+sqrt(-a/b))),or(not(number(a*b)),a*b<0))" ], "0.450070": [ "f(x^3/(a+b*x^4),1/4*1/b*log(a+b*x^4))" ], "1.448960": [ "f(sqrt(a+b*x),2/3*1/b*sqrt((a+b*x)^3))" ], "1.384221": [ "f(x*sqrt(a+b*x),-2*(2*a-3*b*x)*sqrt((a+b*x)^3)/15/b^2)" ], "1.322374": [ "f(x^2*sqrt(a+b*x),2*(8*a^2-12*a*b*x+15*b^2*x^2)*sqrt((a+b*x)^3)/105/b^3)" ], "1.516728": [ "f(sqrt(a+b*x)/x,2*sqrt(a+b*x)+a*integral(1/x*1/sqrt(a+b*x),x))" ], "1.587665": [ "f(sqrt(a+b*x)/x^2,-sqrt(a+b*x)/x+b/2*integral(1/x*1/sqrt(a+b*x),x))" ], "0.690150": [ "f(1/sqrt(a+b*x),2*sqrt(a+b*x)/b)" ], "0.659314": [ "f(x/sqrt(a+b*x),-2/3*(2*a-b*x)*sqrt(a+b*x)/b^2)" ], "0.629856": [ "f(x^2/sqrt(a+b*x),2/15*(8*a^2-4*a*b*x+3*b^2*x^2)*sqrt(a+b*x)/b^3)" ], "0.722428": [ "f(1/x*1/sqrt(a+b*x),1/sqrt(a)*log((sqrt(a+b*x)-sqrt(a))/(sqrt(a+b*x)+sqrt(a))),or(not(number(a)),a>0))", "f(1/x*1/sqrt(a+b*x),2/sqrt(-a)*arctan(sqrt(-(a+b*x)/a)),or(not(number(a)),a<0))" ], "0.756216": [ "f(1/x^2*1/sqrt(a+b*x),-sqrt(a+b*x)/a/x-1/2*b/a*integral(1/x*1/sqrt(a+b*x),x))" ], "1.434156": [ "f(sqrt(x^2+a),1/2*(x*sqrt(x^2+a)+a*log(x+sqrt(x^2+a))))", "f(sqrt(a-x^2),1/2*(x*sqrt(a-x^2)+a*arcsin(x/sqrt(abs(a)))))", "f(sqrt(a*x^2+b),x*sqrt(a*x^2+b)/2+b*log(x*sqrt(a)+sqrt(a*x^2+b))/2/sqrt(a),and(number(a),a>0))", "f(sqrt(a*x^2+b),x*sqrt(a*x^2+b)/2+b*arcsin(x*sqrt(-a/b))/2/sqrt(-a),and(number(a),a<0))" ], "0.729886": [ "f(1/x*1/sqrt(x^2+a),arcsec(x/sqrt(-a))/sqrt(-a),or(not(number(a)),a<0))", "f(1/x*1/sqrt(x^2+a),-1/sqrt(a)*log((sqrt(a)+sqrt(x^2+a))/x),or(not(number(a)),a>0))", "f(1/x*1/sqrt(a-x^2),-1/sqrt(a)*log((sqrt(a)+sqrt(a-x^2))/x),or(not(number(a)),a>0))" ], "1.501230": [ "f(sqrt(x^2+a)/x,sqrt(x^2+a)-sqrt(a)*log((sqrt(a)+sqrt(x^2+a))/x),or(not(number(a)),a>0))", "f(sqrt(x^2+a)/x,sqrt(x^2+a)-sqrt(-a)*arcsec(x/sqrt(-a)),or(not(number(a)),a<0))", "f(sqrt(a-x^2)/x,sqrt(a-x^2)-sqrt(a)*log((sqrt(a)+sqrt(a-x^2))/x),or(not(number(a)),a>0))" ], "0.666120": [ "f(x/sqrt(x^2+a),sqrt(x^2+a))", "f(x/sqrt(a-x^2),-sqrt(a-x^2))" ], "1.370077": [ "f(x*sqrt(x^2+a),1/3*sqrt((x^2+a)^3))", "f(x*sqrt(a-x^2),-1/3*sqrt((a-x^2)^3))" ], "1.730087": [ "f(sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/4*(x*sqrt((x^2+a^(1/3))^3)+3/2*a^(1/3)*x*sqrt(x^2+a^(1/3))+3/2*a^(2/3)*log(x+sqrt(x^2+a^(1/3)))))", "f(sqrt(-a+x^6-3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/4*(x*sqrt((x^2-a^(1/3))^3)-3/2*a^(1/3)*x*sqrt(x^2-a^(1/3))+3/2*a^(2/3)*log(x+sqrt(x^2-a^(1/3)))))" ], "0.578006": [ "f(1/sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),x/a^(1/3)/sqrt(x^2+a^(1/3)))" ], "0.552180": [ "f(x/sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),-1/sqrt(x^2+a^(1/3)))" ], "1.652787": [ "f(x*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/5*sqrt((x^2+a^(1/3))^5))" ], "1.308862": [ "f(x^2*sqrt(x^2+a),1/4*x*sqrt((x^2+a)^3)-1/8*a*x*sqrt(x^2+a)-1/8*a^2*log(x+sqrt(x^2+a)))", "f(x^2*sqrt(a-x^2),-x/4*sqrt((a-x^2)^3)+1/8*a*(x*sqrt(a-x^2)+a*arcsin(x/sqrt(a))),or(not(number(a)),a>0))" ], "1.342944": [ "f(x^3*sqrt(x^2+a),(1/5*x^2-2/15*a)*sqrt((x^2+a)^3),and(number(a),a>0))", "f(x^3*sqrt(x^2+a),sqrt((x^2+a)^5)/5-a*sqrt((x^2+a)^3)/3,and(number(a),a<0))", "f(x^3*sqrt(a-x^2),(-1/5*x^2-2/15*a)*sqrt((a-x^2)^3),or(not(number(a)),a>0))", "f(sqrt(a-x^2)/x^3,-1/2*sqrt(a-x^2)/x^2+1/2*log((sqrt(a)+sqrt(a-x^2))/x)/sqrt(a),or(not(number(a)),a>0))", "f(sqrt(a-x^2)/x^4,-1/3*sqrt((a-x^2)^3)/a/x^3,or(not(number(a)),a>0))" ], "0.636358": [ "f(x^2/sqrt(x^2+a),1/2*x*sqrt(x^2+a)-1/2*a*log(x+sqrt(x^2+a)))", "f(x^2/sqrt(a-x^2),-x/2*sqrt(a-x^2)+a/2*arcsin(x/sqrt(a)),or(not(number(a)),a>0))" ], "0.652928": [ "f(x^3/sqrt(x^2+a),1/3*sqrt((x^2+a)^3)-a*sqrt(x^2+a))", "f(1/x^3*1/sqrt(x^2+a),-1/2*sqrt(x^2+a)/a/x^2+1/2*log((sqrt(a)+sqrt(x^2+a))/x)/a^(3/2),or(not(number(a)),a>0))", "f(1/x^3*1/sqrt(x^2-a),1/2*sqrt(x^2-a)/a/x^2+1/2*1/(a^(3/2))*arcsec(x/(a^(1/2))),or(not(number(a)),a>0))" ], "0.764022": [ "f(1/x^2*1/sqrt(x^2+a),-sqrt(x^2+a)/a/x)", "f(1/x^2*1/sqrt(a-x^2),-sqrt(a-x^2)/a/x,or(not(number(a)),a>0))" ], "1.578940": [ "f(x^2*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/6*x*sqrt((x^2+a^(1/3))^5)-1/24*a^(1/3)*x*sqrt((x^2+a^(1/3))^3)-1/16*a^(2/3)*x*sqrt(x^2+a^(1/3))-1/16*a*log(x+sqrt(x^2+a^(1/3))),or(not(number(a)),a>0))", "f(x^2*sqrt(-a-3*a^(1/3)*x^4+3*a^(2/3)*x^2+x^6),1/6*x*sqrt((x^2-a^(1/3))^5)+1/24*a^(1/3)*x*sqrt((x^2-a^(1/3))^3)-1/16*a^(2/3)*x*sqrt(x^2-a^(1/3))+1/16*a*log(x+sqrt(x^2-a^(1/3))),or(not(number(a)),a>0))" ], "1.620055": [ "f(x^3*sqrt(a+x^6+3*a^(1/3)*x^4+3*a^(2/3)*x^2),1/7*sqrt((x^2+a^(1/3))^7)-1/5*a^(1/3)*sqrt((x^2+a^(1/3))^5),or(not(number(a)),a>0))", "f(x^3*sqrt(-a-3*a^(1/3)*x^4+3*a^(2/3)*x^2+x^6),1/7*sqrt((x^2-a^(1/3))^7)+1/5*a^(1/3)*sqrt((x^2-a^(1/3))^5),or(not(number(a)),a>0))" ], "0.332117": [ "f(1/(x-a)/sqrt(x^2-a^2),-sqrt(x^2-a^2)/a/(x-a))", "f(1/(x+a)/sqrt(x^2-a^2),sqrt(x^2-a^2)/a/(x+a))" ], "1.571443": [ "f(sqrt(a-x^2)/x^2,-sqrt(a-x^2)/x-arcsin(x/sqrt(a)),or(not(number(a)),a>0))" ], "1.690994": [ "f(sin(a*x),-cos(a*x)/a)" ], "1.055979": [ "f(cos(a*x),sin(a*x)/a)" ], "1.116714": [ "f(tan(a*x),-log(cos(a*x))/a)" ], "0.895484": [ "f(1/tan(a*x),log(sin(a*x))/a)" ], "0.946989": [ "f(1/cos(a*x),log(tan(pi/4+a*x/2))/a)" ], "0.591368": [ "f(1/sin(a*x),log(tan(a*x/2))/a)" ], "2.859462": [ "f(sin(a*x)^2,x/2-sin(2*a*x)/(4*a))" ], "2.128050": [ "f(sin(a*x)^3,-cos(a*x)*(sin(a*x)^2+2)/(3*a))", "f(sin(a*x)^4,3/8*x-sin(2*a*x)/(4*a)+sin(4*a*x)/(32*a))" ], "1.115091": [ "f(cos(a*x)^2,x/2+sin(2*a*x)/(4*a))" ], "1.081452": [ "f(cos(a*x)^3,sin(a*x)*(cos(a*x)^2+2)/(3*a))", "f(cos(a*x)^4,3/8*x+sin(2*a*x)/(4*a)+sin(4*a*x)/(32*a))" ], "0.349716": [ "f(1/sin(a*x)^2,-1/(a*tan(a*x)))" ], "0.896788": [ "f(1/cos(a*x)^2,tan(a*x)/a)" ], "1.785654": [ "f(sin(a*x)*cos(a*x),sin(a*x)^2/(2*a))" ], "3.188560": [ "f(sin(a*x)^2*cos(a*x)^2,-sin(4*a*x)/(32*a)+x/8)" ], "1.516463": [ "f(sin(a*x)/cos(a*x)^2,1/(a*cos(a*x)))" ], "2.707879": [ "f(sin(a*x)^2/cos(a*x),(log(tan(pi/4+a*x/2))-sin(a*x))/a)" ], "0.369293": [ "f(cos(a*x)/sin(a*x)^2,-1/(a*sin(a*x)))" ], "0.560019": [ "f(1/(sin(a*x)*cos(a*x)),log(tan(a*x))/a)" ], "0.530332": [ "f(1/(sin(a*x)*cos(a*x)^2),(1/cos(a*x)+log(tan(a*x/2)))/a)" ], "0.331177": [ "f(1/(sin(a*x)^2*cos(a*x)),(log(tan(pi/4+a*x/2))-1/sin(a*x))/a)" ], "0.313621": [ "f(1/(sin(a*x)^2*cos(a*x)^2),-2/(a*tan(2*a*x)))" ], "3.172365": [ "f(sin(a+b*x),-cos(a+b*x)/b)" ], "1.127162": [ "f(cos(a+b*x),sin(a+b*x)/b)" ], "0.352714": [ "f(1/(b+b*sin(a*x)),-tan(pi/4-a*x/2)/a/b)", "f(1/(b-b*sin(a*x)),tan(pi/4+a*x/2)/a/b)", "f(1/(a+b*sin(x)),1/sqrt(b^2-a^2)*log((a*tan(x/2)+b-sqrt(b^2-a^2))/(a*tan(x/2)+b+sqrt(b^2-a^2))),b^2-a^2)" ], "0.454515": [ "f(1/(b+b*cos(a*x)),tan(a*x/2)/a/b)", "f(1/(b-b*cos(a*x)),-1/tan(a*x/2)/a/b)", "f(1/(a+b*cos(x)),1/sqrt(b^2-a^2)*log((sqrt(b^2-a^2)*tan(x/2)+a+b)/(sqrt(b^2-a^2)*tan(x/2)-a-b)),b^2-a^2)" ], "1.615441": [ "f(x*sin(a*x),sin(a*x)/a^2-x*cos(a*x)/a)" ], "1.543263": [ "f(x^2*sin(a*x),2*x*sin(a*x)/a^2-(a^2*x^2-2)*cos(a*x)/a^3)" ], "1.008798": [ "f(x*cos(a*x),cos(a*x)/a^2+x*sin(a*x)/a)" ], "0.963724": [ "f(x^2*cos(a*x),2*x*cos(a*x)/a^2+(a^2*x^2-2)*sin(a*x)/a^3)" ], "1.611938": [ "f(arcsin(a*x),x*arcsin(a*x)+sqrt(1-a^2*x^2)/a)" ], "1.791033": [ "f(arccos(a*x),x*arccos(a*x)-sqrt(1-a^2*x^2)/a)" ], "1.123599": [ "f(arctan(a*x),x*arctan(a*x)-1/2*log(1+a^2*x^2)/a)" ], "1.387031": [ "f(x*log(a*x),x^2*log(a*x)/2-x^2/4)" ], "1.325058": [ "f(x^2*log(a*x),x^3*log(a*x)/3-1/9*x^3)" ], "2.108018": [ "f(log(x)^2,x*log(x)^2-2*x*log(x)+2*x)" ], "0.403214": [ "f(1/x*1/(a+log(x)),log(a+log(x)))" ], "2.269268": [ "f(log(a*x+b),(a*x+b)*log(a*x+b)/a-x)" ], "2.486498": [ "f(log(a*x+b)/x^2,a/b*log(x)-(a*x+b)*log(a*x+b)/b/x)" ], "1.769733": [ "f(sinh(x),cosh(x))" ], "1.883858": [ "f(cosh(x),sinh(x))" ], "1.606140": [ "f(tanh(x),log(cosh(x)))" ], "1.690661": [ "f(x*sinh(x),x*cosh(x)-sinh(x))" ], "1.799688": [ "f(x*cosh(x),x*sinh(x)-cosh(x))" ], "3.131954": [ "f(sinh(x)^2,sinh(2*x)/4-x/2)" ], "2.579685": [ "f(tanh(x)^2,x-tanh(x))" ], "3.548923": [ "f(cosh(x)^2,sinh(2*x)/4+x/2)" ], "1.058866": [ "f(x^3*exp(a*x^2),exp(a*x^2)*(x^2/a-1/(a^2))/2)" ], "1.235270": [ "f(x^3*exp(a*x^2+b),exp(a*x^2)*exp(b)*(x^2/a-1/(a^2))/2)" ], "1.130783": [ "f(exp(a*x^2),-i*sqrt(pi)*erf(i*sqrt(a)*x)/sqrt(a)/2)" ], "1.078698": [ "f(erf(a*x),x*erf(a*x)+exp(-a^2*x^2)/a/sqrt(pi))" ], "2.573650": [ "f(x^2*(1-x^2)^(3/2),(x*sqrt(1-x^2)*(-8*x^4+14*x^2-3)+3*arcsin(x))/48)", "f(x^2*(1-x^2)^(5/2),(x*sqrt(1-x^2)*(48*x^6-136*x^4+118*x^2-15)+15*arcsin(x))/384)" ], "2.640666": [ "f(x^4*(1-x^2)^(3/2),(-x*sqrt(1-x^2)*(16*x^6-24*x^4+2*x^2+3)+3*arcsin(x))/128)" ], "1.086487": [ "f(x*exp(a*x),exp(a*x)*(a*x-1)/(a^2))" ], "1.267493": [ "f(x*exp(a*x+b),exp(a*x+b)*(a*x-1)/(a^2))" ], "1.037943": [ "f(x^2*exp(a*x),exp(a*x)*(a^2*x^2-2*a*x+2)/(a^3))" ], "1.210862": [ "f(x^2*exp(a*x+b),exp(a*x+b)*(a^2*x^2-2*a*x+2)/(a^3))" ], "1.064970": [ "f(x^3*exp(a*x),exp(a*x)*x^3/a-3/a*integral(x^2*exp(a*x),x))" ], "1.242392": [ "f(x^3*exp(a*x+b),exp(a*x+b)*x^3/a-3/a*integral(x^2*exp(a*x+b),x))" ] }