Inverse Response Simulator Back
Control System Simulator

Inverse Response Simulator — Step Response of an RHP-Zero Process

A process with a right-half-plane zero first moves opposite to the setpoint on a step input — the inverse response. Vary the process gain and zero time constant to see how PI control copes.

Parameters
Process gain K
RHP zero time constant T_z
s
First pole time constant T_1
s
Second pole time constant T_2
s

PI gains are fixed at K_c = 0.3 and T_i = 5 s. Simulation 0–30 s with dt = 0.05 s. When T_1 ≈ T_2 a tiny perturbation is added for numerical stability.

Results
Reversal peak y_min
Reversal time t*
Final value y(∞) = K
5% settling time t_s
Open-Loop Step Response y_ol(t)

Red = response with RHP zero / gray dashed = plain first-order K(1−e^(−t/T1)) / yellow dots = reversal time t* and negative peak y_min.

PI Closed-Loop Response y_cl(t)

Blue = closed-loop output y_cl(t) / gray dashed = setpoint r = 1. PI gains fixed at K_c=0.3, T_i=5 s. Note the transient dip opposite to the target.

Theory & Key Formulas

Transfer function of a second-order process with an RHP zero:

$$G(s) = \frac{K\,(-T_z\,s + 1)}{(T_1\,s + 1)(T_2\,s + 1)},\quad T_z>0$$

Analytic step response (for T_1 ≠ T_2):

$$y(t) = K + \frac{K}{T_2 - T_1}\left[(T_1 + T_z)\,e^{-t/T_1} - (T_2 + T_z)\,e^{-t/T_2}\right]$$

Initial slope at t = 0⁺ is negative:

$$\left.\frac{dy}{dt}\right|_{t=0^+} = -\frac{K\,T_z}{T_1\,T_2} \lt 0$$

Empirical upper bound on the closed-loop bandwidth set by the RHP zero:

$$\omega_{BW} \lesssim \frac{1}{2\,T_z}$$

A larger $T_z$ makes the initial slope steeper and the reversal deeper; a smaller $T_z$ leaves only a shallow dip, and the response approaches a plain first-order curve.

What is the Inverse Response Simulator

🙋
What is "inverse response"? It is strange that on a step input the output first goes down before climbing up.
🎓
Roughly speaking, certain processes have a "right-half-plane (RHP) zero" in the numerator of their transfer function, and the moment you apply a step the output moves opposite to the setpoint. In $G(s)=K(-T_z s+1)/((T_1 s+1)(T_2 s+1))$ it is that $-T_z s$ term. In the simulator above, drag T_z from 0.1 up to 5 — you will see the dip get deeper as T_z grows.
🙋
Does that really happen in real systems?
🎓
It is actually common. The classic example is the power of a boiling-water reactor (BWR). When you withdraw a control rod, before fission really ramps up, the sudden growth of steam voids reduces moderation and power dips for a moment. Boiler-drum water level is another one — closing the feedwater valve makes the level go up first, because the steam bubbles collapse. It is called the swell-and-shrink effect.
🙋
Got it. So why is this hard for feedback control?
🎓
An RHP zero puts a physical ceiling on the control bandwidth. A rule of thumb is that the achievable closed-loop bandwidth is at most about $1/(2T_z)$. Push the gain past that and the initial wrong-way motion gets amplified — the controller misreads it and presses harder, so the loop blows up. In the closed-loop chart, K_c and T_i are fixed; if you increase T_z the dip gets larger and the loop takes longer to settle.
🙋
So when I really want to push the PI loop, what do I do?
🎓
The right answer is usually "give up some speed". Internal Model Control (IMC) recommends a filter time constant on the order of T_z or larger. Skogestad's SIMC rule treats the RHP zero as an effective dead time. The mantra in the field is "robust before fast" — which is exactly how BWR control is tuned in practice.

Frequently Asked Questions

A non-minimum-phase system is the general term for any system whose transfer function has a right-half-plane zero or pole, or a pure time delay. An RHP zero is one specific type, known for causing inverse response. An RHP pole is a different problem (it is an unstable pole and the system itself diverges). A dead time $e^{-Ls}$ is another non-minimum-phase element that imposes a similar "no-look-ahead" limit on control bandwidth, much like an RHP zero.
When the steam load surges, the drum pressure drops instantly. The saturation temperature falls, and steam bubbles that were already in the drum water expand rapidly, so the apparent level rises for a short time. The actual water mass is decreasing, so eventually the level falls, but the fast bubble expansion produces an initial upward dip — a textbook inverse response. To cope with it, feedwater is controlled with three-element control (level, steam flow, feedwater flow) rather than single-element level control.
Not completely. Feedforward anticipates a disturbance or setpoint change and pre-compensates for it, but the ideal "inverse plant" $1/G(s)$ of an RHP-zero process contains an RHP pole and is itself unstable. In practice, model predictive control (MPC) or a setpoint filter that smooths the step are used so the inverse response is never excited. Inverse response is a physical fact — better to design around it than to try to cancel it.
For an RHP-zero process, the IMC filter time constant should be of order $T_z$ — typically $τc \geq 1.7\,T_z$ — so that the closed-loop bandwidth stays below $1/(2T_z)$ and the inverse response is not destabilising. In Skogestad's SIMC rule the RHP zero is treated as an effective dead time $\theta_{eff} \approx T_z$, with PI gain $K_c = (1/K)\cdot τ_1/(τc+\theta_{eff})$ as a widely used guideline.

Real-World Applications

BWR core power control: Right after a control rod is withdrawn, the negative void coefficient causes core power to dip momentarily before rising. Ignoring this inverse response and pushing the controller can couple with void oscillations and destabilise the core, so operator training and control design treat the inverse response as a given.

Boiler drum water-level control: Drum levels in power and process plants are a classic inverse-response system. A jump in steam demand expands the bubbles inside the drum water (swell), pushing the level up momentarily even though the actual water mass is decreasing. Single-element control easily diverges, so three-element control combining level, steam flow and feedwater flow is the standard countermeasure.

Aircraft altitude and attitude control: A nose-up pitch command applied at the elevator first generates a small downward lift at the horizontal stabilizer, momentarily dropping the aircraft before it climbs. This RHP-zero-induced inverse response shapes the trade-off between responsiveness and stability in fly-by-wire control laws.

Distillation column composition control: An increase in reflux can briefly drive the top composition the wrong way before the desired light-component shift takes over. Chemical plants embed such non-minimum-phase behaviour in the internal model of an MPC so that aggressive control moves are penalised, and limit how fast composition setpoints can move.

Common Misconceptions and Cautions

The most common misconception is to treat the inverse response as a bad controller — to imagine it can be tuned away. It cannot. The RHP zero is a physical property of the plant, baked into the equations, and no controller can fully remove it. In the simulator, keep K_c and T_i fixed and vary T_z; the closed-loop settling time grows with T_z regardless of how the controller is tuned. The correct mindset is to design the loop assuming the inverse response is there, not to fight it.

The next pitfall is to assume that higher gain always means faster response. For an RHP-zero process, raising the PI gain too far amplifies the initial dip, deepens the negative peak and either lengthens the settling time or causes outright divergence. The simulator uses conservative gains K_c=0.3, T_i=5 on purpose; in real plants this "do not push too hard" attitude is what keeps the operation stable. As a rule of thumb, keep the closed-loop bandwidth below about $1/(2T_z)$.

Finally, remember that the reversal depth y_min and reversal time t* are not independent knobs. Both are governed by the same set of plant parameters K, T_z, T_1 and T_2, and they trade off against each other. Increasing T_z deepens the dip but also tends to shorten t* (the initial slope $-K T_z/(T_1 T_2)$ becomes steeper). Watch both stat values as you sweep T_z in the simulator. Making T_z smaller on the plant side is the most effective way to ease control — but it usually requires redesigning the process, not the controller.