- #1
andrewr
- 263
- 0
I have seen several papers indicating that A magnetic field can be considered a time delayed electric field; So, I began attempting order of magnitude checks on the idea to see if it could be understood in a classical reference frame with a propagation media having the non-classical speed of light issue envisioned by Einstein. I have good results, but also an unexpected result that I don't think is realistic -- and am wondering if anyone can spot an error that would explain why it is so large.
The thought/experiment:
So, as a simple problem, I wanted to compute the difference in repulsion of two electrons ~1 meter apart that are moving parallel to each other at 1 [m/s]. In essence, this is a problem of two parallel infinitely long wires carrying a current of 1/q coulomb/second each past any given point in the vicinity of the electrons.. Ideally, I have the two electron paths oriented strictly in the "y" direction and the separation of the two wire/electron paths in the "x" direction with no Z components of either one.
It's just two "wires" in a plane.
From my E&M book, the problem works out to an attractive force developing between the wires of about 5.13x10-45N when the currents are flowing in the same direction.
Essentially, since the electrons are moving (but any protons of the wires are NOT moving) -- the proton E&M field is static but the electron E&M field is not. Therefore, the electrons experience an attraction to the protons which is independent of their speed, but they feel a repulsion from each other which depends on the propagation delay of the field from where it was emitted -- to where it is received because the electrons are in motion.
For the first problem, I assumed the two electrons to be at the same "y" height vs t. eg: y1(t)=y2(t); dy/dy=1[m/s]. The result of the calculation is that the path from where the first electron emitted it's field to the place where the second one receives it is *very* slightly longer than the 1m distance between the two electrons (low velocity = no relativistic correction needed!).
I took the static force between two electrons at 1m to be: 2.307077129049784e-28 [N]
the speed of light to be: 299792457.999458 [m/s] (codata).
And did a calculation yielding:
t0=3.335641e-09 t=3.335641e-09 Dt=1.857925e-26 l0-1m=0.000000e+00 l-1m=5.637851e-18 Dl=5.637851e-18
(1.000000,0.000000) force=2.601392e-45 [N]
Which is of the right order of magnitude to be a magnetic force. I am not concerned about being off by less than a factor of 10x the correct value; so this result is acceptable.
IF I separate the electrons by 1meter + 1mm; the force is essentially within 1% of the previous value.
However, when I try to offset the electrons from each other in the y direction, by as little as 1mm; the force suddenly computes out to over a million times stronger than expected.
t0=3.335643e-09 t=3.335643e-06 Dt=3.332307e-06 l0-1m=4.999999e-07 l-1m=5.033411e-07 Dl=3.341204e-09
(1.000000,0.001000) force=1.541681e-36 [N]
I thought at first perhaps it was round off error; so I made sure to use a long double (C language, 128 bit floating point nr; around 32 significant digits.) and did some analysis; but I find that the results are still way too large; and when I do some analysis on the result, I come to the conclusion that (y+0.001)**2 term used in the Pythagorean theorem causes this event to happen and that it isn't purely a math-coprocessor/program issue. So, I wanted to know if others come to the same conclusion; The program written in "C" follows; I would expect that increasing the distance between electrons by 1mm (in X) would have a "BIGGER" effect on the change in force than would having the "y" distances offset by "1" mm, for the hypotenuse of a right triangle must be shorter than the sum of its two legs -- and the static force on an electron goes as "k*q1*q2 / d" between them.
Can anyone explain, reasonably, why the force is over a million times more different in the two cases?
#include <stdio.h>
static long double f = 2.307077129049784e-28; /* Force due to static repel @ 1[m] for two electrons.*/
static long double c = 299792457.999458; /* codata speed of light *//* Compute a square root of a long double, accurately! */
long double sqroot( long double s ){
long double est=s/2.;
int i;
for(i=0; i<100; ++i){
est = (long double)0.5*(est + s/est);
}
return est;
}
/* Compute force *change* due to time lag */
long double force01( long double x, long double y ) {
long double t0,t,l0,l;
l0=sqroot( y*y + x*x ); /* Static length between electrons (simultaneous) */
t0=l0/c; /* Time to traverse static length */
/* The distance traveled at 1[m/s] in t seconds is t meters.
* Therefore, the total vertical distance traveled is y+t meters.
* since the total horizontal distance is always x [m], the hypotenuse distance is:
* is l = ( xx + (t+y)**2 )**0.5 meters.
* Since the length of the hypotenuse is also l=Ct, for speed of light;
* substituting in...
* tC=(xx + (t+y)**2)**0.5
* ttCC = xx + (t + y)**2
* ttCC = xx + tt + 2ty + yy
* ttCC - tt - t* 2y - ( yy + xx ) = 0
* tt(CC-1) + t*-2y - ( yy + xx ) = 0 ;; for h=0, t=sqrt( xx/(CC-1) )
* tt + t( -2y/(CC-1) ) - (yy+xx)/(CC-1) = 0
* t = (2y/(CC-1) +- sqrt( 4yy/(CC-1)**2 + 4(xx+yy)/(CC-1) ))/2.
* t = y/(CC-1) +- (y/(CC-1))*sqrt( 1 + (CC-1)(1+xx/yy) )
*/
if (!y) t=sqroot( x*x/(c*c-1.) ); /* Prevent divide by zero error */
else t = (x/(c*c-1.))*( 1. + sqroot( 1. + (c*c-1)*(1.+(x*x)/(y*y)) ) );
l = sqroot( x*x + (t+y)*(t+y) ); // More accurate than l=t*c for some reason... but can use either.
printf( "t0=%e t=%e Dt=%e l0-1m=%e l-1m=%e Dl=%e\n",
(double)t0, (double)t, (double)(t-t0),
(double)(l0-1.), (double)(l-1.), (double)(l-l0) );
return f * (1.0/(l0*l0) - 1.0/(l*l) );
}/* Take 1 electron on each "wire" 1 meter apart, moving at 1meter/second.
* That means that through 1 meter of wire a single electron flowed (1/q coloumb)
* in one second. That can be used to compute the effective force between two
* such wires. Adjusting for relativity, the length change may be used to
* convert an electrostatic force into a magnetic one; eg: the difference in
* electrostatic force due to motion, is a ficticious "magnetic" force.
*/
int main(void) {
long double x=1.0;
long double y=0.001;
long double fi = 5.1339389934080655e-45; /* Expected Force due to current */
// Calculate and print results...
printf( "(%f,%f) force=%e [N]\n", (double)x, (double)y, (double)(force01( x,y )) );
return 0;
}
The thought/experiment:
So, as a simple problem, I wanted to compute the difference in repulsion of two electrons ~1 meter apart that are moving parallel to each other at 1 [m/s]. In essence, this is a problem of two parallel infinitely long wires carrying a current of 1/q coulomb/second each past any given point in the vicinity of the electrons.. Ideally, I have the two electron paths oriented strictly in the "y" direction and the separation of the two wire/electron paths in the "x" direction with no Z components of either one.
It's just two "wires" in a plane.
From my E&M book, the problem works out to an attractive force developing between the wires of about 5.13x10-45N when the currents are flowing in the same direction.
Essentially, since the electrons are moving (but any protons of the wires are NOT moving) -- the proton E&M field is static but the electron E&M field is not. Therefore, the electrons experience an attraction to the protons which is independent of their speed, but they feel a repulsion from each other which depends on the propagation delay of the field from where it was emitted -- to where it is received because the electrons are in motion.
For the first problem, I assumed the two electrons to be at the same "y" height vs t. eg: y1(t)=y2(t); dy/dy=1[m/s]. The result of the calculation is that the path from where the first electron emitted it's field to the place where the second one receives it is *very* slightly longer than the 1m distance between the two electrons (low velocity = no relativistic correction needed!).
I took the static force between two electrons at 1m to be: 2.307077129049784e-28 [N]
the speed of light to be: 299792457.999458 [m/s] (codata).
And did a calculation yielding:
t0=3.335641e-09 t=3.335641e-09 Dt=1.857925e-26 l0-1m=0.000000e+00 l-1m=5.637851e-18 Dl=5.637851e-18
(1.000000,0.000000) force=2.601392e-45 [N]
Which is of the right order of magnitude to be a magnetic force. I am not concerned about being off by less than a factor of 10x the correct value; so this result is acceptable.
IF I separate the electrons by 1meter + 1mm; the force is essentially within 1% of the previous value.
However, when I try to offset the electrons from each other in the y direction, by as little as 1mm; the force suddenly computes out to over a million times stronger than expected.
t0=3.335643e-09 t=3.335643e-06 Dt=3.332307e-06 l0-1m=4.999999e-07 l-1m=5.033411e-07 Dl=3.341204e-09
(1.000000,0.001000) force=1.541681e-36 [N]
I thought at first perhaps it was round off error; so I made sure to use a long double (C language, 128 bit floating point nr; around 32 significant digits.) and did some analysis; but I find that the results are still way too large; and when I do some analysis on the result, I come to the conclusion that (y+0.001)**2 term used in the Pythagorean theorem causes this event to happen and that it isn't purely a math-coprocessor/program issue. So, I wanted to know if others come to the same conclusion; The program written in "C" follows; I would expect that increasing the distance between electrons by 1mm (in X) would have a "BIGGER" effect on the change in force than would having the "y" distances offset by "1" mm, for the hypotenuse of a right triangle must be shorter than the sum of its two legs -- and the static force on an electron goes as "k*q1*q2 / d" between them.
Can anyone explain, reasonably, why the force is over a million times more different in the two cases?
#include <stdio.h>
static long double f = 2.307077129049784e-28; /* Force due to static repel @ 1[m] for two electrons.*/
static long double c = 299792457.999458; /* codata speed of light *//* Compute a square root of a long double, accurately! */
long double sqroot( long double s ){
long double est=s/2.;
int i;
for(i=0; i<100; ++i){
est = (long double)0.5*(est + s/est);
}
return est;
}
/* Compute force *change* due to time lag */
long double force01( long double x, long double y ) {
long double t0,t,l0,l;
l0=sqroot( y*y + x*x ); /* Static length between electrons (simultaneous) */
t0=l0/c; /* Time to traverse static length */
/* The distance traveled at 1[m/s] in t seconds is t meters.
* Therefore, the total vertical distance traveled is y+t meters.
* since the total horizontal distance is always x [m], the hypotenuse distance is:
* is l = ( xx + (t+y)**2 )**0.5 meters.
* Since the length of the hypotenuse is also l=Ct, for speed of light;
* substituting in...
* tC=(xx + (t+y)**2)**0.5
* ttCC = xx + (t + y)**2
* ttCC = xx + tt + 2ty + yy
* ttCC - tt - t* 2y - ( yy + xx ) = 0
* tt(CC-1) + t*-2y - ( yy + xx ) = 0 ;; for h=0, t=sqrt( xx/(CC-1) )
* tt + t( -2y/(CC-1) ) - (yy+xx)/(CC-1) = 0
* t = (2y/(CC-1) +- sqrt( 4yy/(CC-1)**2 + 4(xx+yy)/(CC-1) ))/2.
* t = y/(CC-1) +- (y/(CC-1))*sqrt( 1 + (CC-1)(1+xx/yy) )
*/
if (!y) t=sqroot( x*x/(c*c-1.) ); /* Prevent divide by zero error */
else t = (x/(c*c-1.))*( 1. + sqroot( 1. + (c*c-1)*(1.+(x*x)/(y*y)) ) );
l = sqroot( x*x + (t+y)*(t+y) ); // More accurate than l=t*c for some reason... but can use either.
printf( "t0=%e t=%e Dt=%e l0-1m=%e l-1m=%e Dl=%e\n",
(double)t0, (double)t, (double)(t-t0),
(double)(l0-1.), (double)(l-1.), (double)(l-l0) );
return f * (1.0/(l0*l0) - 1.0/(l*l) );
}/* Take 1 electron on each "wire" 1 meter apart, moving at 1meter/second.
* That means that through 1 meter of wire a single electron flowed (1/q coloumb)
* in one second. That can be used to compute the effective force between two
* such wires. Adjusting for relativity, the length change may be used to
* convert an electrostatic force into a magnetic one; eg: the difference in
* electrostatic force due to motion, is a ficticious "magnetic" force.
*/
int main(void) {
long double x=1.0;
long double y=0.001;
long double fi = 5.1339389934080655e-45; /* Expected Force due to current */
// Calculate and print results...
printf( "(%f,%f) force=%e [N]\n", (double)x, (double)y, (double)(force01( x,y )) );
return 0;
}
Last edited: