Currently, the TransferOperator automatically determines the image of a certain domain, that is, if you run
T = TransferOperator(F, W)
then transitions are calculated over the BoxSet W, and the image is just generated.
However, this means that if a set is not truly forward invariant, then the TransferOperator will not be a square matrix. This leads to issues if one wants to calculate approximate eigenvalues of the operator over a compact domain, if the domain is not invariant.
One possible way to solve this is to enumerate the domain and image Boxsets separately:
Right now the image is identical to the domain, unless the set is not invariant. Then, the new boxes are added to the variant_set field in the TransferOperator. Hence the size of the TransferOperator is (length(domain) + length(variant_set), length(domain)).
We could instead create the fields domain and image in TransferOperator, and then the size of the TransferOperator would be (length(image), length(domain)).
The domain could then be either automatically generated, or passed as an extra argument. Something like TransferOperator(F, W, W) would force the image to be the same as the domain.
This however leads to the issue that the domain and image have to both be stored in memory. Particularly if you know the set is invariant, this would be unnecessary storage.
Currently, the TransferOperator automatically determines the image of a certain domain, that is, if you run
then transitions are calculated over the BoxSet
W
, and the image is just generated.However, this means that if a set is not truly forward invariant, then the TransferOperator will not be a square matrix. This leads to issues if one wants to calculate approximate eigenvalues of the operator over a compact domain, if the domain is not invariant.
One possible way to solve this is to enumerate the domain and image Boxsets separately:
variant_set
field in the TransferOperator. Hence the size of the TransferOperator is(length(domain) + length(variant_set), length(domain))
.domain
andimage
in TransferOperator, and then the size of the TransferOperator would be(length(image), length(domain))
.TransferOperator(F, W, W)
would force the image to be the same as the domain.