Tôi đã viết một hộp công cụ hệ thống điều khiển từ đầu và hoàn toàn bằng Python3 (plugin không biết xấu hổ harold
:). Từ nghiên cứu trước đây của tôi, tôi luôn phàn nàn về người giải Riccati care.m
vì những lý do kỹ thuật / không liên quan.
Do đó, tôi đã viết ra các thói quen của riêng mình. Một điều tôi không thể tìm ra cách để có được một thuật toán cân bằng hiệu suất cao, ít nhất là tốt như balance.m
. Trước khi bạn đề cập đến nó, xGEBAL
gia đình được hiển thị trong Scipy và về cơ bản bạn có thể gọi từ Scipy như sau, giả sử bạn có một mảng 2D kiểu float A
:
import scipy as sp
gebal = sp.linalg.get_lapack_funcs(('gebal'),(A,)) # this picks up DGEBAL
Ab, lo, hi, scaling , info = gebal(A, scale=1 , permute=1 , overwrite_a=0 )
Bây giờ nếu tôi sử dụng ma trận kiểm tra sau
array([[ 6. , 0. , 0. , 0. , 0.000002],
[ 0. , 8. , 0. , 0. , 0. ],
[ 2. , 2. , 6. , 0. , 0. ],
[ 2. , 2. , 0. , 8. , 0. ],
[ 0. , 0. , 0.000002, 0. , 2. ]])
tôi có
array([[ 8. , 0. , 0. , 2. , 2. ],
[ 0. , 2. , 0.000002, 0. , 0. ],
[ 0. , 0. , 6. , 2. , 2. ],
[ 0. , 0.000002, 0. , 6. , 0. ],
[ 0. , 0. , 0. , 0. , 8. ]])
Tuy nhiên, nếu tôi chuyển cái này cho balance.m
, tôi nhận được
>> balance(A)
ans =
8.0000 0 0 0.0625 2.0000
0 2.0000 0.0001 0 0
0 0 6.0000 0.0002 0.0078
0 0.0003 0 6.0000 0
0 0 0 0 8.0000
Nếu bạn kiểm tra các mẫu hoán vị, chúng giống nhau tuy nhiên tỷ lệ bị tắt. gebal
cung cấp tỷ lệ thống nhất trong khi MATLAB cho các quyền hạn sau 2 : [-5,0,8,0,2]
.
Vì vậy, rõ ràng, đây không phải là sử dụng cùng một máy móc. Tôi đã thử nhiều lựa chọn khác nhau như Lemonnier, Van Dooren chia tỷ lệ hai mặt, Parlett-Reinsch ban đầu và một số phương pháp ít được biết đến khác trong tài liệu như phiên bản dày đặc SPBALANCE
.
Một điểm có lẽ tôi có thể nhấn mạnh là tôi nhận thức được công việc của Benner; đặc biệt là Cân bằng Symplectic của Ma trận Hamilton đặc biệt cho mục đích này. Tuy nhiên, lưu ý rằng loại điều trị này được thực hiện trong gcare.m
(bộ giải Riccati tổng quát) và việc cân bằng được thực hiện trực tiếp thông qua balance.m
. Do đó, tôi sẽ đánh giá cao nếu ai đó có thể chỉ cho tôi thực hiện thực tế.
Tiết lộ: Tôi thực sự không cố gắng đảo ngược mã kỹ sư toán học: Tôi thực sự muốn thoát khỏi nó vì nhiều lý do bao gồm cả động lực của câu hỏi này, nghĩa là, tôi không biết nó đang làm gì khiến tôi phải trả giá của thời gian trở lại trong ngày. Ý định của tôi là có được một thuật toán cân bằng thỏa đáng cho phép tôi vượt qua các ví dụ CAREX để tôi có thể thực hiện các phương pháp lặp Newton trên đầu bộ giải thông thường.