# Pattern 3: L = symmetric_product( DF^2+a(x)-b(x),DF^2+a(x)+b(x) ) # # How to recognize pattern 3: # # L = DF^4 - B(x)*DF^3 + 4*a(x)*DF^2 # + (-4*B(x)*a(x)+6*diff(a(x),x))*DF # + 4*b(x)^2 - 2*B(x)*diff(a(x),x) + 2*diff(a(x),x,x) # # where B(x)=diff(b(x),x)/b(x) # so b(x)=exp(Int(B(x),x)) # # Additional properties: # Let L1 = symmetric_power(DF^2+a(x)-b(x),2) # L2 = symmetric_power(DF^2+a(x)+b(x),2) # and M1 = symmetric_power(L1,2), and same for M2. # Then # 1) symmetric_power(L,2) = symmetric_product(M1,M2) and # in particular the order of this is < 10. # # 2) exterior_power(L,2) = LCLM(M1, M2) # This statement is slightly different when the coeff of # DF^1 in DF^2+a(x)-b(x), DF^2+a(x)+b(x) is non-zero. # # Can also write L as: # # L = DF^4 + a3(x)*DF^3 + a2(x)*DF^2 # + (3/2*diff(a2(x),x)+a2(x)*a3(x))*DF # + DESol({-2*diff(a0(x),x)+diff(a2(x),x,x,x) # +diff(a3(x),x)*diff(a2(x),x)+3*a3(x)*diff(a2(x),x,x) # -4*a3(x)*a0(x)+2*a3(x)^2*diff(a2(x),x)},{a0(x)}) # # Mark van Hoeij, June 2000. # Pattern 3. is_sympr_o2_no_DF1 := proc(A,x,v) local y,bx2,bx,I1,I2; option `Copyright (c) 2000 Waterloo Maple Inc. All rights reserved. \ Author: M. van Hoeij`; if nops(A)=5 and A[1]<>0 and iszero(3*diff(A[3],x)/2+A[3]*A[4]-A[2]) then bx2:=Normalizer((A[1]-diff(A[3],x,x)/2-2*A[4]*diff(A[3],x)/4)/4); # b(x)^2 if bx2<>0 and iszero(diff(bx2,x)/bx2 + 2*A[4]) then bx:=ROOT(bx2,x,2); I1,I2:=Normalizer(A[3]/4-bx), Normalizer(A[3]/4+bx); v:=[diff(y(x),x,x)+I1*y(x), diff(y(x),x,x)+I2*y(x), y(x)]; return true fi fi; false end: ##################################################################### solve_sympr_o2_no_DF1 := proc(v) local i,j,ans1,ans2; option `Copyright (c) 2000 Waterloo Maple Inc. All rights reserved. \ Author: M. van Hoeij`; ans1 := dsolve(v[1],v[3],'output'='basis'); if not type(ans1,list) then ans1:=[ans1] fi; ans2 := dsolve(v[2],v[3],'output'='basis'); if not type(ans2,list) then ans2:=[ans2] fi; [seq(seq(i*j,i=ans1),j=ans2)] end: ##################################################################### # Pattern 5: L = symmetric_product( L1,L2 ) # # where L1,L2 have order 2. # # How to recognize pattern 5: # # Assume that coeff(L,DF,3)=0 so we can write # L = DF^4 + A[3]*DF^2 + A[2]*DF + A[1] # # Then b(x)^(-1/2) is a solution of L3 = 5/2*DF^3+A[3]*DF+3/2*diff(A[3],x)-A[2] # where b(x) is as in pattern 3. # # Example where b(x) is itself a square root: # DF^4+3/32*(32*x^3+7)/x^2*DF^2+21/64*(16*x^3-3)/x^3*DF # +1/4096*(2752*x^3+3213)/x^4; # so we'll look for solutions y of L3 for which y^4 is a rational function. # # Mark van Hoeij, June 2000. # Pattern 5. is_sympr_o2 := proc(A,x,V) local v,i,j,Bx,w,DF; option `Copyright (c) 2000 Waterloo Maple Inc. All rights reserved. \ Author: M. van Hoeij`; v:=map(Normalizer, [ ( 3*diff(A[3],x) -2*A[2] + A[3]*A[4] )/5 - diff(A[4],x,x)/2 -( A[4]^3+9*A[4]*diff(A[4],x) )/20, ( 2*A[3]-3*diff(A[4],x) )/5 -3/20*A[4]^2, 0, 1]); if type(A,list(ratpoly(anything,x))) then v:=`DEtools/Expsols`(v,0,x,`use Int`,`no algext`,radical,denom,4); for i in sort(v,(i,j) -> evalb(length(i)0 then userinfo(2,dsolve, `Multiplying solutions by`,exp(Int(Bx,x))); v:=traperror(symmetric_product(DF-Bx,add(A[j+1]*DF^j,j=0..4),[DF,x])); if v = lasterror then return(false) fi; if is_sympr_o2_no_DF1([seq(coeff(v,DF,j),j=0..4)],x,'w') then V:=[op(w),-Bx]; return true fi fi od fi; false end: ##################################################################### solve_sympr_o2:=proc(v,x) local ans,i,j; option `Copyright (c) 2000 Waterloo Maple Inc. All rights reserved. \ Author: M. van Hoeij`; ans:=solve_sympr_o2_no_DF1(v); j:=EXP_INT(v[4],x); [seq(j*i,i=ans)] end: #####################################################################