Sıfırdan ve tamamen Python3 (utanmaz fiş:) bir kontrol sistemi araç kutusu yazıyorum harold
. Geçmişteki araştırmamdan, Riccati çözücüsü hakkında her zaman care.m
teknik / alakasız nedenlerden dolayı şikayetlerim var .
Bu yüzden kendi rutinlerimi yazıyorum. Bir yol bulamadığım bir şey, en azından kadar iyi bir yüksek performanslı dengeleme algoritması elde etmektir balance.m
. Bahsetmeden önce, xGEBAL
aile Scipy'de ortaya çıkar ve temel olarak Scipy'den aşağıdaki gibi çağrı yapabilirsiniz, şamandıra tipi bir 2D diziniz olduğunu varsayalım 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 )
Şimdi aşağıdaki test matrisini kullanırsam
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. ]])
alırım
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. ]])
Ancak, bunu geçersem balance.m
,
>> 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
Permütasyon kalıplarını kontrol ederseniz, bunlar aynıdır ancak ölçeklendirme kapalıdır. gebal
birlik ölçeklendirmesi verirken matlab 2 [-5,0,8,0,2]
.
Görünüşe göre, bunlar aynı makineleri kullanmıyor. Lemonnier, Van Dooren iki taraflı ölçekleme, orijinal Parlett-Reinsch ve ayrıca literatürde yoğun versiyonu gibi daha az bilinen diğer yöntemler gibi çeşitli seçenekler denedim SPBALANCE
.
Belki vurgulayabileceğim bir nokta, Benner'in çalışmalarının farkında olduğumdur; özellikle de bu amaç için özel olarak Hamilton Matrislerinin Sezgisel Dengelenmesi . Bununla birlikte, bu tip tedavinin gcare.m
(genelleştirilmiş Riccati çözücü) içinde yapıldığını ve dengelemenin doğrudan yoluyla yapıldığını unutmayın balance.m
. Bu nedenle, birisinin beni gerçek uygulamaya yönlendirip yönlendiremeyeceğini takdir ediyorum.
Açıklama: Gerçekten mühendislik matematik kodunu tersine çevirmeye çalışmıyorum: Aslında bu sorunun motivasyonu da dahil olmak üzere çeşitli nedenlerle ondan kurtulmak istiyorum, yani bana ne kadar pahalıya mal olduğunu bilmiyorum gün içinde geri döndü. Amacım, Newton yineleme yöntemlerini normal çözücünün üstüne uygulayabileceğim şekilde CAREX örneklerini geçmeme izin veren tatmin edici bir dengeleme algoritması elde etmektir.