JoeB

25 Reputation

One Badge

0 years, 280 days

MaplePrimes Activity


These are questions asked by JoeB

I am creating an algebra that includes shift operators. These operators commute with one another, but do not commute with anything else. I know that the Physics package enables you to make symbols non-commutative, but I would still like these operators to commute with one another. How can I do that?

I am trying to create a ring of difference operators with customly defined actions. I have managed to get the code to work to an extent, but I am having trouble creating the inverse operators. For example, if Sn sends n to n+2, I want to create Sn^(-1) that sends n to n-2. When I tried to input this into the algebra itself, it gave me the following error: "Error, (in Ore_algebra:-skew_algebra) indeterminate n may appear in a single commutation only". Below is the code that creates the difference algebra. Apologies for the bad formatting.


> with(Ore_algebra);

> CreateDifferenceAlgebra := proc (vars::(list(symbol)), offsets::(list(numeric)))


local actions, i, var, diff_op,
shift_offset, algebra; actions := table();
for i to numelems(vars) do
   var := vars[i];
   diff_op := convert(cat("S",\var), symbol);
   shift_offset := offsets[i];
   actions[diff_op] := (proc (values) options operator, arrow; proc (u, order)
      local res; res := u;
      to order do res := subs(values[1] = values[1]+values[3], res*values[2]) end do;
      res
      end proc

   end proc)([var, diff_op, shift_offset]) end do;


algebra := Ore_algebra:-skew_algebra(seq(shift = [convert(cat("S",

vars[i]), symbol), vars[i]], i = 1 .. numelems(vars)),

action = {seq(convert(cat("S", vars[i]), symbol) =
actions[convert(cat("S", vars[i]), symbol)], i = 1 ..
numelems(vars))}); return algebra end proc


;

 

 

Page 1 of 1