PhysSandbox
Classical MechanicsWaves & SoundElectricity & MagnetismOptics & LightGravity & OrbitsLabs
🌙Astronomy & The Sky🌡️Thermodynamics🌍Biophysics, Fluids & Geoscience📐Math Visualization🔧Engineering🧪Chemistry

Related simulators

Similar topics nearby (including related fields) — or browse all 48 in Engineering.

View category →
NewUniversity / research

Root Locus: 1 + K·G(s) = 0

Launch Simulator

Same pole–zero plant editor as the Bode/Nyquist map: trace closed-loop poles as K sweeps log-spaced, asymptotes and real-axis locus sketch, Durand–Kerner roots at the current K; characteristic D(s)+K g₀ N₀(s)=0.

NewUniversity / research

Nyquist Plot (linear systems)

Launch Simulator

Open-loop L(jω) in the complex plane vs frequency; critical point −1 and distance teaching aid.

NewUniversity / research

Jeffcott Rotor Critical Speed

Launch Simulator

Single disk on a flexible shaft: ω_n = √(k/m), unbalance response, whirl orbit, phase lag, and critical-speed crossing.

NewUniversity / research

AM / FM Modulation

Launch Simulator

Carrier + message: AM envelope vs FM phase; waveform and DFT spectrum snapshot.

NewUniversity / research

PID Controller (1D)

Launch Simulator

Cart on a track: Kp, Ki, Kd and random velocity impulses toward set-point x = 0.

NewSchool

Mohr Circle & Stress Transformation

Launch Simulator

Plane stress σx, σy, τxy: Mohr circle, transformed stresses on a rotated element, principal stresses, τmax, and θp.

PhysSandbox

Interactive physics, chemistry, and engineering simulators for students, teachers, and curious minds.

Physics

  • Classical Mechanics
  • Waves & Sound
  • Electricity & Magnetism

Science

  • Optics & Light
  • Gravity & Orbits
  • Astronomy & The Sky

More

  • Thermodynamics
  • Biophysics, Fluids & Geoscience
  • Math Visualization
  • Engineering
  • Chemistry

© 2026 PhysSandbox. Free interactive science simulators.

PrivacyTermsContact
Home/Engineering/Bode & Nyquist from Pole–Zero Map

Bode & Nyquist from Pole–Zero Map

Click the s-plane to place real or complex-conjugate poles (●) and zeros (×); G(s)=K∏(s−z)/∏(s−p). Live Bode magnitude/phase and Nyquist plot with −1 point; phase and gain margins from principal crossings (teaching heuristics).

G(s) = K · ∏(s−zᵢ) / ∏(s−pⱼ)

1

Poles (red) and zeros (cyan crosses) are listed below — remove with ×.

Poles
σ=-1.00 jω=0.00
Zeros
—

Shortcuts

  • •Shift+click on the s-plane removes the nearest pole or zero (cannot remove the last pole).

Measured values

Phase margin—
ω_gc—
Gain margin—
ω_−180—

About this model

This page builds a scalar rational transfer function G(s) = K ∏(s − z_i) / ∏(s − p_j) with real coefficients, so every non-real pole or zero you place is automatically mirrored as a complex-conjugate pair. You edit the map directly on a compact s-plane (σ vs jω), then see the same model three ways: Bode magnitude and phase versus ω on log axes, a Nyquist trace of G(jω) with the −1 reference for unity-feedback stories, and numeric phase margin and gain margin readouts. Margins are computed on a dense logarithmic frequency grid by unwrapping phase to count the first 0 dB crossing of |G| as ω increases (for phase margin) and the first −180° crossing of the unwrapped phase (for gain margin). When several crossings exist—as in conditionally stable or non-minimum-phase loops—the textbook recipe is ambiguous; the page therefore documents a pedagogical heuristic (worst among detected crossings) rather than a full robustness audit. Pair it with the first-order electricity/bode-diagram and preset electricity/nyquist-diagram simulators for layered homework.

Who it's for: Junior or senior undergraduates in classical control or introductory mechatronics who already know poles and zeros algebraically but want a fast, visual link to frequency-domain plots and margin vocabulary.

Key terms

  • Transfer function
  • Pole
  • Zero
  • Bode plot
  • Nyquist plot
  • Phase margin
  • Gain margin
  • Unity feedback
  • Non-minimum phase

How it works

Build a proper rational open-loop model G(s) = K ∏(s−zᵢ)/∏(s−pⱼ) with conjugate-symmetric roots (click the s-plane: off-axis points add a complex pair). The Bode view plots |G| and ∠G versus ω (log scale); the Nyquist view draws G(jω) from ω→0⁺ to ∞ with the −1 point for unity-feedback intuition. Phase margin is 180° + ∠G at the first 0 dB gain crossover when |G| falls through unity as ω increases; gain margin is −|G|_dB at the first −180° crossing of the unwrapped phase (teaching heuristic when multiple crossings exist). Compare with the first-order electricity/bode-diagram and preset electricity/nyquist-diagram pages.

Key equations

G(jω) = K · ∏(jω − zᵢ) / ∏(jω − pⱼ)
PM = 180° + ∠G(jω_gc) at |G(jω_gc)| = 1
GM_dB = −20 log₁₀|G(jω_pc)| at ∠G(jω_pc) = −180° (first crossings, ω increasing)

Frequently asked questions

Why can the reported margins disagree with my textbook example?
Real loop transfers can cross 0 dB or −180° multiple times. Different textbooks pick different crossings (for example, the lowest gain crossover or the last one before roll-off). This simulator labels its rule explicitly—first crossings while ω increases—and takes the minimum phase margin and minimum gain margin among detected crossings as a simple “worst case among the obvious crossings” teaching aid.
What happens if I stack poles at the origin?
Each integrator raises low-frequency gain and adds −90° of phase per pole. The Bode plot can blow up near ω = 0, and the Nyquist trace may need a large indent near the origin that this sketch does not draw—so the polar plot is qualitative for type ≥ 2 loops. Margins may read undefined if the searched band never exhibits the expected crossings.
Does placing a zero in the right half-plane break the math?
The evaluation G(jω) remains well defined, but the non-minimum-phase zero adds extra lag at mid frequencies, often shrinking phase margin even when gain looks benign. Nyquist encirclement arguments for closed-loop stability must then be interpreted carefully; this page focuses on the shape of G(jω) and the −1 probe rather than completing a full Nyquist counting proof.
How is the s-plane click mapped to actual roots?
Pointer coordinates are inverted from pixel space into (σ, ω) with a coarse snap grid so conjugate pairs stay aligned. A click on the real axis (within a small tolerance) adds a single real root; a click off the axis adds two conjugate locations. Shift-click deletes whichever listed root (pole or zero) is closest in (σ, ω) space.