Accuracy of Newtonian Kinetic Energy in a Relativistic World

One of my homework problems for my modern physics course asked me to calculate the highest velocity of a particle for which the Newtonian approximation of kinetic energy 12mv2\frac{1}{2}mv^2 is accurate to within an error of 0.5%0.5\% of the actual, relativistic, kinetic energy.

In trying to solve this problem, I decided it would be faster and easier to solve the problem numerically than it would be to work out the math. So, I hacked together a quick bisection solver (compatible with MATLAB or Octave) shown below.

%% Newtonian vs. Relativistic Energy Accuracy
% Determines the maximum speed a particle can have such that its
% kinetic energy described as 0.5*m*v^2 with an error of no greater
% than <tolerance>.
close all; clear all; clc;

% Input - The tolerance of the accuracy of the Newtonian kinetic energy
% compared to the relativistic energy.
tolerance = .005;

% Speed of light  [m/s]
c = 299792458;

% Bisection parameters
maxiters = 100;
hi = c;
lo = 0;
% How accurate we are in our calculation.
% Not to be confused with tolerance of energy calculation (aka error).
TOL = .0001;

% Use bisection to determine max velocity to keep energy within
% the specified tolerance.
for i=1:maxiters
    % "Guess" the velocity
    v = (hi - lo) / 2 + lo;

    % Calculate our energies
    g = (1 - v^2/c^2)^(-1/2);   % Gamma
    K = 0.5*v^2;            	% Newtonian kinetic energy per unit mass
    E = g*c^2 - c^2;            % Relativistic kinetic energy per unit mass

    % Calculate energy error
    err = abs(K - E) / E;
    fprintf('%4d:  %14.4f  %8.6fc  %10.8f\n', i, v, v/c, err)

    % Error is too big, try a lower velocity
    if err > tolerance
        hi = v;
    % Error is within tolerance
    else
        % Not close enough to target value, increase velocity
        if abs(err - tolerance) > TOL
            lo = v;
        % Error is within accepted tolerance, we're done.
        else
            break
        end
    end
end

I later went back and thought it would be interesting (or ironic) to solve for Newtonian error in kinetic energy using Newton's method. This I created a Newton's method script (compatible with MATLAB and Octave) shown below.

%% Newtonian vs. Relativistic Energy Accuracy - Using Newton's Method
% Determines the maximum speed a particle can have such that its
% kinetic energy described as 0.5*m*v^2 with an error of no greater
% than <tolerance>.
close all; clear all; clc;

% Input - The tolerance of the accuracy of the Newtonian kinetic energy
% compared to the relativistic energy.
tolerance = .005;

% Speed of light  [m/s]
c = 299792458;

% Newton's method
maxiters = 1e5;
TOL = 1e-4;
guess = .5*c;

% Use Newton's method to solve
for i=1:maxiters
    % "Guess" the velocity
    v = guess;

    % Calculate our energies
    g = (1 - v^2/c^2)^(-1/2);   % Gamma
    K = 0.5*v^2;            	% Newtonian kinetic energy per unit mass
    E = g*c^2 - c^2;            % Relativistic kinetic energy per unit mass

    % Newton's method
    f = abs( (E - K) / E ) - tolerance;
    df = v / E;
    guess = v - f/df;

    fprintf('%4d:  %14.4f  %14.4f  %8.6fc  %10.8f\n', i, guess, v, v/c, f + .005)

    % If close enough, break
    if abs(guess - v) < TOL
        break
    end
end

One quick note, in the bisection method, I have the script exiting based on the difference between the error and the target error, 0.5%. In the Newton's method script, the script exits based on the difference between velocity of consecutive iterations.

I wrote one more version of the bisection approach (here) to use the same tolerance measurement method (i.e. the error in velocity not the error in kinetic energy error). It's a bit slower, but it's also more accurate.

Both method's converge to a result of 0.81627c0.81627c. But Newton's method takes 4005 iterations, while the bisection approach takes 38 iterations (to produce an answer accurate to .0001 m/s). So, not a great example of Newton's work. I guess we'll call this a win for Einstein.