# $Source: /u/maple/research/lib/DEtools/src/RCS/eigenring,v $ # $Notify: mvanhoei@daisy.uwaterloo.ca $ macro( DF=`DEtools/diffop/DF`, x=`DEtools/diffop/x`, eigenring=`DEtools/diffop/eigenring`, endomorphism_charpoly=`DEtools/diffop/endomorphism_charpoly` ): # Input a differential operator L # Output: the eigenring `DEtools/eigenring`:=proc(L,domain) local d,v; option `Copyright (c) 1997 Waterloo Maple Inc. All rights reserved. Author: M. van Hoeij`; d:=[args]; v := indets(d,{radical,nonreal}); if v<>{} then v := radfield(v); return eval(subs(v[2],procname(op(eval(subs(v[1],d)))))) fi; d:=`if`(nargs>1 and type(domain,list),domain,_Envdiffopdomain); if nops(d)<>2 then error "differential algebra not specified" fi; _Envdiffopdomain:=d; # for the userinfo's in diffop. # call the eigenring code map(sort,subs(DF=d[1],x=d[2], eigenring(subs(d[1]=DF,d[2]=x,L),args[2..nargs])),d[1]) end: # Input a differential operator L and a differential operator r: V(L) -> V(L) # Output: the characteristic polynomial of this map r. `DEtools/endomorphism_charpoly`:=proc(L,r,domain) local d,v; option `Copyright (c) 1997 Waterloo Maple Inc. All rights reserved. Author: M. van Hoeij`; d:=[args]; v := indets(d,{radical,nonreal}); if v<>{} then v := radfield(v); return eval(subs(v[2],procname(op(eval(subs(v[1],d)))))) fi; d:=`if`(nargs>2,domain,_Envdiffopdomain); if nops(d)<>2 then error "differential algebra not specified" fi; # call the endomorphism_charpoly code subs(DF=d[1],x=d[2], endomorphism_charpoly(op(subs(d[1]=DF,d[2]=x,[L,r])))) end: #savelib('`DEtools/eigenring`','`DEtools/endomorphism_charpoly`'):