Block sizes are a partition
For a single eigenvalue lambda with algebraic multiplicity a, the Jordan blocks have sizes that add up to a. Listing those sizes in decreasing order gives the block-size partition of a. For example a = 5 might be (3, 1, 1) — one 3-by-3 block and two 1-by-1 blocks — or (2, 2, 1), and so on. Determining this partition determines the form for that eigenvalue completely.
The rank-jump formula
Let N = A - lambda I and define r_j = rank(N^j), with r_0 = n. The dimension that the kernel gains at step j is d_j = r_(j-1) - r_j. These d_j are the Weyr characteristic; they form a non-increasing sequence d_1 >= d_2 >= d_3 >= ... The rank-jump (Weyr) formula then counts blocks: the number of Jordan blocks of size EXACTLY j is d_j - d_(j+1).
Counting blocks of eigenvalue lambda (size n total): N = A - lambda*I r_0 = n r_j = rank(N^j) for j = 1, 2, ... until r_j stops shrinking d_j = r_(j-1) - r_j (Weyr characteristic; how many chains reach length >= j) #(blocks of size exactly j) = d_j - d_(j+1) Sanity checks: sum_j d_j = algebraic multiplicity a (= dim of gen. eigenspace) d_1 = geometric multiplicity (= total number of blocks) largest j with d_j>0= size of largest block (= exponent in minimal poly)
A worked count
Suppose lambda has algebraic multiplicity 5 and we measure rank(N^0..N^3) = 5, 2, 1, 1 (counting only inside the generalized eigenspace, where r_0 = a = 5). Then d_1 = 3, d_2 = 1, d_3 = 0. Blocks of size exactly 1: d_1 - d_2 = 2. Size exactly 2: d_2 - d_3 = 1. The partition is (2, 1, 1). The form for lambda is one 2-by-2 block and two 1-by-1 blocks.