UNPKG

algebrite

Version:

Computer Algebra System in Coffeescript

419 lines (293 loc) 8.41 kB
test_simplify = -> run_test [ "simplify(A)", "A", "simplify(A+B)", "A+B", "simplify(A B)", "A*B", "simplify(A^B)", "A^B", "simplify(A/(A+B)+B/(A+B))", "1", "simplify((A-B)/(B-A))", "-1", "A=[[A11,A12],[A21,A22]]", "", "simplify(det(A) inv(A) - adj(A))", "0", "A=quote(A)", "", # this shows need for <= in try_factoring # "x*(1+a)", # "x+a*x", # "simplify(last)", # "x*(1+a)", "simplify(-3 exp(-1/3 r + i phi) cos(theta) / sin(theta)\ + 3 exp(-1/3 r + i phi) cos(theta) sin(theta)\ + 3 exp(-1/3 r + i phi) cos(theta)^3 / sin(theta))", "0", "simplify((A^2 C^2 + A^2 D^2 + B^2 C^2 + B^2 D^2)/(A^2+B^2)/(C^2+D^2))", "1", "simplify(d(arctan(y/x),y))", "x/(x^2+y^2)", "simplify(d(arctan(y/x),x))", "-y/(x^2+y^2)", "simplify(1-sin(x)^2)", "cos(x)^2", "simplify(1-cos(x)^2)", "sin(x)^2", "simplify(sin(x)^2-1)", "-cos(x)^2", "simplify(cos(x)^2-1)", "-sin(x)^2", # tries to get rid of sin and cos if there are more # compact clockforms or exponential forms "simplify(-cos(2/5*pi)*(k/a)^(1/5)-i*(k/a)^(1/5)*sin(2/5*pi))", "((k/a)^(2/5))^(1/2)/((-1)^(3/5))", #"simfac(n!/n)-(n-1)!", #"0", #"simfac(n/n!)-1/(n-1)!", #"0", #"simfac(rationalize((n+k+1)/(n+k+1)!))-1/(n+k)!", #"0", #"simfac(condense((n+1)*n!))-(n+1)!", #"0", #"simfac(1/((n+1)*n!))-1/(n+1)!", #"0", #"simfac((n+1)!/n!)-n-1", #"0", #"simfac(n!/(n+1)!)-1/(n+1)", #"0", #"simfac(binomial(n+1,k)/binomial(n,k))", #"(1+n)/(1-k+n)", #"simfac(binomial(n,k)/binomial(n+1,k))", #"(1-k+n)/(1+n)", #"F(nn,kk)=kk*binomial(nn,kk)", #"", #"simplify(simfac((F(n,k)+F(n,k-1))/F(n+1,k))-n/(n+1))", #"0", #"F=quote(F)", #"", "simplify(n!/n)-(n-1)!", "0", "simplify(n/n!)-1/(n-1)!", "0", "simplify(rationalize((n+k+1)/(n+k+1)!))-1/(n+k)!", "0", "simplify(condense((n+1)*n!))-(n+1)!", "0", "simplify(1/((n+1)*n!))-1/(n+1)!", "0", "simplify((n+1)!/n!)-n-1", "0", "simplify(n!/(n+1)!)-1/(n+1)", "0", "simplify(binomial(n+1,k)/binomial(n,k))", "(1+n)/(1-k+n)", "simplify(binomial(n,k)/binomial(n+1,k))", "(1-k+n)/(1+n)", "F(nn,kk)=kk*binomial(nn,kk)", "", "simplify((F(n,k)+F(n,k-1))/F(n+1,k))-n/(n+1)", "0", "F=quote(F)", "", "simplify((n+1)/(n+1)!)-1/n!", "0", "simplify(a*b+a*c)", "a*(b+c)", # Symbol's binding is evaluated, undoing simplify "x=simplify(a*b+a*c)", "", "x", "a*b+a*c", "x=quote(x)", "", "simplify((6 - 4*2^(1/2))^(1/2))", "2-2^(1/2)", "4-4*(-1)^(1/3)+4*(-1)^(2/3)", "0", "simplify(4-4*(-1)^(1/3)+4*(-1)^(2/3))", "0", # this requires some simplification to be # further done after the de-nesting "simplify(14^(1/2) - (16 - 4*7^(1/2))^(1/2))", "2^(1/2)", "simplify(-(2^(1/2)*(-1+7^(1/2)))+2^(1/2)*7^(1/2))", "2^(1/2)", "simplify((9 + 6*2^(1/2))^(1/2))", "3^(1/2)*(1+2^(1/2))", "simplify((7 + 13^(1/2))^(1/2))", "(1+13^(1/2))/(2^(1/2))", # two nested radicals at the same time "simplify((17 + 12*2^(1/2))^(1/2) + (17 - 12*2^(1/2))^(1/2))", "6", "simplify((2 + 3^(1/2))^(1/2))", "(1+3^(1/2))/(2^(1/2))", "simplify((1/2 + (39^(1/2)/16))^(1/2))", "(3^(1/2)+13^(1/2))/(4*2^(1/2))", # there would be a slightly better presentation for this, # where 108 is factored and some parts get out of the # radical but there is no way to de-nest this. "simplify((-108+108*(-1)^(1/2)*3^(1/2))^(1/3))", "6*(-1)^(2/9)", # also: "(-108+108*i*3^(1/2))^(1/3)" is a possible result # you can take that 4 out of the radical # but other than that there is no # "sum or radicals" form of this "simplify((-4+4*(-1)^(1/2)*3^(1/2))^(1/3))", "2*(-1)^(2/9)", # also: "(-4+4*i*3^(1/2))^(1/3)" is a possible result # scrambling the order of things a little # and checking whether the nested radical # still gets simplified. "simplify((((-3)^(1/2) + 1)/2)^(1/2))", #"(-1)^(1/6)", "1/2*(i+3^(1/2))", "simplify((1/2 + (-3)^(1/2)/2)^(1/2))", #"(-1)^(1/6)", "1/2*(i+3^(1/2))", # no possible de-nesting, should # leave unchanged. "simplify((2 +2^(1/2))^(1/2))", "(2+2^(1/2))^(1/2)", "simplify((1 +3^(1/2)/2)^(1/2) + (1 -3^(1/2)/2)^(1/2))", "3^(1/2)", "simplify((1 +3^(1/2)/2)^(1/2))", "1/2*(1+3^(1/2))", # not quite perfect as there is a radical at the # denominator, but the de-nesting happens. "simplify(((1 +39^(1/2)/8)/2)^(1/2))", "(3^(1/2)+13^(1/2))/(4*2^(1/2))", "simplify((5 +24^(1/2))^(1/2))", "2^(1/2)+3^(1/2)", "simplify((3 +4*i)^(1/2))", "2+i", "simplify((3 -4*i)^(1/2))", "2-i", "simplify((-2 +2*3^(1/2)*i)^(1/2))", #"2*(-1)^(1/3)", "1+i*3^(1/2)", "simplify((9 - 4*5^(1/2))^(1/2))", "-2+5^(1/2)", "simplify((61 - 24*5^(1/2))^(1/2))", "-4+3*5^(1/2)", "simplify((-352+936*(-1)^(1/2))^(1/3))", "2*(4+3*i)", "simplify((3 - 2*2^(1/2))^(1/2))", "-1+2^(1/2)", "simplify((27/2+27/2*(-1)^(1/2)*3^(1/2))^(1/3))", "3*(-1)^(1/9)", # also good: (27/2+27/2*i*3^(1/2))^(1/3) # this nested radical is also equal to # (-1)^(1/9) # but there is no "sum of radicals" form # for this. "simplify((1/2+1/2*(-1)^(1/2)*3^(1/2))^(1/3))", "(-1)^(1/9)", # also good: (1/2+1/2*i*3^(1/2))^(1/3) "simplify((2 + 5^(1/2))^(1/3))", "1/2*(1+5^(1/2))", "simplify((-3 + 10*3^(1/2)*i/9)^(1/3))", "1+2/3*i*3^(1/2)", "simplify((1-3*x^2+3*x^4-x^6)^(1/2))", "(-x^6+3*x^4-3*x^2+1)^(1/2)", "simplify(subst((-1)^(1/2),i,(-3 + 10*3^(1/2)*i/9)^(1/3)))", "1+2/3*i*3^(1/2)", "simplify(rationalize(-3 + 10*3^(1/2)*i/9)^(1/3))", "1+2/3*i*3^(1/2)", # note that sympy doesn't give a straight symbolic answer to # this one, the result to this is numeric instead, and with # a near-zero imaginary part. # In Sympy one can get to the answer obliquely with minpoly instead, # as minpoly((-1)^(1/6) - (-1)^(5/6)) -> x^2−3 "simplify((-1)^(1/6) - (-1)^(5/6))", "3^(1/2)", "simplify((7208+2736*5^(1/2))^(1/3))", "17+3*5^(1/2)", "simplify((901+342*5^(1/2))^(1/3))", "1/2*(17+3*5^(1/2))", "-i*(-2*(-1)^(1/6)/(3^(1/2))+2*(-1)^(5/6)/(3^(1/2)))^(1/4)*(2*(-1)^(1/6)/(3^(1/2))-2*(-1)^(5/6)/(3^(1/2)))^(1/4)/(2^(1/2))", "1/2^(1/2)-i/(2^(1/2))", "simplify(-i*(-2*(-1)^(1/6)/(3^(1/2))+2*(-1)^(5/6)/(3^(1/2)))^(1/4)*(2*(-1)^(1/6)/(3^(1/2))-2*(-1)^(5/6)/(3^(1/2)))^(1/4)/(2^(1/2)))", # this one simplifies to any of these two, these are all the same: "(1-i)/(2^(1/2))", # -(-1)^(3/4) #"-(-1)^(3/4)", "(-1)^(-5/a)", #"(-1)^(-5/a)", "1/(-1)^(5/a)", # ----------------------- "simplify((-1)^(-5))", "-1", "simplify((-1)^(5))", "-1", "simplify((1)^(-5))", "1", "simplify((1)^(5))", "1", # seems here that the simplification # has more nodes than the result but # it's not the case: the 1/... inversion # is just done at the print level for # legibility "simplify((-1)^(-5/a))", #"(-1)^(-5/a)", "1/(-1)^(5/a)", "simplify((-1)^(5/a))", "(-1)^(5/a)", "simplify((1)^(-5/a))", "1", "simplify((1)^(5/a))", "1", # ----------------------- "simplify((-1)^(-6))", "1", "simplify((-1)^(6))", "1", "simplify((1)^(-6))", "1", "simplify((1)^(6))", "1", # clockform can be much more compact than the # rectangular format so we return that one, # the user can always do a rect or a circexp on # the result if she desires other forms "simplify(i*2^(1/4)*sin(1/8*pi)+2^(1/4)*cos(1/8*pi))", "(-1)^(1/8)*2^(1/4)", # the circexp of the above is # 2^(1/4) exp(1/8 i pi), which is less compact # seems here that the simplification # has more nodes than the result but # it's not the case: the 1/... inversion # is just done at the print level for "simplify((-1)^(-6/a))", #"(-1)^(-6/a)", "1/(-1)^(6/a)", "simplify((-1)^(6/a))", "(-1)^(6/a)", "simplify((1)^(-6/a))", "1", "simplify((1)^(6/a))", "1", "simplify(transpose(A)*transpose(x))", "transpose(A*x)", "simplify(inner(transpose(A),transpose(x)))", "transpose(inner(x,A))", # --------------------------------------------- # checking that simplify doesn't make incorrect # simplifications "simplify(sqrt(-1/2 -1/2 * x))", "(-1/2*x-1/2)^(1/2)", "simplify(sqrt(x*y))", "(x*y)^(1/2)", "simplify(sqrt(1/x))", "(1/x)^(1/2)", "simplify(sqrt(x^y))", "(x^y)^(1/2)", "simplify(sqrt(x)^2)", "x", "simplify(sqrt(x^2))", "abs(x)", ]