[Home]Back Track Integration

HomePage | RecentChanges | Preferences | My Website home page

Back track Forward Euler Integration

see: http://en.wikipedia.org/wiki/Predictor-corrector_method

We take the gradient where we are and predict forward. We go to the predicted position.

We take the gradient where we are now and normally predict forward.

However, let’s go back to where we came from by using a step length of -h.

We now know the error, as we will not get back to where we came from exactly, if the gradient has changed much during the step, h.

What happens if we work out the gradient at the new position and predict forward and also back track. We work out the new position for timestep, h and also the position we have come from by using -timeStep and -h.

If the error is too large we reduce the step size h and go slower. The errors will accumulate until we can check the position against a known feature.

We back track and, we can see what error we have introduced.

Let’s consider a real application. I am a yachtsman and I sail across a tidal sea. I use dead reckoning navigation.

I will set a bearing and use a back bearing to check my assumption about the strength of the tide and leeway.

Normally, at the first sight of land or navigation buoy, we use fixes to establish our absolute position.

// Forward Euler:

 next_Vc = Vc_now + timeStep * dVc_now/ dt

// Forward Euler backtracks:

 last_Vc = Vc_next + timeStep * dVc_next/ dt

// Forward Euler using dVc = -timeStep/RC:

 next_Vc = Vc_now - timeStep * Vc_now/RC

// Forward Euler backtracks:

 last_Vc = next_Vc - ( -timeStep * next_Vc/RC)

Compare Vc_now to lastVc, which should be the same, but for the error introduced by the integration.

// Forward Euler using dVc = -timeStep/RC:

 next_Vc = Vc_now - timeStep * Vc_now/RC

// Forward Euler backtracks:

 last_Vc = Vc_next - ( -timeStep * Vc_next/RC)

// Forward Euler using dVc = -timeStep/RC:

 next_Vc = Vc_now - timeStep * Vc_now/RC

// Forward Euler backtracks:

 last_Vc = Vc_now - timeStep * Vc_now/RC - ( -timeStep * (Vc_now - timeStep * Vc_now/RC)/RC)
	 = Vc_now - timeStep * Vc_now/RC +timeStep * Vc_now/RC  - timeStep * Vc_now/RC/RC)
	 = Vc_now *( 1- timeStep /RC/RC)

last_Vc should be the same as Vc_now, but is not by -timeStep/RC^2


HomePage | RecentChanges | Preferences | My Website home page
This page is read-only | View other revisions
Last edited October 10, 2011 8:51 pm by Doug
Search: