The Boltzmann distribution was discovered in the late 19th century amid a paradigm shift in physics. Ludwig Boltzmann, building on the work of James Clerk Maxwell and others, sought to connect the macroscopic behavior of gases with their microscopic molecular dynamics. This pursuit led to the development of statistical mechanics, a framework that bridges thermodynamics and classical mechanics. Boltzmann’s key insight was to treat the behavior of gases probabilistically, and discovering how the vast number of possible molecular configurations could give rise to observable macroscopic properties.
At its core, the Boltzmann distribution describes the probability of finding a system in a particular state as a function of that state’s energy and the system’s temperature. It serves as a cornerstone in our understanding of “how the small influences the large”, and plays a fundamental role in fields ranging from thermodynamics and statistical physics, to chemistry, materials science, and even in machine learning.
For this reason, I wanted to make a notebook that details how the distribution can be derived from thermal physics. I’m going to write this post in a pretty loose style, and cover:
- Understanding Energy and Temperature
- Derivation and Interpretation of Boltzmann’s constant
- Energy States
- Derivation of the Boltzmann’s Distribution and Partition Function
This post will assume that you’ve taken an introductory course in both chemistry and physics, as it references concepts such as force, pressure, and the Ideal Gas Law. For a more rigorous and information-theory based approach to this topic, please look at Intro to Boltzmann Distribution (pt 2)
If you find anything that needs to be fixed or have any recommendations of things to add, feel free to reach out at contactme@harrisonsantiago.com!
Understanding Energy and Temperature
Thermodynamics and statistical mechanics are two closely interrelated branches of physics that describe the behavior of macroscopic systems from different perspectives. Thermodynamics provides a framework for understanding the properties of bulk matter without delving into microscopic details. It encompasses universal principles such as the spontaneous flow of heat from hot to cold objects and the decreased boiling point of liquids at lower pressures. In short, macroscopic observations form the basis of the laws of thermodynamics, which govern energy transfer and transformation in physical systems.
Statistical mechanics, on the other hand, offers a microscopic foundation for these macroscopic phenomena. It bridges the gap between the quantum behavior of individual atoms and molecules and the collective properties of systems containing an enormous number of particles (on the order of \(10^{23}\) or more). The power of statistical mechanics lies in its ability to derive macroscopic properties from microscopic interactions, explaining the “why” behind thermodynamic laws. In essence, while thermodynamics provides the “what” of macroscopic behavior, statistical mechanics elucidates the “why” and “how,” forming a comprehensive framework for understanding the physical world across multiple scales.
It’s almost an understatement to say that energy is one of the most fundamental and pervasive concepts across all branches of physics, and a quick google search can show that energy and temperature are somehow linked in our Boltzmann distribution. For that reason, the north start of this section is to get a working formalization of the relationship between energy and temperature.
To get us started, I’m going to give a few vague definitions that should align with everyday experiences. Temperature is a measure of a tendency of an object to spontaneously give up energy to it’s surroundings. When two objects are in contact, the one that spontaneously loses energy is said to be at the higher temperature. After two objects have been in contact long enough and there is no longer a net flow of energy, we say that they are at thermal equilibrium.
To further explore this topic, ideal gases have historically been a starting point for this topic of conversation. An ideal gas is a hypothetical gas that to several key assumptions:
- The gas particles have negligible volume compared to the total volume of the container.
- There are no attractive or repulsive forces between the particles except during instantaneous, elastic collisions.
- The particles are in constant, random motion
- All collisions (particle-particle and particle-wall) are perfectly elastic.
These form a good starting point to build our intuition as the microscopic rules (a single particle moving with elastic collisions and not attractive/repulsive forces) and macroscopic results (the ideal gas law) are perfectly tractable. And beyond this, it’s surprisingly accurate to how real gases can act.
The Ideal Gas Law states that
\[ PV = nRT \]
where \(P\) is pressure, \(V\) is volume, \(n\) is the number of moles of gas, \(R\) is the universal gas constant, and \(T\) is temperature in Kelvins. You may recall this from high school or college chemistry. The constant \(R\) has an empirical value of 8.31 J/(mol·K), and a mole contains Avogadro’s number (\(N_a = 6.02 × 10^{23}\)) of molecules.
Often, we prefer to work with the number of molecules rather than models, \(N = n × N_a\). By grouping \(R/N_a\) into a new constant, \(k\) (the Boltzmann constant), we arrive at \(PV = NkT\). This form gives us an easier way to see fundamental relationships between different quantities such as that for a given amount of gas, doubling the pressure halves the volume, or at a constant volume, doubling the temperature doubles the pressure.
To work towards our North Start, let’s consider a thought experiment: a single molecule of our ideal gas bouncing inside a perfectly smooth cylinder of length \(L\) with circular faces of area \(A\). We’ll use this to relate pressure to kinetic energy, and then use the Ideal Gas Law to connect temperature to energy.
Let’s focus on the pressure being exerted on one of the faces. We know that pressure is force per unit area, and since we only have one particle, at most moments in time there is no pressure being exerted (the particle is flying through space). But occasionally, there is a collision where the particle exerts a sizable amount of force in an instant. The average pressure on one of the cylinder’s circular faces, \(\bar{P}\), can be calculated as:
\[ \bar{P} = \frac{F_x}{A} = \frac{m \frac{ \Delta v_x}{ \Delta t}}{A} \]
If we define \(t\) as the time for one round trip between the circular faces, we can say \(\Delta t = \frac{2L}{v_x}\) and \( \Delta v_x = -2v_x\). This simplifies our equation to:
\[ \bar{P} = \frac{m v_x^2}{AL} = \frac{m v_x^2}{V} \]
where \(V\) is the volume of the cylinder.
But the goal isn’t to work with only one particle, so imagine that the cylinder contains some large number, \(N\), of identical particles with random positions and directions of motion. Following our earlier assertion on ideal gases, these particles will not interact with each other. Since each individual particle periodically collides with the wall, the pressure becomes a sum of terms:
\[ \bar{P}V = m v_{1x}^2 + mv_{2x}^2 + mv_{3x}^2 + … \]
And for a sufficiently large \(N\), collisions become essentially continuous, allowing us to say:
\[ PV = Nm\bar{v_x^2} \]
That looks an awful lot like an equation for Kinetic Energy(\(K\))! Invoking the Ideal Gas Law, we can then relate it to temperature by saying:
\[ NkT = PV \]
\[ kT = m\bar{v_x^2} \]
or
\[ \frac{1}{2}kT = \frac{1}{2}m\bar{v_x^2} \]
However this is only for movement along the x axis, but what about along the y and z? Unsurprisingly if you follow the same steps, you’ll realize that nothing is unique to the x-axis, and that \(\frac{1}{2}m\bar{v_y^2} = \frac{1}{2}m\bar{v_z^2} = \frac{1}{2}kT\). From here, we can recognize that the average translational kinetic energy is
\[ \bar{K} = \frac{1}{2}m\bar{v^2} = \frac{1}{2}m(\bar{v_x^2} + \bar{v_y^2} + \bar{v_z^2}) = \frac{3}{2}kT \]
Now is a good time to pause and recognize this crucial result: under the assumptions of the Ideal Gas Law, the average translational kinetic energy of particles is directly proportional to temperature, with the Boltzmann constant \(k\) as the conversion factor between temperature and molecular energy. Immediately, we have found an example of how we can connect the unmeasurable, microscopic, properties of a system (the kinetic energy of particles), to observable macroscopic effects (temperature).
As a fun fact, the equality of each velocity component to \(\frac{1}{2}kT\) is not unique. In fact, the equipartition theorem tells us that at thermal equilibrium, a particle shares its energy equally among its various forms (translational kinetic, rotational kinetic, elastic potential, etc.). From this, we can say that if a system contains \(N\) particles, each with \(f\) degrees of freedom, then its total thermal energy is:
\[ U = N \cdot f \cdot \frac{1}{2}kT \]
To briefly touch on something beyond the scope of this post, it’s important to note that the equipartition theorem is an approximation and not a law. Failures of this model to explain black-body radiation were what spurred the development of quantum mechanics.
Understanding Heat
Now that we’ve been an understanding of how energy relates to temperature, let’s use that as a jumping point for few more questions. How and why does energy flows when objects are reaching thermal equilibrium (statistical mechanics)? And why does this flow only ever seem to be in one direction (thermodynamics)? To do this, we’ll have to define two more concepts:
- Heat (Q): Any spontaneous flow of energy from one object to another caused by a temperature difference.
- Work (W): Any other transfer of energy into or out of a system.
It’s worth noting that common usage of these terms can sometimes hinder understanding. For instance, saying a system “is being heated” often refers to work being done on the system, not heat transfer in the thermodynamic sense. However, it’s helpful to think of both heat and work as energy in transit. Together, they account for all types of energy entering or leaving a system, which we can express as:
\[ \Delta U = Q + W \]
Where \(\Delta U\) represents the change in internal energy of the system.
Understanding heat transfer will also require us to discuss macrostates,microstates, and multiplicity, crucial concepts in statistical mechanics that bridge the gap between individual particle behavior and observable thermodynamic properties. Let’s consider a simple example to define understand them.
Imagine a small bookcase with two shelves and three books. We can arrange these books in various ways such as having all 3 books on the top shelf, or maybe having 2 books on the bottom and 1 on the top. In this system, we could define the macrostate to be the number of books on the top shelf and the possible macrostates are 0, 1, 2, or 3 books. On the other hand, the microstate would be the specific arrangement of books that results in a given macrostate. For example,when the macrostate is “1 book on top shelf,” there are three possible microstates:
- Book A on top
- Book B on top
- Book C on top
However, When the macrostate is “3 books on top shelf,” there is only one microstate. This leads us to multiplicity (\(\Omega\)), or the number of microstates corresponding to a particular macrostate. For our example:
- Ω(3 books on top) = 1
- Ω(2 books on top) = 3
- Ω(1 books on top) = 3
- Ω(0 books on top) = 1
With the important assumption that every microstate is equally as likely, it’s a pretty small leap to recognize that the probability of a particular macrostate \(x\) is proportional to its multiplicity, so we can define the probability:
\[ P(x) = \frac{\Omega(x)}{\Omega(\text{all})} \]
That assumption is called the fundamental assumption of statistical mechanics and formally it says that in an isolated system in thermal equilibrium, all accessible microstates are equally probably.
Moving away from our toy example, let’s explore a more complex system that provides better insight into our question about heat: the Einstein solid. This model offers a simplified yet powerful representation of atomic behavior in crystalline solids.
An Einstein solid is a collection of \(N\) oscillators, each with a potential energy function of the form:
\[ U = \frac{1}{2}k_sx^2 \]
Where \(k_s\) is a “spring” constant. These oscillators are constrained to store energy in discrete “units,” each of size \(hf\) (where \(h\) is Planck’s constant and \(f\) is the frequency of oscillation).
For help visualizing this concept, recall your early lessons on states of matter:
- Gas molecules move freely in all directions
- Liquid molecules move around but with stronger intermolecular bonds
- Solid particles vibrate (or oscillate) more or less in place
In a three-dimensional solid, each atom can oscillate in three directions. Therefore, if there are N oscillators in our Einstein solid, they represent N/3 atoms.
Let’s start with a small Einstein solid containing only three oscillators that we will call \(A\), \(B\), and \(C\). We can easily determine the multiplicity of macrostates for different total energies:
- Ω(0) = 1 (none of the oscillators can have any energy units)
- Ω(1) = 3 (either A, B, or C have the unit)
- Ω(2) = 6 (the two units are spread in states AA, AB, AC, BB, BC, or CC)
- Ω(3) = 10 (AAA, AAB, AAC, ABB, ABC, ACC, BBB, BBC, BCC, CCC)
And the same idea for larger numbers of energy units. This simple example demonstrates how the number of possible microstates (and thus the multiplicity) increases as we add more energy to the system, a key concept in understanding the behavior of larger, more complex systems.
How could we derive a rule to show the multiplicity of a system that has \(N\) oscillators with \(q\) total energy units? Here a visual could be useful. If we use a dot to represent each energy unit in the solid, a vertical line to represent the partition between one oscillator and the next. The picture below shows an example of 10 oscillators where the first oscillator has 1 unit, the second has 0, the third has 3, and so on.
We’re able to see that this problem becomes one of combinatorics, where the multiplicity of this system can be found with:
\[ \Omega = \frac{(q + N – 1)!}{q!(N-1)!} \]
But heat invariably involves more than one system, so let’s examine a system of two Einstein solids. Let’s define our system with two Einstein solids, \(A\) and \(B\), where the total energy of the system is:
\[ U_{total} = U_A + U_B \]
Similar to above, let’s start with a small system where each solid contains three harmonic oscillators (one atom each), and the system has a total of six energy units. So we have constraints \(N_A + N_B = 3\) and \(q_{total} = q_A + q_B = 6\). Note that while q denotes the number of energy units, the actual energy is \(U = qhf\), where \(h\) is Planck’s constant and \(f\) is the oscillator frequency. In this instance, we’ll define our macrostate to be the number of units that each solid has, and we’ll use q to track them.
Our system has 7 possible macrostates, with \(q_A = 0, 1, …, 6\). The multiplicities \(\Omega_A(q_A)\) for each of these states can easily be computed as shown in our earlier example. However we cannot forget about \(q_b\)! For each macrostate of \(q_A\), there’s a corresponding multiplicity for \(q_B\), given by \(\Omega_B(q_{total} – q_A)\) This leads us to a simple but important assertion, that the multiplicity of the entire system’s macrostate is the product of the original multplicities.
\[ \Omega_{system} = \Omega_A \cdot \Omega_B \]
We can compute these multiplicities for each possible energy distribution. For instance, when \(q_A = 0\) and \(q_B = 6\), we have \(\Omega_A(0) = 1\) and \(\Omega_B(6) = 28\), resulting in \(\Omega_{system} = 28\). As we distribute the energy differently, we get varying system multiplicities. Below, I’ve tabulated the results for all of the possible macrostates.
Macrostates for 2 solids with 3 oscillators each and 6 total energy units:
+---------+---------+--------+--------+--------------------+
| Solid 1 | Solid 2 | Mult 1 | Mult 2 | Total Multiplicity |
+=========+=========+========+========+====================+
| 0 | 6 | 1 | 28 | 28 |
+---------+---------+--------+--------+--------------------+
| 1 | 5 | 3 | 21 | 63 |
+---------+---------+--------+--------+--------------------+
| 2 | 4 | 6 | 15 | 90 |
+---------+---------+--------+--------+--------------------+
| 3 | 3 | 10 | 10 | 100 |
+---------+---------+--------+--------+--------------------+
| 4 | 2 | 15 | 6 | 90 |
+---------+---------+--------+--------+--------------------+
| 5 | 1 | 21 | 3 | 63 |
+---------+---------+--------+--------+--------------------+
| 6 | 0 | 28 | 1 | 28 |
+---------+---------+--------+--------+--------------------+
Interestingly enough the highest multiplicity occurs when \(q_A = q_B = 3\), where \(\Omega_A(3) = \Omega_B(3) = 10\), giving \(\Omega_{system} = 100\). In other words, the highest multiplicity occurs at equilibrium, where the energy units are evenly distributed.
Earlier we made the assumption that all accessible microstates are equally probably. It’s important to stress that while all microstates are equally probably, some macrostates are more probable than others. After all, we have a 100/462 chance of finding it in the fourth macrostate (will three energy units in each), versus 28/462 for our first macrostate. It should be intuitive that this probability distribution gets sharper, the more energy units and oscillators we have.
This analysis of multiplicities reveals a fundamental principle of heat transfer. The macrostate with the highest multiplicity represents the most probable configuration of the system. In macroscopic systems, containing on the order of \(10^{23}\) particles, the laws of large numbers come into play. The overwhelming probability of energy being evenly distributed manifests as the apparent natural law of heat flow from higher to lower temperatures. This flow continues until the system reaches the macrostate with the highest multiplicity, corresponding to thermal equilibrium. Thus, the seemingly deterministic process of heat transfer is, at its core, a statistical phenomenon driven by the system’s tendency to evolve towards its most probable state.
Understanding Entropy
We’ve now observed that particles and energy tend to rearrange themselves until the multiplicity reaches (or comes indiscernibly close to) its maximum value. This conclusion appears to hold true for any system, provided it contains enough particles and energy units for the statistics of large numbers to apply. To make handling with these large numbers easier, we’ll work with the natural logarithm of the multiplicity. For reasons we’ll get into later, we multiply this by Boltzmann’s constant, giving us a quantity called entropy, denoted as:
\[ S = k \ln \Omega \]
As you could predict, the more particles and energy a system contains, generally speaking, the greater its multiplicity and entropy. In a physical system, Entropy can also increase by allowing a system to expand into a larger space or by mixing substances – anything that increases the total number of possible arrangements.
A useful property of entropy is that the total entropy of a composite system is the sum of the entropies of its parts: \(S_{total} = S_A + S_B\)
Using this, we can now restate our earlier findings: when two large systems interact, they evolve towards the macrostate with the highest possible entropy. This is known as the second law of thermodynamics. Although not fundamental, the probabilities involved are so overwhelming that we may as well treat it as such.
Earlier we defined temperature to be the quantity that is the same for both objects when they’re in thermal equilibrium. Our goal for this section is to unify those ideas, and explore how entropy relates to temperature.
If we once again consider two Einstein solids, \(A\) and \(B\), that can exchange energy (with the total energy fixed). At equilibrium, it is easy to understand that:
\[ \frac{\partial S_A}{\partial U_A} + \frac{\partial S_B}{\partial U_A} = 0 \]
And since \(dU_A = -dU_B\), at equilibrium:
\[ \frac{\partial S_A}{\partial U_A} = \frac{\partial S_B}{\partial U_B} \]
This means that at thermal equilibrium, the rate of change of entropy with respect energy is the same for both objects. In other words, this rate of change must be related to the temperature of the system.
Now, let’s look at units. Thanks to the inclusion of Boltzmann’s constant in the definition of entropy, \(\partial S / \partial U\) has units of \(1/\text{Kelvin}\), which tells us that the temperature of a system can be defined as:
\[ \frac{1}{T} = \frac{\partial S}{\partial U} \]
This relationship between temperature, entropy, and energy provides a profound insight into the nature of thermal systems. Temperature emerges as a measure of a system’s reluctance to accept additional energy or its willingness to give up energy. You may wonder why we don’t invert the derivative to avoid \(1/T\). There is nothing wrong with this, but it’s less convenient as you rarely have a formula for energy in terms of entropy. More fundamentally, this formulation reveals that entropy is the driving force behind thermal phenomena, as energy will flow spontaneously from high-temperature regions (where small energy changes produce small entropy increases) to low-temperature regions (where the same energy change yields larger entropy increases), because this direction maximizes the total entropy gain. Temperature, then, can be understood as an emergent property – a manifestation of how entropy changes with energy in a system. This should shift your perspective on temperature from being a primary quantity to a derived one. The main point is that systems naturally evolve towards states of maximum entropy, which is why heat spontaneously flows from hot to cold bodies.
Deriving the Boltzmann Distribution
Next, we will discover one of the most powerful tools in all of statistical mechanics: a formula for the probability of finding a system in any particular microstate when that system is in thermal equilibrium with a reservoir at a specified temperature.
To make it a more understandable we will be considering a single hydrogen atom as out system (but as you read, try to think about it more abstractly in terms of multiple particles, and more energy levels). The microstates of our system correspond to the various energy levels of the atom. Importantly, a single energy level can encompass multiple independent states. For instance, while a hydrogen atom has only one ground state at -13.6 eV, it has four independent states at -3.4 eV. The specifics of why this occurs are beyond our scope, but remember: at a given energy, multiple microstates can exist.
In our non-isolated system, we break from our assumptions that all microstates of the system are equally probably, as the probability of finding the atom in a particular microstate depends on the energy of the reservoir. Higher-energy reservoirs make higher-energy states of the atom more likely, and vice versa. However, microstates with the same energy remain equally probable.
To determine the probability of an atom occupying any given microstate, we’ll take an indirect approach based on entropy. We saw earlier how in isolated systems, entropy change governs spontaneous processes(heat flow). For our non-isolated system, it’s the total entropy of both the system and its environment that tends to increase.
Assuming the reservoir is much larger than the system (\(E_R >> E_s\)), we only need to focus on the reservoir to analyze the entire system. So here, we will look at how the state of the single atom effects the possible state of the reservoir (take a moment to convince yourself that this is valid). We know that if the atom is in state \(s_1\), the reservoir will have a very large number of accessible microstates, denoted as \(\Omega_R(s_1)\), all of which are equally probable. Similarly, if the atom is in state \(s_2\), where \(s_2 \neq s_1\), the reservoir has a different number of accessible states, \(\Omega_R(s_2)\). These two multiplicities will generally be different because when the atom is in a lower-energy state (and thus has lower entropy), more energy is available for the reservoir, resulting in more possible accessible microstates.
We can also define \(P(s_1)\) and \(P(s_2)\) as the probabilities of finding the atom in states \(s_1\) and \(s_2\), respectively. These probabilities must exist, no matter how small they may be. Since fundamentally, all microstates of the combined system must be equally probable (take another minute to convince yourself of this fact), we can write the ratio of the probabilities for any two states as:
\[ \frac{P(s_2)}{P(s_1)} = \frac{\Omega_R(s_2)}{\Omega_R(s_1)} \]
Using the definition of entropy as \(S = k \ln \Omega\), we can rewrite this as:
\[ \frac{P(s_2)}{P(s_1)} = \frac{e^{S_R(s_2)/k}}{e^{S_R(s_1)/k}} = e^{[S_R(s_2) – S_R(s_1)] / k} \]
Where \(S_R(s_i)\) indicates the entropy of the reservoir given the particle being in state \(i\).
Now in an earlier section, we saw how temperature is related to changes in entropy and energy. That being said, the exponent contains the change in the entropy of the reservoir when the atom undergoes a transition from state 1 to state 2. Using our previously found definition, we can say:
\[ S_R(s_2) – S_R(s_1) = \frac{1}{T}[U_R(s_2) – U_R(s_1)] = – \frac{1}{T}[E(s_2) – E(s_1)] \]
where \(E\) is the energy of the atom. Plugging this expression in, we can see that:
\[ \frac{P(s_2)}{P(s_1)} = e^{-[E(s_2) – E(s_1)] / kT} = – \frac{e^{E(s_2)/kT}}{e^{E(s_1)/kT}} \]
Which tells us that for an atom, the ratio of two possible states’ probabilities is equal to a ratio of simple exponential factors, each of which is a function of the energy of the corresponding microstate and the temperature of the reservoir. Each of these exponential factors is called a Boltzmann factor:
\[ \text{Boltzmann factor} = e^{-E(s) / kT} \]
Now it would be convenient if we could simply say that the probability of each state is equal to the corresponding Boltzmann factor, but unfortunately, this isn’t true. We need to come up with a way to normalize these to make a true probability distribution. In short, we want to find some \(Z\), so that:
\[ P(s) = \frac{1}{Z}e^{-E(s)/kT} \]
\(Z\) is commonly called the partition function, and the idea behind calculating it is to remember that the total probability of finding the atom in some state must be 1. Therefore,
\[ 1 = \sum_s P(s) = \sum_s \frac{1}{Z}e^{-E(s)/kT} = \frac{1}{Z} \sum_s e^{-E(s)/kT} \]
and so,
\[ Z = \sum_s e^{-E(s)/ kT} \]
This sum isn’t always easy to carry out since there may be an infinite number of energy states \(s\), and you may not have a simple formula for their energies. However, the terms in the sum get exponentially smaller as \(E\) gets larger, so often you can just compute the first few terms numerically until you get to energies sufficiently greater than \(kT\).
There’s a few interesting things to break down here. First, our formula \(P(s) = \frac{1}{Z}e^{-E(s)/kT}\) is the Boltzmann distribution. To interpret this, we need to focus on the exponential. Energy states at or near 0 have a probability of or around \(1/Z\), while energy states much larger than \(kT\) have negligible probabilities. Take a few minutes to mull the following over in your head. What we learned about temperature, what we learned thermal equilibrium, about multiplicity, the fact that \(T\) is the temperature of our reservoir, and what it means that “Energy states at or near 0 have a probability of or around \(1/Z\), while energy states much larger than \(kT\) have negligible probabilities”.
This could also induce the question, “What is \(Z\)?” The quantity \(Z\) has a few interesting interpretations. It is a ‘constant’ that does not depend on any particular state of the system, but instead on the temperature of the reservoir. Furthermore, we can look at it as a way of measuring how many states are accessible to the atom as it encodes how the probabilities are partitioned among the different microstates, based on their individual energies. Notably, a uniform shift in energy levels by a constant \(E_0\) results in a multiplicative factor of \(e^{-E_0/kT}\) for \(Z\), which cancels out in probability calculations. This demonstrates the partition function’s invariance under energy reference point transformations. Furthermore, an interested reader can easily learn how \(Z\) can be used in deriving various thermodynamic properties, including heat capacity, average energy, and energy fluctuations.