JuliaControl / ControlSystems.jl

A Control Systems Toolbox for Julia
https://juliacontrol.github.io/ControlSystems.jl/stable/
Other
513 stars 85 forks source link

dare validation unsuitable for H-inf synthesis #440

Open kjellqvist opened 3 years ago

kjellqvist commented 3 years ago

The command dare(A, B, Q, R) has validation on R > 0, this is unsuitable for H-infinity synthesis.

finding the stationary H-inf controller amounts to finding a fixpoint to the dare:

P = Q + A'(P^(-1) + BR^(-1)B -I/gamma^2)A.

This is equivalent to solving the lqr problem with augmented B = [B I] and R = [R 0;0 -gamma^2]. The algorithm which is already implemented works well, however R* is indefinite so calling dare(A, B, Q, R) throws an error.

Minimal test case:

gamma = 2 A = ones((1,1)) B = ones((1,2)) Q = ones((1,1)) R = [1. 0;0 -gamma^2]

P = dare(A,B,Q,R)

@test P[1,1] \approx 1/2 + sqrt(4/3 + 1/4)

olof3 commented 3 years ago

I'm working on a PR fixing this and some other issues, I hope to have the time to finish it any day now.

kjellqvist commented 3 years ago

Great - could you provide a link to the PR?

olof3 commented 3 years ago

https://github.com/olof3/ControlMatrixEquations.jl A lot more that needs to be done and some design decisions that need to be taken. I'd be happy if you'd give it a try. You can post issues in that package or just let me know directly.

For an idea of the integration with ControlSystems.jl see #443

kjellqvist commented 3 years ago

Thank you @olof3, I will try it.