-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
WIP: Solver for Lyapunov and Sylvester equations #303
base: master
Are you sure you want to change the base?
Conversation
On my working branch, I have replaced usage of |
Yes, I think we should definitely switch over to using the MatrixEquations package instead of having custom Solvers. One thing that also immediately gets us is the ability to have the cross-term in the LQR design functions. |
The current implementation of Some time ago I made an attempt a shot to at a more appropriate Julia implementation, which made it a lot more readable IMO. https://github.com/olof3/SylvesterEquations.jl. For most testcases it performs on par with ME, sometimes some 30-50% faster, (the numbers in the first post of this thread are a bit outdated). For the Riccati equations it is less trivial, but the version in MatrixEquations seems quite vanilla. I have made some attempts to get something together for that as well. On my todo list is to get something together and investigate if a joint effort can be made MatrixEquations (which I guess would be ideal). The alternative is a new package under JuliaControl, perhaps What about the naming? I really like the approach in |
For methods accepting |
Right, for
Excellent, I think we should keep the the reference from |
Straight-forward Implementation of Bartels--Stewart's algorithm.
It seems to perform quite well and the code is reasonably concise compared to e.g., the implementation in MatrixEquations. The intention is not to pull this into ControlSystems.jl (at least not in the long run), but to see if anyone has some comments @baggepinnen , @mfalt
Here are some benchmarks, the number of (view) allocations are very high but that doesn't seem to hurt the performance (I tried an alternative version with a lot less allocations, but the execution time did not seem to improve, if anything it got a bit worse). The number of allocations is reduced by more than half in julia 1.5 (1.6?).
The existing implementations of
sylvc
andlyapc
in LinearAlgebra (only continuous time) and MatrixEquations use LAPACK's trsyl, which is a bit hard to compete with.