In the previous part, we got to know the play hysteron and its cousin the stop hysteron. Today, we’ll take a deeper look on how they behave as a group, and where they can be taken from the simple case.
Behaviour
To recap, a play hysteron can be understood as an inertial less spring-friction system, with a spring coefficient
and a constant friction force
. This, as long as the input
remains small enough, the hysteron state
(and the output of the play hysteron) does not move:
![]()
And, once we do move, all work that we put into the system gets dissipated as friction heat
![]()
where
is now the spring force
, also known as the output of the stop hysteron.
Importantly, from these two things alone we get the loss behaviour for both the alternating and rotating case.
Alternating losses
As we have seen, when the hysteron is moving, it lags the input by the amount
. Thus, say we have an uniaxial alternating magnetic flux density with the amplitude of
. For simplicity, assume we have no DC component, even though we know now that it does exactly zip-all to the losses. Then, at the reversal point, the hysteron lies at
![]()
Now, this assumes that
is positive. If it’s not, then the excitation is too weak to move the hysteron – we only wiggle the spring part and move energy into it and than then back again, with no dissipation.
That said, if we do move, then our peak-to-peak amplitude is
![]()
and the net energy dissipated per cycle
![]()
as we do the peak-to-peak traversal twice – from minimum to maximum and then back to minimum again.
Now, this is just the loss per a single unweighted hysteron – in practice we have an ensemble of
hysterons with associated weights. This is programmatically perfect, but what little I remember of finite sums evades me right now, so let’s look at the limit case of infinitely many hysterons and a continuous distribution of weights.
We get for the ensemble losses
![Rendered by QuickLaTeX.com \[E = \int\limits_{0}^{r} w(\hat{r}) 4 \hat{r} (B_1 - \frac{\hat{r} }{k}) \text{d}\hat{r} .\]](https://www.anttilehikoinen.fi/wp-content/ql-cache/quicklatex.com-261af6e84de56f8c5298d5f2ba194da1_l3.png)
For the typical case of a constant spring constant
for all hysterons, we get
for the upper limit.
Now, we obviously still have the unknown weight function, which ultimate depends on how we want the losses to grow with
. But, for the simplest textbook-like case, we can set
![]()
(and conveniently ignore the singularity), in which case we get
![Rendered by QuickLaTeX.com \[E(B_1) = 4\int\limits_{0}^{B_1} B_1 - \hat{r} \text{d}\hat{r}=2 B_1^2.\]](https://www.anttilehikoinen.fi/wp-content/ql-cache/quicklatex.com-9c819fddc8018e10f08ada4fabefda8a_l3.png)
In other words, we get the Bertotti-like quadratic dependency – ta-dah!
In the slightly more general case with a non-unity
, we get
for the upper limit, and
![]()
for the total losses. Meaning, even though the losses per a single hysteron are only weakly dependent of the stiffness, it does influence how many hysterons active (aka slide) for a given input, and thus the ensemble-level losses.
Rotational losses
Now, let’s consider instead the rotational case, again with a given amplitude
. Now, although this may not be immediately obvious, in the steady state we have
and
perpendicular to each other. Thus, we can solve for the amplitude
![]()
Here, the last expression has been simplified by realizing that the hysteron spends the entire time sliding, so it lags
by
.
Now, we get the energy dissipated during an entire cycle from the net distance slid times the friction force
![]()
Less-simple mathematics
Now, a little bit of more advanced mathematics. They are not really needed for the simple hysterons, but they can be handy when analysing whatever smart extension you might have in mind.
Somewhat unsurprisingly, we can introduce a couple of potentials to help us out. Because who doesn’t like potentials? Life wouldn’t have meaning without a potential or too.
Sigh. Here goes.
First, we have the kinetic energy of the spring
![]()
From this alone, we get the forces acting on the internal state
and the output force as
![]()
![]()
In addition, we can define something called a dissipation potential – in our case so far:
![]()
Finally, we get the update rule for the internal state
as
![]()
Assuming the potential function is convex (i.e. the Hessian matrix of
is positive-definite) we get an unique minimizer by setting the gradient to zero
![]()
In the simplest case, what we have been discussing so far, we can easily see in 1D that the update we get – assuming that we do the update and don’t stay stationary – from minimizing the potential is
![]()
The same applies for 2D (or 3D for that matter); we just have to replace the sign by the unit vector
where the Delta-m is the difference between the previous and current values. In other words, we have a unit vector pointing into the direction where
moves. Please now note that the update rule is already nastily nonlinear, technically speaking – the sign function / calculation of the unit vector is not a linear operation. However, in this simple case we can see with our third eye that movement vector is parallel to
.
While this potential-thing absolutely sucks in almost every respect, it does give us a nice-ish theoretical framework that we can then later violate on purpose rather than by accident. The nice thing about the potential framework is that as long as we respect it, we can guarantee that we don’t accidentally inject energy into the system out of thin air, or make it disappear without us noticing. Specifically, we know that the energy coming from the magnetics
equals the energy going into the elastic potential plus the energy dissipated.
How to make everything suck
Anisotropy
From how I wrote the potential, an obvious generalization is an anisotropic spring:
![]()
with some nice stiffness matrix
. It might be nice for stuff like modelling anisotropy, or, used together with some other approaches in modelling the rise and fall of rotational losses with
.
Sadly, an anisotropic spring alone is enough to make life suck again, since our distance-to-yield condition is now an ellipse
![]()
making the position-update step nontrivial. Furthermore, the update direction isn’t generally parallel to
any more, giving us extra nonlinearity.
While we might derive an analytical solution for small-enough steps, we would also have to prove that we always get a meaningful update even when steps are no longer small, and then implement some downhill sled-ride gradient descent as a fallback option, and then make sure all those work fast enough for 100k elements with 5-10 Newton steps each multiplied with a few dozens or low hundreds of time-steps…things get difficult fast.
Prodding at r or k
Or, we might like to have either
or
depend on something – either
or
most likely, in order to attack any of the shortcomings of the hysteron model for magnetics. The DC-bias insensitivity or the less-than-realistic dependence of rotational losses on
for instance.
Modifying
is somewhat nasty. If we let it depend on
, we very easily lose the convexity of the potential. Meaning, we can’t guarantee that the derivative-equals-zero update scheme yields us the true minimum. In fact, if you absolutely want to guarantee the convexity of the overall potential, while maintaining the quadratic-in-displacement spring potential, you get some very nasty and restrictive conditions on
and
.
On the other hand, if you tie
to
, you directly start introducing wonkiness into the output
– remember that we have
![]()
This only has an effect on the elastic part, when the hysteron isn’t yet sliding.
Modifying
is comparatively simpler, is it doesn’t influence the convexity conditions or the output, other than changing the sliding threshold
.
Naturally, we could also approach this problem by having the elastic potential itself be an arbitrary function, rather than insisting it be product of a spring coefficient and a distance term. But, the same limitations as before still apply.
Potential landscape
Finally, we could introduce an additional potential, to be summed with the elastic potential and not depending on the distance between
and
.
For instance, we could have
![]()
This potential would explode towards infinity as
approaches a given saturation threshold
.
Even with less extreme values, the slope of the landscape potential influences how much the hysteron moves, and how much energy is therefore dissipated. This can again be seen from the 1D example. With the same minimization approach as before, we get the condition
![]()
By linearizing the landscape potential around the previous step
![]()
and reorganizing, we get
![]()
In other words, a landscape with a constant slope (be it uphill or downhill) is seen as a simple bias force on the right side. It if curves, i.e. if the slope gets steeper (or flatter) as you move, it also influences the step size via the
term.

Check out EMDtool - Electric Motor Design toolbox for Matlab.
Need help with electric motor design or design software? Let's get in touch - satisfaction guaranteed!