Jobst Brandt has in his book The Bicycle Wheel the results of a computer simulation of the dynamic tension distribution in a loaded bicycle wheel. However, the code of the simulation is not available. It is said that:

Each spoke is an element, as is each rim segment, giving a 36-spoke wheel a total of 72 elements and 37 nodes. Each of these elements is easily defined in structural terms. The rim elements have a resistance to bending, tension and compression, while the spokes resist only tension. Equations are written for each of these conditions based on the material properties and the shape and size of the element. The equations are solved simultaneously to determine the displacement of each node when a specified load is applied at a specific node. The central node at the hub is fixed and, therefore, is not computed.

The results of the simulation show that if the example 36-spoke wheel is loaded with 500 Newtons, the spoke directly over the load has to support 198 Newtons of this load and the rest of the load is placed on other spokes. In the example wheel, the rim had a 1124 mm4 second moment of area so it was not one of the modern "deep V" rims, and the spokes were 1.6mm diameter.

I would like to replicate the results so that I can estimate how well a different wheel having a different type of a rim, a different spoke diameter or a different number of spokes carries load.

How can I simulate bicycle wheels as simply as possible, while replicating the results of Jobst Brandt?

  • 3
    This might be better at math.stackexchange.com or physics.stackexchange.com
    – Criggie
    Commented Sep 19, 2020 at 7:00
  • 1
    @Criggie Yes this is an interdisplicinary question and answer. One one hand it is very much math & physics, on the other hand it is mainly of interest to bicycle wheelbuilders.
    – juhist
    Commented Sep 19, 2020 at 7:43
  • 2
    ...or actually, engineering.stackexchange.com might be a better site than math.stackexchange.com or physics.stackexchange.com -- I wonder how hard it is to migrate.
    – juhist
    Commented Sep 19, 2020 at 9:05
  • If you want it migrated, that is dead simple - which would you prefer?
    – Criggie
    Commented Sep 19, 2020 at 14:04

1 Answer 1


(Sorry for the very mathematical post, but code that is executable with no mathematics knowledge is at the end.)

First some mathematics. Let us consider the rim section having three spokes, two at both ends and one in the middle, as a simply supported beam (not necessarily 100% realistic model but should be good enough for most purposes). Its equation is

(F_S(0)-F(0))*L^3/(6*E*I) = w(0) - (w(-L) + w(L))/2


  • F_S(x) is the dynamic load of the spoke at location x,
  • F(x) is the wheel load at location x,
  • L is the distance between two neighboring spokes at the rim,
  • E is the Young's modulus of aluminum (rim),
  • I is the second moment of area of rim,
  • w(x) is the radial deflection at location x.

There is also the equation for spokes:

w(0) = -F_S(0) L_S / (E_S A_S)


  • L_S is the length of a spoke,
  • E_S is the Young's modulus of steel (spoke),
  • A_S is the area of spoke cross section.

Let us also define:

k = L^3/(6*E*I),
k_S = L_S / (E_S A_S),
C = (1+k/k_S)

Then the equations can be combined and rewritten as:

C*w(0) - 0.5*w(-L) - 0.5*w(L) = -F(0)*k

and repeated 36 times in a circularly shifted form. This results in the following Matlab / GNU Octave code (I only tested it on GNU Octave but should work on Matlab as well):

L = 600*pi/36; % mm
L_S = 300; % mm
E = 69e3; % MPa
E_S = 193e3; % MPa
I = 1124; % mm4
A_S = pi*0.8^2; % mm2
k = L^3/(6*E*I); % mm/M
k_S = L_S/(E_S*A_S); % mm/N
C = (1+k/k_S);
m = [C, -0.5, zeros(1,33), -0.5];
M = [circshift(m, 0); circshift(m, 1); circshift(m, 2); circshift(m, 3);
     circshift(m, 4); circshift(m, 5); circshift(m, 6); circshift(m, 7);
     circshift(m, 8); circshift(m, 9); circshift(m, 10); circshift(m, 11);
     circshift(m, 12); circshift(m, 13); circshift(m, 14); circshift(m, 15);
     circshift(m, 16); circshift(m, 17); circshift(m, 18); circshift(m, 19);
     circshift(m, 20); circshift(m, 21); circshift(m, 22); circshift(m, 23);
     circshift(m, 24); circshift(m, 25); circshift(m, 26); circshift(m, 27);
     circshift(m, 28); circshift(m, 29); circshift(m, 30); circshift(m, 31);
     circshift(m, 32); circshift(m, 33); circshift(m, 34); circshift(m, 35)];

results = M\[k*500;zeros(35,1)]
firstspoke = results(1)/k_S

When this code is executed, it says that the first spoke deflects 0.158 mm (Jobst Brandt's simulation showed the spoke where load is placed deflecting 0.153 mm so the simulation results are very similar) and carries 203.92 N of the 500 N load (calculated from Jobst Brandt's simulation, that simulation showed it carries 198.11 N of the 500 N load).

We can calculate from this that according to this simulation, one spoke carries 41% of load (Jobst Brandt: 40% of load) in the example wheel.

The difference between this simulation and Jobst Brandt's simulation is that this simulation considered only radial deflection so it is not necessarily as accurate, and also the rim as a simply supported beam might not be the most accurate possible model.

  • Why do you ask the question if you know the answer and still rant about the inaccuracy of your answer?
    – Carel
    Commented Sep 19, 2020 at 18:36
  • 1
    I think it's half self-promotion and half of the tried sock-puppet strategy where nobody answers your question until there is a wrong answer when everyone jumps to point out how wrong it is. Now, about modeling the rim as bunch of disconnected sections...
    – ojs
    Commented Sep 19, 2020 at 19:16
  • You know the benefit of migrating to a different SE site that supports Mathjax? It would format equations to make them more legible.
    – Weiwen Ng
    Commented Sep 19, 2020 at 20:18
  • 2
    Ouch, now this spammer is using this as reference for more 36-spoke spam: bicycles.stackexchange.com/questions/72204/…
    – ojs
    Commented Sep 20, 2020 at 7:38
  • 1
    @Criggie I wasn't making the case for enabling MathJax here, as it would be very rarely needed. I was making the case the question may be a better conceptual fit for the engineering or physics SE sites, and they probably would have enabled MathJax so the equations are legible.
    – Weiwen Ng
    Commented Sep 21, 2020 at 22:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.