The function |toeplksolvetoeplk| currently computes inv(TL1) * TL2, and this is used in both |mrdivide| and |mldivide| in |ToepMat|. However, the current implementation needs to transpose a lot, e.g.,
TL1 / TL2 = (TL2' \ TL1' )'
which makes generators unneccessarily long, and introduces additional roundoff from the explicit ctransposes involved.
Instead |toeplksolvetoeplk| could be extended so that both operands are used implicitly as ctransposed quantities. This change entails that the matrices involved need to be represented as Zp/Zm or Zm/Zp low-drank, which requires some carful thoughts upfront. One can draw, however, from the already existing functionality in |toeplksolve| and |toeplkmult|.
The function |toeplksolvetoeplk| currently computes inv(TL1) * TL2, and this is used in both |mrdivide| and |mldivide| in |ToepMat|. However, the current implementation needs to transpose a lot, e.g.,
TL1 / TL2 = (TL2' \ TL1' )'
which makes generators unneccessarily long, and introduces additional roundoff from the explicit ctransposes involved.
Instead |toeplksolvetoeplk| could be extended so that both operands are used implicitly as ctransposed quantities. This change entails that the matrices involved need to be represented as Zp/Zm or Zm/Zp low-drank, which requires some carful thoughts upfront. One can draw, however, from the already existing functionality in |toeplksolve| and |toeplkmult|.