Appendix 2.3_1
Private Sub NonRadAccelQ_Click()
'**********
'Compute the x-components of velocity and acceleration when
'the negative of the rad react force acting on a charge
'is zero. Substitute the values in Newton 2 in order to
'determine the acting force. Output all the values for plotting.
'**********
'Physical and mathematical constants
Const c As Double = 299792000# 'Speed of light
Const steps As Double = 500000 'Number of iterations
Const dt As Double = 400 / steps 'Time between computations
Const vxinit As Double = 0 'Initial velocity
Const axinit As Double = 3000000# 'Initial acceleration
Const mem As Double = 1 'Electromagnetic mass
Dim index As Long 'Loop counter
Dim t(steps) As Double 'Time
Dim vx(steps) As Double 'Velocity
Dim ax(steps) As Double 'Acceleration
Dim Fx(steps) As Double 'Force
Dim daxdt As Double
Dim gamma As Double
Dim FxAv As Double 'Average force (to average out small numerical errors)
'Set initial velocity and acceleration.
index = 0
vx(index) = vxinit
ax(index) = axinit
For index = 0 To steps - 1
'Compute dax/dt and use this to compute next v and a.
t(index) = index * dt
gamma = 1 / Sqr(1 - vx(index) ^ 2 / c ^ 2)
daxdt = -3 * gamma ^ 2 * vx(index) * ax(index) ^ 2 / c ^ 2
vx(index + 1) = vx(index) + ax(index) * dt
ax(index + 1) = ax(index) + daxdt * dt
Next index
'Open output files for writing plot data to.
Open "c:\Winmcad\Physics\POSsoln23_1vx.prn" For Output As #1
Open "c:\Winmcad\Physics\POSsoln23_1ax.prn" For Output As #2
Open "c:\Winmcad\Physics\POSsoln23_1Fx.prn" For Output As #3
'Write every tenth value of velocity and acceleration.
For index = 0 To steps / 10 - 1
Write #1, t(10 * index), vx(10 * index)
Write #2, t(10 * index), ax(10 * index)
Next index
'Find the average force.
FxAv = 0
For index = 0 To steps - 1
gamma = 1 / Sqr(1 - vx(index) ^ 2 / c ^ 2)
Fx(index) = gamma ^ 3 * mem * ax(index)
FxAv = FxAv + Fx(index)
Next index
FxAv = FxAv / steps
'If percent difference between force and average force is less than .00001,
'then the difference can be written off as a numerical error.
For index = 0 To steps - 1
If Abs((Fx(index) - FxAv) / Fx(index)) < 0.00001 Then
Fx(index) = FxAv
Else
MsgBox ("FxAv = " & FxAv & ", Fx(" & index & ") = " & Fx(index))
End If
Next index
'Write force.
For index = 0 To steps / 10 - 1
Write #3, t(10 * index), Fx(10 * index)
Next index
Close
MsgBox ("Ready for plotting.")
Stop
End Sub