|
38 | 38 |
|
39 | 39 | import warnings |
40 | 40 |
|
41 | | -from numpy import shape, size, asarray, copy, zeros, eye, dot, \ |
| 41 | +from numpy import shape, size, asarray, copy, zeros, eye, \ |
42 | 42 | finfo, inexact, atleast_2d |
43 | 43 | from scipy.linalg import eigvals, solve_discrete_are, solve |
44 | 44 | from .exception import ControlSlycot, ControlArgument |
@@ -496,9 +496,9 @@ def care(A, B, Q, R=None, S=None, E=None, stabilizing=True): |
496 | 496 |
|
497 | 497 | # Calculate the gain matrix G |
498 | 498 | if size(R_b) == 1: |
499 | | - G = dot(dot(1/(R_ba), asarray(B_ba).T), X) |
| 499 | + G = 1/(R_ba) * asarray(B_ba).T @ X |
500 | 500 | else: |
501 | | - G = dot(solve(R_ba, asarray(B_ba).T), X) |
| 501 | + G = solve(R_ba, asarray(B_ba).T) @ X |
502 | 502 |
|
503 | 503 | # Return the solution X, the closed-loop eigenvalues L and |
504 | 504 | # the gain matrix G |
@@ -567,9 +567,9 @@ def care(A, B, Q, R=None, S=None, E=None, stabilizing=True): |
567 | 567 |
|
568 | 568 | # Calculate the gain matrix G |
569 | 569 | if size(R_b) == 1: |
570 | | - G = dot(1/(R_b), dot(asarray(B_b).T, dot(X, E_b)) + asarray(S_b).T) |
| 570 | + G = 1/(R_b) * (asarray(B_b).T @ X @ E_b + asarray(S_b).T) |
571 | 571 | else: |
572 | | - G = solve(R_b, dot(asarray(B_b).T, dot(X, E_b)) + asarray(S_b).T) |
| 572 | + G = solve(R_b, asarray(B_b).T @ X @ E_b + asarray(S_b).T) |
573 | 573 |
|
574 | 574 | # Return the solution X, the closed-loop eigenvalues L and |
575 | 575 | # the gain matrix G |
@@ -629,8 +629,8 @@ def dare(A, B, Q, R, S=None, E=None, stabilizing=True): |
629 | 629 | Rmat = _ssmatrix(R) |
630 | 630 | Qmat = _ssmatrix(Q) |
631 | 631 | X = solve_discrete_are(A, B, Qmat, Rmat) |
632 | | - G = solve(B.T.dot(X).dot(B) + Rmat, B.T.dot(X).dot(A)) |
633 | | - L = eigvals(A - B.dot(G)) |
| 632 | + G = solve(B.T @ X @ B + Rmat, B.T @ X @ A) |
| 633 | + L = eigvals(A - B @ G) |
634 | 634 | return _ssmatrix(X), L, _ssmatrix(G) |
635 | 635 |
|
636 | 636 |
|
@@ -718,11 +718,11 @@ def dare_old(A, B, Q, R, S=None, E=None, stabilizing=True): |
718 | 718 |
|
719 | 719 | # Calculate the gain matrix G |
720 | 720 | if size(R_b) == 1: |
721 | | - G = dot(1/(dot(asarray(B_ba).T, dot(X, B_ba)) + R_ba), |
722 | | - dot(asarray(B_ba).T, dot(X, A_ba))) |
| 721 | + G = (1/(asarray(B_ba).T @ X @ B_ba + R_ba) * |
| 722 | + asarray(B_ba).T @ X @ A_ba) |
723 | 723 | else: |
724 | | - G = solve(dot(asarray(B_ba).T, dot(X, B_ba)) + R_ba, |
725 | | - dot(asarray(B_ba).T, dot(X, A_ba))) |
| 724 | + G = solve(asarray(B_ba).T @ X @ B_ba + R_ba, |
| 725 | + asarray(B_ba).T @ X @ A_ba) |
726 | 726 |
|
727 | 727 | # Return the solution X, the closed-loop eigenvalues L and |
728 | 728 | # the gain matrix G |
@@ -791,11 +791,11 @@ def dare_old(A, B, Q, R, S=None, E=None, stabilizing=True): |
791 | 791 |
|
792 | 792 | # Calculate the gain matrix G |
793 | 793 | if size(R_b) == 1: |
794 | | - G = dot(1/(dot(asarray(B_b).T, dot(X, B_b)) + R_b), |
795 | | - dot(asarray(B_b).T, dot(X, A_b)) + asarray(S_b).T) |
| 794 | + G = (1/(asarray(B_b).T @ X @ B_b + R_b) * |
| 795 | + (asarray(B_b).T @ X @ A_b + asarray(S_b).T)) |
796 | 796 | else: |
797 | | - G = solve(dot(asarray(B_b).T, dot(X, B_b)) + R_b, |
798 | | - dot(asarray(B_b).T, dot(X, A_b)) + asarray(S_b).T) |
| 797 | + G = solve(asarray(B_b).T @ X @ B_b + R_b, |
| 798 | + asarray(B_b).T @ X @ A_b + asarray(S_b).T) |
799 | 799 |
|
800 | 800 | # Return the solution X, the closed-loop eigenvalues L and |
801 | 801 | # the gain matrix G |
|
0 commit comments