Skip to content

Commit 74d49ac

Browse files
authored
Refine governor validation details
1 parent 128a62d commit 74d49ac

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

examples/steam_engine_governor.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
'load_time': 5.0,
3535
'sim_time': 25.0,
3636
}
37+
SETTLING_TOLERANCE = 0.02
3738

3839

3940
def create_governor_system(params):
@@ -109,7 +110,7 @@ def summarize_response(system, time, outputs, target):
109110
final_speed = speed[-1]
110111
peak_speed = np.max(speed)
111112
minimum_speed = np.min(speed)
112-
tolerance = max(0.02 * max(abs(target), abs(final_speed)), 1e-3)
113+
tolerance = max(SETTLING_TOLERANCE * max(abs(target), abs(final_speed)), 1e-3)
113114
if abs(target) < 1e-9:
114115
overshoot = 0.0
115116
elif target > 0:
@@ -118,6 +119,7 @@ def summarize_response(system, time, outputs, target):
118119
overshoot = max(0.0, (target - minimum_speed) / abs(target) * 100)
119120
steady_state_error = target - final_speed
120121
poles = list(ct.poles(system))
122+
# Use the least stable (rightmost) poles as the dominant dynamics.
121123
dominant_poles = sorted(poles, key=lambda pole: pole.real)[-min(2, len(poles)):]
122124
damping_ratios = []
123125
for pole in dominant_poles:
@@ -147,7 +149,7 @@ def summary_text(metrics):
147149
if np.isfinite(metrics['settling_time']) else 'not settled'
148150
)
149151
return '\n'.join([
150-
f'Settling time (2% band): {settling}',
152+
f'Settling time ({SETTLING_TOLERANCE:.0%} band): {settling}',
151153
f'Overshoot: {metrics["overshoot"]:.2f}%',
152154
f'Steady-state error: {metrics["steady_state_error"]:.4f}',
153155
f'Dominant poles: {poles}',

0 commit comments

Comments
 (0)