Home / Science / Engineering / Control and robotics / State space and pole placementTool #638

Pole placement calculator: state feedback by Ackermann's formula, observer gain, controllability and step response

Enter the state-space matrices A, B, C and D to get controllability and observability (matrices and ranks), the open-loop eigenvalues, the state-feedback gain K that places your chosen poles (Ackermann), an observer gain L by duality, and the closed-loop step response. Nothing is uploaded.

Keep it one tap away for everyday use.

Bookmark State space and pole placement?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. A, B, C, D
  2. Rank tests
  3. Place poles
  4. Step
Nothing is uploadedWorks offline once open

System ẋ = Ax + Bu, y = Cx + Du

One row per line (or rows separated by ;), numbers separated by spaces or commas; MATLAB-style [1 2; 3 4] works too. Up to 10 states. The example is a made-up position servo with three states.

Design

Write poles like −2, −1+3j, −1−3j or −1±3j; complex poles come in conjugate pairs. Pole placement here uses Ackermann's formula, which needs one input (B with one column); the observer needs one output (C with one row). Observer poles are usually 2 to 6 times faster than the controller's.

What it does

In state-space form a linear system is ẋ = Ax + Bu, y = Cx + Du. With state feedback u = N·r − Kx, the closed-loop dynamics are set by the eigenvalues (poles) of A − BK, and if the system is controllable you can put them anywhere you like. This tool:

  • checks controllability and observability: it builds [B AB … Aⁿ⁻¹B] and [C; CA; … CAⁿ⁻¹] and gives their ranks;
  • lists the open-loop eigenvalues and says whether the system is stable;
  • finds the gain K that places your chosen poles with Ackermann’s formula (single input), and checks the result by working out the eigenvalues of A − BK again;
  • scales the reference with N so the output settles at 1;
  • finds the observer gain L that places the poles of A − LC, by duality (single output);
  • draws the closed-loop step response (computed exactly with the matrix exponential) with rise time, overshoot and settling time, and downloads it all as CSV, PNG, PDF or Word.

Multi-input pole placement has many possible answers and needs a robust method; this tool does not try it and says so.

How to use it

  1. Type or paste the matrices, one row per line, or press Use the example. D may be left empty.
  2. Type the closed-loop poles, one for each state, such as −2±2j, −10. Faster poles (further left) give a quicker response but larger gains and inputs.
  3. Optionally give observer poles; empty means 4 times faster than the controller’s.

Worked example

The made-up servo has A = [0 1 0; 0 −0.5 1; 0 −2 −8], B = [0; 0; 4], C = [1 0 0]. Its open-loop eigenvalues are 0, −0.7769 and −7.723 (the 0 is the integrator from velocity to position), and it is controllable and observable (rank 3). Placing the poles at −2 ± 2j and −10 gives K = [20, 9.8125, 1.375] and N = 20. The step response rises in about 0.79 s, overshoots by 4.1 % and settles within 2 % in about 2.2 s. Observer poles at −8 ± 8j and −40 give L = [47.5, 358.25, 1969].

FAQ

Why must complex poles come in pairs? So that K is real; a real system’s poles are always real or in conjugate pairs.

Is anything uploaded? No. Everything runs in your browser and works offline.

Where the numbers come from

  • Own code: controllability and observability matrices, Ackermann's formula, observer design by duality, Faddeev-LeVerrier characteristic polynomial with Aberth root finding, Jacobi SVD for ranks, and exact zero-order-hold step response through the matrix exponential (standard control theory methods).
  • Checked against python-control (acker, place, ctrb, obsv, step_info), NumPy (eigvals, matrix_rank, svd) and SciPy (expm, signal.step) on the example and four random systems of 2 to 5 states.
  • The example servo system and its pole choices are made up for fibub.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Related tools

D-H forward kinematics #635 Type a robot arm's Denavit-Hartenberg table (standard or modified convention), move the joints with sliders and get every link transform, the end-effector position and orientation (roll, pitch, yaw, quaternion), the Jacobian and a 3D picture you can turn. Nothing is uploaded. PID tuning simulator #636 Pick a plant (first or second order, or any transfer function) with dead time, set the PID gains with sliders and see the closed-loop step response with rise time, overshoot, settling time and steady-state error, the controller output, the Bode plot with gain and phase margins, and Ziegler-Nichols starting values. Nothing is uploaded. Inverse kinematics for 2 and 3 link arms #637 Find the joint angles that put a planar 2-link arm's tip, or a 3-link arm's tool at a given angle, on a target point. Both elbow-up and elbow-down solutions, a reach check that says why a point is out of reach, optional joint limits, a drawing of the arm and its workspace, and a batch of targets to CSV. Kalman filter playground #639 Try a Kalman filter in your browser. Simulate a noisy sensor with a repeatable seed or paste your own measurements, pick a constant-level or constant-velocity model, move the Q and R sliders, and watch the estimate against the truth, the innovations, the uncertainty and the gain. Download every step as CSV. Path planning visualiser #640 Draw walls on a grid with a tap or a drag, then watch A* or Dijkstra (4 or 8 directions) find the shortest path and which cells they search, or grow a seeded RRT tree through open space. Shows path length, cells expanded and tree size, and downloads the path as CSV. 1D Schrödinger solver #923 Choose a textbook potential, type a formula or draw your own, and get the lowest energy levels and wavefunctions of the one-dimensional Schrödinger equation by the matrix (finite-difference) method, with the exact levels alongside for the box, harmonic oscillator, finite well, Morse, linear and Pöschl–Teller potentials.