Wednesday, March 3, 2010

A continuous stripy multiplication table

Sometimes, numbers and other quantities are used to count segments : "chapter one, chapter two, chapter three"; "first mile, second mile, third mile"; "first year, second year, third year".

Sometimes, they are used to mark waypoints: "start (milestone 0), milestone 1, milestone 2, milestone 3"; "0 years old, first birthday, second birthday, third birthday".

Sometimes, board games are played with pieces placed in the spaces: chess, draughts (checkers), snakes and ladders, noughts and crosses (tic-tac-toe).

Sometimes, board games are played with pieces placed at the intersections: nine men's morris, go.

In all of our multiplication tables so far, numbers have occupied cells in an array.

Let us now fashion a multiplication table where the numbers are now thought of as labels for points.

agraph
width=400; height=400;
xmin=(9.9); xmax=11.1;
ymin=(-11.1); ymax=-9.9;
marker = "none";
marker = "dot";
stroke = "none";
markerfill = "blue";
a=[];
a[0]=[10,-10]; text([10,-10],"1",above);
a[1]=[11,-10]; text([11,-10],"10",above);
a[2]=[10,-11]; text([10,-11],"10",above);
a[3]=[11,-11]; text([11,-11],"100",above);
path(a);
endagraph

These four points are the corners of a square.  The idea now is to think of every point in the square as having a number, so that all the numbers form a continuous stripy multiplication table.  The line joining through the two `10` points consists of points that all have the value ten.  This is a stripe of the continuous table.

We can mark some other points, to help see how things are working :

agraph
width=400; height=400;
xmin=(9.9); xmax=11.1;
ymin=(-11.1); ymax=-9.9;
marker = "none";
marker = "dot";
stroke = "none";
markerfill = "blue";
a=[];
a[0]=[10,-10]; text([10,-10],"1",above);
a[1]=[11,-10]; text([11,-10],"10",above);
a[2]=[10,-11]; text([10,-11],"10",above);
a[3]=[11,-11]; text([11,-11],"100",above);
a[4]=[10.5,-10.5]; text([10.5,-10.5],"10",above);
a[5]=[10.25,-10.75]; text([10.25,-10.75],"10",above);
a[6]=[10.75,-10.25]; text([10.75,-10.25],"10",above);
path(a);
markerfill = "yellow";
b=[];
b[0]=[10,-10.5];  text([10,-10.5],"3.16",above);
b[1]=[10.25,-10.25];  text([10.25,-10.25],"3.16",above);
b[2]=[10.5,-10];  text([10.5,-10],"3.16",above);
b[3]=[10.5,-11];  text([10.5,-11],"31.6",above);
b[4]=[10.75,-10.75];  text([10.75,-10.75],"31.6",above);
b[5]=[11,-10.5];  text([11,-10.5],"31.6",above);
path(b);
markerfill = "red";
c=[];
c[0]=[10,-10.25]; text([10,-10.25],"1.78",above);
c[1]=[10.25,-10]; text([10.25,-10],"1.78",above);
c[2]=[10.25,-11]; text([10.25,-11],"17.8",above);
c[3]=[10.5,-10.75]; text([10.5,-10.75],"17.8",above);
c[4]=[10.75,-10.5]; text([10.75,-10.5],"17.8",above);
c[5]=[11,-10.25]; text([11,-10.25],"17.8",above);
path(c);
markerfill = "green";
d=[];
d[0]=[10,-10.75]; text([10,-10.75],"5.62",above);
d[1]=[10.25,-10.5]; text([10.25,-10.5],"5.62",above);
d[2]=[10.5,-10.25]; text([10.5,-10.25],"5.62",above);
d[3]=[10.75,-10]; text([10.75,-10],"5.62",above);
d[4]=[11,-10.75]; text([11,-10.75],"56.2",above);
d[5]=[10.75,-11]; text([10.75,-11],"56.2",above);
path(d);
endagraph

This is clearly still a multiplication table of sorts.  To better emphasize continuity, we can drop all of our marker points except those on the perimeter of the square, and draw marker lines :

agraph
width=400; height=400;
xmin=(9.9); xmax=11.1;
ymin=(-11.1); ymax=-9.9;
marker = "none";
marker = "dot";
stroke = "none";
markerfill = "blue";
a=[];
a[0]=[10,-10]; text([10,-10],"1",above);
a[1]=[11,-11]; text([11,-11],"100",above);
path(a);
stroke = "blue";
aa=[];
aa[0]=[11,-10]; text([11,-10],"10",above);
aa[1]=[10,-11]; text([10,-11],"10",above);
path(aa);
markerfill = "yellow";
stroke = "yellow";
b=[];
b[0]=[10,-10.5];  text([10,-10.5],"3.16",above);
b[1]=[10.5,-10];  text([10.5,-10],"3.16",above);
path(b);
bb=[];
bb[0]=[10.5,-11];  text([10.5,-11],"31.6",above);
bb[1]=[11,-10.5];  text([11,-10.5],"31.6",above);
path(bb);
markerfill = "red";
stroke = "red";
c=[];
c[0]=[10,-10.25]; text([10,-10.25],"1.78",above);
c[1]=[10.25,-10]; text([10.25,-10],"1.78",above);
path(c);
cc=[];
cc[0]=[10.25,-11]; text([10.25,-11],"17.8",above);
cc[1]=[11,-10.25]; text([11,-10.25],"17.8",above);
path(cc);
markerfill = "green";
stroke = "green";
d=[];
d[0]=[10,-10.75]; text([10,-10.75],"5.62",above);
d[1]=[10.75,-10]; text([10.75,-10],"5.62",above);
path(d);
dd=[];
dd[0]=[11,-10.75]; text([11,-10.75],"56.2",above);
dd[1]=[10.75,-11]; text([10.75,-11],"56.2",above);
path(dd);
endagraph

These marker lines are just a few of the continuous infinity of parallel lines that form the stripes of this table.

Let the foregoing table be a single quilt square.  We can make copies of this square, some exact, and some multiplied by various whole powers of ten, and put them together like a quilt, to form a continuous, infinite, stripy multiplication table.

To see how this is done, change the scale a bit, and consider the following powers-of-ten stripy multiplication table :

agraph
width=400; height=400;
xmin=(9.8); xmax=13.2;
ymin=(-13.2); ymax=-9.8;
marker = "none";
marker = "dot";
stroke = "none";
markerfill = "blue";
a=[];
a[0]=[10,-10]; text([10,-10],"0.01",above);
a[1]=[11,-10]; text([11,-10],"0.1",above);
a[2]=[10,-11]; text([10,-11],"0.1",above);
a[3]=[12,-10]; text([12,-10],"1",above);
a[4]=[11,-11]; text([11,-11],"1",above);
a[5]=[10,-12]; text([10,-12],"1",above);
a[6]=[13,-10]; text([13,-10],"10",above);
a[7]=[12,-11]; text([12,-11],"10",above);
a[8]=[11,-12]; text([11,-12],"10",above);
a[9]=[10,-13]; text([10,-13],"10",above);
a[10]=[13,-11]; text([13,-11],"100",above);
a[11]=[12,-12]; text([12,-12],"100",above);
a[12]=[11,-13]; text([11,-13],"100",above);
a[13]=[13,-12]; text([13,-12],"1000",above);
a[14]=[12,-13]; text([12,-13],"1000",above);
a[15]=[13,-13]; text([13,-13],"10000",above);
path(a);
endagraph
Put a copy of the preceding "single quilt square" table in the middle, and fit appropriate other quilt squares around it in all directions, selecting the appropriate power of ten multiplier for the quilt square so that edges match.

The result is an infinite, continuous, stripy multiplication table.

Take a horizontal or vertical line through this infinite table.  Each point on such a line has a number associated with it.  The numbers run from arbitrarily small positive numbers at one end of the line, to arbitrarily large positive numbers at the other.  A line so marked is called a logarithmic scale.  On a logarithmic scale, the integer powers of any given positive number are evenly spaced.

The single quilt square multiplication table devised above, if given a quarter turn anticlockwise, is apparently the original log-log plot.  For details, see the article on Lalanne's Universal Calculator in Ron Doerfler's beautiful 2010 "Graphical Computing" calendar.

I ran into Doerfler's calendar, and was introduced to Lalanne, three or four days after coming up with and using stripy continuous multiplication tables in lectures to give my liberal arts major classes a feel for logarithmic units.  I am familiar with log-log plots, but hadn't approached this in that light.

As my father used to say, great minds think alike, but greater minds think first.

Nor is this the first time Doerfler and I have crossed paths mentally.  A piece of Doerfler's writing, on calculating inverse hyperbolic tangents, proved useful in a physics paper I got published in the American Journal of Physics a few years ago.  That, too, was related to logarithms.

No comments:

Post a Comment