Research note · 13 May 2025
Porter-Thomas fluctuations
A working note on the Porter-Thomas distribution and fluctuations in reduced transition strengths.
Let’s talk about Porter-Thomas (PT) fluctuations! To do that, we need to start talking about:
The Porter-Thomas distribution
Long story short: The PT distribution is the distribution with one degree of freedom (). In nuclear physics we have a central concept, namely the gamma strength function, which is a statistical property of atomic nuclei which describes the nuclei’s gamma decay probabilities. The dipole () strength function is given by
See p. 230 of Bartholomew et. al. for the general definition. We can re-arrange eq. (0) to get
From eq. (1) we see that the GSF is proportional to the mean value with a proportionality constant of . The values deviate from the mean value by
and the distribution of values are hypothesised to follow the distribution, aka. the Porter-Thomas distribution. In the following figure we see an example of values plotted as a histogram and scaled to the height of the PT-distribution to show the resemblance.

Porter-Thomas fluctuations
… is just really a fancy way of saying how much we expect values to vary. The PDF of the PT distribution is given by
with a mean of 1 and a variance of 2. Just check the Wikipedia page if you don’t believe me. Let us now invoke the almighty Central Limit Theorem (CLT)! Let us now draw a value from the PT distribution and we’ll name it . Suppose we want to know the sample average
The law of large numbers tells us that the sample average will converge to the expected value as goes to infinity. The CLT states that as gets larger, the distribution of gets arbitrarily close to the normal distribution with a mean of 1 and a variance of (The PT distribution has a mean of 1 and a variance of 2).
Let us quickly check that this is true! Let’s say that and with some quick Python magic:
>>> from scipy.stats import chi2
>>> n = 1000
>>> sum(chi2.rvs(df=1, size=n))/n
1.013582747288161
Pretty close to 1 that is.
>>> draws = [sum(chi2.rvs(df=1, size=n))/n for _ in range(100000)]
>>> np.mean(draws), np.var(draws), 2/n
(0.9999389145605803, 0.002000149052396594, 0.002)
Mic drop?
Now! How can we use this information to determine how much should vary? And what does vary even mean here? Vary-ance maybe. If is PT-distributed, then has a variance of 2. The variance is a measure of dispersion; a measure of how far a set of numbers is spread out from their average value. In mathematical terms, the variance of a random variable is the expected value of the squared deviation from the mean of :
So maybe what we want is to check that the variance of the distribution is (close to) 2? We can also draw a bunch of values from the distribution and check that the variance of the mean of all the draws are indeed equal to , as the CLT predicts is true.