Exact Method for Finding f
The Method
With this method we perform the following experiment three times, with different values of a. This leads to three distinct values of d:
- Take the lens off the camera body.
 - Locate an opaque object at a relatively close distance.
 - Place a light source behind the object.
 - Position the lens in the shadow of the object.
 - Turn the front element of the lens towards the object.
 - Place a white piece of paper behind the rear element of the lens, perpendicular to the lens axis. This paper will be used as a screen that shows the image that the lens projects.
 - Move the paper back and forth until the image of the bright object is in focus.
 - Measure the distance a between the object and the front-most point of the lens.
 - Measure the distance d between the rear-most point of the lens mount and the projected image.
 
Figure 1 illustrates.

 Figure 1.
Now without refocusing the lens, repeat the above experiment with a’ > a. Measure the distance d’. Repeat once again, with a” > a’, and measure d”.
Now we need to solve the following system of three equations and three unknowns:
    |    1        1     1
    |  ----- +  ----- = -                  (7)
    |  a + b    c + d   f
    |
    |    1       1      1
    | ------ + ------ = -                  (8)
    | a' + b   c + d'   f
    |
    |    1       1      1
    | ------ + ------ = -                  (9)
    | a" + b   c + d"   f
Since the right sides of equations (7) and (8) are equal, their left sides must be equal too:
      1       1        1       1
    ----- + ----- = ------ + ------                                        <=>
    a + b   c + d   a' + b   c + d'
     a + b + c + d    a' + b + c + d'
    -------------- = ----------------                                      <=>
    (a + b)(c + d)   (a' + b)(c + d')
    (a + b + c + d)(a'c + a'd' + bc + bd') =
           (a' + b + c + d')(ac + ad + bc + bd)                            <=>
    aa'c + aa'd' + abc + abd' + a'bc + a'bd' + bbc + bbd' +
    a'cc + a'cd' + bcc + bcd' + a'cd + a'dd' + bcd + bdd' =
           aa'c + aa'd + a'bc + a'bd + abc + abd + bbc + bbd +
           acc + acd + bcc + bcd + acd' + add' + bcd' + bdd'               <=>
We cancel the terms aa’c, abc, a’bc, bbc, bcc, bcd’, bcd and bdd’ from both sides, then factor out in the following way:
    aa'(d' - d) + ab(d' - d) + a'b(d' - d) + bb(d' - d) =
           cc(a - a') + cd'(a - a') + cd(a - a') + dd'(a - a')             <=>
    (aa' + ab + a'b + bb)(d' - d) = (cc + cd' + cd + dd')(a - a')          <=>
    (a + b)(a' + b)(d' - d) = (c + d)(c + d')(a - a')                     (10)
Performing similar manipulations with equations (7) and (9), we get:
    (a + b)(a" + b)(d" - d) = (c + d)(c + d")(a - a")                     (11)
Now we divide (19) into (11), and solve for b:
(a' + b)(d' - d) (c + d')(a - a') ---------------- = ---------------- <=> (a" + b)(d" - d) (c + d")(a - a") (a'd' - a'd + bd' - bd)(ac - a"c + ad" - a"d") = (a"d" - a"d + bd" - bd)(ac - a'c + ad' - a'd') <=> aa'cd' - a'a"cd' + aa'd'd" - a'a"d'd" + - aa'cd + a'a"cd - aa'dd" + a'a"dd" + abcd' - a"bcd' + abd'd" - a"bd'd" + - abcd + a"bcd - abdd" + a"bdd" = aa"cd" - a'a"cd" + aa"d'd" - a'a"d'd" + - aa"cd + a'a"cd - aa"dd' + a'a"dd' + abcd" - a'bcd" + abd'd" - a'bd'd" + - abcd + a'bcd - abdd' + a'bdd' <=>
We cancel the terms a’a”d’d”, a’a”cd, abd’d” and abcd from both sides, then move all terms involving b to the left side, all others to the right, and factor out in the following way:
    b [ac(d' - d") + a"c(d - d') + a"d"(d - d') +
       ad(d' - d") + a'c(d" - d) + a'd'(d" - d)] =
           aa'c(d - d') + a'a"c(d' - d") + a'a"d(d' - d") +
           aa"c(d" - d) + aa'd"(d - d') + aa"d'(d" - d)                    <=>
    b [a(c + d)(d' - d") + a"(c + d")(d - d') + a'(c + d')(d" - d)] =
          aa'(c + d")(d - d') + a'a"(c + d)(d' - d") + aa"(c + d')(d" - d) <=>
        a'a"(c + d)(d' - d") + aa"(c + d')(d" - d) + aa'(c + d")(d - d')
    b = ----------------------------------------------------------------  (12)
          a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
To help our further calculations, we calculate the expression a + b:
           aa(c + d)(d' - d") + aa'(c + d')(d" - d) + aa"(c + d")(d - d') +
           a'a"(c + d)(d' - d") + aa"(c + d')(d" - d) + aa'(c + d")(d - d')
   a + b = ----------------------------------------------------------------
             a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
                         (aa + a'a")(c + d)(d' - d") +
                          a(a' + a")(c + d')(d" - d) +
                          a(a' + a")(c + d")(d - d')
   a + b = -----------------------------------------------------------     <=>
           a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
                         (aa + a'a")(c + d)(d' - d") +
            a(a' + a")(cd" - cd + d'd" - dd' + cd - cd' + dd" - d'd")
   a + b = -----------------------------------------------------------     <=>
           a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
             (aa + a'a")(c + d)(d' - d") + a(a' + a")(c + d)(d" - d')
   a + b = -----------------------------------------------------------     <=>
           a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
                    (aa + a'a" - aa' - aa")(c + d)(d' - d")
   a + b = -----------------------------------------------------------     <=>
           a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
                       (a - a")(a - a')(c + d)(d' - d")
   a + b = -----------------------------------------------------------    (13)
           a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
Using similar transformations, we simplify the expression a’ + b:
                       (a - a')(a" - a')(c + d')(d" - d)
   a + b' = -----------------------------------------------------------   (14)
            a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')
Now we substitute (13) and (14) into equation (10), cancel out the terms (a – a’)(c + d)(c + d’) from both sides, then solve for c:
(a - a")(d' - d")(a - a')(a" - a')(d" - d)(d' - d) --------------------------------------------------------------- = 1 [a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d')]^2 a(c + d)(d' - d") + a'(c + d')(d" - d) + a"(c + d")(d - d') = sqrt[(a - a")(d' - d")(a - a')(a" - a')(d" - d)(d' - d)] (15) ac(d' - d") - a'c(d - d") + a"c(d - d') + ad(d' - d") - a'd'(d - d") + a"d"(d - d') = sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] c[a(d' - d") - a'(d - d") + a"(d - d')] = sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] + - ad(d' - d") + a'd'(d - d") - a"d"(d - d') <=> sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] + - ad(d' - d") + a'd'(d - d") - a"d"(d - d') c = ---------------------------------------------------------- (16) a(d' - d") - a'(d - d") + a"(d - d')
At this point we can start solving for f. First we express the quantity c + d:
            sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
            a'd'(d - d") - a"d"(d - d') - a'd(d - d") + a"d(d - d')
    c + d = ----------------------------------------------------------
                      a(d' - d") - a'(d - d") + a"(d - d')
            sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
                     a'(d' - d)(d - d") - a"(d" - d)(d - d')
    c + d = ----------------------------------------------------------
                      a(d' - d") - a'(d - d") + a"(d - d')
            sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
                           (a" - a')(d - d')(d - d")
    c + d = ----------------------------------------------------------    (17)
                      a(d' - d") - a'(d - d") + a"(d - d')
We note that the denominator of equation (13) is the same as the left side of equation (15). So we rewrite (13), and then substitute the result into (7):
   sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")]     1     1
   -------------------------------------------------------- + ----- = -
             (a - a")(a - a')(c + d)(d' - d")                 c + d   f
    1   sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
                       (a - a")(a - a')(d' - d")
    - = ----------------------------------------------------------
    f               (a - a")(a - a')(c + d)(d' - d")
                     (a - a")(a - a')(c + d)(d' - d")
    f = ----------------------------------------------------------        (18)
        sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
                       (a - a")(a - a')(d' - d")
Now we substitute (17) into (18), and simplify:
             (a - a")(a - a')(d' - d"){(a" - a')(d - d')(d - d") +
           sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")]}
    f = ----------------------------------------------------------------   <=>
          {sqrt[(a" - a')(a" - a)(a' - a)(d - d')(d - d")(d' - d")] +
        (a - a")(a - a')(d' - d")}[a(d' - d") - a'(d - d") + a"(d - d')]
             (a - a")(a - a')(d' - d")sqrt[(a" - a')(d - d')(d - d")]
        {sqrt[(a" - a')(d - d')(d - d")] + sqrt[(a" - a)(a' - a)(d' - d")]}
    f = ---------------------------------------------------------------------
        [a(d' - d") - a'(d - d") + a"(d - d')]sqrt[(a - a")(a - a')(d' - d")]
         {sqrt[(a" - a')(d - d')(d - d")] + sqrt[(a - a")(a - a')(d' - d")]}
             (a - a")(a - a')(d' - d")sqrt[(a" - a')(d - d')(d - d")]
    f = ---------------------------------------------------------------------
        [a(d' - d") - a'(d - d") + a"(d - d')]sqrt[(a - a")(a - a')(d' - d")]
          __________________________________________________
        \/(a" - a)(a" - a')(a' - a)(d - d')(d - d")(d' - d")
    f = ---------------------------------------------------- .
                a(d' - d") - a'(d - d") + a"(d - d')
Finally, with a great sigh of relief, we substitute (13) and (15) into (6), and solve for M:
        (c + d)sqrt[(a" - a)(a" - a')(a' - a)(d - d')(d - d")(d' - d")]
    M = ---------------------------------------------------------------    <=>
                     (c + d)(a" - a)(a' - a)(d' - d")
        sqrt[(a' - a)(d - d')(d - d")]
    M = -------------------------------                                    <=>
        sqrt[(a" - a)(a' - a)(d' - d")]
       _    ________________________
        |  /(a' - a)(d - d')(d - d")
    M = | / ------------------------ .
        |/ (a" - a)(a' - a)(d' - d")
Method Evaluation
The method has three main merits:
- It is exact.
 - The focal length can be calculated also when the lens is set to infinity.
 - The measurements that it relies on are simple to execute.
 
At the same time, two main drawbacks should be pointed out:
- There are more measurements to make compared to the other methods.
 - Measurement errors become even more significant than the previous methods because their values are multiplied together.