ฉันได้รับการเขียนกล่องเครื่องมือระบบการควบคุมจากรอยขีดข่วนและหมดจดใน Python3 (เสียบด้านหน้า: harold
) จากการวิจัยที่ผ่านมาของฉันฉันมักจะบ่นเกี่ยวกับนักแก้ปัญหา Riccati care.m
ด้วยเหตุผลที่เป็นเทคนิค / ไม่เกี่ยวข้อง
ดังนั้นฉันได้เขียนชุดคำสั่งของตัวเอง balance.m
สิ่งหนึ่งที่ผมไม่สามารถหาวิธีรอบคือการได้รับขั้นตอนวิธีการสมดุลและมีประสิทธิภาพสูงอย่างน้อยดีเท่า ก่อนที่คุณจะพูดถึงมันxGEBAL
ในครอบครัวเป็นที่เปิดเผยใน SciPy และคุณโดยทั่วไปสามารถโทรจาก SciPy ดังต่อไปนี้สมมติว่าคุณมีชนิดลอย 2D อาร์เรย์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 )
ตอนนี้ถ้าฉันใช้เมทริกซ์ทดสอบต่อไปนี้
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. ]])
ฉันเข้าใจ
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. ]])
อย่างไรก็ตามถ้าฉันผ่านสิ่งนี้ไป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
หากคุณตรวจสอบรูปแบบการเรียงสับเปลี่ยนพวกเขาจะเหมือนกัน แต่การปรับขนาดจะปิด gebal
ให้ scalings ความสามัคคีในขณะ MATLAB ให้อำนาจดังต่อไปของ [-5,0,8,0,2]
2:
เห็นได้ชัดว่าสิ่งเหล่านี้ไม่ได้ใช้เครื่องจักรเดียวกัน ฉันได้พยายามตัวเลือกต่างๆเช่น Lemonnier แวน Dooren สองปรับด้านเดิม Parlett-Reinsch และยังมีบางวิธีน้อยอื่น ๆ SPBALANCE
ที่รู้จักในวรรณคดีเช่นรุ่นหนาแน่น
มีอยู่ช่วงหนึ่งที่ฉันอาจจะเน้นว่าฉันตระหนักถึงงานของเบ็นเนอร์ โดยเฉพาะSymplectic Balancing ของ Hamiltonian Matricesโดยเฉพาะเพื่อจุดประสงค์นี้ อย่างไรก็ตามทราบว่าประเภทของการรักษานี้จะทำภายในgcare.m
(generalized แก้ Riccati) balance.m
และความสมดุลจะทำโดยตรงผ่านทาง ดังนั้นฉันจะขอบคุณถ้ามีคนชี้ให้ฉันไปสู่การปฏิบัติจริง
การเปิดเผยข้อมูล: ฉันไม่ได้พยายามที่จะย้อนกลับรหัสทางคณิตศาสตร์ของคณิตศาสตร์: ฉันต้องการที่จะหนีจากมันด้วยเหตุผลหลายประการรวมถึงแรงจูงใจของคำถามนี้คือการพูดว่าฉันไม่รู้ว่ามันทำอะไร ย้อนเวลากลับไปในวันนั้น ความตั้งใจของฉันคือการได้อัลกอริธึมการสร้างสมดุลที่น่าพอใจซึ่งทำให้ฉันสามารถส่งตัวอย่าง CAREX เพื่อให้ฉันสามารถใช้วิธีการวนซ้ำแบบนิวตันที่อยู่ด้านบนของตัวแก้ไขแบบปกติ